summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbiao716.wang <biao716.wang@samsung.com>2021-01-05 14:51:28 +0900
committerbiao716.wang <biao716.wang@samsung.com>2021-01-05 14:51:28 +0900
commit9de33a8a7cd9eae05c3c1df4b2c0e1e4cd2bd40a (patch)
tree03067d36d530c3eeb623e601b0c12a98f744376d
parent287097d4d8079b4485870c08cf5675b0bdd37ed9 (diff)
downloadrpm-9de33a8a7cd9eae05c3c1df4b2c0e1e4cd2bd40a.tar.gz
rpm-9de33a8a7cd9eae05c3c1df4b2c0e1e4cd2bd40a.tar.bz2
rpm-9de33a8a7cd9eae05c3c1df4b2c0e1e4cd2bd40a.zip
Change-Id: Iab5438d6e4d45c937b191c03e9ef5dd3fad165c8 Signed-off-by: biao716.wang <biao716.wang@samsung.com>
-rw-r--r--CHANGES2927
-rw-r--r--COPYING4
-rw-r--r--CREDITS133
-rw-r--r--INSTALL41
-rw-r--r--Makefile.am99
-rw-r--r--Makefile.maint7
-rw-r--r--README2
-rw-r--r--autodeps/.gitignore2
-rw-r--r--autodeps/aix.prov78
-rwxr-xr-xautodeps/aix.req171
-rw-r--r--autodeps/aix4.prov189
-rw-r--r--autodeps/aix4.req99
-rw-r--r--autodeps/amigaos.prov3
-rw-r--r--autodeps/amigaos.req3
-rw-r--r--autodeps/darwin.prov21
-rw-r--r--autodeps/darwin.req26
-rw-r--r--autodeps/freebsd.prov9
-rw-r--r--autodeps/freebsd.req22
-rw-r--r--autodeps/freebsdelf.prov9
-rw-r--r--autodeps/freebsdelf.req46
-rw-r--r--autodeps/hpux.prov175
-rw-r--r--autodeps/hpux.req126
-rw-r--r--autodeps/irix6.prov201
-rw-r--r--autodeps/irix6.req164
-rw-r--r--autodeps/linux.prov104
-rw-r--r--autodeps/linux.req155
-rw-r--r--autodeps/mint.prov5
-rw-r--r--autodeps/mint.req5
-rw-r--r--autodeps/none3
-rw-r--r--autodeps/openbsd.prov9
-rw-r--r--autodeps/openbsd.req22
-rw-r--r--autodeps/osf.prov188
-rw-r--r--autodeps/osf.req142
-rw-r--r--autodeps/solaris.prov14
-rw-r--r--autodeps/solaris.req16
-rw-r--r--build/Makefile.am11
-rw-r--r--build/build.c26
-rw-r--r--build/expression.c4
-rw-r--r--build/files.c1832
-rw-r--r--build/pack.c779
-rw-r--r--build/parseBuildInstallClean.c2
-rw-r--r--build/parseChangelog.c113
-rw-r--r--build/parseDescription.c23
-rw-r--r--build/parseFiles.c18
-rw-r--r--build/parsePolicies.c5
-rw-r--r--build/parsePreamble.c258
-rw-r--r--build/parsePrep.c89
-rw-r--r--build/parseReqs.c374
-rw-r--r--build/parseScript.c139
-rw-r--r--build/parseSpec.c308
-rw-r--r--build/reqprov.c115
-rw-r--r--build/rpmbuild.h6
-rw-r--r--build/rpmbuild_internal.h132
-rw-r--r--build/rpmbuild_misc.h28
-rw-r--r--build/rpmfc.c775
-rw-r--r--build/rpmfc.h46
-rw-r--r--build/rpmspec.h8
-rw-r--r--build/spec.c137
-rw-r--r--cliutils.c3
-rw-r--r--cliutils.h5
-rwxr-xr-xcompile347
-rw-r--r--configure.ac424
-rw-r--r--doc/Makefile.am5
-rw-r--r--doc/hacking.doxy.in2509
-rw-r--r--doc/hacking/Doxyheader.h (renamed from doc/hacking/Doxyheader)0
-rw-r--r--doc/librpm.doxy.in2509
-rw-r--r--doc/librpm/Doxyheader58
-rw-r--r--doc/librpm/Doxyheader.h136
-rw-r--r--doc/manual/macros20
-rw-r--r--doc/rpm-misc.864
-rw-r--r--doc/rpm-plugin-systemd-inhibit.836
-rw-r--r--doc/rpm.8212
-rw-r--r--doc/rpmbuild.832
-rw-r--r--doc/rpmdeps.82
-rw-r--r--doc/rpmsign.824
-rw-r--r--doc/rpmspec.859
-rw-r--r--fileattrs/Makefile.am7
-rw-r--r--fileattrs/debuginfo.attr1
-rw-r--r--fileattrs/kernel.attr2
-rw-r--r--fileattrs/kmp.attr4
-rw-r--r--fileattrs/metainfo.attr2
-rw-r--r--fileattrs/perllib.attr2
-rwxr-xr-xinstallplatform84
-rw-r--r--lib/.gitignore1
-rw-r--r--lib/Makefile.am34
-rw-r--r--lib/backend/db3.c943
-rw-r--r--lib/backend/dbi.c184
-rw-r--r--lib/backend/dbi.h202
-rw-r--r--lib/backend/dbiset.c214
-rw-r--r--lib/backend/dbiset.h130
-rw-r--r--lib/backend/lmdb.c939
-rw-r--r--lib/backend/ndb/glue.c492
-rw-r--r--lib/backend/ndb/rpmidx.c1280
-rw-r--r--lib/backend/ndb/rpmidx.h18
-rw-r--r--lib/backend/ndb/rpmpkg.c1312
-rw-r--r--lib/backend/ndb/rpmpkg.h20
-rw-r--r--lib/backend/ndb/rpmxdb.c1221
-rw-r--r--lib/backend/ndb/rpmxdb.h27
-rw-r--r--lib/cpio.c320
-rw-r--r--lib/cpio.h113
-rw-r--r--lib/depends.c517
-rw-r--r--lib/formats.c639
-rw-r--r--lib/fprint.c186
-rw-r--r--lib/fsm.c1751
-rw-r--r--lib/fsm.h13
-rw-r--r--lib/header.c632
-rw-r--r--lib/header.h92
-rw-r--r--lib/header_internal.h92
-rw-r--r--lib/headerfmt.c83
-rw-r--r--lib/headerutil.c285
-rw-r--r--lib/legacy.c379
-rw-r--r--lib/manifest.c12
-rw-r--r--lib/merge.c347
-rw-r--r--lib/misc.h34
-rw-r--r--lib/order.c153
-rw-r--r--lib/package.c651
-rw-r--r--lib/poptALL.c89
-rw-r--r--lib/poptI.c16
-rw-r--r--lib/poptQV.c36
-rw-r--r--lib/psm.c925
-rw-r--r--lib/query.c70
-rw-r--r--lib/relocation.c560
-rw-r--r--lib/rpmal.c188
-rw-r--r--lib/rpmal.h15
-rw-r--r--lib/rpmarchive.h149
-rw-r--r--lib/rpmcallback.h21
-rw-r--r--lib/rpmchecksig.c418
-rw-r--r--lib/rpmcli.h17
-rw-r--r--lib/rpmdb.c1933
-rw-r--r--lib/rpmdb.h48
-rw-r--r--lib/rpmdb_internal.h92
-rw-r--r--lib/rpmds.c786
-rw-r--r--lib/rpmds.h207
-rw-r--r--lib/rpmds_internal.h67
-rw-r--r--lib/rpmfi.c2208
-rw-r--r--lib/rpmfi.h385
-rw-r--r--lib/rpmfi_internal.h180
-rw-r--r--lib/rpmfiles.h519
-rw-r--r--lib/rpmfs.c11
-rw-r--r--lib/rpmfs.h3
-rw-r--r--lib/rpmgi.c25
-rw-r--r--lib/rpmhash.C6
-rw-r--r--lib/rpminstall.c76
-rw-r--r--lib/rpmlead.c41
-rw-r--r--lib/rpmlead.h23
-rw-r--r--lib/rpmlib.h5
-rw-r--r--lib/rpmlock.c89
-rw-r--r--lib/rpmlock.h17
-rw-r--r--lib/rpmplugin.h145
-rw-r--r--lib/rpmplugins.c422
-rw-r--r--lib/rpmplugins.h181
-rw-r--r--lib/rpmprob.h2
-rw-r--r--lib/rpmrc.c745
-rw-r--r--lib/rpmscript.c284
-rw-r--r--lib/rpmscript.h48
-rw-r--r--lib/rpmtag.h97
-rw-r--r--lib/rpmtd.c92
-rw-r--r--lib/rpmtd.h15
-rw-r--r--lib/rpmte.c290
-rw-r--r--lib/rpmte.h22
-rw-r--r--lib/rpmte_internal.h56
-rw-r--r--lib/rpmtriggers.c632
-rw-r--r--lib/rpmtriggers.h84
-rw-r--r--lib/rpmts.c249
-rw-r--r--lib/rpmts.h67
-rw-r--r--lib/rpmts_internal.h54
-rw-r--r--lib/rpmtypes.h3
-rw-r--r--lib/rpmug.c54
-rw-r--r--lib/rpmug.h4
-rw-r--r--lib/rpmvercmp.c2
-rw-r--r--lib/rpmvf.h7
-rw-r--r--lib/rpmvs.c456
-rw-r--r--lib/rpmvs.h75
-rw-r--r--lib/signature.c586
-rw-r--r--lib/signature.h59
-rw-r--r--lib/tagexts.c185
-rw-r--r--lib/tagname.c247
-rw-r--r--lib/transaction.c575
-rw-r--r--lib/verify.c200
-rw-r--r--luaext/linit.c9
-rw-r--r--luaext/linit.h6
-rw-r--r--luaext/linit.lch46
-rw-r--r--luaext/lposix.c65
-rw-r--r--luaext/modemuncher.c2
-rw-r--r--macros.debug47
-rw-r--r--macros.in430
-rw-r--r--misc/Makefile.am2
-rw-r--r--misc/fnmatch.c2
-rw-r--r--misc/fts.c24
-rw-r--r--misc/rpmfts.h (renamed from misc/fts.h)33
-rwxr-xr-xmkinstalldirs9
-rw-r--r--packaging/rpm.spec22
-rw-r--r--platform.in11
-rw-r--r--plugins/Makefile.am32
-rw-r--r--plugins/exec.c51
-rw-r--r--plugins/ima.c80
-rw-r--r--plugins/msm-plugin.c64
-rw-r--r--plugins/prioreset.c50
-rw-r--r--plugins/selinux.c196
-rw-r--r--plugins/sepolicy.c655
-rw-r--r--plugins/syslog.c116
-rw-r--r--plugins/systemd_inhibit.c111
-rw-r--r--po/LINGUAS2
-rw-r--r--po/POTFILES.in39
-rw-r--r--po/ar.po (renamed from po/bn_IN.po)3040
-rw-r--r--po/br.po2968
-rw-r--r--po/ca.po3830
-rw-r--r--po/cmn.po3935
-rw-r--r--po/cs.po3105
-rw-r--r--po/cs_CZ.po3484
-rw-r--r--po/da.po3016
-rw-r--r--po/de.po3644
-rw-r--r--po/el.po2868
-rw-r--r--po/eo.po3570
-rw-r--r--po/es.po3249
-rw-r--r--po/fi.po3068
-rw-r--r--po/fr.po3224
-rw-r--r--po/gu.po3484
-rw-r--r--po/id.po2957
-rw-r--r--po/is.po2911
-rw-r--r--po/it.po3270
-rw-r--r--po/ja.po3197
-rw-r--r--po/ko.po3037
-rw-r--r--po/ms.po2906
-rw-r--r--po/nb.po2949
-rw-r--r--po/nl.po2904
-rw-r--r--po/pl.po3563
-rw-r--r--po/pt.po3049
-rw-r--r--po/pt_BR.po3155
-rw-r--r--po/rpm.pot2850
-rw-r--r--po/ru.po3103
-rw-r--r--po/sk.po3178
-rw-r--r--po/sl.po2943
-rw-r--r--po/sr.po3114
-rw-r--r--po/sr@latin.po3114
-rw-r--r--po/sv.po3231
-rw-r--r--po/te.po2881
-rw-r--r--po/tr.po3092
-rw-r--r--po/uk.po3219
-rw-r--r--po/vi.po4014
-rw-r--r--po/zh_CN.po3641
-rw-r--r--po/zh_TW.po3292
-rw-r--r--preinstall.am12
-rw-r--r--python/.gitignore1
-rw-r--r--python/MANIFEST.in1
-rw-r--r--python/Makefile.am14
-rw-r--r--python/header-py.c113
-rw-r--r--python/rpm/__init__.py58
-rw-r--r--python/rpm/transaction.py58
-rw-r--r--python/rpmarchive-py.c275
-rw-r--r--python/rpmarchive-py.h15
-rw-r--r--python/rpmbmodule.c4
-rw-r--r--python/rpmds-py.c80
-rw-r--r--python/rpmfd-py.c58
-rw-r--r--python/rpmfi-py.c94
-rw-r--r--python/rpmfiles-py.c598
-rw-r--r--python/rpmfiles-py.h18
-rw-r--r--python/rpmii-py.c25
-rw-r--r--python/rpmmacro-py.c14
-rw-r--r--python/rpmmi-py.c51
-rw-r--r--python/rpmmodule.c149
-rw-r--r--python/rpmsmodule.c35
-rw-r--r--python/rpmstrpool-py.c156
-rw-r--r--python/rpmstrpool-py.h14
-rw-r--r--python/rpmsystem-py.h2
-rw-r--r--python/rpmtd-py.c160
-rw-r--r--python/rpmtd-py.h1
-rw-r--r--python/rpmte-py.c69
-rw-r--r--python/rpmts-py.c144
-rw-r--r--python/setup.py.in55
-rw-r--r--python/spec-py.c65
-rw-r--r--python/spec-py.h2
-rw-r--r--rpm.am3
-rw-r--r--rpm.pc.in4
-rw-r--r--rpm2archive.c218
-rw-r--r--rpm2cpio.c9
-rw-r--r--rpmbuild.c168
-rw-r--r--rpmdb.c68
-rw-r--r--rpmio/Makefile.am13
-rw-r--r--rpmio/argv.c28
-rw-r--r--rpmio/argv.h8
-rw-r--r--rpmio/base64.c2
-rw-r--r--rpmio/digest.c82
-rw-r--r--rpmio/digest.h5
-rw-r--r--rpmio/digest_beecrypt.c253
-rw-r--r--rpmio/digest_nss.c62
-rw-r--r--rpmio/digest_openssl.c839
-rw-r--r--rpmio/macro.c1314
-rw-r--r--rpmio/rpmbase64.h6
-rw-r--r--rpmio/rpmfileutil.c70
-rw-r--r--rpmio/rpmfileutil.h4
-rw-r--r--rpmio/rpmglob.c66
-rw-r--r--rpmio/rpmio.c1149
-rw-r--r--rpmio/rpmio.h1
-rw-r--r--rpmio/rpmio_internal.h8
-rw-r--r--rpmio/rpmkeyring.c159
-rw-r--r--rpmio/rpmkeyring.h17
-rw-r--r--rpmio/rpmlog.c372
-rw-r--r--rpmio/rpmlog.h56
-rw-r--r--rpmio/rpmlua.c54
-rw-r--r--rpmio/rpmlua.h2
-rw-r--r--rpmio/rpmmacro.h34
-rw-r--r--rpmio/rpmpgp.c262
-rw-r--r--rpmio/rpmpgp.h80
-rw-r--r--rpmio/rpmsq.c247
-rw-r--r--rpmio/rpmsq.h50
-rw-r--r--rpmio/rpmstrpool.c42
-rw-r--r--rpmio/rpmstrpool.h13
-rw-r--r--rpmio/rpmsw.h2
-rw-r--r--rpmio/rpmurl.h2
-rw-r--r--rpmio/rpmutil.h5
-rw-r--r--rpmio/stubs.c18
-rw-r--r--rpmkeys.c10
-rw-r--r--rpmpopt.in70
-rw-r--r--rpmqv.c16
-rw-r--r--rpmrc.in104
-rw-r--r--rpmsign.c168
-rw-r--r--rpmspec.c7
-rw-r--r--scripts/Makefile.am24
-rwxr-xr-xscripts/brp-compress6
-rw-r--r--scripts/brp-python-bytecompile58
-rwxr-xr-xscripts/brp-python-hardlink28
-rwxr-xr-xscripts/brp-strip2
-rw-r--r--scripts/brp-strip-shared2
-rwxr-xr-xscripts/check-files33
-rwxr-xr-xscripts/check-rpaths-worker2
-rwxr-xr-x[-rw-r--r--]scripts/debuginfo.prov20
-rwxr-xr-xscripts/desktop-file.prov2
-rwxr-xr-xscripts/find-debuginfo.sh525
-rwxr-xr-xscripts/find-lang.sh2
-rw-r--r--scripts/find-php-provides20
-rw-r--r--scripts/find-php-requires30
-rwxr-xr-xscripts/find-provides3
-rwxr-xr-xscripts/find-provides.ksyms81
-rwxr-xr-xscripts/find-requires3
-rwxr-xr-xscripts/find-requires.ksyms29
-rw-r--r--scripts/gendiff11
-rw-r--r--scripts/libtooldeps.sh2
-rw-r--r--scripts/macros.perl3
-rw-r--r--scripts/macros.php3
-rw-r--r--scripts/macros.python3
-rwxr-xr-xscripts/metainfo.prov19
-rw-r--r--scripts/osgideps.pl388
-rwxr-xr-xscripts/perl.prov18
-rwxr-xr-xscripts/perl.req34
-rwxr-xr-xscripts/perldeps.pl1116
-rwxr-xr-xscripts/pkgconfigdeps.sh3
-rwxr-xr-xscripts/python-macro-helper27
-rwxr-xr-xscripts/pythondistdeps.py240
-rwxr-xr-xscripts/rpm2cpio.sh93
-rw-r--r--scripts/rpm_fulldb_update386
-rw-r--r--scripts/rpmsync1625
-rwxr-xr-xscripts/sysvinitdeps.sh17
-rw-r--r--scripts/tcl.req101
-rwxr-xr-xscripts/vpkg-provides.sh10
-rw-r--r--sign/Makefile.am9
-rw-r--r--sign/rpmgensig.c756
-rw-r--r--sign/rpmsign.h13
-rw-r--r--sign/rpmsignfiles.c135
-rw-r--r--sign/rpmsignfiles.h25
-rw-r--r--system.h54
-rw-r--r--tests/Makefile.am51
-rw-r--r--tests/atlocal.in25
-rw-r--r--tests/data/RPMS/hello-2.0-1.i686.rpmbin4447 -> 9984 bytes
-rw-r--r--tests/data/RPMS/hello-2.0-1.x86_64-signed.rpmbin0 -> 9915 bytes
-rw-r--r--tests/data/RPMS/hello-2.0-1.x86_64.rpmbin4446 -> 9915 bytes
-rw-r--r--tests/data/SOURCES/hello.c8
-rw-r--r--tests/data/SOURCES/poltest-1.0.tar.bz2bin409 -> 0 bytes
-rw-r--r--tests/data/SOURCES/poltest-policy-1.0.tar.bz2bin553 -> 0 bytes
-rw-r--r--tests/data/SPECS/attrtest.spec6
-rw-r--r--tests/data/SPECS/configtest.spec3
-rw-r--r--tests/data/SPECS/conflicttest.spec3
-rw-r--r--tests/data/SPECS/deptest.spec11
-rw-r--r--tests/data/SPECS/filedep.spec49
-rw-r--r--tests/data/SPECS/filetriggers.spec95
-rw-r--r--tests/data/SPECS/flangtest.spec5
-rw-r--r--tests/data/SPECS/hello-attr-buildid.spec27
-rw-r--r--tests/data/SPECS/hello-cd.spec29
-rw-r--r--tests/data/SPECS/hello-config-buildid.spec30
-rw-r--r--tests/data/SPECS/hello-r2.spec58
-rw-r--r--tests/data/SPECS/hello-script.spec2
-rw-r--r--tests/data/SPECS/hello2-suid.spec67
-rw-r--r--tests/data/SPECS/hello2.spec62
-rw-r--r--tests/data/SPECS/hello2cp.spec64
-rw-r--r--tests/data/SPECS/hello2ln.spec63
-rw-r--r--tests/data/SPECS/hlinktest.spec16
-rw-r--r--tests/data/SPECS/parallel.spec50
-rw-r--r--tests/data/SPECS/poltest.spec52
-rw-r--r--tests/data/SPECS/prefixtest.spec42
-rw-r--r--tests/data/SPECS/replacetest.spec4
-rw-r--r--tests/data/SPECS/scripts.spec4
-rw-r--r--tests/data/SPECS/sigpipe.spec47
-rw-r--r--tests/data/SPECS/test-subpackages-exclude.spec42
-rw-r--r--tests/data/SPECS/test-subpackages-pathpostfixes.spec39
-rw-r--r--tests/data/SPECS/test-subpackages.spec47
-rw-r--r--tests/data/SPECS/testdoc.spec32
-rw-r--r--tests/data/SPECS/triggers.spec26
-rw-r--r--tests/data/SPECS/vattrtest.spec29
-rw-r--r--tests/data/keys/rpm.org-rsa-2048-test.pub30
-rw-r--r--tests/data/keys/rpm.org-rsa-2048-test.secret57
-rw-r--r--tests/package.m46
-rw-r--r--tests/rpmbuild.at1176
-rw-r--r--tests/rpmbuildid.at1312
-rw-r--r--tests/rpmconfig.at156
-rw-r--r--tests/rpmconfig2.at133
-rw-r--r--tests/rpmconfig3.at40
-rw-r--r--tests/rpmconflict.at40
-rw-r--r--tests/rpmdb.at92
-rw-r--r--tests/rpmdeps.at731
-rw-r--r--tests/rpmgeneral.at59
-rw-r--r--tests/rpmi.at249
-rw-r--r--tests/rpmio.at50
-rw-r--r--tests/rpmmacro.at293
-rw-r--r--tests/rpmorder.at45
-rw-r--r--tests/rpmpython.at138
-rw-r--r--tests/rpmquery.at417
-rw-r--r--tests/rpmreplace.at114
-rw-r--r--tests/rpmscript.at225
-rw-r--r--tests/rpmsigdig.at443
-rwxr-xr-xtests/rpmtests30451
-rw-r--r--tests/rpmtests.at4
-rw-r--r--tests/rpmverify.at412
-rw-r--r--tools/debugedit.c1833
-rw-r--r--tools/elfdeps.c77
-rw-r--r--tools/rpmdeps.c64
-rw-r--r--tools/rpmgraph.c3
-rw-r--r--tools/sepdebugcrcfix.c366
427 files changed, 144715 insertions, 79494 deletions
diff --git a/CHANGES b/CHANGES
deleted file mode 100644
index d6365c122..000000000
--- a/CHANGES
+++ /dev/null
@@ -1,2927 +0,0 @@
-4.4.2 -> 4.4.2.1:
- - remove internal sqlite, zlib, gettext
- - remove obsolete utilities
- - remove vendor gpg keys
- - fix spec parenthesis parsing
- - allow building without neon
- - disable hkp lookup by default
- - re-enable file-conflicts detection (rhbz#151609)
- - fix potential segfault in available file provides checking
- - fix Requires(pre,postun) (rh#155700)
- - fix db build wrt newer CFLAGS
- - fix popt CHARSET for various languages (rhbz#172155)
- - fix install size calculation with excludes in manifest (rhbz#89661)
- - use full path in the rpm cronjob (rhbz#174211)
- - filter out incorrect perl(main) provides (rhbz#177960)
- - fix scriptlet deadlock (rhbz#146549)
- - fix netshared path comparison (rhbz#52725)
- - make fcntl lock sensitive to --root (rhbz#151255)
- - fix rpmvercomp for strings with trailing null segments (rhbz#178798)
- - fix doxygen generation (rhbz#187714)
- - fix potential segfault if no rpmlock_path defined (rhbz#231146)
- - fix for thinko in debugedit on ppc
- - fix debugedit wrt OOo
- - fix debugedit with ../../ in paths
- - fix various other issues in debugedit (rhbz#205339)
- - allow customisable diff and use -p by default (rhbz#146981)
- - handle fork failure
- - fix a typo causing compiler warning (susebz#178055)
- - fix a %{buildsubdir} typo/thinko
- - fix uncompress waitpid logic to shut up the compiler (susebz#160434)
- - add support for %{_docdir} macro (rhbz#125514)
- - fix segfault on rpmbuild with empty file list
- - allow --ignoresize for erase operations
- - don't attempt to execute empty transaction (susebz#43267)
- - don't segfault if Fileno() is called with NULL
- - abort build if cwd not determinable
- - fix --noghost query option (rhbz#103207)
- - fix off-by-one error in glob
- - check rpmtsInitDB() return value
- - build internal Lua without readline support
- - make rpmdbSync obey the no_dbsync flag
- - fix package verification for packages with header+payload RSA but
- no header-only RSA
- - drop any s-bits early when deleting files (susebz#50376, rhbz#125517)
- - fix handling of old packages that use HEADERIMAGE
- - catch disk-space errors when writing signed packages
- - fix default verify flags for %doc (rhbz#235353)
- - fix debugedit for relative paths (rhbz#232222)
- - add configurable preferable elf colour policy (rhbz#235757)
- - python: always treat changelog as list
- - use older perl helper scripts by default
- - add mono req/provides support
- - remove SELinux context verification (rhbz#193488)
- - fix building without Lua support
- - fix --rebuilddb with --root option
- - fix --setperms and --setugids with uninstalled packages
- - don't run pre- and posttrans scripts in test mode
- - dbmatch keys can be unicode objects also (rhbz#219008)
- - gendiff: let diff arguments be specified in the environment
- - gendiff: emit diff headers (rhbz#237561)
- - improved error messages in verification of unreadable files
- - python: raise exception if tsAdd fails
- - check for supported package payload format (rhbz#140052)
- - fail build if beecrypt headers not found
- - build: check unpackaged files even if other errors are present
- - restore SIGILL handler in machine detection code
- - add --dupes popt alias for detecting duplicate packages in rpmdb
- - fix typo in check-prereq (rhbz#203182)
- - python: fix rpm.te Key() refcount (rhbz#182063)
- - python: always treat fileverifyflags as list
- - disable strict aliasing if compiler supports it (type-punning warns)
- - add zh_TW translation
- - add support for srcdefattr macro (susebz#48870, rhbz#125515)
- - detect python 2.5 automatically in configure
- - python: reference counting for match-iterators (rhbz#241751)
- - updated fi translation
- - fix format string errors in de translation
- - allow characters > 127 that don't fit the current locale in spec
- - treat null epoch equal to zero epoch in freshen (rhbz#143301)
- - python: treat null epoch equal to zero labelCompare (rhbz#227860)
- - permit installing multiple package versions with -i (rhbz#213399)
- - fix <name>.<arch> query output for non-installed package (rhbz#124016)
- - updated pl translation
- - don't read packages with non-verifiable signatures (rhbz#239557)
- - don't try to open non-existent file twice in query
- - flush query format buffer before listing files (rhbz#212833)
- - check all header strings to resize buffer (rhbz#212833)
- - don't segfault on a header without RPMTAG_NAME (rhbz#239557)
- - fix file status for replaced files (rhbz#237478)
- - make %_signature default to gpg instead of none
- - don't skip directories in fingerprinting (rhbz#140055, 223639, ...)
- - remove vendor, release specific dependency whitouts
- - remove upstream spec files for rpm and popt
- - don't open temporary databases in rpmdbOpenAll()
- - open non-temporary db's before chroot (rhbz#103952, 173285)
- - don't treat provides as implicit obsoletes (rhbz#111071, ...)
- - fix CVE-2007-1536, CVE-2007-2799 in internal libmagic
- - support specifying fuzz factor to %patch (rhbz#243720)
- - enable ordering on erase mode
- - transaction ordering fixes (rhbz#196590, 202540, 202542, ...)
- - added IPv4/6 and EPSV support
- - remove hardcoded /var/log/lastlog kludgery
- - don't mmap large files (rhbz#139539, 177616)
- - detect and provide a requirement for DT_GNU_HASH
- - ARM architecture update
- - update popt version for clean upgradability
- - remove hardcoded libtermcap vs bash kludge
- - updated Russian man pages (rhbz#185620)
- - fix a sparse warning in popt.h (rhbz#202005)
- - disable broken "make check" tests
- - treat /usr/share/gtk-doc/html/ as a docdir
- - plug some minor memory leaks
- - use --wildcards with tar for compatibility with tar >= 1.15.91
- - fix segfault on errors if neon transport is used (rhbz#220392)
- - new buildroot sanity checker scripts check-buildroot and check-rpaths
- - new debugedit option for recomputing build ID
-
-4.4.1 -> 4.4.2:
- - start 4.4.2 devel.
- - sqlite3: revert cClose scoping, data is freed in cClose unlike db4.
- - build against sqlite3-3.1.2.
- - sqlite3: update encode/decode from sqlite-2.8.16.
- - add --xml popt alias for query modes.
- - remove _rpmdb now that python2.[34] are commonly available.
- - remove remnant -I/opt/local hacks, --prefix=/usr is recommended.
- - rework configure.ac et al to lose internal library baggage flexibly.
- - updated sv.po <goeran@uddrborg.se>.
- - permit gpg to be used for RSA signatures.
- - permit RSA key sizes larger than 1024 bits.
- - permit RSA/{sha1,sha256,sha384,sha512} signature verification.
- - updated de.po (#162756).
- - added CVSId: tag and SVNId: alias (#162807).
- - added brp-java-gcjcompile build helper.
- - fix: java compiled with -O0 confuses debugedit (#161722).
- - fix: % at end-of-line overflow (#161091).
- - *_terminate_build macros set per-pkg, not per-invocation (#161081).
- - use perldeps.pl, phase out perl.{req,prov} (#161921).
- - fix: make sqlite3 rpmdb endian-neutral (#159425).
- - fix: permit sqlite3 rpmdb with chroot (#159424).
- - fix: find-debuginfo.sh not handling set[ug]id ELF files (#100963).
- - fix: find-debuginfo.sh kernel voo-doo tweaks (#159346).
- - fix: initialize variables used in debug msg (#160458).
- - permit zlib in rpm to be built with make -j (#159404).
- - avoid '?' for zero length file mmap failure doing md5 (#159405).
- - permit scriptlet includes from builddir for spec files w/o %setup.
- - upgrade to zlib-1.2.2.4 internal.
- - macosx: avoid minigzip build failures.
- - upgrade to file-4.14 internal.
- - fix: magic_file() closes stdin when given directory path.
- - use perldeps.pl, phase out perl.{req,prov} (again).
- - document __vsflags (#147489).
- - release rpm-4.4.2.
-
-4.4 -> 4.4.1:
- - force *.py->*.pyo byte code compilation with brp-python-bytecompile.
- - automagically detect and emit "python(abi) = 2.4" dependencies.
- - popt 1.10.1 to preserve newer.
- - use package color as Obsoletes: color.
- - upgrade to db-4.3.27.
- - revert MAGIC_COMPRESS, real fix is in libmagic (#143782).
- - upgrade to file-4.12 internal.
- - mac os x patches (#131943,#131944,#132924,#132926).
- - mac os x patches (#133611, #133612, #134637).
- - build against external/internal neon.
- - add https://svn.uhulinux.hu/packages/dev/zlib/patches/02-rsync.patch
- - changes to build on Mac OS X using darwinports neon/beecrypt.
- - blueprint rpm-4_4 and HEAD to minimize diff spew.
- - add missing #if defined(ENABLE_NLS) (#146184).
- - python: force dbMatch() h# key to be 32 bit integer (#146477).
- - add sqlite internal (build still expects external sqlite3-3.0.8).
- - sqlite: revert to original narrow scoping of cOpen/cClose.
- - fix: length of gpg V4 hash seed was incorrect (#146896).
- - add support for V4 rfc-2440 signatures.
- - sqlite3: run-time endian test rather than chasing <endian.h> (#146752).
- - discover and use getmntinfo if present.
- - perform callbacks as always (#147537).
- - permit build scriptlet interpreters to be individually overridden.
- - zlib: uniqify certain symbols to prevent name space pollution.
- - macosx: include <sys/types.h> so that python sees the u_char typedef.
- - macosx: change to --prefix=/usr rather than /opt/local.
- - use waitpid rather than SIGCHLD reaper.
- - rip out DB_PRIVATE revert if not NPTL, it's not the right thing to do.
- - don't classify files in /dev (#146623).
- - don't build with sqlite3 if <sqlite3.h> is missing.
-
-4.3.3 -> 4.4:
- - pentium3/pentium4 arch support (pluto@PLD).
- - cpuid() cleanups for PIC/non-PIC and gcc 3.4 (pluto@PLD).
- - rpmGlob() is now locale independent (wiget@PLD).
- - conditional build support/unification (jajcus,malekith,qboosh,wiget@PLD).
- - fix: readelf.c breakage on some non x86 arches (qboosh@PLD).
- - find-lang.sh: implemented --with-kde (finds KDE help files);
- - add --all-name option (finds every lang file); drop defattr()
- from *.lang files (arekm,mkochano,pascalek,wiget@PLD).
- - add type to tag array.
- - add Disttag: syntax to spec file parser and header content.
- - define Suggests:/Enhances: and Priority: tag values.
- - prevent RPMSENSE_PREREQ from being set or tested.
- - python: add rpm.ps() object to carry problem set info.
- - python: permit rpm.ds() analogue to hdr.dsFromHeader() creator.
- - python: permit rpm.fi() analogue to hdr.fiFromHeader() creator.
- - silently add default %defattr(-,root,root) for all packages.
- - fix: don't set handler if SIG_IGN is already set (#134474).
- - disable expensive header+payload verifies in default config.
- - adjust digest/signature stats to count #pkgs and bytes.
- - obsolete Serial:, Copyright:, and RHNPlatform: syntax in spec files.
- - permit Obsoletes: /path/to/file.
- - permit Conflicts: /path/to/file.
- - free rpmrc when looping on --target arches (#127730).
- - fix: handle non-unique dirnames in rpmalAdd().
- - integrate rpmgi "generic iterator" with query/verify.
- - bump popt version to 1.10.
- - attempt dependency tree breadth, take 1.
- - use external libneon for http/https transport.
- - add --delsign to purge packages of digital signatures.
- - neon used by default for http/https transport.
- - upgrade to db-4.3.21 final internal.
- - remove noNeon runtime switch, http through neon only.
- - remove http put to be able to build against upstream neon.
- - bump soname into libfoo-4.4.so everywhere.
- - sparcv8: optflags changed to -mtune=ultrasparc (#140420).
- - add BuildRequires: neon-devel.
- - fix: chunked davRead returns 0 is EOF.
- - python: bleeping keywords broke labelCompare.
- - add support for automagic pubkey retrieval using HKP.
- - detect and return errors from neon through Ferror.
- - use package color as Obsoletes: color.
-
-4.3.2 -> 4.3.3:
- - bump micro version.
- - make peace with libtool-1.5.10 and automake-1.9.3.
- - python: add python 2.4 support.
- - selinux: use rpm_execcon, not execv, to run scriptlets (#136848).
- - fix: segfault on --verifydb (#138589).
- - sparcv8: optflags changed to -mtune=ultrasparc (#140420).
- - port to internal file-4.10 libmagic rather than libfmagic.
- - move global /var/lock/rpm/transaction to dbpath.
- - permit fcntl path to be configured through rpmlock_path macro.
-
-4.3.1 -> 4.3.2:
- - use /etc/selinux/targeted/contexts/files/file_contexts for now.
- - disable file contexts into package metadata during build.
- - fix: "/path/foo.../bar" was losing a dot (#123844).
- - lua embedded in rpmio.
- - use lua to identify desired selinux file context regexes.
- - add 'requires' and 'conflicts' tag aliases.
- - python: return ds, not tuple, for ds iteration.
- - python: permit integer keys to ts.dbMatch().
- - xml: use <foo/> markup for empty tags.
- - xml: <integer/> instead of <integer>0</integer> markup.
- - fix: disable fingerprint generation on kernel paths.
- - add ppc8[25]60 arches.
- - fix: evaluate rather than default file_contexts path. (#127501).
- - avoid "can't happen" recursion while retrieving pubkeys.
- - add ppc32dy4 arch.
- - make peace with automake 1.9.1.
- - fix: defattr for rpm-libs (#130461).
- - print dependency loops as warning iff --anaconda is specified.
- - fix: mark uninstalled elf32 files in rpmdb to disable -Va checks.
- - ia64: add autorelocate_dcolor to macros.in.
- - disable static linking until libc*.a provides symbols.
- - fix: revert Obsoletes: "fix" (#134497).
- - fix: work around for dangling symlinks not globbed (#134362).
- - display caught signals to diagnose #134474 (gonna be SIGPIPE).
- - display N-V-R.A in dependency failure messages.
- - selinux: set "rpm_script_t" always, not just for /bin/sh.
- - honor inherited SIG_IGN when establishing rpmdb signal exit (#134474).
- - don't add time stamp to compressed man pages (#132526).
- - python: remove ".A" from creaky ts.check() tuple return (#135008).
- - python: fix RPMPROB_BADRELOCATE segfault return in ts.check (#137116).
- - revert selinux patch until fc3 release.
- - reprise file conflicts yet again, flip/flop/flip/flop ...
- - fix: buffer overrun displaying ko_KR (#135389).
-
-4.3 -> 4.3.1:
- - fix: don't add leading space to %* argv expansion (#119059).
- - scareMem = 0 everywhere, document deprecation phase out.
- - fix: add u+w to FIXPERMS.
- - add buildtime to rpmds, methods to retrieve.
- - python: hide labelCompare() underneath ds.cmp(a,b).
- - fix: segfault on --recontext if file_contexts unreadable (#117374).
- - fix: /etc/security/selinux/file_contexts is default path.
- - fix: no transaction lock if --test was specified (#119783).
- - perl: skip new-fangled head[34] while generating deps (#118243).
- - perl: use __perl for perl variable macros (#115156).
- - make peace with libtool-1.5.6.
- - fix: follow current is_selinux_enabled() return (#121004).
- ? fix: exit fail when erasing multiple identical packages (#120519).
- - add aurora/sparc patches (#124469).
- - use poll(2) if available, avoid borked aurora/sparc select (#124574).
-
-4.2.3 -> 4.3:
- - upgrade to zlib-1.2.beta7.
- - fix: short option help missing string terminator.
- - permit secondary tag match patterns with RPMQV_ALL.
- - fix: cut-n-paste error setting nopromote for Conflicts: (#81965).
- - don't use error string after gzclose (Dmitry V. Levin).
- - only internal Berkeley db from now on.
- - revive "make dist".
- - fix: added index size wrong iff _transaction_color != 0/3 (#103865).
- - fix: escape '+' in regex patterns through RPMMIRE_DEFAULT (#103851).
- - RPMMIRE_DEFAULT is overkill, use RPMMIRE_STRCMP instead (#103851).
- - don't use mktemp if mkstemp is available (#103850).
- - python: return None for NEVRAO, [] for everything else.
- - python: throw exception on bad arg to labelCompare (#113661).
- - re-add --enable-posixmutexes to build.
- - fix: set fcontext from pkg when file_contexts doesn't exist (#114040).
- - fix: set fcontext for "mkdir -p" directories not in packages.
- - fix: setfiles (aka rpmsx.c) dinna handle patterns correctly.
- - establish rpm_script_t before scriptlet exec.
- - python: add patch to rpm-4_3 to initialize RE contexts.
- - fix: only first "mkdir -p" directory had context set.
- - stable sort for policy specifications, patterns before paths.
- - set "rpm_script_t" exec type for scriptlets iff /bin/sh, else default.
- - force FD_CLOEXEC on 1st 100 inherited fdno's.
- - serialize rpmtsRun() using fcntl on /var/lock/rpm/transaction.
- - permit globs in macrofiles: directive (#117217).
- - fix: segfault generating transaction serialization lock path.
- - use /etc/security/selinux/file_contexts instead.
- - selinux: ignore ENOTSUP return from lsetfilecon.
- - add sparcv8 and enable elf32/elf64 Zon sparc64 (#117302).
- - fix: --querybynumber looped.
- - fix: ENOTSUP filter from lsetfilecon borkage.
- - fix: increase file context regex parse buffer to BUFSIZ.
- - fix: handle elf64 note sections correctly.
- - fix: grrr, skip notes on non-i386 entirely.
- - endian neutral rpmdb join keys (finally).
- - fix: dev package build on s390x hack around.
-
-4.2.2 -> 4.2.3:
- - bump rpm and popt versions to insure "newer".
- - change default behavior to resolve file conflicts as LIFO.
- - add --fileconflicts to recover rpm traditional behavior.
- - prefer elf64 over elf32 files, everywhere and always (#126853).
- - ia64: auto-relocate entire, not partial, directory contents (#126905).
- - ia64: auto-relocate glibc.ix86 interpreter path (#100563).
- - shared libraries in separate rpm-libs package.
- - fix: defattr for rpm-libs (#130461).
- - fix: static glibc/libgcc helpers always installed (#127522).
- - ia64: make sure that autorelocated file dependencies are satisfied.
- - ia64: relocate all scriptlet interpreters.
- - ia64: don't bother trying to preload autorelocated modules.
- - fix: filesystem package needs mail/lock w/o getgrnam.
- - fix: do getpwnam/getgrnam to load correct modules before chroot.
-
-4.2.1 -> 4.2.2:
- - unify signal handling in librpmio, use condvar to deliver signal.
- - make peace with libtool-1.5, autoconf-2.59, automake-1.8.
- - build with db-4.2.52 internal.
- - refresh bsddb.
- - detect (and remove) dbenv files while upgrading to db-4.2.52.
- - ensure that librpmdb links against just built, not system, librpmio.
- - fix: dangling pointer brain fart (#107835).
- - fix: ds.Single() method needs malloc'd elements (#109919).
- - convert ja and ko man pages to utf8 (#106050).
- - man page corrections (#106415).
- - perl.req typo (#106672).
- - fix: wrong package count for trigger scriptlet 1st arg (#100509).
- - fix: don't break header SHA1 if non-existent user/group (#97727).
- - remove fuids/fgids from rpmfi, easier to lookup fuser/fgroup instead.
- - merge sensible parts of openpkg rpm.patch.bugfix (#104780).
- - mark _javadocdir as documentation (#102898).
- - flush pipe before exit 1 in check-files (#103867).
- - perl.req: avoid regex misfire on '^use' in "= <<" assign (#109934).
- - find-debuginfo.sh: permit stripping unwritable by non-root (#112429).
- - missing build dependency (#111104).
- - spelling corrections (#112728).
- - use -fPIC -DPIC on all platforms, not just mandatory (#112713).
- - popt: pad to display length, not strlen, for i18n popt args (#106240).
- - python: include Python.h before glibc features.h.
- - python: return [], not None, accessing header tags (#112794).
- - python: avoid invoking python to acquire ill-specified parameters.
- - add ia32e arch.
- - fix: sq->reaped needs sighold(SIGCHLD)/sigrelease(SIGCHLD) (#117620).
-
-4.2 -> 4.2.1:
- - fix: nested %if handling, optind initialization posix vs. glibc.
- - add version check for package with provides and obsoletes.
- - hack out O_DIRECT support in db4 for now.
- - build with external beecrypt-3.0.0.
- - x86_64 -> athlon, ppc64[ip]series -> ppc64 arch compatibility.
- - treat missing epoch's exactly the same as Epoch: 0.
- - pass structure pointer, not args, through headerSprintf call chain.
- - add ":xml" header format modifier.
- - --queryformat '[%%{*:xml}\n]' to dump header content in XML.
- - add ".arch" suffix to erase colored packages with identical NEVR.
- - update ja man pages (#92261).
- - backport rpmsw stopwatch, insturment rpmts operations.
- ? toy method to enable --stats through bindings.
- - fdCLose typo (#97257).
- - brp-python-bytecompile to automagically bytecode compile python.
- ? update for fr.po (#97829).
- - don't attempt to remove dbenv on --rebuilddb.
- - autorelocate ix86 package file paths on ia64.
- - resurrect manifests, RPMRC_NOTFOUND returned by readLead().
- - python: missed tuple refcount in IDTXload/IDTXglob.
- - fix: IDTXglob should return REMOVETID sorted headers (#89857).
- - resolve elf32/elf64 file conflicts to prefer elf64.
- - apply debugedit patch necessary to produce kernel -debuginfo files.
- ? ia64: autorelocate only colored, not every, file when installing.
- ? repair find-debuginfo.sh to avoid recursing in /usr/lib/debug.
- ? fix: ia64: don't attempt autorelocate on .src.rpm's.
- ? fix: debuginfo: -not -path /usr/lib/debug needed -prune too.
- ? fix: packages w/o file colors segfault.
- ? add amd64 as alias for x86_64 (#99553).
- ? fix: add -n to brp-compress to avoid needless file conflicts.
- ? fix: ia32 on ia64 segfaults because of automagic file relocations.
- ? speed up convertdb1 (#103206).
- ? revert i18n table change to preserve help array size.
- ? add config directories for ppc64pseries/ppc64iseries.
- ? filter GLIBC_PRIVATE dependencies.
- - fix: check added provides against installed conflicts (#110317).
- - changes for python 2.3
- - changes for libtool-1.5
- - changes for automake-1.7.8
- - changes for db-4.2.42.
- - splint fiddles.
-
-4.1 -> 4.2:
- - set cachesize without a dbenv, the default is far too small.
- - db: don't return EACCES on db->close w/o environment.
- - unify cachesize configuration, with (or without) a dbenv.
- - comments regarding unsupported (yet) db-4.1.17 functionality.
- - update to db-4.1.24 final.
- - eliminate myftw, use Fts(3) instead.
- - dump libelf, gulp elfutils, for now.
- - python: permit headers to be hashed.
- - use %%{_lib} for libraries.
- - include file-3.39 (with homebrewed) libfmagic, for now.
- - add debug sub-package patch.
- - re-add elfutils/libdwarf (for dwarf.h), eliminate tools/dwarf2.h.
- - resurrect genhdlist "greased lightning" pathway for now.
- - elfutils: avoid gcc-3.2 ICE on x86_64 for now.
- - add /usr/lib/rpm/rpmdeps.
- - add /usr/lib/rpm/magic.
- - fix: /dev/initctl has not MD5 segfault (#76718).
- - rpm.8: gpg uses GNUPGHOME, not GPGPATH (#76691).
- - add error message on glob failure (#76012).
- - add _javadir/_javadocdir/_javaclasspath macros.
- - fix: bash must have functional libtermcap.so.2.
- - update to elfutils-0.56.
- - have debug sub-subpackage use external, not internal, elfutils.
- - apply patches 1-6 to db-4.1.24.
- - resurrect availablePackages one more time.
- - fix: option conflict error message (#77373).
- - add AC_SYS_LARGFILE throughout.
- - statically link rpmdeps against (internal) libfmagic.
- - use rpmdeps rather than find-{requires,provides}.
- - bundle libfmagic into librpmbuild for now.
- - apply patches 7 and 8 to db-4.1.24.
- - upgrade to elfutils-0.59.
- - add -g to all platforms optflags.
- - build with external elfutils (preferred), if available.
- - upgrade to elfutils-0.63.
- - link rpm libraries together, use shared helpers with external -lelf.
- - move libfmagic to librpmio.
- - use libtool-1.4.3, autoconf-2.56.
- - add explicit -L/lib64 -L/usr/lib64 for libtool mode=relink on x86_64.
- - use usrlib_LTLIBRARIES to install directly in /usr/lib64 instead.
- - late rpmts reference causes premature free (#78862).
- - internal automagic dependency generation (disabled for now).
- - don't generate dependencies unless execute bit is set.
- - enable internal automagic dependency generation as default.
- - fix: add rpmlib(VersionedDependencies) if versioned Provides: found.
- - fix: add %%ifnarch noarch to debug_package macro.
- - debug_packages "works", but non-noarch w/o %setup has empty payload.
- - make dependency generation "opt-in" in order to build in distro.
- - fix: make sure each library has DT_NEEDED for all unresolved syms.
- - generate Elf provides even if file is not executable.
- - disable fcntl(2) lock on Packages until glibc+nptl is fixed.
- - make cdb locks "private" for pthreads compatibility w/o NPTL.
- - add --enable-posixmutexes to use NPTL.
- - make dependency generation "opt-out" everywhere.
- - rebuild against glibc with fcntl fixed in libpthread.
- - re-enable CDB locking, removing "private" from %%__dbi_cdb macro.
- - popt aliases for -U et al to achieve dynamic link with nptl.
- - add --file{class,provide,require} popt aliases and header extensions.
- - statically link against /usr/lib/nptl/libpthread.a, if present.
- - remove popt aliases for -U et al.
- - add -I/usr/include/nptl, Conflicts: kernel < 2.4.20.
- - dynamically link /bin/rpm, link against good old -lpthread.
- - test pthread_{mutex,cond}attr_setpshared(), add DB_ENV_PRIVATE if not.
- - error on exclusive Packages fcntl lock if DB_ENV_PRIVATE is set.
- - copy compressFilelist to convertdb1.c, remove internal legacy.h.
- - add --enable-posixmutexes when configuring on linux.
- - add rpmdb_{deadlock,dump,load,svc,stat,verify} utilities.
- - include srpm pkgid in binary headers (#71460).
- - add %check scriptlet to run after %install (#64137).
- - simplify specfile query linkage loop.
- - drill rpmts into parseSpec(), carrying Spec along.
- - fix: remove rpmfi scareMem so that headers can be reloaded on ia64.
- - fix: set DB_PRIVATE, not DB_ENV_PRIVATE, if unshared posix mutexes.
- - remove useless kernel/glibc dependencies (#79872).
- - add matching "config(N) = EVR" dependencies iff %%config is found.
- - add %%pubkey attribute to read armored pubkey files into header.
- - permit both relative/absolute paths, display 'P' when verifying.
- - resurrect automagic perl(foo) dependency generation.
- - add BETA-GPG-KEY (but not in headers using %%pubkey yet).
- - disable perl module magic rule.
- - ignore ENOENT return from db->close (#80514,#79314).
- - fix builddir relative inclusion, add %%pubkeys to rpm header.
- - fix: package relocations were broken (#75057).
- - error if querying with iterator on different sized arrays.
- - add rpmfi methods to access color, class, and dependencies.
- - don't segfault with packages produced by rpm-2.93 (#80618).
- - python: eliminate hash.[ch] and upgrade.[ch], methods too.
- - fix :armor query extension, tgpg mktmp handling (#80684).
- - use rpmfiFClass() underneath --fileclass.
- - use rpmfiFDepends() underneath --fileprovide and --filerequire.
- - python: add fi.FColor() and fi.FClass() methods.
- - calculate dependency color and refernces.
- - python: add ds.Color() and ds.Refs() methods.
- - fix: typo in assertion.
- - add rpmts/rpmte/rpmfi/rpmds element colors.
- - ignore items not in our rainbow (i.e. colors are functional).
- - fix: dependency helpers now rate limited at 10ms, not 1s.
- - add per-arch canonical color, only x86_64 enabled for now.
- - file: avoid ogg/vorbis file classification problems.
- - portabilitly: solaris fixes.
- - for DSO's, provide the file basename if DT_SONAME not found.
- - add perldeps.pl, start to replace perl.{prov,req}.
- - file: read elf64 notes correctly.
- - python: put rpmmodule.so where python expects to find.
- - add brp-strip-static-archive build root policy helper.
- - add -lelf to rpm LDFLAGS, not LDADD, since there is no libelf.la now.
- - fix: obscure corner case(s) with rpmvercmp (#50977).
- - file: *really* read elf64 notes correctly.
- - python: restore thread context on errorCB (#80744).
- - teach rpmquery to return "owning" package(s) in spite of alternatives.
- - duplicate package checks with arch/os checks if colored.
- - file conflict checks with colors.
- - fix: debugedit.c problem.
- - permit anaconda to choose "presentation order".
- - fix: more debugedit.c problems.
- - fix: clean relocation path for --prefix=/.
- - python: permit stdout/stderr to be remapped to install.log.
- - pay attention to package color when upgrading identical packages.
- - fix: trap SIGPIPE, close database(s).
- - configurable default query output format.
- - popt: diddle doxygen/splint annotations, corrected doco.
- - file: fix ogg/vorbis file classification problems.
- - skip fingerprints in /usr/share/doc and /usr/src/debug.
- - add file(1) as /usr/lib/rpm/rpmfile.
- - enable transaction coloring for s390x/ppc64.
- - file: check size read from elf header (#85297).
- - fix: memory leak (85522).
- - build with internal elfutils if not installed.
-
-4.0.4 -> 4.1:
- - loosely wire beecrypt library into rpm.
- - drop rpmio/base64.[ch] in favor of beecrypt.
- - drop lib/md5*.[ch] files in favor of beecrypt.
- - legacy: drop brokenMD5 support (rpm-2.3.3 to rpm-2.3.8 on sparc).
- - eliminate DYING code.
- - bind beecrypt md5/sha1 underneath rpmio.
- - create RFC-2440 OpenPGP API in rpmio.
- - proof-of-concept GPG/DSA verification for legacy signatures.
- - upgrade to beecrypt-2.2.0pre.
- - proof-of-concept PGP/RSA verification for legacy signatures.
- - ratchet up to lclint "strict" level.
- - upgrade to db-4.0.7.
- - use only header methods, routines are now static.
- - beecrypt is at least as good as pgp/gpg on verify, pulling the plug.
- - add :base64 and :armor format extensions, dump binary tags in hex.
- - proof-of-concept pubkey retrieval from RPM-{PGP,GPG}-KEY.
- - stupid macros to configure public key file paths.
- - all symbols but hdrVec are now forward references in linkage.
- - generate an rpm header on the fly for imported pubkeys.
- - wire transactions through rpmcli signature modes.
- - wire transactions through rpmcli query/verify modes.
- - wire transactions through rpmcli install/erase modes.
- - legacy signatures always checked (where possible) on package read.
- - wire transactions through rpmcli build modes.
- - lazy rpmdb open/close through transaction methods (mostly anyways).
- - no-brainer refcounts for rpmdb object.
- - check added header against transaction set, replace if newer.
- - transaction sets created in cli main.
- - no-brainer refcounts for ts object.
- - memory indices for dependency check are typedef'd and abstract'd.
- - no-brainer refcounts for fi object, debug the mess.
- - dump the header early in transaction, recreate fi before installing.
- - start hiding availablePackage data/methods in rpmal.c/rpmal.h.
- - add some dinky availablePackage methods.
- - transaction.c: cleanly uncouple availablePackage from TFI_t.
- - add header refcount annotations throughout.
- - depends.c: availablePackage is (almost) opaque.
- - invent some toy transactionElement iterators.
- - create rpmDepSet constructors/destructors.
- - create toy rpmDepSet iterators.
- - rpmRangesOverlap renamed to dsCompare, add dsNotify method as well.
- - depends.c: rpmDepSet is (almost) opaque, move to rpmds.[ch].
- - rpmds: create dsProblem(), dsiGetDNEVR() retrieved DNEVR, not N.
- - depends.h: hack around teIterator() et al from include for now.
- - rpmds: move trigger dependencies into a rpmDepSet as well.
- - rpmal: availablePackage is totally opaque, alKey with index replaces.
- - linear search on added package provides is dumb.
- - discarding entire signature header when using --addsign is dumb.
- - rip out rpmDependencyConflict, replace with rpmProblem instead.
- - no-brainer refcounts for rpmProblemSet object.
- - header tag sets are per-transactionElement, not per-availablePackage.
- - no-brainer refcounts for rpmDepSet and rpmFNSet objects.
- - strip header tags for erased as well as installed transactionElements.
- - common structure elements for unification of TFI_t and rpmFNSet.
- - factor per-transactionElement data out of TFI_t through pointer ref.
- - unify rpmFNSet into TFI_t.
- - eliminate header reference in rpmtransAddPackage, use TFI_t data.
- - commit to using rpmDepSet and TFI_t, not header.
- - lclint rpmio fiddles.
- - split file info tag sets into rpmfi.c.
- - create toy TFI_t iterators.
- - tweak overlapped file fingerprint retrieval for speed.
- - transaction.c: use wrappers/iterators to access TFI_t.
- - annotations to make a transactionElement opaque.
- - use array of pointers rather than contiguous array for ts->order.
- - methods to complete making transactionElement opaque.
- - use TR_REMOVED relations as well as TR_ADDED for ordering.
- - drop requirement that removed packages immediately follow added.
- - hybrid chainsaw/presentation ordering algorithm.
- - convert file md5sum's to binary on the fly, reducing memory footprint.
- - header handling moved to librpmdb to avoid linkage loops.
- - fix a couple dinky memory leaks.
- - build with an internal zlib for now.
- - protect brp-compress against /bin/ls output ambiguity (#56656,#56336).
- - 3 madvise calls and a 16Mb mmapped buffer == ~5% install speedup. Wow.
- - use db-4.0.14 final internally.
- - 1st crack at making zlib rsync friendly.
- - lclint-3.0.0.19 fiddles.
- - simple automake wrapper for zlib.
- - splint fiddles.
- - make peace with gcc-3.1, remove compiler cruft.
- - make peace with automake et al in 8.0, ugh.
- - add payload uncompressed size to signature to avoid rewriting header.
- - drill header sha1 into signature parallel to header+payload md5.
- - mandatory "most effective" signature check on query/verify/install.
- - don't bother adding empty filemd's to index.
- - add Pubkey index, using signer id as binary key.
- - display pubkeys in hex when debugging db access.
- - retrieve pubkey(s) from rpmdb, not from detached signature file.
- - add header DSA signature.
- - add header RSA signature (untested, disabled for now).
-` - don't bother with signing check if 16 bits of hash don't match.
- - only V3 signatures for now.
- - wire --nodigest/--nosignature options to checksig/query/verify modes.
- - splint annotations, signature cleanup.
- - drill ts/fi through verify mode, add methods to keep fi abstract.
- - use mmap when calculating file digests on verify, ~20% faster.
- - permit --dbpath and --root with signature (i.e. --import) modes.
- - beecrypt: add types.h, eliminate need for config.gnu.h.
- - rescusitate --rebuild.
- - use rpmdb-redhat to suggest dependency resolution(s).
- - merge conflicts into problems, handle as transaction set variable.
- - use build time to choose one of multiple alternative suggestions.
- - add --nosuggests to disable suggested resolutions.
- - attempt to make peace with automake-1.6.1, autoconf-2.53.
- - rip out two layers of dbN gook, internal Berkeley db is here to stay.
- - eliminate db1 support.
- - enable CDB by default.
- - use DBT_DB_MALLOC to eliminate re-malloc'ing header blobs.
- - rework most of rpmdb.c prepatory to implementing duplicates.
- - fix: 2 memory leaks in headerSprintf.
- - fix: db mire's access out-of-bounds memory.
- - plug install mode leaks.
- - opaque (well mostly) rpmTransactionSet using methods.
- - Grand Renaming of rpm data types.
- - fix: synthesize unpacking progress callbacks for packages w/o files.
- - python: add rpmds/rpmfi/rpmts methods.
- - python: re-enable rpm-python sub-package.
- - fix: resurrect "()(64bit)" markings using objdump.
- - python: add rpmal/rpmte/rpmfd methods.
- - perl: drop cpanflute and cpanflute2, will be in Chip's CPAN package.
- - python: eliminate legacy db methods, add ts.dbMatch method.
- - fix: use getgrnam, not getpwnam, to convert gid -> group.
- - fix: avoid sign extension, use only 16 bits, when verifying rdev.
- - python: separate {add,del}Macro methods, prepare for macro dictionary.
- - i18n: copy current production PO files to top-of-stack.
- - python: include rpmdb module, renamed from bsddb3.
- - use /etc/rpm/platform (if it exists), rather than uname(2), for arch.
- - python: portability fiddles (#54350).
- - check inodes (but not blocks) on FAT file systems (#64256).
- - add /usr/lib/rpm/redhat/* per-vendor configuration.
- - remove build mode compatibility aliases, documented and gone.
- - document digital signature verification in rpm.8.
- - fix: separate existence and number checks for problems found (#66552).
- - beecrypt: merge changes from beecrypt-2.3.0.
- - beecrypt: merge doxygen markup with rpmapi doco.
- - beecrypt: revert cpu/arch compile option mixup (#66752).
- - ix86: make sure that rpm can verify prelinked shared libraries.
- - don't install /usr/lib/rpm/redhat per-vendor configuration anymore.
- - add translated man pages from PLD.
- - resurrect libelf with Elf64, prelink verify should work everywhere.
- - fix: reading macro files can corrupt memory if BUFSIZ is teensy.
- - fix: assertion failure iff incomplete package install (#66837).
- - python: link internal libelf (if used) directly into rpmmodule.so.
- - use rpmdb-redhat for suggestions if/when configured (#67430).
- - disambiguate failures to import (with error messages, duh).
- - fix: multiple relocations (#67596).
- - add --build/--program-prefix, delete libtoolize, from %configure.
- - find-lang.sh: make sure that mo pattern matches leading '/' (#67368).
- - disambiguate added/installed dependency failures (#50388).
- - rescusitate remote ftp globs (#67678).
- - open rpmdb early RDONLY, reopen later RDWR, avoid signed srpm noise.
- - turn off annoying gpg secmem warning.
- - warn only once for each NOKEY/UNTRUSTED key id.
- - factor common options into table, add rpmcliInit() and rpmcliFini().
- - add preliminary rpmgraph(8) and rpmcache(8) executables to rpm-devel.
- - use rpmfi in showQueryPackage(), eliminating headerGetEntry().
- - fix: forgot lazy open of database on --freshen path (#67907).
- - proof-of-concept rpmcache functionality.
- - fix: do lazy open of database in rpmtsInitDB() (#67994).
- - update rpmcache.8.
- - fix: permit deletions of added packages (#67108).
- - placeholders for manifest constants for SuSE patch packages.
- - fix: repair 2ndary match criteria with rpmdb iterators.
- - update for sv.po.
- - display signature details using rpm -qi.
- - skip signing packages already signed with same key (#62118).
- - install rpmal.h and rpmhash.h, implicit rpmps.hinclude, for now.
- - revert headerFree/headerLink/headerUnlink debugging.
- - popt: mingw32 portability configure check (#67911).
- - teach gendiff about unreadable files (#42666).
- - python: sanity check fixes on rpmts/rpmte methods.
- - have rpmdb-redhat autoconfigure rpm to use %%_solve_dbpath.
- - popt: parse file into string of options (#56860).
- - version added to *.la dependency libraries (#69063).
- - expose digests in rpmio API, but hide internal beecrypt API (#68999).
- - add methods to make signature handling opaque wrto rpmts.
- - verify signatures/digests retrieved through rpmdbNextIterator().
- - imbue %ghost with missingok attribute with --verify (#68933).
- - fix: segfault if given a text file as 2nd arg to -Uvh (#69508).
- - python: add ts.hdrCheck(), ts.rebuildDB() methods.
- - python: iterating on an ts object returns transaction elements now.
- - add yellowdog as vendor.
- - python: remove the old initdb/rebuilddb methods, use ts.fooDB().
- - python: 1st crack at backport to 1.5.2.
- - popt: fix --usage (#62234).
- - fix: --repackage repaired (#67217).
- - fix: rpm2cpio disables signature checks (i.e. same behavior).
- - popt: display sub-table options only once on --usage.
- - wire --nosignatures et al as common options, rework CLI options.
- - python: don't segfault in ts.GetKeys() on erased packages.
- - update trpm.
- - factor all mode-specific options into mode-specific tables.
- - treat an unspecified epoch as Epoch: 0 everywhere.
- - detect athlon/duron with CMOV (PLD).
- - prevent stale locks in __db files by closing databases on signals.
- - make --querytags a common option, fix errant regex (#70135).
- - db3: increase mpool and cachesize, compile w/o --enable-debug.
- - configurable (default off) build failure if missing %%doc files (PLD).
- - configurable (default off) build failure iff unpackaged files (PLD).
- - change from default off to default on.
- - python: methods to disable all new features for benchmarking.
- - preserve rpmdb file attributes across --rebuilddb (#70367).
- - fix: identify athlon with 3DNOWEXT as "athlon", not "i786" (#70539).
- - fix: repair --root with --verify (#70527).
- - fix: signed pubkeys were imported incorrectly (#68291).
- - include tgpg script to verify signatures using only gpg.
- - check header blobs on export (i.e. rpmdbAdd()).
- - enable iterator header blob checks for install/erase modes.
- - python: _vsflags_up2date macro to configure verify signature flags.
- - resurrect --rollback.
- - renumber the callback types to be an orthogonal bit mask.
- - provide repackage progress callbacks, compression is slow.
- - fix: don't repackage %%ghost files.
- - add --predefine to define macros before reading macro configuration.
- - python: bare bones rollback bindings.
- - python: enable threads on callbacks and longish rpmlib calls.
- - python: expose RPMTAG_SOURCEPACKAGE to identify source headers.
- - python: eliminate rpm.headerFromPackage() tuple return, deprecated.
- - python: add ts.hdrFromFdno(fdno) method.
- - fix: check for lead magic, better error message on failure (#69751).
- - python: the death of rpmdb-py.[ch], use ts.fooDB() methods instead.
- - python: the death of rpm.headerFromPackage(), use ts.hdrFromFdno().
- - python: permit direct ts.dbMatch() python iterations.
- - python: the death of rpm.checksig(), use ts.hdrFromFdno() instead.
- - add bitmask for precise control of signature/digest verification.
- - python: bindings to import pubkeys and display openpgp packets.
- - fix: src.rpm installs need fd pos at payload.
- - python: add return codes for rollbacks and fooDB methods.
- - avoid generating fingerprints for locale/zoneinfo sub-directories.
- - python: add (optional) ts.check() callback.
- - python: include instance in IDTXload, filename in IDTXglob, return
- - python: argument to ts.addErase (if integer) deletes that instance.
- - python: rpmmi methods to return this instance, and number of members.
- - supply transitive closure for CLI packages from rpmdb-redhat database.
- - fix: rebuilddb stat'ed target, not source, for rename sanity.
- - create /var/lib/rpm if non-existent in, say, a chroot.
- - erased packages are now repackaged into /var/spool/repackage.
- - fix: rebuilddb stat'ed target, not source, for rename sanity, take 2.
- - python: explicit method to set transFlags.
- - python: stuff package name into a string for repackage callbacks.
- - rollback: re-create empty transaction set for multiple rollbacks.
- - fix: %%basename typo (Dmitry V. Levin<ldv@altlinux.org>).
- - fix: queryformat segfaults (Dmitry V. Levin<ldv@altlinux.org>).
- - add --with-efence to configure, check install/upgrade with efence.
- - beecrypt: short hex string conversion overflows target buffer.
- - mark "successors only" packages in transaction.
- - reap scriptlets with SIGCHLD handler.
- - rename PSM_t to rpmpsm, add methods and refcounts to manage.
- - remove %%configure/%%makeinstall from arch-os/macros, default is OK.
- - don't export MALLOC_CHECK_ to scriptlets.
- - squeaky clean memory leak checking.
- - always malloc rpmfi structure, refcounts are correct in rpmtsRun().
- - skip redundant /sbin/ldconfig scripts on upgrade (if possible).
- - python: stupid typo broke ts.check().
- - fix: add epoch to "already installed" check.
- - check for interrupt during iteration.
- - python: add ts.setProbFilter() method, remove ts.run() argument.
- - fix: region trailer offset sanity check wrong (#71996).
- - fix: don't stop if db1 database is currently in /var/lib/rpm (#72224).
- - add a macro to create a sub-package with debugging symbols.
- - merge signature returns into rpmRC.
- - python: exceptions on NOKEY/NOTTRUSTED.
- - python: don't remap NOKEY/UNTRUSTED to OK.
- - beecrypt: change local absolute symbols to defines for prelinking.
- - update ru.po.
- - fix: handle NOKEY/NOTTRUSTED returns as if OK, always return header.
- - portability: carry libelf in src rpm, include signal.h.
- - fix: segfault with --checksig, plug memory leak (#72455).
- - rpm-4.1 release candidate.
- - requirement on libelf >= 0.8.2 to work around incompatible soname (#72792).
- - fix: common sanity check on headers, prevent segfault (#72590).
- - limit number of NOKEY/UNTRUSTED keys that will be warned once.
- - libadd -lelf to rpmdb (#73024).
- - portability: non-linux is easier, more to do (#72893).
- - fix: SIGCHLD reaper race (#73134).
- - fix: don't exit with open cursor, there be a stale lock.
- - fix: check for signal induced exit more often (#73193).
- - reinterpret the _unsafe_rollbacks macro as earliest rollback.
- - fix: always do rpmalMakeIndex.
- - fix: resurrect --triggers (#73330).
- - python: typo in NOKEY exception string.
- - fix: parse pgp packets more carefully.
- - fix: parse header data more carefully.
- - fix: register SIGCHLD handler before forking (#73134).
- - better diagnostics on failed header parsing.
- - lclint clean.
- - rpm-4.1 release.
- - fix: make sure that psm->child pid is set before SIGCHLD is handled.
- - fix: use size_t consistently, avoid segfault on ia64.
- - use %%{_lib} for libraries.
- - fix: permit build with --disable-nls (#76258).
-
-4.0.3 -> 4.0.4:
- - solaris: translate i86pc to i386 (#57182).
- - fix: %GNUconfigure breaks with single quotes (#57264).
- - fix: typo in find-requires.
- - tru64 compiler message cleanup.
- - add buildarch lines for hppa (#57728).
- - sparc: make dbenv per-rpmdb, not per-dbi.
- - handle lazy db open's in chroot with absolute path, not prefix strip.
- - Depends should use CDB if configured.
- - autodetect python 1.5/2.2.
- - make rpm-perl package self-hosting (#57748).
- - permit gpg/pgp/pgp5 execs to be reconfigured.
- - fix: signing multiple times dinna work, discard immutable region.
- - remove poptmodule.so for separate packaging.
- - permit subset installs for %lang colored hardlink file sets.
- - missing key(s) on keyring when verifying a signature is now an error.
- - remove dependency whiteout.
- - calculate rpm-4.1 ordering/orientation metrics in rpmdepOrder().
- - sync popt and rpmio with rpm-4.1, rpmio has OpenPGP API.
- - sync rpmdb and build with rpm-4.1, lots of splint annotations.
- - add :armor and :base64 query format qualifiers for binary signatures.
- - fix: query format qualifiers needed header.c merge.
- - fix: query format qualifiers needed header.c merge.
- - ppc64 arch added (#58634,#58636).
- - turn on auto-generated perl requirements (#58519, #58536, #58537).
- - fix: %exclude functional (again).
- - trap SIGILL for ppc64 inline asm voodoo fix from cross-dressed ppc32.
- - fix: fancy hash fiddles if not a tty.
- - fix: handle /.../ correctly in rpmCleanPath().
- - transaction rollback code in rpmRollback().
- - Red Hat 6.2 portability cruft.
- - legacy: configurable whiteout for known Red Hat dependency loops.
- - perl.req: don't mis-generate dependencies like perl(::path/to/foo.pl).
- - permit args to be hidden within %__find_{requires,provides}.
- - a couple more perl.{prov,req} fiddles.
- - macro for %files, always include %defattr(), redhat config only.
- - fix: drop header region when writing repackaged legacy header.
- - bail on %files macro.
- - transaction rollbacks are functional.
- - generate index for pkgid (aka Sigmd5) tag, query/verify by pkgid.
- - generate index for hdrid (aka Sha1header) tag, query/verify by hdrid.
- - generate index for fileid (aka Filemd5s) tag, query/verify by fileid.
- - query/verify by install transaction id.
- - rpm-4.0.4 release candidate.
- - add cpanflute2, another perl.req fiddle.
- - reapply Berkeley DB patch #4491.
- - make --addsign and --resign behave exactly the same.
- - *really* dump signature header immutable region.
- - speedup large queries by ~50%.
- - revert to presentation ordering Yet Again (#62158).
- - non-glibc: on upgrade, mergesort is much faster than quicksort.
- - fix: queries that evaluated to "" incorrectly returned NULL.
- - fix: packages produced by rpm-4.0 dinna merge signature tags.
- - fix: rpmdb iterator memory leak in python bindings.
- - fix: include <sys/time.h> for 6.2 python modules.
- - remove vestiges of mipseb arch (#62408).
-
-4.0.2 -> 4.0.3:
- - update per-interpreter dependency scripts, add sql/tcl (#20295).
- - fix: rpmvercmp("1.a", "1.") returned -1, not +1 (#21392).
- - add cpuid asm voodoo to detect athlon processors.
- - add %exclude support (i.e. "everything but") to %files.
- (Michael (Micksa) Slade" <micksa@knobbits.org>)
- - add --with/--without popt glue for conditional builds(Tomasz Kloczko).
- - python: strip header regions during unload.
- - add -g to optflags in per-platform config.
- - permit confgure/compile with db3-3.2.9.
- - permit manifest files as args to query/verify/install modes.
- - fix: parameterized macro segfault (Jakub Bogusz <qboosh@pld-linux.org>)
- - fix: i18n tags in rpm-2.5.x had wrong offset/length (#33478).
- - fix: AIX has sizeof(uint_16) != sizeof(mode_t) verify cast needed.
- - fix: zero length hard links unpacked incorrectly (#34211).
- - fix: --relocate missing trailing slash (#28874,#25876).
- - fix: --excludedoc shouldn't create empty doc dir (#14531).
- - fix: %_netsharedpath needs to look at basenames (#26561).
- - fix: --excludepath was broken (#24434).
- - fix: s390 (and ppc?) could return CPIOERR_BAD_HEADER (#28645).
- - fix: Fwrite's are optimized out by aggressive compiler(irix) (#34711).
- - portability: vsnprintf/snprintf wrappers for those without (#34657).
- - more info provided by rpmdepOrder() debugging messages.
- - merge (compatible) changes from top-of-stack into rpmlib.h.
- - cpio mappings carry dirname/basename, not absolute path.
- - fix: check waitpid return code.
- - remove support for v1 src rpm's.
- - re-position callbacks with ts/fi in cpio payload layer.
- - state machines for packages (psm.c) and payloads (fsm.c)
- - add --repackage option to put erased bits back into a package.
- - fix: (ppc) copy va_list in loop (#36845).
- - cpanflute perl dependency needs explicit epoch (#37034).
- - regenerate rpm.8 man page from docbook glop (in max-rpm).
- - lib/depends.c: diddle debugging messages.
- - fix: readlink return value clobbered by header write.
- - fix: ineeded count wrong for overlapped, created files.
- - globalize _free(3) wrapper in rpmlib.h, consistent usage throughout.
- - internalize locale insensitive ctype(3) in rpmio.h.
- - boring lclint annotations and fiddles.
- - transaction iterator(s) need to run in reverse order on pure erasures.
- - erasures not yet strict, warn & chug on unlink(2)/rmdir(2) failure.
- - more boring lclint annotations and fiddles.
- - yet more boring lclint annotations and fiddles.
- - still more boring lclint annotations and fiddles.
- - enough lclint annotations and fiddles already.
- - fix: specfile queries with BuildArch: (#27589).
- - fix: debugging message displays header keys (#38454).
- - use internal db-3.2.9 sources to build by default.
- - don't build db1 support by default.
- - create rpmdb.la so that linkage against rpm's db-3.2.9 is possible.
- - rpm database has rpm.rpm g+w permissions to share db3 mutexes.
- - expose more db3 macro configuration tokens.
- - move fprint.[ch] and hash.[ch] to rpmdb directory.
- - detect and fiddle incompatible mixtures of db3 env/open flags.
- - add DBI_WRITECURSOR to map to db3 flags with CDB database model.
- - add rpmdbSetIteratorRewrite to warn of pending lazy (re-)writes.
- - harden rpmdb iterators from damaged header instance segfaults.
- - add cron/logrotate scripts to save installed package filenames.
- - upgrade to db-3.3.4.
- - fix: filter duplicate package removals (#35828).
- - add armv3l arch.
- - fix: i18n strings need 1 on sucess return code (#41313).
- - fix: skip %ghost files when building packages (#38218).
- - headerFree() returns NULL, _free is C++ safe.
- - remove all header region assertion failures, return NULL instead.
- - perform db->verify when closing db files.
- - eliminate db-1.85 and db-2.x configuration.
- - fix: popt arg sanity checks broken, optarg != optArg.
- - fix: popt range checks on floats/doubles broken.
- - popt: return POPT_ERROR_ERRNO on config open/read/close failure.
- - fix: popt exec doesn't add '--', --target et al no longer need '='.
- - fix: popt consume-next-arg "!#:+" w/o side effect (#41956).
- - fix: for busted db1, attempt chain reconnection to following record.
- - return multiple suggested packages
- (Pawel Kolodziej <pawelk@pld.org.pl>).
- - fix: return suggested packages when using Depends cache.
- - merge sparc64/ia64 fiddles back into linux.{req,prov}.
- - automagically generate perl module dependencies always.
- - fix: lclint fiddles broke uCache initialization (#43139).
- - always use db cursors.
- - permit duplicates for btree indices.
- - document build modes in rpmbuild.8, rpmbuild is born.
- - default to dbenv with mpool, --rebuilddb with nofsync is much faster.
- - fix: QUERY_FOR_LIST file count clobbered.
- - create top level rpmcli API, factor top level modes into popt tables.
- - popt: add POPT_BIT_SET/POPT_BIT_CLR to API.
- - autogen.sh checks for latest libtool-1.4 and automake-1.4-p2.
- - rpm --verify reports failure(s) if corresponding tag is not in header.
- - rpm --verify honors %config(missingok), add -v for legacy behavior.
- - remove dead code frpm popt table reorg.
- - more CLI typedefs/prototypes moved from rpmlib.h to rpmcli.h.
- - rpm --verify skips files in non-installed states.
- - rpm --verify skips content checks for %ghost files.
- - rpm --verify displays config/doc/gnost/license/readme atrrs for files.
- - rpm --verify checks immutable header region digest if available.
- - rpmbuild adds header region digest (SHA1 as string).
- - use rpmTag* typedefs in new hge/hae/hme/hre header vectors.
- - remove rpmrc Provides: Yet Again, use virtual packages.
- - dump cursor debugging wrappers.
- - rpm --verify can disable rpmFileAttr checks.
- - add rpmdbSetIteratorRE() for regex matching in database iterators.
- - permit rpm -qa to take RE args applied to name tag.
- - permit dbiFindMatches() to use version/release patterns.
- - eliminate all uses of rpmdbSetIterator{Version,Release}.
- - fix: db1 end-of-file not detected in legacy compatible way.
- - fix: remove (harmless) chown error message from %post.
- - add --target/--host to %configure, add example cross-build/config.site
- scripts to /usr/lib/rpm <arjanv@redhat.com> (#44581).
- - rpmdb iterator selectors permit default/strcmp/regex/glob matching.
- - rpmdb iterator selectors permit negative matches.
- - alpha: don't add "()(64bit)" dependency markers.
- - ia64/sparc: <arch>.{req,prov} identical to linux.{req,prov}.
- - add "rpmlib(ScriptletInterpreterArgs)" to track
- %post -p "/sbin/ldconfig -n /usr/lib"
- incompatibilities.
- - popt: add POPT_ARGFLAG_SHOW_DEFAULT to display initial values(#32558).
- - popt: add POPT_CONTEXT_ARG_OPTS for all opts to return 1 (#30912).
- - fix: fsm reads/writes now return error on partial I/O.
- - fix: Ferror returned spurious error for gzdio/bzdio.
- - check for API/ABI creep, diddle up some compatibility.
- - preliminary abstraction to support per-header methods.
- - finalize per-header methods, accessing headerFoo through vector.
- - make package ordering loop messages debug, not warning.
- - remove {ia64,sparc}-linux.{prov,req}, changes merged into linux.*.
- - fix: partial sets of hardlinked files permitted in payload.
- - fix: mark rpmdb files with %config to prevent erasure on downgrade.
- - work around a (possible) compiler problem on ia64.
- - fix: rpm -qlv link count for directories dinna include '..'.
- - fix: rpm -qlv size for directories should be zero.
- - add --noghost to filter non-payload files from rpm -qlv output.
- - add %{_gnu} macro to append "-gnu" to %{_target_platform} to
- support --target/--host flavored %configure. Legacy behavior
- available by undefining %{_gnu}.
- - propagate %{_gnu} to per-platform configuration.
- - fix: parameterized macros with massive mumber of options need
- "optind = 1" "Dmitry V. Levin" <ldv@alt-linux.org>.
- - add athlon per-platform configuration.
- - remove executable bit to disable autogenerated perl requires until
- perl provides can be vetted.
- - disable per-platform %%configure use of %%_gnu until libtool package
- stabilizes.
- - fix: permit partially enumerated hardlink file sets during build.
- - fix: resurrect rpm signature modes.
- - fix: sanity checks on #tags (<65K) and offset (<16Mb) in header.
- - fix: add -r to useradd to prevent /etc/skel glop (#46215).
- - fix: disambiguate typedef and struct name(s) for kpackage.
- - update intl dirs to gettext-0.10.38.
- - fix: sanity check for header size added in headerCopyLoad() (#46469).
- - fix: redundant entries in file manifests handled correctly (#46914).
- - map uid/gid from metadata into payload headers.
- - add removetid to header during --repackage.
- - expose rpmShowProgress() and rpmVerifyDigest() in rpmcli.h.
- - portability: avoid st_mtime, gendiff uses basename, etc (#47497).
- - glibc-2.0.x has not __va_copy().
- - popthelp.c: don't use stpcpy to avoid portability grief (#47500).
- - permit alias/exec description/arg text to be set from popt config.
- - python: rhnLoad/rhnUnload to check header digest.
- - package version now configureable, default v3.
- - rename rpm libraries to have version with libtool -release.
- - fix: -i CLI context broken Yet Again.
- - unlink all __db.nnn files before 1st db open.
- - python bindings should not segfault when fed bad data.
- - fix: adjust arg count for --POPTdesc/--POPTargs deletion.
- - add linux per-platform macro %_smp_mflags <sopwith@redhat.com>.
- - document more popt aliases for --help usage.
- - remove --tarbuild from man page(s), use -t[abpcils] instead (#48666).
- - fix: scope multi-mode options like --nodeps correctly (#48825).
- - isolate cdb access configuration (experimental, use at your own risk).
- - fix: hard fail on locked dbopen if CDB locking not in use.
- - fix: dbconfig with mp_mmapsize=16Mb/mp_size=1Mb for
- "everything ENOSPC" failure check.
- - fix: don't total hard linked file size multiple times (#46286).
- - add %dev(type,major,minor) directive to permit non-root dev build.
- - fix: _smp_flags macro broken.
- - python: bind rhnUnload differently.
- - fix: rescusitate --querytags.
- - fix: short aliases broken (#49213).
- - python: "seal" immutable region for legacy headers in rhnUnload() .
- - python: add poptmodule.so bindings.
- - fix: %dev(...) needs to map rdev and mtime from metadata.
- - resurrect --specedit for i18n.
- - fix: 4 memory leaks eliminated.
- - fix: yet another segfault from bad metadata prevented.
- - add sha1 test vectors, verify on ix86/alpha/sparc.
- - add (but disable for now) rpm-perl subpackage from Perl-RPM.
- - python: parameterize with PYVER to handle 1.5 and/or 2.1 builds.
- - add build dependency on zlib-devel (#49575).
- - enable rpm-perl subpackage.
- - add pmac/ppciseries/ppcpseries varieties to ppc arch family.
- - include tdigest.c tkey.c and trpmio.c to "make dist".
- - re-enable dependency resolution source from package NVR.
- - rename pmac to ppcmac.
- - ia64: revert -O0 compilation.
- - upgrade to db-3.3.11 final.
- - fix: don't segfault when presented with rpm-2.4.10 packaging (#49688).
- - fix: --noscripts is another multimode option.
- - add tmpdir to configure db3 tmpdir into chroot tree.
- - permit lazy db opens within chroot.
- - fix: diddle dbenv path to accomodate backing store reopen in chroot.
- - add support for mips (#49283).
- - add __as, _build_arch, and __cxx macros (#36662, #36663, #49280).
- - detailed build package error messages.
- - fix: i18n tags not terminated correctly with NUL (#50304).
- - add explicit casts to work around a s390 compiler problem.
- - fix: autoconf glob tests (#50845).
- - portability: some compilers squawk at return ((void) foo()) (#50419).
- - remove fdFileno() from librpmio, use inline version instead (#50420).
- - fix: linux find-requires needs quotes around [:blank:].
- - remove /var/lib/rpm/__db* cache files if %__dbi_cdb is not configured.
- - python: add hiesenbug patch.
- - add legacy (compile only) wrappers for fdFileno et al.
- - add -D_REENTRANT (note rpmlib is still not thread safe).
- - fix: segfault on headerFree given malicious data.
- - fix: don't verify hash page nelem.
- - better error messages for verification failures.
- - include directory /usr/lib/rpm in rpm package.
- - always use dl size in regionSwab() return.
- - ppc: revert ppcmac to ppc.
- - ppc: autoconf test for va_copy.
- - python: add exception to detect bad data in hdrUnload.
- - change dir creation message from warning to debug for now.
- - verify perms (but not mode) on %ghost files.
- - headers without RPMTAG_NAME are skipped when retrieved.
- - within a region, entries sort by address; added drips sort by tag.
- - fix: error message on failed package installs resurrected.
- - python: memory leaks in headerLoad/headerunload bindings.
- - python: retrofit sha1 digest using RPMTAG_SHA1RHN.
- - python: change rhnUnload bindings.
- - python: teach rhnLoad about RPMTAG_SHA1RHN as well.
- - fix: Provides: /path did not work with added packages (#52183).
- - fix: progress bar scaling did not include source rpm count.
- - fix: hash page nelem failure to verify.
- - fix: initialize "verify" transaction stepName with -vv (#53582).
- - fix: ftp remote globs broken (#46892).
- - popt: clarify X consortium license in popt.3 man page.
- - close/discard Depends index after rpmdepCheck() use.
- - lclint-3.0.0.15 fiddles.
- - fix: harmless typo in db3 chroot hack.
- - fix: big-endian's with sizeof(time_t) != sizeof(int_32) mtime broken.
- - fix: add Korean message catalogs (#54473).
- - add RPHNPLATFORM and PLATFORM tags.
-
-4.0 -> 4.0.[12]
- - fix: avoid calling getpass twice as side effect of xstrdup macro
- (katzj@linuxpower.org) (#17672).
- - order packages using tsort, clipping Requires:'s in dependency loops.
- - handle possible db3 dependency on -lpthread more gracefully.
- - bump popt version to 1.6.1.
- - fix: more (possible) xstrdup side effects.
- - fix: rpm2cpio error check wrong on non-libio platforms.
- - fix: runTriggers was not adding countCorrection.
- - add rpmGetRpmlibProvides() to retrieve rpmlib(...) provides
- "Pawel A. Gajda" <mis@k2.net.pl>.
- - syntax to specify source of Requires: (PreReq: now legacy).
- - rip out rpm{get,put}text, use getpo.sh and specspo instead.
- - fine-grained Requires, remove install PreReq's from Requires db.
- - fix: duplicate headerFree() on instalBinaryPackage() error return.
- - fix: work around for (mis-compilation?!) segfaults on signature paths.
- - fix: segfault on exit of "rpm -qp --qf '%{#fsnames}' pkg" (#20595).
- - hpux w/o -D_OPEN_SOURCE has not h_errno.
- - verify MD5 sums of payload files when unpacking archive.
- - hide libio lossage in prototype, not API.
- - add support for SHA1 as well as MD5 message digests.
- - don't verify src rpm MD5 sums (yet).
- - md5 sums are little endian (no swap) so big endian needs the swap.
- - add doxygen and lclint annotations most everywhere.
- - consistent return for all signature verification.
- - use enums for almost all rpmlib #define's.
- - API: change rpmProblem typedef to pass by reference, not value.
- - unify rpmError and rpmMessge interfaces through rpmlog.
- - collect and display rpm build error messages at end of build.
- - don't trim leading ./ in rpmCleanPath() (#14961).
- - detect (still need to test) rdonly linux file systems.
- - check available inodes as well as blocks on mounted file systems.
- - pass rpmTransactionSet, not elements, to installBinaryPackage et al.
- - add cscope/ctags (Rodrigo Barbosa<rodrigob@conectiva.com.br>).
- - remove getMacroBody() from rpmio API.
- - add support for unzip <rodrigob@conectiva.com.br>
- - add brp-strip-shared script <rodrigob@conectiva.com.br>.
- - better item/task progress bars <rodrigob@conectiva.com.br>.
- - load headers as single contiguous region.
- - add region marker as RPM_BIN_TYPE in packages and database.
- - fix: don't headerCopy() relocatable packages if not relocating.
- - merge signatures into header after reading from package.
- - RPM_BIN_TYPE malloc'ed when retrieved through headerGetEntry().
- - add headerFreeData() to free any data malloc'ed during retrieval.
- - preserve exact image of original header when installing/upgrading.
- - add missing headerFree for legacy signature header.
- - fix: removed packages leaked DIRINDEXES tag data.
- - reload tags added during install when loading header from rpmdb.
- - avoid brp-compress hang with both compressed/uncompressed man pages.
- - improved find-{requires,provides} for aix4/hpux/irix6/osf.
- Tim Mooney<mooney@dogbert.cc.ndsu.NoDak.edu>
- - portability: remove use of GNU make subst in lib/Makefile (Joe Orton).
- - python: bind package removal (#21274).
- - autoconfigure building python bindings.
- - autoconfigure generating rpm API doco.
- - fix: don't fdFree in rpmVerifyScript, rpmtransFree does already.
- - use package version 3 if --nodirtokens is specified.
- - add package names to problem sets early, don't save removed header.
- - make sure that replaced tags in region are counted in headerSizeof().
- - support for dmalloc debugging.
- - filter region tags in headerNextIterator, exit throut headerReload.
- - add rpmtransGetKeys() to retrieve transaction keys in tsort'ed order.
- - python bindings for rpmtransGetKeys().
- - fix: include alignment in count when swabbing header region.
- - handle added dirtoken tags (mostly) correctly with header regions.
- - add FHS doc/man/info dirs, diddle autoconf goo.
- - fix: headerUnload handles headers w/o regions correctly on rebuilddb.
- - resurrect rpmrc Provides: as well as implicit dependency on packge
- info.
- - change dependency loop message to RPMMESS_WARNING to use stderr, not
- stdout.
- - fix: (transaction.c) assume file state normal if tag is missing.
- - fix: failed signature read headerFree segfault.
- - fix: revert ALPHA_LOSSAGE, breaks 6.2/i386.
- - fix: synthesized callbacks for removed packages have not a pkgkey.
- - identify install scriptlet failures with the name of the scriptlet.
- - handle install chroot's identically throughout the install process.
- - add rpmlib(HeaderLoadSortsTags) for tracking header regions
- "just in case".
- - create _tmppath on the fly if not present.
- - remove /etc/rpm/macros.db1 configuration file if db3 rebuilt.
- - remove overly verbose dbiOpen() error messages, no longer needed.
- - whiteout mozilla loop for 7.1.
- - immutable headers, once installed by rpm3, need to lose immutablity.
- - fix: removed headers from db need a headerCopy().
- - send query/verify output through rpmlog().
- - resurrect rpmErrorSetCallback() and rpmErrorString().
- - use malloc'ed buffer for large queries.
- - fix: avoid FAT and other brain-dead file systems that have not inodes.
- - fix: hack around alpha mis-compilation signature problems.
- - rpmmodule.c(handleDbResult): return empty list when nothing matches.
- - (non-linux): move stubs.c to rpmio (#21132).
- - (python): bind initdb (#20988).
- - (popt): fix float/double handling (#19701).
- - (popt): non-linux needs <float.h> (#22732).
- - (popt): add POPT_ARGFLAG_OPTIONAL for long options with optional arg.
- - (popt): diddle auto-help to include type of arg expected.
- - use popt autohelp for rpm helper binaries.
- - fix: avoid locale issues with strcasecmp/strncasecmp (#23199).
- - remove almost all explicit uses of stderr in rpmlib using rpmError().
- - fix: pass scriptlet args, as in %post -p "/sbin/ldconfig -n /lib".
- (Rodrigo Barbosa).
- - fix: 3 packages from Red Hat 5.2 had bogus %verifyscript tag.
- - tsorted packages processed in successor count order.
- - fix: resurrect --excludepath (#19666).
- - fix: digests on input FD_t dinna work.
- - fix: remove rebuilddb debugging leakage.
- - successors from tsort are processed in presentation order.
- - fix: find-requires.perl needed update (#23450).
- - fix: don't hang on build error.
- - fix: remove "error: " prefix from signature verification message.
- - hack: permit installer to determine package ordering using 1000003 tag.
- - fix: extra newline in many error messages (#23947).
- - fix: rpm -Va with db1 needs per-iterator, not per-index, offset.
- - add install/remove transaction id tags.
- - tsort prefers presentation order.
- - 1st crack at Mandrake specific per-platform macros.
- - fix: insure that %lang scopes over hard links correctly.
- - fix: rpmCleanPath was nibbling at .. in macrofiles incorrectly.
- - fix: check waitpid return code.
- - fix: make a copy of retrieved header before loading.
- - fix: diddle exit code for attempted installs of non-packages (#26850).
- - python binding diddles to reduce installer memory footprint by
- delayed loading of file info.
- - fix: remove fixed size buffer on output path (#26987,#26332).
- - resurrect rpmErrorCode in the API for Perl-RPM.
- - fix: permit packages to differ by 0 or 32 bytes (#26373).
- - fix: permit HEADER_IMMUTABLE tag queries.
- - split db configuration into separate file.
- - portability changes from Joe Orton <jorton@redhat.com> et al.
- - (alpha): rip out ALPHA_LOSSAGE now that gcc-2.96-76 has fix (#28509).
- - (popt): use sprintf rather than snprintf for portability.
- - (sparc) disable MD5 sum checks during install.
- - (db1) plug largish memory leak in simulated interface for falloc.c.
- - remove mozilla dependency white out, no longer needed.
- - fix: adjust for libio breakage in Red Hat 5.x with glibc-2.0.7-29.4.
- - map i686-like (i.e. w/o CMOV) platforms to better alternatives.
-
-3.0.6 -> 4.0
- - use DIRNAMES/BASENAMES/DIRINDICES not FILENAMES in packages and db.
- - API: change dbi to pass by reference, not value.
- - cram all of db1, db_185, and db2 interfaces into rpmlib.
- - convert db1 -> db2 on-disk format using --rebuilddb.
- - add db3 to the pile, isolate all with incremental link and vectors.
- - prefer db3 as default.
- - permit db3 configuration using macros.
- - create dbi from template rather than passed args.
- - use hashed access for package headers.
- - db3: save join keys in endian neutral binary format.
- - treat legacy falloc.c as "special" db[01] index for package headers.
- - API: pass *SearchIndex() length of key (0 will use strlen(key)).
- - API: remove rpmdb{First,Next}RecNum routines.
- - add explcit "Provides: name = [epoch:]version-release" to headers.
- - fix: cpio.c: pre-, not post-, decrement the link count.
- (from Fabrice Bellet <Fabrice.Bellet@creatis.insa-lyon.fr>)
- - make db indices as lightweight as possible, with per-dbi config.
- - db1.c will never be needed, eliminate.
- - API: merge rebuilddb.c into rpmdb.c.
- - API: replace rpmdbUpdateRecord with rpmdbSetIteratorModified.
- - API: replace rpmdbFindByLabel with RPMDBI_LABEL iteration.
- - API: replace rpmdbGetRecord with iterators.
- - API: replace findMatches with iterators.
- - Filter DB_INCOMPLETE on db->sync, it's usually harmless.
- - Add per-transaction cache of resolved dependencies (aka Depends).
- - Do lazy dbi{Open,Close} throughout.
- - Attempt fine grained dbi cursors throughout.
- - fix: free iterator *after* loop, not during.
- - fix: Depends needed keylen in dbiPut, rpmdbFreeIterator after use.
- - Rename db0.c to db1.c, resurrect db2.c (from db3.c).
- - simplify --last popt alias, date like -qi (bjerrick@easystreet.com).
- - fix: alloca'd memory used outside of scope (alpha segfault).
- - fix: define/eval options assumed sizeof(int) == sizeof(void *).
- - fix: sparc64 per-platform directory shouldn't be sparc64linux.
- - fix: (segfault) verify needs rpmdb while query does not.
- - add calculated nlink field to -qlv output (like ls -al).
- - detects and builds properly against the new fopencookie API in
- glibc 2.2.
- - change popt exec alias in oreder to exec rpm children.
- - split rpm into 5 pieces along major mode fault lines with popt glue.
- - turn on new, more complete version of %%configure.
- - add %%makeinstall analogue of new %%configure for autoconf packages.
- - mark packaging with version 4 to reflect filename/provide changes.
- - change next version from 3.1 to 4.0 to reflect package format change.
- - change %configure, add %makeinstall macros to handle FHS changes.
- - add optflags for i486 and i586.
- - fix: segfault with legacy packages missing RPMTAG_FILEINODES.
- - require db3 in default configuration.
- - create rpmio directory for librpmio.
- - make librpmio standalone.
- - fix: avoid clobbering db cursor in removeBinaryPackage.
- - expose cursors in dbi interfaces, remove internal cursors.
- - remove incremental link.
- - portability: sparc-sun-solaris2.5.1.
- - fix: don't count removed files if removed packages is empty set.
- - fix: permit '\0' as special case key (e.g. "/" in Basenames).
- - require --rebuilddb to convert db1 -> db3, better messages.
- - fix: open all db indices before performing chroot.
- - fix: typo in brp-compress caused i18n man pages not to compress.
- - API: uncouple fadio from rest of rpmio.
- - API: externalize legacy fdOpen interface for rpmfind et al.
- - put version on rpmpopt filename to avoid legacy filename collision.
- - change optflags for i386.
- - multilib patch, take 1.
- - add pre-transaction syscall's to handle /etc/init.d change.
- - don't bother saving '/' as fingerprint subdir.
- - prefix payload paths with "./", otherwise "/" can't be represented.
- - fix: compressFilelist broke when fed '/'.
- - fix: typo in --last popt alias (#12690).
- - fix: clean file paths before performing -qf (#12493).
- - remove build mode help from rpm.c, use rpmb instead.
- - fix: set multilibno on sparc per-platform config.
- - fix: legacy requires './' payload prefix to be omitted for rpm itself.
- - fix: remove verbose database +++/--- messages to conform to doco.
- - add S_ISLNK pre-transaction syscall test.
- - fix: initialize pretransaction argv (segfault).
- - fix: check rpmlib features w/o database (and check earlier as well).
- - rip out pre-transaction syscalls, more design is needed.
- - remove (dead) dependency checks on implicitly provided package names.
- - remove (dead) rpmdb API code in python bindings.
- - fix: make set of replaced file headers unique.
- - fix: don't attempt dbiOpen with anything but requested dbN.
- - create rpmbuild/rpmquery/rpmverify/rpmsign symlinks.
- - fix: look for any/all dbapi when rebuilding.
- - link rpm2cpio dynamically since cpio is linked dynamically.
- - fix: uniqify dependency problems when printing (#14034).
- - fix: segfault on erase if filestates is missing in header (#14679).
- - fix: popt POST callbacks typo.
- - fix: -Va broken, make db cursors per-iterator, not per-dbi.
- - fix: segfault when globbing on "" (#15593).
- - fix: rebuild db1 -> db3 ate 1st header (#16263).
- - translate rpm.8 man page (Peter Ivanyi <ivanyi@internet.sk>).
-
-3.0.6 -> 3.0.7
-
-3.0.5 -> 3.0.6
- - python bindings to query and verify signatures.
- - add callbacks on package erasure.
- - fix: preserve cpio errno when using Fclose with libio.
- - fix: initialize sigs everywhere in python header object.
- - popt: support for float/double args.
- - fix: honor --test when doing --freshen.
- - add alpha* architectures.
-
-3.0.4 -> 3.0.5
- - configure.in fiddles for BSD systems (Patrick Schoo).
- - solaris2.6: avoid bsearch with empty dir list (Ric Klaren - klaren@cs.utwente.nl)
- - include RPM-GPG-KEY in file manifest.
- - Add ia64 and sparc64 changes.
- - rpm.spec: add per-platform sub-directories.
- - FreeBSD fixes (bero@redhat.com).
- - handle version 4 packaging as input.
- - builds against bzip2 1.0
- - fix: resurrect symlink unique'ifying property of finger prints.
- - fix: broken glob test with empty build directory (Geoff Keating).
- - fix: create per-platform directories correctly.
- - update brp-* scripts from rpm-4.0, enable in per-platform config.
- - alpha: add -mieee to default optflags.
- - add RPMTAG_OPTFLAGS, configured optflags when package was built.
- - add RPMTAG_DISTURL for rpmfind-like tools (content unknown yet).
- - teach brp-compress about /usr/info and /usr/share/info as well.
- - update macros.in from rpm-4.0 (w/o dbi configuration).
- - fix: don't expand macros in false branch of %if (kasal@suse.cz).
- - fix: macro expansion problem and clean up (#11484) (kasal@suse.cz).
- - uname on i370 has s390 as arch (#11456).
- - python: initdb binding (Dan Burcaw <dburcaw@terraplex.com>).
- - internalize --freshen (Gordon Messmer <yinyang@eburg.com>).
- - support for separate source/binary compression policy.
- - support for bzip payloads.
- - fix: payload compression tag not nul terminated.
- - identify package when install scriptlet fails (#12448).
- - remove (unused) RPMTAG_CAPABILITY.
- - remove (legacy) use of RPMTAG_{OBSOLETES,PROVIDES} internally.
- - remove (legacy) support for version 1 packaging.
- - remove (legacy) support for converting gdbm databases.
- - eliminate unused headerGz{Read,Write}.
- - support for rpmlib(...) internal feature dependencies.
- - display rpmlib provides when invoked with --showrc.
- - fix: compare versions if doing --freshen.
- - disable rpmlib(VersionedDependencies) by defining _noVersionedDependencies.
-
-3.0.3 -> 3.0.4
- - use compressed filenames on install side.
- - start unifying FD types, CFD_t now gone.
- - check for memory leaks (almost all leaks are plugged).
- - fix: resurrect multiple target platform builds.
- - freshen.sh: detect when all packages are up to date (Ian Macdonald).
- - fix: typo in error message (#6858).
- - add/update dependency scripts (Ken Estes).
- - use directory tokens internally to reduce memory usage.
- - permit --whatprovides to lookup file dependencies.
- - fail to package if absolute symlink points within build root.
- - initial version of check-prereqs.
- - expose enough of legacy fdio interface to compile rpmfind/rpm2html.
- - fix: Fopen should use 0666 as default (umask will be applied later).
- - fix: default for rd_timeoutsecs is 1 sec (avoid ufdio assertion).
- - fix: new FILENAMES tags require package index, not pointer in lookups.
- - rename new FILENAMES tags to BASENAMES/DIRNAMES/DIRINDEXES.
- - fix: don't look at password when searching urlCache.
- - add contentLength sanity check on rpmdb headerWrite.
- - fix: fprint abort on stat("/", ...) in empty chroots.
- - perform glob on remote ftp query args.
- - fix: ftpAbort must close the data channel to read abort status.
- - perform glob on remote ftp install args.
- - fix: reload macros from cmd line when re-reading config files.
- - fix: compressFileList was over-generating dirNames.
- - fix: alAddPackage sorted dirNames too soon, destroying dirMapping.
- - expose enough of legacy fdio interface to compile gnorpm.
- - fix: missing strdup when overriding buildroot from command line
- argument (#1026,#5006).
- - diddle some names to keep my C++ brethern happy (i.e. kpackage port).
- - fix: add ufdSeek.
- - build popt (with libpopt.so*) as a sub-package of rpm.
- - split python bindings into a separate sub-package of rpm.
- - add ja translation and man pages (Kanda Mitsuru kanda@nn.iij4u.or.jp).
- - fix: fp.subDir was incorrectly set to NULL in sparse chroot's.
- - fix: manageFile needs to and with O_WRONLY(=1), not O_RDONLY(=0).
- - fix: resurrect failed glob error message during build.
- - add several BuildRoot FTW policies.
- - add manpage for gendiff (pbrown@redhat.com).
- - updated sv.po (goeran@uddeborg.pp.se) (#8349).
- - configurable PATH for install %pre/%post et al scriptlets.
- - use only %_install_langs, not LINGUAS/LANG when deciding to install.
- - configurable compression type/level for package payloads.
- - default value for %_install_langs is all.
- - fix: resurrect relative path's in fprint lookup queries.
- - extract spec files from bzip'ped tarballs too on tar builds.
- - add %_rebuilddbpath macro to permit rebuilding db in new location.
- - updated perl scripts (Ken Estes).
- - fix: on --rebuilddb, make sure new/old paths are not the same (#8752).
- - fix: on --erase, segfault caused by "" prefix.
- - explicitly expand file lists in writeRPM for rpmputtext.
- - {Free,Open}BSD find-{provides,requires} (suzukis@file.phys.tohoku.ac.jp).
- - new rpm-build package to isolate rpm dependencies on perl/bash2.
- - always remove duplicate identical package entries on --rebuilddb.
- - add scripts for autogenerating CPAN dependencies.
- - add sl.po from Primoz Peterlin <peterlin@biofiz.mf.uni-lj.si>.
- - updated sv.po from <goeran@uddeborg.pp.se>.
- - macro expansion (and absolute path) in %files -f arg (#9508,#9091).
- - permit cli setting of build root policies.
- - fix: filter excluded paths before adding install prefixes (#8709).
- - add i18n lookaside to PO catalogue(s) for i18n strings.
- - try for /etc/rpm/macros.specspo so that specspo autoconfigures rpm.
- - per-platform configuration factored into /usr/lib/rpm subdir.
- - sparc-sun-solaris2.6 portability check.
- - simpler hpux.prov script (Tim Mooney).
- - portability: skip bzip2 if not available.
- - portability: skip gzseek if not available (zlib-1.0.4).
- - portability: skip personality if not available (linux).
- - portability: always include arpa/inet.h (HP-UX).
- - portability: don't use id -u (Brandon Allbery).
- - portability: don't chown/chgrp -h w/o lchown.
- - portability: splats in rpm.spec to find /usr/{share,lib}/locale/* .
- - fix: better filter in linux.req to avoid ARM specific objdump output.
- - fix: use glibc 2.1 glob/fnmatch everywhere.
- - fix: noLibio = 0 on Red Hat 4.x and 5.x.
- - fix: typo in autodeps/linux.req.
- - configure noarch compatibility in rpmrc for ia64.
-
-3.0.2 -> 3.0.3
- - add --eval to find result of macro expansion.
- - add configure scaffolding to support rpm-4.0 packages.
- - include shared libs in rpm-devel (no versioning yet).
- - add epoch (as [0-9]*:version-release) to install dependency parse.
- - move install/erase major modes into rpmlib.
- - move checksig/resign major modes into rpmlib.
- - add python bindings to rpm-devel (linux only).
- - make query (rpm -qvl) behave like (POSIX?) ls for older files (#4050).
- - fix: %if parsing skipped 3 chars too many.
- - permit multiline macro expansions with comments and %if.
- - add pl translation and man pages (PLD team - from Tomasz Kloczko).
- - fix: incomplete cleanup if --rebuilddb fails (#4115).
- - add versions to provides.
- - fix: sanity test on specfile fails when encountering i18n chars.
- - print all dependencies for each package at end of build.
- - the death of RPMSENSE_SERIAL, use [epoch:]version[-release] instead.
- - add _mandir/_infodir macro expansions to docdirs (Tomasz Kloczko).
- - add post install configurable dependency checking.
- - fix: segfault on --rebuild (#4185).
- - macro fixes (Benedict Lofstedt, #4220):
- expand %# just like %{#} (and with same value as shell analogues).
- macro defaults for *, 0, and # if no args specified.
- getopt on non-linux requires optind to be saved/restored.
- - fix: don't remove file until last occurence in transaction (#4291).
- - resuscitate net shared paths (#4330).
- - fix: macro table cannot contain NULL pointers (#4263).
- - fix: last char in rpmrc w/o terminating newline lost (#4361).
- - prepare for handling \r in macro exapnsions.
- - fix: n>1 occurrences of %config(noreplace) should not FA_CREATE (#4355).
- - fix: use pgp5 rather than pgp-2.6.3 if both are in %_pgpbin (#4564).
- - match "de" when locale is specified as "de_DE.ISO-8859-1@Munich".
- - add versions to obsoletes.
- - add %_install_langs to configure languages to be installed.
- - add LC_ALL/LC_MESSAGES to query locale search.
- - fix: segfault with "--sign" w/o supplying files (#4651).
- - add headerWrite return code and check for errors.
- - update python bindings from anaconda.
- - add versions to prereq.
- - add syntax sensitive implict prereq on rpm-3.0.3.
- - fix: don't successfully match with strncasecmp("sparc", "sparc64", 5)
- - add sparcv9 architecture.
- - add --freshen to usage message (#4823).
- - suggested changes to docs from Ken Estes (#4451).
- - link libbz2.a statically to avoid rpm->bzip2 dependence for now.
- - Tru64: avoid find-requires variable size limit (Tim Mooney).
- - Solaris: use getpassphrase rather than getpass if available.
- - pgp and pgp5 have compatible RSA signature (#4780).
- - fix: avoid db problems with self-obsoleting packages on install.
- - glibc2: always enable dynamic mtrace if available.
- - fix: versioned provides devolved to existence test with conflicts.
- - fix: with unspecified epochs, skip dependency epoch compare.
- - python: shared module linked correctly.
- - do versioned provides/conflicts resolution correctly.
- - rpmpopt: display versioned provides/obsoletes.
- - revert to shared libbz2.so now that bzip2 is in base install.
- - fix: command line install had header memory leak.
- - check for NULL on all memory allocations.
- - free rpmrc mallocs on exit.
- - glibc2: permit run time leak detection.
- - fix: removed files fingerprint memory leak.
- - fix: resurrect allfiles flag from rpm-2.5.x.
- - fix: version compares compatible with epoch-less requires/conflicts.
- - fix: rpm-2.5.1 had file list w/o leading / fix.
- - portatbility fiddles (solaris).
- - create binary rpm directory (e.g. .../%{_target_cpu}) on the fly.
- - updated pl/rpm.8 (PLD team).
- - new find req/prov scripts for non-linux platforms (Tim Mooney).
- - fix: non-GNU globs burp on repeated '/' in patterns.
- - dumb cpp's want white space around lclint annotations (Tim Mooney).
- - aix: aix.req broken by cut-and-paste (Tim Mooney).
-
-3.0.1 -> 3.0.2
- - eliminate armv4 entries from rpmrc (Andrew E. Mileski).
- - permit multiple "Provides: " lines in rpmrc (#2999).
- - add BuildConflicts: and BuildRequires: in spec file and src rpm.
- - fix: bigendian's with longlong file sizes (e.g. IRIX) dinna work.
- - move printDep* routines into rpmlib for gnorpm et al.
- - updated ru translation (Sergey Kubushin).
- - add vpkg-provides.sh (Tim Mooney).
- - don't clobber LDFLAGS in top-level Makefile (Tim Mooney).
- - fix: build root from cmd line did not set macro %buildroot (#1026).
- - fix: resurrect "rpm -Va --nofiles" (verify dependencies only) (#3111).
- - rpm-devel should require popt (#3125).
- - don't spin while waiting for delayed requires/provides input (#3289).
- - common parse for all dependency token syntax.
- - eliminate find-requirements on libNoVersion (Red Hat linux only).
- - add new-fangled requires on "libc.so.6(GLIBC_2.1)" (sparc-linux only).
- - MiNT port (Guido Flohr <gufl0000@stud.uni-sb.de>).
- - fix: --rebuilddb with --root dinna remove directory (Michael Andres).
- - fix: false fingerprint stat cache hit -- "the tetex problem" (#2727).
- - fix: bsearch needs macro table sorted after undefine. (#3713).
- - fix: --checksig segfault with odd pgp output (e.g. w/o ~/.pgp) (#3720)
- - avoid numeric overflow in version comparison (Thayne Harbaugh<tharbaug@liberate.com>).
- - move url.c and ftp.c to rpmlib right next to query.
- - 12 more dead strtoks.
- - changelog stamp broken w/ big endian 64 bit time_t (Stephane Erania).
- - tru64: use /bin/sh not /usr/bin/ksh in find-requires.
- - 32Mb (~16x largest known) sanity check on header size.
-
-3.0 -> 3.0.1
- - fix: %verifyscript resurrected (Shing-Gene Yung).
- - fix: % before non-alphabetic non-macro special now passed unscathed.
- - fix: noarch header gets initialized differently.
- - fix: $2 to triggerpostun scripts was wrong
- - fix: --querybypkg in man page should be --filesbypkg
- - fix: optflags not implicitly set to canonical arch value.
- - fix: prefer pgp2.6.3 over pgp5 if both are installed.
- - make sure that rpm-the-package auto-requires glibc.
- - add rpmputtext/rpmgettext to rpm package.
- - fix: non-apache servers need "GET ... HTTP/1.0" by the book.
- - fix: %doc wrongly inherits lang from last entry in %files.
- - resurrect toplevel tar target.
- - spec file removal separate from source removal (Shing-Gene Yung).
- - add rpm prefix to MD5 routines to avoid name conflict on solaris.
- - fix: resurrect -Vp, -Vf and -Vg functionality.
- - colesce query and verify modes.
- - better cpio error message if package contains missing hard links.
- - fix: shared file not skipped when removed.
- - fix: conversion script left off leading underscores.
- - another strtok bites the dust.
- - fix: prevent return code wrap during packagage checking/resigning.
- - permit multiple %lang(xx) markers on elements in %files.
- - permit %lang(xx,yy,zz) constructs -- 2 more dead strtoks.
- - fix: --prefix should work properly during package installs.
- - add librpmbuild.a to the file list.
-
-2.94 -> 2.95
- - fix: last update transaction set segfault bug in installer.
- - improved checks for statfs (Tim Mooney).
- - remove inconsistent use of __P((...)) throughout.
- - non-static inline functions caused IRIX cc pain.
- - CPIOERR_CHECK_ERRNO masking caused AIX cc warnings.
- - solaris 2.6+ needs statvfs.
- - check build prerequisites before building from specfile.
- - convert per-system configuration in /etc/rpmrc to macros.
-
-2.93 -> 2.94
- - fix: segfault while parsing target string.
- - fix: os was not initialized with "--target i586".
- - fix: --prefix resurrected.
- - non-linux, non-gcc portability fixes (Tim Mooney).
- - default to static libs only (remove implied support for shared libs).
-
-2.92 -> 2.93
- - eliminate old rpmrc configuration syntax.
- - pgp5 support (Carlo Wood <carlo@runaway.xs4all.nl>)
- - fix: segfault from double close on ftpGetFileDesc->ftpAbort path.
- - fix: don't add header if signature generation failed (Carlo Wood).
- - more DU 4.0D fiddles (Shing-Gene Yung).
- - fix: segfault from unknown uid/gid -- use builder's uid/gid instead.
- - autoReq/autoProv now per-package.
- - fix: avoid segfault using --prefix until ewt fixes.
- - add --define "%foo %bar" option.
- - dump macros to same fd as --showrc uses.
- - add %GNUconfigure for full-blown package regeneration.
- - fix: RPM_ARCH/RPM_OS had wrong values.
- - fix: create ppc directories correctly.
- - (re-)enable fixowner/fixgroup macros.
- - fix: specfile BuildRoot was masking rpmrc macro.
- - expand twiddles in macrofiles list.
- - add explicit macrofiles path to rpmrc.
- - add per-target macrofiles to search path.
- - take globalMacroContext out of macro api.
- - fix: flush all macros between builds.
- - add name/version/release macros during src.rpm install.
- - attempt mkdir sourcedir/specdir during src.rpm install.
-
-2.91 -> 2.92
- - update with libtool-2.4f.
- - DU 4.0D fiddles (Shing-Gene Yung<shing@cz3.nus.edu.sg>)
- - change support@redhat.com to rpm-list@redhat.com.
- - fix: with --target=i686, pass macro %_arch=i386.
- - fix: rpm --target=arch ... resurrected.
- - fix: rpm -q --specfile --specedit now works even with BuildArch:.
- - fix: nested strtok's is a no-no.
- - added disk space checking
-
-2.90 -> 2.91
- - fix: memory leaks in rpmRunTransactions plugged.
- - fix: build of packages w/o BuildRoot segfault.
- - permit substitution of I18N strings from PO meta-catalogues.
- - add callbacks for installer updates while doing URL xfers.
- - resurrect http queries/verifies.
- - create rpmbzio.c to avoid implicit dependence on libbz2 for installer.
- - spec files can provide /filename now
- - added rpmdbOpenForTraversal()
- - proxy http (Alex deVries).
- - add BuildPrereq: in spec file and src rpm.
- - added rpmtransSetScriptFd()
- - fixed config file problems during chroot upgrades
- - fixed %attr brokenness for directories
- - augment linux provides/requires for glibc 2.1 backward compatibility.
- - fixed --noscript, --notriggers, --excludedocs, and a bunch
- of other install/remove flags
- - fixed noreplace handling
- - complain about old packages being installed
-
-2.5.x -> 2.90
- - added --excludepath
- - identify missing keys by type (Toshio Kuratomi).
- - package install/removal much smarter about symlinks
- - redid install/remove API to allow transaction semantics
- - support for GPG (Toshio Kuratomi <badger@prtr-13.ucsc.edu>)
- - file lookup finally sane wrt symbolic links :-)
- - fileindex format changed -- rebuilddb is necessary for rpm 2.90!!
- - --rebuilddb doesn't open old index files
- - permit http:// and file:// url's as well as ftp://.
- - change --rcfile to permit colon separated file list.
- - compile in defaults from rpmrc/macros.
- - finish hiding rpmdb index record data ("matches").
- - implement abstract fd type almost everywhere.
- - update and rename Czech (Pavel Makovec <pavelm@terminal.cz>)
- - augment --showrc with -v, only display set variables without -v.
- - add macrofiles variable, permit second entry to initMacros().
- - add config.h defines for paths to find-requires et. al.
- - add readRPM to libbuild, headerGetLangs to librpm.
- - permit rpm to be built in a sub-directory (--srcdir=DIR).
- - configure using automake.
- - arch/os (and platform) should be case insensitive everywhere forever.
- - attempt to deal rationally with os as "Linux" or "linux".
- - add generalized expression handler (Tom Dyas<tdyas@remus.rutgers.edu>)
- - use /usr/lib/rpm/mkinstalldirs if mkdir -p fails.
- - more portable dirent handling (Hermann Lauer).
- - add Slovak translation (Stanislav Meduna <stano@trillian.eunet.sk>)
- - gettextify rpmMessage/rpmError/fprintf messages.
- - update po files; add cz to catalogs.
- - cpio_gzip: dup the fd before doing gzdopen (Thanks Erik!)
- - add --noLang to skip non-default languages.
- - writeRPM can now copy cpio archive from fd.
- - preliminary macro environment as side effect of rpmrc parse.
- - macro handling in rpmlib -- rework include: tag with macro expansion.
- - first attempt at librpmbuild API.
- - fixed lib/rpmrc.c to accept include: tags (AdV)
- - fixed the CHANGES file to reflect that this is 2.9, not 3.0 (AdV)
- - aggregate system includes into system.h.
- - rearrange functions to minimize exported routines in librpmbuild API.
- - generalize cpio I/O to eliminate pipe to exec'd gzip on install.
- - add {init,add,expand}Macro args everywhere (new macro.c compatibility)
- - add new fully recursive macro.c
- - there must be a { between two % in a query format (unless %% is used)
-
-2.5.6 -> 2.5.7:
- - permit 0x1b in specfile sanity check.
- - increase timeout in tread from 5 to 30 secs for slow links.
- - rename file before unlinking to avoid EBUSY failures.
- - headerGetEntry now returns count=0 if tag not found (Chris Blizzard).
- - resurrect osf1 as canonical os name (Time Mooney).
- - sub-packages should inheirit Prefixes tag (Ian Mortimer).
- - make '-' character illegal (again) in version/release.
- - use portable #!/bin/sh (Tim Mooney).
- - don't erase failing build script (Tim Mooney).
- - use portable mkinstalldirs (Tim Mooney).
- - irix6 autodeps were dup'd (Shing-Gene Yung <shing@cz3.nus.edu.sg>).
- - getservbyname needed ntohs().
- - propagate "const char *" into rpmlib prototypes.
- - use "original db-1.85" if available (Raw Hide glibc 2.1).
- - make sure files to sign exist before asking for the pass phrase
-
-2.5.5 -> 2.5.6:
- - ultrapenguin 1.1.9 sparc64 changes.
- - attempt ftp ABOR on query/verify url's.
- - cache open ftp control descriptor with password.
- - verify needed same realpath semantics as query.
- - plug fd leak in urlGetFile().
- - translate cpio errors using cpioStrerror.
- - display "..?....." rather than "..5....." for unreadable files.
- - run time (rather than compile time) host endian check.
- - caldera patches (ray@Caldera.DE)
- - added ARM patches.
- - fix incorrect directory permissions using %attr/%defattr.
- - permit "rpm -q --specfile ... file.spec" queries.
- - strncasecmp on spec file separators (KDE has %Description).
- - remove redundant md5 computation on uninstall.
- - permit --rmsource --force even if sources/patches are missing.
- - don't compute md5sum on non-file %config objects. (from Jos Vos)
- - check arch only on RPMBUILD_{PREP,BUILD,INSTALL,PACKAGEBINARY}.
- - configure.in: set default value for RPM. (Tim Mooney)
- - add new Epoch: keyword just like Serial:.
- - update Russian translation w man pages.
- - solaris: don't attempt static link. (Tim Mooney)
- - fix: timeCheck in rpm.c should be unsigned long. (Tim Mooney)
- - osf: prov searches only shared libraries. (Tim Mooney)
- - solaris: set PATH in prov/req scripts. (Tim Mooney)
- - fix: ignore modes on symlinks. (Tim Mooney)
- - sub-packages inherit RPMTAG_EPOCH (just like RPMTAG_VERSION/RELEASE).
- - fix off-by-1 alloca that prevented relocating /.
- - there must be a { between two % in a query format (unless %% is
- used).
-
-2.5.4 -> 2.5.5:
- - permit rpm to be built in a sub-directory (--srcdir=DIR).
- - return CPIO_BAD_HEADER instead of exiting. (Scott M. Stone)
- - untranslate "(none)" for auto relocating script wrappers.
- - non-linux arch/os identification (Eugene Kanter).
- - portable mode_t/pid_t typedefs.
- - fix check for trailing / in Prefix:
- - remove 2 character language name assumption.
- - add /usr/lib/rpm/find-lang.sh (W. L. Estes <wlestes@uncg.edu>)
- - miscellaneous portability cruft (Eugene Kanter).
- - Makefile: don't use ln -sf.
- - getOutputFrom(): fix race between last read on pipe and child death
- (exacerbated in 2.5.4).
- - rpm.spec: create /usr/src/redhat/* in %install.
-
-2.5.3 -> 2.5.4:
- - expand args using popt on pre-rpmReadConfigFiles arg pass.
- - skip arch checks if only packaging source rpm.
- - add license field to rpmpopt -qi alias.
- - provides/obsoletes requires tokens that begin with alnum or _.
- - non-zero exit status for verify failures.
- - hpux does setreuid differently (Hermann Lauer).
- - check for setreuid portably (Eugene Kanter).
- - add Serbian translation (Zoltan Csala <zcsala@iname.com>).
- - arch/os tables were not being initialized for noarch builds.
- - quote users/groups/filenames in --setugids.
- - add Russian translation w man pages (Serguei Koubouchine <ksi@gu.net>)
- - fix virtual file attribute bug that skipped all files in binary rpm.
- - eliminate infinite loop with missing tmpdir (Trent Jarvi).
- - os_canon for CYGWIN32_NT/95.
- - rationalize autoconf detection of gzip/bzip2.
- - restore backward compatible rpmrc/rpmpopt symlinks.
- - update pt_BR translations (Arnaldo Carvalho de Melo).
- - permit --{buildroot,timecheck,test,sign} with -tX (Toshio Kuratomi).
- - fix database rebuilds with triggers (Steve Sanberg).
- - diagnostic message if unreadable/short source or patch file.
- - eliminate redundant close in provide/require processing.
- - solaris portability patch resurrection (Steve Sanberg).
- - permit autogen.sh to work on non "prefix=/usr" hosts.
- - add %license/%readme virtual file attributes.
- - align "Build Host:" with other fields.
-
-2.5.2 -> 2.5.3:
- - copy changelog tags to sub-packages just before packaging.
- - added EPOCH handling to supplement serial numbers
- - add RPMTAG_EPOCH and RPMTAG_CAPABILITY init to 0.
- - fix infinite recursion on non-ERANGE return from getcwd() during
- install (Matt Wilson).
- - rm .depend for multiple builds in same tree (Will Partain)
- - addFile: fix special case of "/" in %files.
- - better query semantics with symlinks (Tim Mooney)
- - build.c: fix incorrect check for successful open
- - allow %define with leading whitespace
- - use /usr/lib/rpm for rpmpopt, rpmrc, find-requires, find-provides
- - added popt 'exec' functionality
- - made --rebuilddb a bit more robust by checking data types
- - added --freshen via popt exec stuff
- - fixed spelling of expected
- - updated de.po (Karl Eichwalder)
- - do a better job of checking for a spec file in tarballs
- (Pavel Roskin)
- - fixed --triggers alias (Michael Andres)
- - added :hex query format
- - fixed --querytags to display virtual tags
-????? - added --triggers and --triggered by to man page, help, and usage
-????? - added support for epochs
-
-2.5.1 -> 2.5.2:
- - added -bs to build just a source package
- - included irix.req and irix.prov (Tim Mooney)
- - copy CHANGELOG* and URL tags to all subpackages
- - follow symlinks when packaging sources
- - handle %files -f with no %setup (no build directory)
- - fixed ugly i18n header bug
- - deal with lang paths sanely when entries are missing languages
- - fix bug packing /usr/doc when last file was %dir
- - added --last alias
- - fix :depflags query format
- - Group: i18n (like Summary:)
- - make --justdb install files in normal state
- - %{fssizes} segv'd for packages with empty file lists
- - updated HP-UX, OSF1, Irix 6.x dependency scripts (Tim Mooney)
- - added arm and MachTen arch/os info
- - added --filesbypkg query format
- - updated README to have proper URLs
- - updated rpm.spec for proper paths and cleanliness
- - dependency resolution could hang when Provides: line is used in
- rpmrc (Tim Mooney)
- - updated mips rpmrc entries (Alex deVries)
- - version/release conditional triggers weren't ignoring the trigger
- package name at the front of the TRIGGERVERSION
- - added --notriggers for -i and -e
- - made --triggers a synonym for --triggerscripts
- - ftp installs were trying to use /var/tmp/tmp
- - allow whitespace in source/patch lines
-
-2.5 -> 2.5.1:
- - fail if sources are not regular files
- - wasn't catching readLine() errors
- - fixed (hopefully) temp file creation problems
- - make %doc obey --test
- - unlink before writing .rpms
- - librpm.c: added headerGzRead()/headerGzWrite()
- - set bzip2path via lib-rpmrc/configure (Toshio Kuratomi)
- - added finish translation (Raimo Koski)
- - prefer db_185.h to db.h (Christopher Seawood)
- - included updated hpux.req (Ralph Goers)
- - added aix.req (Ralph Goers)
- - updated hpux.prov, osf.req, osf.prov (Tim Mooney)
- - set file states for --justdb packages to "not installed"
- - handle missing file states properly in -e code
- - install time wasn missing for --justdb packages
- - missing parameter in an rpmError() caused segfault
-
-2.4.109 -> 2.5:
- - fixed return code bug in build code
- - do macro expansion before %if processing
- - dep ordering returns w/ an error as soon as a prereq loop is found
- - autoreqprov flag was being ignored during builds
- - add autoreq: and autoprov:
- - missed a few unlink() when scripts failed
- - freePrefixes wasn't initialized in runScript()
- - fix typo in %triggerpostun generation
- - include icons in source packages
- - headerGetEntry() should return count of 1 when returning
- strings plucked from i18n strings
- - do not remove comments in scripts
- - save/restore existing arch when done with buildarch
- - copy the I18N table to the source header so i18n stuff works
- - fixed multiple memory leaks in install code
- - fixed bug in part recognition
- - shared files weren't being handled properly in net shared paths
-
-2.4.108 -> 2.4.109:
- - remove icons with --rmsource
- - do dependecy generation on -bl
- - check files on all packages on -bl
- - integrate Jeff Johnson's memleak patches
- - added OSF1 autodep scripts
-
-2.4.107 -> 2.4.108:
- - make --clean work with no %setup
- - fixed FSSIZES problem introduced in 2.4.107
- - fixed search for find-requires.sh
- - improved solaris autodeps scripts
- - automated (somewhat) the -static flag
-
-2.4.106 -> 2.4.107:
- - --nomd5 wasn't handled properly
- - updated configure.in find-req and find-prov checks (Tim Mooney)
- - make --rmsource actually work
- - run postun triggers
-
-2.4.105 -> 2.4.106:
- - build: only check for non-printables in first 128 chars
- - added %triggerpostun
- - linux.req generates deps for shared libs
- - added a CC=@CC@ to popt/Makefile.in
- - handle signed return types from poptGetNextOpt() properly
-
-2.4.104 -> 2.4.105:
- - added langpatt: to rpmrc, and mark files with matches
- - added some C++ cruft to rpmlib.h
- - added find-requires and find-provides for hpux (Tim Mooney)
- - respect LINGUAS when install package files
- - added trigger support to build code
- - got rid of annoying mwftw() type warning
- - fixed many command line options which got broke by changes
- for non-gcc compilers
- - added trigger support in install code
- - added doc/triggers
- - strntoul() in lib/cpio.c was returning a pointer to freed
- memory
- - headerAppend() was doing a bad memcpy()
-
-2.4.103 -> 2.4.104:
- - fixed popt/Makefile.in to use CPP from configure
- - use tmppath from rpmrc to for ftp'd files (rather then /var/tmp)
- - autoconf files and .depend files weren't created properly during
- make archive
-
-2.4.102 -> 2.4.103:
- - need to create popt/configure during make archive
- - added comments about modifictation to base popt and rpmrc files
- - allow spaces in group names
- - fix bug in memory allocation of special doc stuff
- - Jeff Johnson's mode/dev fixes
- - clean up buildroot
- - be more paranoid about making temp files
- - added patches from Tim Mooney which let RPM build with non-gcc
- compilers and non-GNU versions of make
-
-2.4.101 -> 2.4.102:
- - fixed spelling of "instchangelog" in lib-rpmrc.in
- - fixed memory leak in headerSprintf() extension cache
- - fixed memory allocation for header formatting extension cache
- - added support for INSTPREFIX virtual tag for backwards compatibility
- - cpio error codes were poorly defined, causing bad error messages
- - generates INSTPREFIXES tag properly, and sets RPM_INSTALL_PREFIX
- and RPM_INSTALL_PREFIXn environment variables
- - fixed memory leak in install code which occured when net shared paths
- were used
- - don't pass net shared path to rpmInstallPackage() -- it looks
- directly in the rpmrc entries
- - don't remove files in netsharedpath, even for files whose states
- are not net shared
- - changed --setugids to use separate chown and chgrp programs, for
- better portability
- - popt moved to autoconf
- - Makefiles changed to allow building in a different directory then
- the source code resides in
- - finally fixed the Build Host spacing in rpmpopt
-
-2.4.100 -> 2.4.101:
- - handle files with spaces (put double quotes around them)
- - new rpmrc setting, buildshell, can be used to set shell
- used for build scripts (default is /bin/sh)
- - fix bug where macros were being improperly set for
- Patch: and Source: lines
- - may use "instchangelog" in rpmrc to limit the maxmium number of
- changelog entries that are stored in the database for each package
- (-1 means store all of them)
- - default instchangelog is set to 5
- - headerRemoveEntry() didn't free the item's data -- this led to
- a slight memory leak when installing packages
- - implemented generic file relocations at install time
- (use --relocate <oldpath>=<newpath>, i.e. --relocate /usr=/foo)
- - added --badreloc flag to force RPM to relocate files which packages
- haven't advertised as relocatable
- - fix return code on failed uncompresses in %prep
- - preliminary handling of bzip2 compressed files
- - differentiates between big and little endian mips
- - added support for "prefixes:" tag
-
-2.4.99 -> 2.4.100:
- - fixed handling of --rebuild and --recompile
- - fixed rpmlibbuild.a typo in Makefile
- - fixed handling of '\' in spec files (a specific case of a more
- general bug)
- - change use of "export" to work with non-bash shells
- - compress the archives. oops.
- - fixed bug when there is no %setup
- - added -L$(topdir)/popt to Makefile.inc
-
-2.4.12 -> 2.4.99:
- - added many more i18n strings
- - merged in large rewrite of build code, which includes the following
- changes:
- - new option --rmsource
- - all scripts can now take -p <prog>
- - more strict about %package placement and use of main package
- preamble
- - %attr(mode, user, group [, dirmode])
- - %defattr()
- - %defverify()
- - Root: is depricated. Use BuildRoot: instead
- - "nosrc" sources arn't deleted when sources are removed
- - New tag DocDir: <dir> to set alternate doc dir (default is
- /usr/doc)
- - %doc should work as expected with buildroot, prefix, DocDir:
- - all file processing is done before any packaging
- - should work with modern patch programs (later than 2.1)
- - %patch -z <arg> same as %patch -b <arg>
- - %define only defines a macro if it starts a line
- - script prog entries are now arrays (ie with arguments)
- - standard macros: tag names, buildarch, buildos, buildarch_lc,
- buildos_lc, PATCHn, SOURCEn, PATCHURLn, SOURCEURLn, sourcedir,
- builddir, optflags
- - deprecate require_distribution, require_icon, require_vendor
- - add RPMTAG_FILEDEVICES and RPMTAG_FILEINODES to header
- - export variables in scripts
- - fixed tag:field bug
- - %lang() in %files
- - %description -l <lang>
- - Summary(<lang>):
- - fixed read_line() termination usage
- - Makefile changes to shorten compiler lines
-
-2.4.11 -> 2.4.12:
- - intialize reserved portion of lead when writing packages
- - fixed error messages displayed when opening the database
- fails during package installation and removal
- - query format of the form '[A%{}]' would drop the static string
- - fixed fix in 2.4.9 for empty packages which broke -qip on ftp URL's
- - fixed arch/os numbers in lead
- - added Turkish message catalog
- - -e was running scripts even w/ --test was specified
-
-2.4.10 -> 2.4.11:
- - HAVE_SYS_SOCKET_H was mistakingly MACHINE_SYS_SOCKET_H in
- config.h.in
- - \%description was trying to do %d expansion in query formats
- - made %% work in query formats
- - fixed bug in handling characters before array
- - let mips build noarch packages
- - --setperms would set wrong permissions in some cases (it was
- following symlinks)
-
-2.4.9 -> 2.4.10:
- - obsolete entries could cause segv's during upgrades
- - sources now installed with uid/gid of process rather then
- the ids used when the src rpm was created
- - don't give an error if missingok files don't exist during remove
- - touched ftp code to make it coexist w/ Red Hat install better
- - use rand/srand rather then random/srandom
- - don't build misc directory unless it's necessary
- - empty package files should be treated the same as files
- with bad magic, not as read errors
- - fix bug where Prefix directory is included in file list
- - sinix readdir() work-around
-
-2.4.8 -> 2.4.9:
- - fix for verification on systems where a single group id
- maps to mulitiple group names (Benedict Lofstedt)
- - added 'make tar' rule for building a distribution tarball
- (Horacio Rodriguez Montero)
- - fixed serial number handling in dependencies and install
- code
- - make mips compatible with noarch
- - fixed bug w/ printing string arrays in conditionals
- - handle modern patch programs (> 2.1)
- - handle packages w/ duplicate dependency names
- - --noscripts didn't get handled properly for removed packages
- - fixed handling of packages where %prereq creates users/groups
-
-2.4.7 -> 2.4.8:
- - added noarch build compatibilities for ppc, m68k
- - fixed some minor typos (Florian La Roche)
- - added Obsoletes: tag, an upgrade removes packages which
- have been obsoleted
- - updated rpmdepUpgradePackage() to deal with obsoletes tag
- - convertdb needed to read rpmrc
- - fixed ugly bug in package ordering
- - archivesize tag was incorrect for packages with hard links
- - moved popt into a separate library
- - directory created with %doc is now name-version (dropped
- the release)
- - added buildarch/buildos macros
- - added %ghost file option
- - updated linux.req to only find requirements for exectuable files
-
-2.4.6 -> 2.4.7:
- - had some wrong month lengths in changelog date parsing
- - updated fine-requires (Linux version) to add lines for shell
- scripts (Donnie Barnes)
- - didn't package / properly
- - pre/post script processing had some erroneous free() calls
- - fixed typos for HP archs in lib/rpmrc.c
- - uname() results should go through *_canon tables before anything
- else happens
- - set -x in debug shells, not -xs
-
-2.4.5 -> 2.4.6:
- - added os_canon entries for BSD/OS and NextStep
- - replaced include of <malloc.h> with includes of <stdlib.h>
- - fixed md5sum of source packages w/ a buildroot is used
- - fixed bugs installing version 1 packages
- - remove hyphens from uname() result (specifically for HP-UX)
- - hacks to recognize architecture under parisc
- - RPM_INSTALL_PREFIX wasn't being set properly (this should be
- fixed now)
- - replaced temporary file creation to be race-condition safe
- - prerequisites may not specify versions
-
-2.4.4 -> 2.4.5:
- - call getpwnam()/endpwent() once before a chroot(), forcing name
- service shared libs to be loaded from outside of the root path
- - added vesrion stamp to lib/misc.o (and librpm.a by extension)
- - fixed config.sub, config.guess to recognize i686
- - ARCHIVESIZE tag didn't get filled in properly, breaking progress
- meters
-
-2.4.3 -> 2.4.4:
- - restore working directory after installing a package w/ a chroot
- - dump the package stack when a dependency loop is encountered
- - when a user/group lookup fails, end*ent() and retry
- - fixed broken --scripts argument (it was --s2)
- - only display the packager and url in -qi output if they have defined
- values
- - print "(not installed)" as the install time for -p queries rather
- then "not a number"
- - almost completely rewrote rcfile parsing; I'm sure this will
- break things eventually but it's much more flexible now
- - added buildarch/buildos compatibility tables, listed values
- in --showrc
- - added cpio archive building code; GNU cpio is no longer used!
- packages created w/ rpm 2.4.4 and later cannot be installed with
- rpm 2.4 - rpm 2.4.3 however (version of RPM before 2.4 will
- work fine, however). An "error -2 reading header" happens when
- this is attempted
- - removed cpiobin from rpmrc
- - added rpmrc "provides" tag to allow easy fulfillment of
- automatically generated dependencies
- - look for random() in libm if it can't be found be default
- - fixed problems in Solaris's autodeps stuff (Eric Mumpower)
- - --setperms should work properly on directories now
- - --justdb on install, upgrade, and erasure causes a database
- update w/o the filesystem being touched
- - fixed version comparison of a package w/ a serial tag against
- a package w/o one
- - added BuildArchitectures: tag to spec file to enable builds
- for alternate/multiple architectures
- - look for random() in -lucb
- - changed the licensing terms for librpm to allow redistribution
- under the LGPL
- - applied man page changes from Alex deVries
- - configure.in builds up LIBS by appending (Benedict Lofstedt)
- - rpm2cpio reported wrong zlib error string
- - removed \n from (none) generated by query format code
- - queries of fssizes w/o fsnames didn't work (Till Bubeck)
- - added --noorder option to skip package reordering (Elliot Lee)
-
-2.4.2 -> 2.4.3:
- - implemented install time prerequisites
- - repaired %{#TAG} query format
- - implemented ternary operator as query expression
- - fixed --scripts to only print information on scripts which
- are present
- - check symlink() return for < 0, not != 0 (Bob Tanner)
- - uses chroot() for installs --root option
- - archive expansion doesn't create new devices or symlinks when
- the proper files already exist
- - added -p to %post (etc) to specify the program which a script
- is run through
- - if -p is used w/ an empty script, the specified program is
- executed directly
- - the -p argument (or /bin/sh) is automaticall added as a prereq
-
-2.4.1 -> 2.4.2:
- - completely rewrote queryformat code
- - added fsnames, fssizes virtual query tags
- - added rpmdbFindByHeader() and rpmdbFindByTag() public functions
- - added rpmfilename tag to rpmrc to define the filename format to
- use for binary packages (note the rpmdir is prepended to it)
- - used pclose() instead of fclose() in -t code
- - updated man pages
- - changed "struct rpmdb" to "struct rpmdb_s" for C++
- - netsharedpath entries shouldn't match partial directory names
- anymore (a nersharedpath of /usr/lib shouldn't affect /usr/libexec)
- - don't backup config files on netsharedpaths (take 2)
- - added "day" query format which is like date, but doesn't print
- any time
- - added --changelog alias to query a packages changelog entry
- - added mntctl() support for AIX (I think, I can't test this)
- - fflags query type displays 's' for specfiles, 'm' for missingok
- files, and 'n' for noreplace files
- - implemented %config(missingok) flag in install
- - added --allfiles flag for -i and -U, which forces all files (even
- missingok files) to be installed
- - implemented %config(noreplace) for the install, but it hasn't
- been tested in any way
- - added i18n support to headers
- - added ppc/rs6000 differntiation for AIX
- - all IP* from uname() is changed to just IP
- - IP is considered the same as mips (not sgi)
- - added IRIX64 OS, it's compatible w/ IRIX
-
-2.4 -> 2.4.1:
- - take advantage of lchown() if it's available
- - fixed configure script to assume chown() doesn't follow symlinks
- if lchown() isn't available and configure is not being run as root
- - more header file changes for AIX
- - added :shescape query format type for strings, which prints strings
- which will survive a single level of shell expansion
- - fixed --setperms and --setugids to handle empty packages and
- packages with odd filenames
- - include <sys/time.h> before <sys/resource.h>
- - include "miscfn.h" first in every file which needs it
- - created noarch architecture which everything is compatible with
- - fixed group verification (Benedict Lofstedt)
- - don't backup config files on netsharedpaths
- - added info on --build{arch|os} to --help and usage messages
-
-2.3.11 -> 2.4:
- - changed RPMNLSDIR directories to and @datadir@ to better
- conform with autoconf
- - set RPM_INSTALL_PREFIX environment variable when running
- verify scripts
- - beginnings of SCO support (though I suspect it will take one
- or two more iterations to get it right)
- - switched to CVS and updated some Makefile rules
- - look for gethostbyname() instead of gethostname() in -nsl
- (this could break some things)
- - added check for strcasecmp() in -lucb on systems which don't
- have strcasecmp() in libc
- - don't build -static on hpux10
- - don't try and NLS empty strings
- - changed index() call to strchr() in macro code
- - include <time.h> in build/spec.c for various platforms
- - added update-po rule to po/Makefile.in
- - updated de.po (thanks to Karl Eichwalder)
- - rpmFindByFile() removes trailing and duplicate /'s
- - made many string in rpm program (though not yet in the various
- libraries) translatable
- - eight character user names could break -qlv
- - requirements which begin with a leading / require files (in
- the database!) instead of packages
- - clean up conflictsindex during --rebuilddb
- - get path to gzip from /usr/lib/rpmrc rather then just hoping it's
- in the path
- - use dbpath for error messages with include database path in
- their text
- - don't set owner/group if binaries installed by "make install"
- - include <strings.h> on SCO
- - don't use cpio when installing packages <gulp>
- - fixed bug which affected dependencies on the Alpha
- - made '=' work for long arguments (the switch to popt broke this)
- - handle solaris systems better
- - complain if critical rpmrc variables (cpiobin, gzipbin, etc) aren't
- set anywhere
- - allow --dbpath for --rebuilddb
- - added check for systems whose chown() follows symlinks. If configure
- is run as root, this should get it right, otherwise it assumes
- chown() does not follow symlinks. You can use --enable-broken-chown
- to force configure to think chown does indeed follow symlinks.
- - if chown() follows symlinks, we don't chown() symlinks during cpio
- unpacking and we don't verify the owner or group of symlinks
- - added packager and url to default -qi output
- - look for <sys/select.h> and use it if it's there (for AIX)
-
-2.3.10 -> 2.3.11:
- - fixed newlines in --scripts output
- - fix handling of source files with bad owners/groups
-
-2.3.9 -> 2.3.10:
- - --allmatches handling in -e broke some cases
- - new predefined macros: %SOURCEn %PATCHn %SOURCEURLn %PATCHURLn
- - fix anomoly with %files -f <file> and %doc
- - ignore config bit when it's set on directories (which allows
- users to replace directories with symlinks)
- - don't set config bit on directories
- - strip trailing slashes from files (during build)
- - %tags are now case sensitive (macros too)
-
-2.3.8 -> 2.3.9:
- - reworked %setup to allow multiple -a and -b options, which
- should noticeably ease the task of unapcking multiple tar files
- - md5 sum's were calculated incorrectly on big endian machines
- from 2.3.2 through 2.3.8 -- this was fixed and some hacks were
- done to keep verification working
- - updated README
- - added --allmatches to allow erasing multiple versions/releases
- of a package
- - changed ftp URL's to use \r\n, not just \n (this should let RPM
- work w/ some picky (but rfc compliant) ftp servers
- - fix problem where parts at end of spec file were dropped
- - added %config(noreplace missingok) (build-side)
- - simple spec file macros
- - should now process entire file list before failing
-
-2.3.7 -> 2.3.8:
- - added -t? options to build packages from tarballs which contain
- .spec files instead of from the .spec files directly
- - fixed error in man page where ftp URLs are discussed
- - don't strlen(NULL) in headerAddEntry()
- - minor portability changes
- - stopped building oldrpmdb.c as part of rpmlib
- - added Makefile rule for building rpmconvert (which is almost
- never needed) -- this isolated gdbm dependence to this target
- - fixed checking of popt stack overflow
- - --requires shouldn't imply -q
- - fixed error message issued when a groupname does not exist
- - fixed but in changelog processing which made it hang on '*' in a
- changelog entry
- - generate S_ISSOCK and S_ISLNK macros on systems w/o them
- - "rpm --erase" wasn't returning proper error codes w/ package
- removal failed
-
-2.3.6 -> 2.3.7:
- - fixed nasty memory link in -Va
- - configure checks for -lnsl explicitly rather then linking it
- to -lsocket (for NCR SysVR4)
- - configure checks for dirent.h
- - modified glob.c to include config.h and use HAVE_DIRENT_H
- - cleanup of LIBS/LIBPATH mess a bit more
-
-2.3.5 -> 2.3.6:
- - -Vf uses realpath() now
- - -Vp lets you use --ftpproxy, --ftpport
- - changed popt format, breaking all popt alises :-(
- - added ability to alias character arguments to popt
- - moved --requires, --info to /usr/lib/rpmpopt
- - RPM is more forgiving of blank user names (dumb)
- - popt searches for aliases in the correct order now
- - cleanup query code to handle missing uid lists better
- - cleanup up configure.in a tad
-
-2.3.4 -> 2.3.5:
- - %{#TAG} in query format prints the array length
- - cleanup up protoypes in rpmlib.h
- - let -Vp work on URLs
- - don't set umask(0) anymore -- that confused programs which
- link against rpmlib quite badly
- - moved print out in "rpm -v -i" to occur after any warnings
- to pretty up the output a bit
- - added default optflags for powerpc
- - run shell for post/pre scripts in debug mode with -sx for
- some silly shells
- - installing source packages with --root checked for the
- sources/specs directory to exist outside of the root -- fixed
- - modified toplevel Makefile to run dependency generation only
- against referenced sources
- - array size mismatches in --qf should send error to stderr
- - tried to make the locale stuff a bit more portable (again)
- - reworked the owner/group setting on installs to be more generic
- (in preperation for getting rid of cpio)
- - made verify verify owner and groups by name rather then by id -- if
- the symbolic names aren't available use the uids
- - cleaned up relocateFilelist() and related code thanks to
- new header introduced in 2.3.3 -- this could break relocatable
- packages but they seem okay
- - fixed a bug which could cause relocatable packages to not get
- relocated -- I think this bit some people during hard drive
- installs of all things (Jason Salopek pestered me consistently
- enough to keep this on the front burner for me)
- - removed FILEUIDS and FILEGIDS from the header in the database --
- we never used it and it jsut wasted room
- - convert uid/gid lists in v1 headers to symbolic names
-
-2.3.3 -> 2.3.4:
- - %changelog processing
- - fixed broken requires/conflicts parsing for spec file
- - vastly improved --rebuilddb's robustness
- - fixed misplaced free() (only affected inconsistent databases)
- - added conflicts documentation to docs/dependencies
- - using multiple query formats has them all concatenated
- - removed stdin based query and verify selectors
- - installs rpmpopt in libdir
- - moved --provides and --scripts to rpmpopt
- - added --setperms, --setugids
- - incorporated newer de.po from Karsten Weiss
- - --resign/--addsign was broken in 2.3.3 from popt conversion
-
-2.3.2 -> 2.3.3:
- - Ripped out header internals and redid them. Any compatibility
- problems this causes are *bugs* as it should be completley
- transparent. If this works the devil better buy some Prestone (TM).
- - Use "cp -pr" instead of "cp -ar" for %doc expansion
- - use <string.h> instead of (non standard) <strings.h> in some places
- - look for non-POSIX (broken) chmod
- - include local copies of glob/fnmatch
- - removed getopt() check from configure.in
- - fixed bug in ftp code which prevented proper logins to some sites
- - switched to popt from getopt, which allows command line aliasing
- - read initial aliases from /usr/lib/rpmpopt then /etc/popt and
- $HOME/.popt
- - cleanup up rdev verification (only verifies device files, checks
- device related mode bits as well)
- - fixed allocation of temporary paths (Eugene Kanter noticed this)
- - made tools/dumpdb read the rpmrc so it can find the database
- - added --nomd5 for -V and -K
- - don't assume mkdir -p will succeed if the dir exists
- - use RPMNLS* defines to avoid header file conflicts
- - bunch of minor cleanups to avoid warnings on other OS's
-
-2.3.1 -> 2.3.2:
- - fixed bug in new rpmVersionCompare() which made it worse then
- useless (thanks to Norbert Kiesel)
- - fixed silly message
-
-2.3 -> 2.3.1:
- - changed --help routing to have intelligent line wrapping
- to make i18n efforts easier
- - NLSDIR should be used for nls catalogs, not a hardcoded path
- - NLSDIR should be in share, not lib
- - renamed sweedish catalog from se to sv
- - added german catalog
- - treat RPM_CHAR_TYPE as RPM_INT8_TYPE for queries
- - made rpmEnsureOlder() internal to lib/install.c
- - added rpmVersionCompare() to compare version/release/serial numbers
- for packages -- returns like strcmp()
- - stdout/stderr were getting closed after running a verify script
- - relocting packages didn't work w/ the packages contained the
- directory which was it's prefix
-
-2.2.11 -> 2.3:
- - replaced putenv/setenv which calls which malloc() buffer -- these
- are memory leaks, but the functions are only used between a fork()
- and exec() so it doesn't matter
- - created directroies are stamped with mtime from the file list
-
-2.2.10 -> 2.2.11:
- - fixed some include file problems for FreeBSD
- - fixed find-provides script for Linux (silly typo)
- - -qvl didn't print out sticky bit
- - linux.prov won't print provides info for symlinks which point
- to libraries w/ proper sonames
-
-2.2.9 -> 2.2.10:
- - changed how installArchive() handles running out of gzread()
- bytes while the child is still alive
- - changed tag for Alpha's to "alpha" from "axp" <gulp>
- - made ./configure look for --quiet support in cpio
- - netsharedPath's were having mkdir()'s done on them and had
- bad interactions with rooted directories
- - made -qp accept '-' to query the package on stdin
- - dependency checking was broken when no database was being used
- - don't *ever* let cpio make directories -- we do a better job
- (esp because we don't kill symlinks!)
- - plugged memory leaks in upgrade (again thanks to mpr) -- install,
- erase, upgrade, query, and verify all seem to be leakproof
- - use select() rather than busy waiting in cpio_gzip()
- - use half as much temp space during package assembly
- - fail if spec file check fails
- - changed canonical name for 68k to m68k (sorry)
- - integrated FreeBSD changes from Jared Mauch
- - integrated Irix changes from Hermann Lauer
- - i18n support can be disabled w/ configure by --disable-nls
- (thanks to Remy Card)
- - integrated more AmigaOS patches, played with configure some
- more to allow cross compiling (Kristof Depraetere)
- - cleanups to rpm2cpio (closing the gz stream) (Elliot Lee)
- - made find-provides return filename for libs w/ no soname
-
-2.2.8 -> 2.2.9:
- - fixed typo in default rpmrc
- - made getBooleanVar() a bit better
- - added triggers to package builds
- - tagged spec file in source package file list
- - added %verifyscript (controlled by --noscript, -v flags)
- - changed pkgReadHeader() mechanism to be more generic
- - added find-provides for Solaris, made find-provides setup
- more generic (w/ configure.in picking the right one)
- - fix -Q
- - The Great Renaming
- - use external OS specific script to generate requires lines
- (should work with ld.so 1.8.x) (find-requries)
-
-2.2.7 -> 2.2.8:
- - added --ftpproxy, --ftpport (and wrote about them in rpm.8)
- - added --nodeps to man page
- - added --showrc to man page
- - added conflict checking (use conflicts tag, which looks
- just like the requires tag)
- - fixed RPM's return code when package removal fails
- - cleaned up lib/install.c a bit for readability
- - plugged a bunch of memory leaks thanks to mpr -- install,
- uninstall, verify, and query all seem clean now
- - added support for trees shared over a network via netsharedpath
- in rpmrc
- - don't exit when there is an unknown option in an rpmrc, just
- give an error and continue
- - tried once again to get things working properly with 2.1's
- write behavior
- - added -E option for %patch
- - added UltraSPARC support to lib-rpmrc
- - moved default topdir and optflags settings to lib-rpmrc from
- /etc/rpmrc
- - removed /etc/rpmrc from standard distribution
- - use separate chgrp/chown commands in %setup macro
- - kill(2) arguments were backwards in lib/install.c
- - fileFile logging needed stdio to handle NULL args to %s
- - default docdir (for %doc macro) set in lib-rpmrc rather then
- hardcoded
- - removed some of the \n from args to error() [though many are
- still left]
- - uninstall should fail if the preuninstall script fails
- - --root works with --initdb now
-
-2.2.6 -> 2.2.7:
- - applied lots of portability patches
- - builds on Solaris machines now!
- - will build w/o i18n support if GNU gettext isn't installed
- - added inet_aton, setenv functions for libmisc
- - added Sun4c, Sun4m architectures
- - use vfork() if fork() doesn't exist (for AmigaOS)
- - look for GNU cpio, complain if it doesn't exist at build time
- - put path for GNU cpio in /usr/lib/librpmrc
- - install rpm.shared if rpm wasn't built (for Solaris)
- - readHeader() in librpm.a should work on sockets (which may
- return partial reads)
- - package file query (-q -p) accepts ftp:// style URL's
- - if gzread returns 0 bytes (at EOF), don't call write w/ 0 byte
- argument as it's behviour isn't portable
- - fixed -Vp behavior (doesn't seg fault w/ packages have dependencies)
-
-2.2.5 -> 2.2.6:
- - added --rebuilddb to rebuild database, updated man page
- - fix fd leak in md5sum
- - fixed group cache bug
-
-2.2.4 -> 2.2.5:
- - if rename() for moving .spec file from SOURCES to SPECS fails,
- try copying it instead
- - -h and -v work for source package >= V2
- - -h output is much smoother now
- - new AutoReqProv: tag in spec file can disable automatic
- require/provide generation
- - fixed md5sum problem on big endian machines in a way that's
- mostly backwards compatible; this hack will be removed someday
- - added :fflags tag
- - fixed a couple of minor memory leaks in lib/install.c
- - --test for building
-
-2.2.3 -> 2.2.4:
- - only remove docdir if %doc occurs
- - allow -R to %patch
- - moved to use GNU autoconf, though it probably isn't perfect yet
- (thanks Kristof Depraetere)
- - spec file sanity: no - chars in version or release,
- must be a regular file :-)
- - version specifications for requirements can use "-<release number>"
- - default lib path, tmp path, topdir, and /usr/lib/rpmrc get set
- by configure script relative to --prefix
-
-2.2.2 -> 2.2.3:
- - fixed script file md5 checking when files are in a root
- - implemented proper strdup/free logic for dependency conflict
- lists
- - strip leading directories from ldd output
- - fix non-null-terminated readlink() result
- - fixed sscanf() in ftp code to use proper types
-
-2.2.1 -> 2.2.2:
- - added functionality to rpmlib to suggest resolutions for
- dependency problems
- - fix stupid allocation problem in exclude/exclusive stuff
- - fix nasty bug where pointers in to the header were getting
- stale after some realloc()s in addEntry()
- - ignore OS tag for v2 packages -- it was wrong anyway
- - match shared libs on ".so" rather than ".so."
- - skip blanks from objdump for auto-provide
- - if objdump gets us _end, provide the file name
- - do not ldd non-regular files
- - do not pass leading "/" to ldd
- - fix ExcludeOs: and ExclusiveOs:
- - -V verifies dependencies, can be controlled with --nodeps
- and --nofiles
- - added information on --nodeps to usage messages
- - implement --timecheck and rpmrc timecheck:
- - implement -bl
- - catch duplicate files in file lists
- - some random sanity checking on the file list
-
-2.2 -> 2.2.1:
- - made rpmRemovePackage() print message in verbose mode
- - added support for ftp://user:pass@machine.org/ URL's
- during installation - the password will be prompted for
- if only the user is given, and anonymous ftp will be used
- it both user and password are omitted (as before)
- - Remove Exclusive: Exclude:
- Replace with: ExclusiveArch: ExclusiveOs:
- ExcludeArch: ExcludeOs:
- - fixed dependency cheking for packages that are installed
- at the same time
- - fixed version number dependency checking
- - fixed problem installing v1 source packages (thanks to
- Nikita Borisov)
- - fixed minor spelling/spacing problems (Nikita Borisov)
- - assume all v1 packages were made for Linux so OS check works
- - began to implement proxyftp, though it doesn't work yet
- - fixed spacing when reporting dependency conflicts
- - fixed bug where a long name (uname()) was mapping to itself
-
-2.1.2 -> 2.2:
- - don't fail, and do report, if -K can't find a PGP key
- - handle file names with quotes and spaces when passed to ldd
- (still can't have spaces in %files)
- - do not allow Buildprefix: in sub packages
- - removed require_group from rpmrc -- groups are always required
- - removed arch_sensitive from rpmrc -- always on
- - removed docdir from rpmrc -- always /usr/doc
- - fixed nasty bug in installing packages with large filelists
- - made -R work
- - --provides and --requries don't print anything if no information
- is present (rather then (none) )
- - -qi prints Summary now
- - changed Buildprefix: -> Buildroot: (spec file, rpmrc)
- --buildprefix -> --buildroot (command line)
- RPM_BUILD_PREFIX -> RPM_BUILD_ROOT
- (%prep, %build, %install, %clean)
- sorry :-)
- - allow Prefix: for sub-packages
- - allow packager: in rpmrc
- - --arch and --os are now --buildarch and --buildos
- - magic arch/os handling through arch_canon and os_canon
- see /usr/lib/rpmrc (in short: uname short_name num)
- - removed build_arch: from rpmrc
- Replacing it is buildarchtranslate: and buildostranslate:
- to allow building with arch/os other than what uname() returns.
- Can still be overriden with --buildarch and --buildos
- - rpmrc keywords are now case-insensitive
- - check os at install time
- - check return code from gzread() during installs
- - implemented os_compat
- - added arch_compat and os_compat information to --showrc (the
- changes needed to do this removed any lingering questions about
- the efficiency of the compat lookups for large tables or tables
- with loops -- it should all work fine)
- - made -u (--uninstall) exit with an error and not do anything
- - added --ignoreos
- - fixed error message given when a file is missing
- - fixed hashing when multiple packages are being modified
- - changed man page for readability (thanks to Joseph L. Hartmann, Jr)
-
-2.1.1 -> 2.1.2:
- - fixed error message for unrelocatable packages
- - automatic shared lib provides now work with buildprefix
- - fixed dependency checking during upgrades to work if the
- package wasn't previously installed
- - clean up temp file after signature check
- - dependencies weren't looking through packages that were
- being installed at the same time quite right
-
-2.1 -> 2.1.1:
- - fixed -qi query format
-
-2.0.11 -> 2.1:
- - added --requires, --whatrequires, --provides and
- --whatprovides queries
- - using a string array tag in a queryformat results in every
- item in the string being printed out with spaces in between
- (though this behaviour will probably go away shortly)
- - all packages are ftp'd before any are installed (required to
- do proper dependency checking)
- - if only source packages are being installed, the database is
- never opened
- - automatic shared library require/provides tags generated
- - added --nodeps flag for install and uninstall
- - added dependency checking for installs and uninstalls
- - misc fixes to compile with glibc
- - use PGPPATH if set (and no pgp_path: in rpmrc)
- - remove pgp_pubring, pgp_secring stuff
- - new extensible signature
- - signature section supports multiple signatures
- - --addsign to add a signature to a package
- - PGP key no longer limited to 1024 bits
- - always do at least an MD5 "signature"
- as a result, -K will always tell you something
- - signatures now include a simple "header+archive size" check
- just calling readSignature() checks this
- - --nopgp (with -K) to skip PGP check, just do MD5
- - allow '#' comments in preamble and %files section
- - fixed -qsv to print both the states and the file information
- - added --dump option to query to print all file attributes
- - installs with --root use the /etc/passwd and /etc/group from
- the target directory
- - added --initdb to aid in database initialization
- - --queryformat can print items of type INT8
- - "sourceless" packages with nosource: and nopatch:
- - [] now allows interation through query formats
- - '-' flag for query tags removed
- - :date and :perms supported as query format specifiers
- - new rpmrc entries "arch" and "os" to override
- - --arch and --os on the command line to override
- - arch and os are now strings in the package header
- - added arch_compat handling in /etc/rpmrc
- - added build_arch to /etc/rpmrc
- - support arch as string
- - added --ignorearch option
- - Prefix: in spec file to specify default installation prefix
- - rpmrc and command line may be used to override the path
- used for the rpm database
- - relocatable packages get installed properly
- - added support for --prefix and RPM_INSTALL_PREFIX environemtn
- variable
- - added dependency checking for version numbers
- - added correct dependency checking for upgrades
- - added :depflags query format flag
- - changes --provides, --requires, and --scripts queries to use
- queryFormats
-
-2.0.10 -> 2.0.11:
- - fixed chmod(symlink) bug (since 2.0.9)
-
-2.0.9 -> 2.0.10:
- - fixed the fix to rpm -q <num> bug
- to query by number you now need --querybynumber
- - made arch_sensitive on by default
- - handle # comments in preamble
- - don't barf if we can't canonicalize the hostname during builds
- - fixed --verify with --root
-
-2.0.8 -> 2.0.9:
- - %files -f <file>
- - prelim Require/Provide handling
- - prelim strict checking of spec file
- - removed some bash-isms
- - fixed globbing/root bug
- - fixed rpm -q <num> bug
- - fixed ftw() related bug where symlinks were being
- followed in %files rather than just being noted!!
- - pass "upgrade" arg to pre/post scripts when upgrading
- - use PATH to find cpio when installing
- - fixed rpm.magic, added sun4, mips, 68k, sgi, sunos, solaris
- - added %attr(mode owner group) feature to file list
- - fixed dumb %verify() parse bug
-
-2.0.7 -> 2.0.8:
- - explicitly turn off ASCII armor when running PGP
- - fixed --noscripts logic, which was on by default and
- off if you specified it!
- - uses a temp file to pass filenames to cpio in case when
- their are more then 500 filenames in a package
- - added --rcfile
- - fixed problem with $HOME/.rcfile not being read
- - undocumented --search, --where, --keep-temps which
- will probably won't be implemented in RPM 2.x anyway
-
-2.0.6 -> 2.0.7:
- - builds now set umask 022 for all scripts
- - queries relative paths correctly (thanks to Johnie Stafford)
- - fixed error codes for failed installs
- - don't add NULL entry to group index for packages that don't
- have group information, add it to the "Unknown" group instead
- - added --scripts query option
- - added --noscripts for installing and uninstall without using
- the pre/post scripts
- - "rpm -qd" and "rpm -qc" work properly now (they didn't imply
- -l before)
-
-2.0.5 -> 2.0.6:
- - internal changes to error messages
-
-2.0.4 -> 2.0.5:
- - added support for generic querying
- - added --querytags option
- - updated man page for above two
- - short-circuit got added before 2.0.5, but I don't know when
- - query and installs should now return 0 on success and nonzero
- otherwise (rpm -i should return the number of packages that
- failed actually)
- - made rpm -qa fail if extra arguments are passed to it
-
-2.0.3 -> 2.0.4:
- - added support for PowerPC, and OSF mklinux ports
- - added --resign
- - added --recompile
- - added verbose error messages from Tyson Sawyer
- - rpmconvert won't overwrite an existing database
- - won't core dump querying old format source packages
- - freed minor memory leak
- - more descriptive error messages during build
- - added support for not installing documentation
-
-2.0.2 -> 2.0.3:
- - added support for 686, 786, 886, 986
-
-2.0.1 -> 2.0.2:
- - fixed ftp.c to return an error code when select timeouts
- - added basic NLS support, along with a Sweedish message catalog
- (thanks to Michael Nyquist)
-
-2.0 -> 2.0.1:
- - hashing and percentages no longer SIGFPE on 0 byte packages
- - when an ftp fails, install.c no longer tries to install the package
- - uses /var/tmp rather then /usr/tmp during for ftp space
- - added debugging messages to ftp.c
- - fixed some mistakes in the PGP section of the man page
- - added mdfile prototype to rpmlib.h - the Python module wants this
- - fixed struct oldrpmlead to align properly on the alpha
-
-2.0 - everything done :-)
-
-2.0b -> 2.0c:
- - an incredible number of changes - I won't bother trying to
- list them
-
-2.0a -> 2.0b:
- - moved build stuff to main rpm command, though --rebuild is still
- not supported
- - install should work, although replaced files are not marked as
- replaced
- - %doc macro fixed
- - --percent, --hash work for installs
- - converted databases and packages get the file list in the correct
- order now
- - none of this is well tested
- - rpms are output to proper dirs (which are always arch sensitive)
- - basic rpmrc functions are implemented, full parsing is present
- - changed error messages for missing files to include full path
- - fixed detection of Alpha's
-
-1.4.6 -> 2.0a:
- - completely rewritten in C
- - verification missing
- - build functionality not in main rpm, in rpmbuild instead
- (this will be corrected)
- - an awful lot is still missing - this is an ALPHA release
-
-1.4.5 -> 1.4.6:
- - fixed rpmq problem with packages w/o groups (old RPM's would do this)
- - fixed uninstalling with --root
-
-1.4.4 -> 1.4.5:
- - added support for mips processors
- - added support for osf1 and irix os's
-
-1.4.3 -> 1.4.4:
- - fixed bug in arch detection code which caused i386 failure
-
-1.4.2 -> 1.4.3:
- - added tokens for SPARC, MIPS, PowerPC, and 680x0 architectures
- - fixed sparc arch, added arch sanity check
-
-1.4.1 -> 1.4.2:
- - added --root to man page, usage, and help messages
- - added a " " to the "Creating directory" debug message in install.pl
- - make --rebuild fail on binary packages
- - don't output prep/build/install sections if there aren't any
-
-1.4 -> 1.4.1:
- - fixed man page
- - updated corruption messages to not mention --rebuild
- - added RPM_PACKAGE_VERSION and RPM_PACKAGE_RELEASE variables
- at build time
- - no longer allows installing binary packages across architectures
- - fixed handling of symlinks marked as config files
-
-1.3.2 -> 1.4:
- - make -v the default when using -b and --rebuild
- - added %postbuild as an alias for %clean
- - added gendiff
- - added groups file installed in /usr/lib/rhs/rpm
- - made usage message different and more concise then the --help message
- - added --version option
- - updated man page
- - changed C build tree for concurrent building on multiple architectures
-
-1.3.1 -> 1.3.2:
- - add -b option to %patch
- - fixed install/chroot temp file deleting
-
-1.3 -> 1.3.1:
- - fixed bug when doing md5 of erased config file during rpm -u
- - fixed spec file searching
-
-1.2 -> 1.3:
- - added --search and --where options
- - multiarchitecture support
- - added --rebuild option
- - started C rewrite - rpmq (query options only)
-
-1.1 -> 1.2:
- - preuninstalls weren't getting handled properly
- - Alpha architecture is now recognized and builds are allowed
- - the database open is checked for success before continuing
- - rpm -b? checks the SPEC files for package names given as args
diff --git a/COPYING b/COPYING
index 3ffa0ab95..57b3f12ae 100644
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-RPM and it's source code are covered under two separate licenses.
+RPM is covered under two separate licenses.
The entire code base may be distributed under the terms of the GNU General
Public License (GPL), which appears immediately below. Alternatively,
@@ -8,7 +8,7 @@ distributed under the GNU Library General Public License (LGPL), at the
choice of the distributor. The complete text of the LGPL appears
at the bottom of this file.
-This alternatively is allowed to enable applications to be linked against
+This alternative is provided to enable applications to be linked against
the RPM library (commonly called librpm) without forcing such applications
to be distributed under the GPL.
diff --git a/CREDITS b/CREDITS
index 97779b350..ea30c105e 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1,39 +1,162 @@
-Work on RPM was done primarily by:
+Initial work on RPM was done primarily by:
- Erik Troan
Marc Ewing
+ Erik Troan
-Significant code, ideas, or porting help have been contributed by:
+Over the years, code, documentation, ideas, porting help, tests etc
+have been contributed by:
+ Tero Aho
Stuart Anderson
Ed Bailey
Donnie Barnes
+ Stefan Berger
+ Eric W. Biederman
+ Anders F Bjorklund
+ Frederic Bonnard
Nikita Borisov
+ Pádraig Brady
+ Tony Breeds
Till Bubeck
+ Héctor Daniel Cabrera
+ Davide Cavalca
+ Yuri Chornoivan
+ Michal ÄŒihaÅ™
+ Archie Cobbs
+ Ralf Corsépius
Kit Cosper
+ Rafal Cygnarowski
+ Jean Delvare
Kristof Depraetere
Alex deVries
+ Johannes Dewender
+ Michal Domonkos
+ Piotr DrÄ…g
+ Boris Egorov
Karl Eichwalder
+ Peter Eisentraut
+ W. L. Estes
+ Giulio Eulisse
+ Christophe Fergeau
+ Florian Festi
+ Jakub Filak
+ Brian Elliott Finley
Fred Fish
+ Nikola Forró
+ Gleb Fotengauer-Malinovskiy
David Fox
- Joseph L. Hartmann, Jr
+ Artur Frysiak
+ Stephen Gallagher
+ Rafael Garcia-Suarez
+ Alexey Gladkov
+ Igor Gnatenko
+ Neal Gompa
+ Guido Grazioli
+ David Greaves
+ Aron Griffis
+ Fionnuala Gunter
+ Anssi Hannula
+ Richard Hughes
+ Tom Hughes
+ Thomas Jarosch
+ Zbigniew Jędrzejewski-Szmek
+ Jakub Jelinek
Jeff Johnson
Michael K. Johnson
+ Tadashi Jokagi
+ Peter Jones
+ Richard W.M. Jones
+ Guillem Jover
+ Joseph L. Hartmann, Jr
+ Juha Kallioinen
+ Alexandr D. Kanevskiy
Eugene Kanter
+ Lubos Kardos
+ Per Øyvind Karlsen
+ Jiri Kastner
+ Peter Kjellerstedt
+ Phil Knirsch
+ Michal Kochanowicz
+ Ales Kozumplik
+ Jan Kratochvil
Toshio Kuratomi
+ Tim Landscheidt
Hermann Lauer
+ Steve Lawrence
+ Alec Leamas
+ Dimitri John Ledkov
Elliot Lee
+ Robin Lee
+ Simon Lees
+ Dominique Leuenberger
Benedict Lofstedt
+ Till Maas
+ David Malcolm
+ Michal Marek
+ Panu Matilainen
Jared Mauch
+ Roland McGrath
+ Kyle McMartin
+ Joshua Megerman
Nigel Metheringham
+ Arkadiusz Miśkiewicz
+ Tomas Mlcoch
Horacio Rodriguez Montero
Tim Mooney
+ David Martínez Moreno
Eric Mumpower
+ Paul Nasrat
+ Gustavo Niemeyer
+ Jindrich Novy
Michael Nyquisk
+ Stanislav Ochotnicky
+ Denis Ollier
+ Vít Ondruch
+ Tomas Orsava
+ Rakesh Pandit
+ Thomas Petazzoni
+ Jan Pokorný
+ Trần Ngá»c Quân
+ Jerome Quelin
+ Pavel Raiskup
+ Elena Reshetova
+ Sebastian Riedel
+ Lubomir Rintel
+ Pavol Rusnak
+ Kamil Rytarowski
+ Mark Salter
Steve Sanbeg
Tyson Sawyer
+ Andreas Scherer
+ Michal Schmidt
+ Michael Schroeder
+ Andreas Schwab
Christopher Seawood
+ Misha Shnurapet
+ Kirill A. Shutemov
+ Jan Silhan
+ Taylon Silmer
+ Mukund Sivaraman
+ Ville Skyttä
+ Jeff Smith
Johnie Stafford
- Gary Thomas
+ Hajime Taira
Bob Tanner
+ Pascal Terjan
+ Gary Thomas
+ Jeff Tickle
+ Michal Toman
+ Alexey Tourbin
+ Tom Tromey
+ Chip Turner
+ Vincent Untz
+ Pavlina Varekova
+ Nicolas Vigier
+ Thierry Vignaud
+ Jonathan Wakely
+ Colin Walters
+ Florian Weimer
Karsten Weiss
+ Bernhard M. Wiedemann
+ Mark Wielaard
+ Mimi Zohar
diff --git a/INSTALL b/INSTALL
index 85cc8d61f..053672768 100644
--- a/INSTALL
+++ b/INSTALL
@@ -9,17 +9,34 @@ The libmagic (aka file) library for file type detection (used by rpmbuild).
The source for the file utility + library is available from
ftp://ftp.astron.com/pub/file/
-The NSS >= 3.12 library for encryption, and NSPR library which NSS uses.
-Both NSPR and NSS libraries and headers need to be installed during RPM
-compilation. As NSPR and NSS typically install their headers outside
-the regular include search path, you need to tell configure about this,
-eg something like:
+You will need a cryptographic library to support digests and signatures.
+This library may be Mozilla NSS, OpenSSL or beecrypt. Which library to use
+must be specified with the --with-crypto=[beecrypt|nss|openssl] argument
+to configure.
+
+If using the Mozilla NSS library for encyption (and NSPR library which
+NSS uses) it must be version 3.12 or later. Both NSPR and NSS libraries and
+headers need to be installed during RPM compilation. As NSPR and NSS
+typically install their headers outside the regular include search path,
+you need to tell configure about this, eg something like:
./configure <......> CPPFLAGS="-I/usr/include/nspr -I/usr/include/nss"
The NSPR and NSS libraries are available from
http://www.mozilla.org/projects/security/pki/nss/
http://www.mozilla.org/projects/nspr/
+If using the OpenSSL library for encryption, it must be version 1.0.2 or
+later. Note: when compiling against OpenSSL, there is a possible license
+incompatibility. For more details on this, see
+https://people.gnome.org/~markmc/openssl-and-the-gpl.html
+Some Linux distributions have different legal interpretations of this
+possible incompatibility. It is recommended to consult with a lawyer before
+building RPM against OpenSSL.
+Fedora: https://fedoraproject.org/wiki/Licensing:FAQ#What.27s_the_deal_with_the_OpenSSL_license.3F
+Debian: https://lists.debian.org/debian-legal/2002/10/msg00113.html
+
+The OpenSSL crypto library is available from https://www.openssl.org/
+
The Berkeley DB >= 4.3.x (4.5.x or newer recommended) is required for the
default database backend. BDB can be downloaded from
http://www.oracle.com/technology/software/products/berkeley-db/index.html
@@ -77,7 +94,7 @@ is available from
It may be desired to install bzip2, gzip, and xz/lzma so that RPM can use these
formats. Gzip is necessary to build packages that contain compressed
tar balls, these are quite common on the Internet.
-These are availible from
+These are available from
http://www.gzip.org
http://www.bzip.org
http://tukaani.org/xz/
@@ -162,9 +179,9 @@ and then install with:
make install
Rpm comes with an automated self-test suite. The test-suite relies heavily
-on fakechroot (https://github.com/fakechroot/) and cannot be executed
+on fakechroot (https://github.com/dex4er/fakechroot/) and cannot be executed
without it. Provided that fakechroot was found during configure,
-it can be executed after a succesful build with:
+it can be executed after a successful build with:
make check
@@ -186,7 +203,7 @@ with two rpms which can be found in RPMS and SRPMS.
If you are going to install rpm on machines with OS package managers
other then rpm, you may choose to install the base rpm package via a
cpio instead of a tar file. Instead of running "make tar" during the
-build process, as discribed above, use the base rpm packages to create
+build process, as described above, use the base rpm packages to create
a cpio. After the rpms have been created run rpm2cpio on the base rpm
package, this will give you a cpio package which can then use to
install rpm on a new system.
@@ -208,13 +225,13 @@ an issue.
RPM will need to be informed of all the dependencies which were
satisfied before RPM was installed. Typically this only refers to
libraries that are installed by the OS, but may include other
-libraries and packages which are availible at the time RPM is
+libraries and packages which are available at the time RPM is
installed and will not under RPM control. Another common example of
libraries which may need dependency provisions are precompiled
libraries which are installed by the OS package manager during system
build time. The list of dependencies you will wish to load into RPM
will depend on exactly how you bootstrap RPM onto your system and what
-parts of the sytem you put into packages as well as on the specific OS
+parts of the system you put into packages as well as on the specific OS
you are using.
The script vpkg-provides.sh can be used to generate a package which
@@ -231,7 +248,7 @@ can use the option:
By default the generated rpm will include a %verifyscript to verify
checksum of all files traversed has not changed. This additional
-check can be surpressed with:
+check can be suppressed with:
--no_verify
diff --git a/Makefile.am b/Makefile.am
index 3cb3365b4..77fe7eec2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,14 +2,14 @@
ACLOCAL_AMFLAGS = -I m4
-DISTCHECK_CONFIGURE_FLAGS = --with-external-db
+DISTCHECK_CONFIGURE_FLAGS = --with-external-db --enable-python --enable-zstd
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
CLEANFILES =
-EXTRA_DIST = CHANGES ChangeLog CREDITS GROUPS INSTALL \
- autodeps autogen.sh \
- db3/configure installplatform platform.in
+EXTRA_DIST = ChangeLog CREDITS INSTALL \
+ autogen.sh db3/configure installplatform platform.in
BUILT_SOURCES =
SUBDIRS = po misc
@@ -41,7 +41,9 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
AM_CPPFLAGS += -I$(top_srcdir)/build
AM_CPPFLAGS += -I$(top_srcdir)/lib
AM_CPPFLAGS += -I$(top_srcdir)/rpmio
+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
AM_CPPFLAGS += @WITH_NSS_INCLUDE@
+AM_CPPFLAGS += @WITH_OPENSSL_INCLUDE@
AM_CPPFLAGS += @WITH_POPT_INCLUDE@
AM_CPPFLAGS += -I$(top_srcdir)/misc
AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\""
@@ -72,6 +74,7 @@ pkginclude_HEADERS += lib/rpmcli.h
pkginclude_HEADERS += lib/rpmlib.h
pkginclude_HEADERS += lib/rpmds.h
pkginclude_HEADERS += lib/rpmfi.h
+pkginclude_HEADERS += lib/rpmfiles.h
pkginclude_HEADERS += lib/rpmlegacy.h
pkginclude_HEADERS += lib/rpmpol.h
pkginclude_HEADERS += lib/rpmps.h
@@ -82,6 +85,7 @@ pkginclude_HEADERS += lib/rpmte.h
pkginclude_HEADERS += lib/rpmts.h
pkginclude_HEADERS += lib/rpmtypes.h
pkginclude_HEADERS += lib/rpmvf.h
+pkginclude_HEADERS += lib/rpmarchive.h
pkginclude_HEADERS += sign/rpmsign.h
@@ -95,12 +99,13 @@ rpmbin_PROGRAMS = rpm
bin_PROGRAMS = rpm2cpio rpmbuild rpmdb rpmkeys rpmsign rpmspec
+if WITH_ARCHIVE
+bin_PROGRAMS += rpm2archive
+endif
+
rpmlibexec_PROGRAMS =
-rpmconfig_SCRIPTS = autodeps/find-provides autodeps/find-requires \
- mkinstalldirs \
+rpmconfig_SCRIPTS = mkinstalldirs \
config.guess config.sub
-DISTCLEANFILES = autodeps/find-provides
-DISTCLEANFILES += autodeps/find-requires
noinst_LTLIBRARIES = libcliutils.la
libcliutils_la_SOURCES = cliutils.h cliutils.c
@@ -112,23 +117,28 @@ rpm_SOURCES = rpmqv.c debug.h system.h
rpm_CPPFLAGS = $(AM_CPPFLAGS) -DIAM_RPMEIU -DIAM_RPMQ -DIAM_RPMV
rpm_LDADD = libcliutils.la
rpm_LDADD += lib/librpm.la rpmio/librpmio.la
-rpm_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+
+rpm_LDADD += @WITH_POPT_LIB@
rpm_CFLAGS = $(CFLAGS) -fPIE
rpm_LDFLAGS = $(LDFLAGS) -pie
+
rpmdb_SOURCES = rpmdb.c debug.h system.h
rpmdb_CPPFLAGS = $(AM_CPPFLAGS)
rpmdb_LDADD = libcliutils.la
rpmdb_LDADD += lib/librpm.la rpmio/librpmio.la
-rpmdb_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+
+rpmdb_LDADD += @WITH_POPT_LIB@
rpmdb_CFLAGS = $(CFLAGS) -fPIE
rpmdb_LDFLAGS = $(LDFLAGS) -pie
+
rpmkeys_SOURCES = rpmkeys.c debug.h system.h
rpmkeys_CPPFLAGS = $(AM_CPPFLAGS)
rpmkeys_LDADD = libcliutils.la
rpmkeys_LDADD += lib/librpm.la rpmio/librpmio.la
-rpmkeys_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+
+rpmkeys_LDADD += @WITH_POPT_LIB@
rpmkeys_CFLAGS = $(CFLAGS) -fPIE
rpmkeys_LDFLAGS = $(LDFLAGS) -pie
@@ -136,39 +146,56 @@ rpmsign_SOURCES = rpmsign.c debug.h system.h
rpmsign_CPPFLAGS = $(AM_CPPFLAGS)
rpmsign_LDADD = libcliutils.la
rpmsign_LDADD += sign/librpmsign.la lib/librpm.la rpmio/librpmio.la
-rpmsign_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+rpmsign_LDADD += @WITH_POPT_LIB@
rpmbuild_SOURCES = rpmbuild.c debug.h system.h
rpmbuild_CPPFLAGS = $(AM_CPPFLAGS)
rpmbuild_LDADD = libcliutils.la
rpmbuild_LDADD += build/librpmbuild.la lib/librpm.la rpmio/librpmio.la
-rpmbuild_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+rpmbuild_LDADD += @WITH_POPT_LIB@
rpmspec_SOURCES = rpmspec.c debug.h system.h
rpmspec_CPPFLAGS = $(AM_CPPFLAGS)
rpmspec_LDADD = libcliutils.la
rpmspec_LDADD += build/librpmbuild.la lib/librpm.la rpmio/librpmio.la
-rpmspec_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+rpmspec_LDADD += @WITH_POPT_LIB@
rpm2cpio_SOURCES = rpm2cpio.c debug.h system.h
rpm2cpio_LDADD = lib/librpm.la rpmio/librpmio.la
-rpm2cpio_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@
+rpm2cpio_LDADD += @WITH_POPT_LIB@
rpm2cpio_CFLAGS = $(CFLAGS) -fPIE
rpm2cpio_LDFLAGS = $(LDFLAGS) -pie
+rpm2archive_SOURCES = rpm2archive.c debug.h system.h
+rpm2archive_LDADD = lib/librpm.la rpmio/librpmio.la
+rpm2archive_LDADD += @WITH_POPT_LIB@ @WITH_ARCHIVE_LIB@
+
+
if LIBELF
+if LIBDW
+
rpmconfig_SCRIPTS += scripts/find-debuginfo.sh
rpmlibexec_PROGRAMS += debugedit
debugedit_SOURCES = tools/debugedit.c tools/hashtab.c tools/hashtab.h
debugedit_LDADD = rpmio/librpmio.la
debugedit_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@
-
+if HAVE_LIBDW_STRTAB
+debugedit_LDADD += @WITH_LIBDW_LIB@
+else
+debugedit_LDADD += @WITH_LIBDW_LIB@ -lebl
+endif # HAVE_LIBDW_STRTAB
+endif # LIBDW
rpmlibexec_PROGRAMS += elfdeps
elfdeps_SOURCES = tools/elfdeps.c
elfdeps_LDADD = rpmio/librpmio.la
elfdeps_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@
-endif
+
+rpmlibexec_PROGRAMS += sepdebugcrcfix
+sepdebugcrcfix_SOURCES = tools/sepdebugcrcfix.c
+sepdebugcrcfix_LDADD = @WITH_LIBELF_LIB@
+
+endif #LIBELF
rpmlibexec_PROGRAMS += rpmdeps
rpmdeps_SOURCES = tools/rpmdeps.c
@@ -195,13 +222,16 @@ rpmrc: $(top_srcdir)/rpmrc.in
CLEANFILES += rpmrc.tmp rpmrc
EXTRA_DIST += rpmrc.in
-rpmconfig_DATA += macros
+noinst_DATA = macros
macros: $(top_srcdir)/macros.in
( cd $(top_builddir) && ./config.status --file=${subdir}/macros:${subdir}/macros.in )
CLEANFILES += macros
EXTRA_DIST += macros.in
-noinst_DATA = platform
+# Used for the testsuite to test creating debuginfo packages
+EXTRA_DIST += macros.debug
+
+noinst_DATA += platform
platform: $(top_srcdir)/platform.in
@$(SED) \
-e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \
@@ -236,29 +266,32 @@ rpmvar_DATA =
install-exec-hook:
@rm -f $(DESTDIR)$(bindir)/rpmquery
- @LN_S@ ../../bin/rpm $(DESTDIR)$(bindir)/rpmquery
+ @LN_S@ $(rpm_symlink_prefix)rpm $(DESTDIR)$(bindir)/rpmquery
@rm -f $(DESTDIR)$(bindir)/rpmverify
- @LN_S@ ../../bin/rpm $(DESTDIR)$(bindir)/rpmverify
+ @LN_S@ $(rpm_symlink_prefix)rpm $(DESTDIR)$(bindir)/rpmverify
install-data-local:
DESTDIR="$(DESTDIR)" pkglibdir="$(rpmconfigdir)" \
$(SHELL) $(top_srcdir)/installplatform \
- rpmrc platform \
+ rpmrc platform macros \
$(RPMCANONVENDOR) $(RPMCANONOS) $(RPMCANONGNU)
@$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp
+ @$(MKDIR_P) $(DESTDIR)$(rpmconfigdir)/macros.d
# XXX to appease distcheck we need to remove "stuff" here...
uninstall-local:
@rm -f $(DESTDIR)$(bindir)/rpmquery
@rm -f $(DESTDIR)$(bindir)/rpmverify
@rm -rf $(DESTDIR)$(rpmconfigdir)/platform/
+ @rm -f $(DESTDIR)$(rpmconfigdir)/macros
+ @rm -rf $(DESTDIR)$(rpmconfigdir)/macros.d
MAINTAINERCLEANFILES = ChangeLog
# Build hacking docs only on request
if HACKINGDOCS
if DOXYGEN
-doc/hacking.doxy: doc/hacking.doxy.in doc/hacking/Doxyheader Makefile.am
+doc/hacking.doxy: doc/hacking.doxy.in doc/hacking/Doxyheader.h Makefile.am
$(SED) \
-e "s,\@top_srcdir\@/,$(top_srcdir)/,g" \
-e "s,[@]HAVE_DOT[@],$(HAVE_DOT)," \
@@ -271,12 +304,12 @@ doc/hacking/html/index.html: doc/hacking.doxy rpmpopt-@VERSION@
noinst_DATA += doc/hacking/html/index.html
endif
endif
-EXTRA_DIST += doc/hacking.doxy.in doc/hacking/Doxyheader
+EXTRA_DIST += doc/hacking.doxy.in doc/hacking/Doxyheader.h
# Always build librpm docs
if DOXYGEN
-doc/librpm.doxy: doc/librpm.doxy.in doc/librpm/Doxyheader Makefile.am $(pkginclude_HEADERS)
- files=`echo " $(HEADERS)" | $(SED) -e "s, , \@top_srcdir\@/,g"`; \
+doc/librpm.doxy: doc/librpm.doxy.in doc/librpm/Doxyheader.h Makefile.am configure.ac $(pkginclude_HEADERS)
+ files=`echo " $(pkginclude_HEADERS)" | $(SED) -e "s, , \@top_srcdir\@/,g"`; \
$(SED) -e "s,[@]pkginclude_HEADERS[@],$$files," \
-e "s,\@top_srcdir\@/,$(top_srcdir)/,g" \
-e "s,[@]HAVE_DOT[@],$(HAVE_DOT)," \
@@ -288,7 +321,7 @@ doc/librpm/html/index.html: doc/librpm.doxy
@DOXYGEN@ doc/librpm.doxy
noinst_DATA += doc/librpm/html/index.html
endif
-EXTRA_DIST += doc/librpm.doxy.in doc/librpm/Doxyheader
+EXTRA_DIST += doc/librpm.doxy.in doc/librpm/Doxyheader.h
EXTRA_DIST += doc/librpm/html
if WITH_INTERNAL_DB
@@ -296,19 +329,23 @@ db.h: $(top_builddir)/db3/db.h
$(LN_S) $(top_builddir)/db3/db.h $@
BUILT_SOURCES += db.h
endif
-DISTCLEANFILES += db.h
+DISTCLEANFILES = db.h
+
+ChangeLog:
+ touch ChangeLog
+
+dist-hook:
+ if [ -d .git ] && [ -x $(command -v git) ]; then git log --no-merges > $(distdir)/ChangeLog; fi
clean-local:
rm -rf doc/hacking/html
rm -rf include
distclean-local:
+ rm -rf doc/librpm.doxy doc/librpm/html
rm -rf Doxytags
rm -f stamp-h.in db3/*.orig db3/db3lobjs
-maintainer-clean-local:
- rm -rf doc/librpm/html
-
$(top_srcdir)/preinstall.am: Makefile.am
rm -f $(top_srcdir)/preinstall.am
@for f in $(HEADERS); do \
diff --git a/Makefile.maint b/Makefile.maint
deleted file mode 100644
index 6eddaa1f4..000000000
--- a/Makefile.maint
+++ /dev/null
@@ -1,7 +0,0 @@
-include Makefile
-
-snapshot: ChangeLog
- @$(MAKE) dist VERSION=$(VERSION).git`git log --pretty=oneline|wc -l`
-
-ChangeLog: .git
- @git log --no-merges > ChangeLog
diff --git a/README b/README
index 9b4f643c9..7bf76bcf3 100644
--- a/README
+++ b/README
@@ -7,7 +7,7 @@ The latest releases are always available at:
Additional RPM documentation (papers, slides, HOWTOs) can also be
found at the same site: http://rpm.org.
-http://rpm.org/wiki/Communicate lists all rpm releated mailing lists.
+http://rpm.org/community all rpm releated mailing lists.
RPM was originally written by:
diff --git a/autodeps/.gitignore b/autodeps/.gitignore
deleted file mode 100644
index 115175668..000000000
--- a/autodeps/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/find-provides
-/find-requires
diff --git a/autodeps/aix.prov b/autodeps/aix.prov
deleted file mode 100644
index 6f7c8bd52..000000000
--- a/autodeps/aix.prov
+++ /dev/null
@@ -1,78 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Ralph Goers(rgoer@Candle.Com)
-# Borrowed heavily from Tim Mooney's HP version.
-# This file is distributed under the terms of the GNU General Public License
-#
-# find-requires is part of RPM, the RedHat Package Manager. find-requires
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries the package requires to run correctly.
-#
-
-find_prov_ia64()
-{
- # On AIX for IA64, use the file command to find shared modules
- #
- # Example file output:
- #
- #$file /usr/lib/ia64l32/libc.so
- #/usr/lib/ia64l32/libc.so: ELF 32-bit LSB version 1 AIX shared obj IA-64
- #
- #
- #
-
- # Search for shared objects - the file command on AIX for IA64 reports
- # shared objects
- sed -e "s/['\"]/\\\&/g" -e "s/$/\//g" | LANG=C xargs file | grep -e ":.*shared obj" | cut -d: -f1 | sed "s/\/$//g" | xargs -i basename {} | sort -u
-}
-
-find_prov_power()
-{
- #
- # Example dump output:
- #
- #$dump -H /usr/bin/dump
- #
- #/usr/bin/dump:
- #
- # ***Loader Section***
- # Loader Header Information
- #VERSION# #SYMtableENT #RELOCent LENidSTR
- #0x00000001 0x00000021 0x0000006c 0x0000002f
- #
- ##IMPfilID OFFidSTR LENstrTBL OFFstrTBL
- #0x00000002 0x00000848 0x00000049 0x00000877
- #
- #
- # ***Import File Strings***
- #INDEX PATH BASE MEMBER
- #0 /usr/lib:/lib:/usr/lpp/xlC/lib
- #1 libc.a shr.o
-
- #
- #
-
- # Search executables, archives, and symlinks to those types for shared
- # objects
- sed -e "s/['\"]/\\\&/g" -e "s/$/\//g" | LANG=C xargs file | grep -e ":.*executable" -e ":.*archive" | cut -d: -f1 | sed "s/\/$//g" |
-
- # Use the verbose version of dump to find the sharable objects
- while read f
- do
- LANG=C /usr/bin/dump -ov $f/ 2>/dev/null | grep -E "^Flags.*SHROBJ|:$" |
- awk 'match($1,":$") { member=$1 }
- !match($1,":$") {print member} '
- done | sed -e 's/:$//' -e 's/\/\[/\(/g' -e 's/\]/)/g' | xargs -i basename {} |
- sort -u
-}
-
-PATH=/usr/bin
-
-machinetype=`uname -m`
-if [[ $machinetype = "ia64" ]]
-then
- find_prov_ia64
-else
- find_prov_power
-fi
-
diff --git a/autodeps/aix.req b/autodeps/aix.req
deleted file mode 100755
index e8503b3bb..000000000
--- a/autodeps/aix.req
+++ /dev/null
@@ -1,171 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Ralph Goers(rgoer@Candle.Com)
-# Borrowed heavily from Tim Mooney's HP version.
-# This file is distributed under the terms of the GNU General Public License
-#
-# find-requires is part of RPM, the RedHat Package Manager. find-requires
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries the package requires to run correctly.
-#
-
-find_req_power ()
-{
- # On AIX Power, use `dump -H' to find the library dependencies
- # for an executable
- #
- # Example dump output:
- #
- #$dump -H /usr/bin/dump
- #
- #/usr/bin/dump:
- #
- # ***Loader Section***
- # Loader Header Information
- #VERSION# #SYMtableENT #RELOCent LENidSTR
- #0x00000001 0x00000021 0x0000006c 0x0000002f
- #
- ##IMPfilID OFFidSTR LENstrTBL OFFstrTBL
- #0x00000002 0x00000848 0x00000049 0x00000877
- #
- #
- # ***Import File Strings***
- #INDEX PATH BASE MEMBER
- #0 /usr/lib:/lib:/usr/lpp/xlC/lib
- #1 libc.a shr.o
-
- #
- #
-
- while read f
- do
- # Find the required symbols in executables and the required shells in
- # scripts
- LANG=C /usr/bin/file $f | /usr/bin/grep -q -e ":.*shell script"
-
- if [ $? -ne 0 ] # Use dump to examine executables
- then
- LANG=C /usr/bin/dump -H $f 2>/dev/null | awk '
-
- #
- # Since this entire awk script is enclosed in single quotes,
- # you need to be careful to not use single quotes, even in awk
- # comments, if you modify this script.
- #
-
- BEGIN {
- in_shlib_list = 0;
- in_file_strings = 0;
- FS = " ";
- RS = "\n";
- }
-
- in_shlib_list == 1 && /^$/ {
- in_shlib_list = 0;
- in_file_strings = 0;
- }
-
- in_shlib_list == 1 {
- pos = index($2, "/")
- numfields = split($0, fields, " ")
-
- if (pos == 0) {
- namevar = 2
- }
- else {
- namevar = 3
- }
- if (namevar < numfields) {
- printf("%s(%s)\n", fields[namevar], fields[namevar+1])
- }
- else {
- if ((fields[namevar] != ".") && (fields[namevar] != "..")) {
- print fields[namevar]
- }
- }
- }
-
- in_file_strings == 1 && $1 == "0" {
- in_shlib_list = 1
- }
-
- /\*Import File Strings\*/ {
- in_file_strings = 1
- }
- ' # end of awk
- else # shell scripts
- if [ -x $f ]; then
- /usr/bin/head -1 $f | /usr/bin/sed -e 's/^\#\![ ]*//' | /usr/bin/cut -d" " -f1
- fi
- fi
- done | sort -u
-}
-
-find_req_ia64 ()
-{
- # On AIX IA64, use `dump -Lv' to find the library dependencies
- # for an executable
- #
- # Example dump output:
- #
- #$dump -Lv /usr/bin/dump
- #
- #
- #/usr/bin/dump:
- #
- # **** DYNAMIC SECTION INFORMATION ****
- #[INDEX] Tag Value
- #
- #.dynamic:
- #[1] NEEDED libC.so.1
- #[2] NEEDED libelf.so
- #[3] NEEDED /usr/lib/ia64l32/libc.so.1
- #[4] INIT 0x1001d6c0
- #[5] FINI 0x1001d700
- #[6] HASH 0x1000011c
- #[7] STRTAB 0x10000914
- #[8] SYMTAB 0x10000364
- #[9] STRSZ 0x3dd
- #[10] SYMENT 0x10
- #[11] PLTGOT 0x20018994
- #[12] PLT_RESERVE 0x20018a00
- #[13] PLTSZ 0x1c0
- #[14] PLTREL REL
- #[15] JMPREL 0x100024bc
- #[16] REL 0x10000cf4
- #[17] RELSZ 0x17c8
- #[18] RELENT 0x8
- #
- #
-
- while read f
- do
- # Find the required symbols in executables and the required shells in
- # scripts
- LANG=C /usr/bin/file $f | /usr/bin/grep -q -e ":.*shell script"
-
- if [ $? -ne 0 ] # Use dump to examine executables
- then
- LANG=C /usr/bin/dump -Lv $f 2>/dev/null | \
- awk '$2=="NEEDED" {print $3}' | xargs -i basename {}
-
- else # Extract the exec module from shell scripts
- if [ -x $f ]; then
- head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1
- fi
- fi
- done | sort -u
-}
-
-machinetype=`uname -m`
-if [[ $machinetype = "ia64" ]]
-then
- /usr/bin/sed "s/['\"]/\\\&/g" | LANG=C /usr/bin/xargs /usr/bin/file | \
- /usr/bin/grep -e ":.*executable" -e ":.*archive" -e ":.*shell script" | /usr/bin/cut -d: -f1 |
- find_req_ia64
-else
- /usr/bin/sed "s/['\"]/\\\&/g" | LANG=C /usr/bin/xargs /usr/bin/file | \
- /usr/bin/grep -e ":.*executable" -e ":.*archive" -e ":.*shell script" | /usr/bin/cut -d: -f1 |
- find_req_power
-fi
-
diff --git a/autodeps/aix4.prov b/autodeps/aix4.prov
deleted file mode 100644
index 59637a76f..000000000
--- a/autodeps/aix4.prov
+++ /dev/null
@@ -1,189 +0,0 @@
-#! /usr/bin/ksh
-
-# Current Maintainer: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-#
-# Original Author: Ralph Goers(rgoer@Candle.Com)
-# Borrowed heavily from H10 version created by Tim Mooney.
-# This file is distributed under the terms of the GNU Public License
-#
-# find-provides is part of RPM, the RedHat Package Manager. find-provides
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries provided by (contained in) the package.
-#
-# On AIX, use `dump -o' to find what the library provides, if anything.
-#
-#
-# Ralph's comments:
-#
-# Executables are skipped because, by convention, shared libraries
-# which are not dynamically loaded are packaged as archives. Also,
-# it is impossible to tell the difference between an executable
-# program and a dynamically loaded shared library.
-#
-# Because archives can contain any number of things, including
-# apparently, multiple shared libraries, dependencies in archives
-# will be specified as file[member]. Any member in an archive which
-# has a loader section will be listed as provided.
-#
-# Tim's (subsequent) comments:
-#
-# Based on discussions on the rpm-list in mid-March of 2000, I've modified
-# the copy of find-provides that Ralph provided me to use `dump -o' instead
-# of `dump -H', and I've followed Brandon S. Allbery's suggestions and modified
-# the awk script to look for a modtype of `RE', which is what constitutes a
-# shared member of a library. Just like everything else on AIX, libraries are
-# weird. :-|
-#
-# I've followed Ralph's convention of generating provides in the form of
-# `filebasename(member-object)' *if* there is a member object, or just
-# `filebasename' if there isn't (such as in the case of certain perl modules,
-# locally built shared libraries, etc.).
-#
-# Example dump output:
-#
-#$dump -o /usr/lpp/X11/lib/R6/libX11.a
-#
-#/usr/lpp/X11/lib/R6/libX11.a[shr4.o]:
-#
-# ***Object Module Header***
-## Sections Symbol Ptr # Symbols Opt Hdr Len Flags
-# 4 0x00126c28 14557 72 0x3002
-#Timestamp = 920377624
-#Magic = 0x1df
-#
-# ***Optional Header***
-#Tsize Dsize Bsize Tstart Dstart
-#0x000bcc20 0x00024bd4 0x00000e0c 0x00000000 0x00000000
-#
-#SNloader SNentry SNtext SNtoc SNdata
-#0x0004 0x0000 0x0001 0x0002 0x0002
-#
-#TXTalign DATAalign TOC vstamp entry
-#0x0005 0x0003 0x00023d74 0x0001 0xffffffff
-#
-#maxSTACK maxDATA SNbss magic modtype
-#0x00000000 0x00000000 0x0003 0x010b RE
-#
-#/usr/lpp/X11/lib/R6/libX11.a[shr4net.o]:
-#
-# ***Object Module Header***
-## Sections Symbol Ptr # Symbols Opt Hdr Len Flags
-# 7 0x000006fb 22 72 0x3002
-#Timestamp = 774732998
-#Magic = 0x1df
-#
-# ***Optional Header***
-#Tsize Dsize Bsize Tstart Dstart
-#0x00000084 0x00000088 0x00000000 0x00000200 0x00000000
-#
-#SNloader SNentry SNtext SNtoc SNdata
-#0x0007 0x0000 0x0002 0x0004 0x0004
-#
-#TXTalign DATAalign TOC vstamp entry
-#0x0002 0x0003 0x00000080 0x0001 0xffffffff
-#
-#maxSTACK maxDATA SNbss magic modtype
-#0x00000000 0x00000000 0x0005 0x010b RE
-
-PATH=/usr/bin:/usr/ccs/bin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-#
-# TVM: Because AIX libraries don't have the equivalent of a SONAME, if you do
-#
-# ln -s /usr/lib/libc.a /tmp/libmy_libc_link.a
-#
-# and then link your program with `-L/tmp -lmy_libc_link', that's the name
-# that will be recorded as the BASE in the Import File Strings area.
-# This means we need to include "symbolic link" in the list of files to check
-# out.
-#
-filelist=`sed "s/['\"]/\\\&/g" | xargs file \
- | grep -E 'archive|executable|symbolic link' | cut -d: -f1`
-
-for f in $filelist
-do
- #
- # Uncomment the next line for some additional debugging info:
- #echo "Checking $f"
- dump -o $f 2>/dev/null | awk '
-
- # TVM: be careful to not use any single quotes, even in comments,
- # since this entire awk script is enclosed in single quotes.
-
- BEGIN {
- FS = " ";
- RS = "\n";
- # our flag to indicate we found a filename[membername] or
- # filename.
- found_file_or_member = 0
- # our flag to indicate we found the modtype tag. If so,
- # we want to look for RE on the next line.
- found_modtype = 0
- #
- # number of times gsub substituted, used twice below
- nsub = 0
- }
-
- # Uncomment the next line for some debugging info.
- # { print NR , ":", $0 }
-
- found_modtype == 1 && found_file_or_member == 1 {
-
- if ( $0 ~ / RE/ ) {
- # we have seen a filename, we have seen a modtype line, and now
- # we know that the modtype is RE. Print out the member name.
- #
- # Note that member names generally look like foo[bar.o], and
- # since the RPM standard has become to use parens, we will
- # translate the [ and ] into ( and ) in the output stream.
- # awk on AIX 4 has sub() and gsub(), so we can use them to do
- # it. If this script is adapted for use on some other platform
- # make sure that awk on that platform has sub/gsub. If not,
- # you will need to postprocess the output stream (probably before
- # the sort -u) with tr or sed.
- nsub = gsub(/\[/, "(", member)
- if ( nsub > 1 ) {
- print "substituted too many times for [:", member | "cat 1>&2"
- }
- nsub = gsub(/\]/, ")", member)
- if ( nsub > 1 ) {
- print "substituted too many times for ]:", member | "cat 1>&2"
- }
- print member
- }
- # In any case, reset our flags to zero, to indicate we are done
- # with this member, so we are ready to handle additional members
- # if needed.
- found_file_or_member = 0
- found_modtype = 0
- }
-
- found_file_or_member == 1 && /magic *modtype/ {
- # we have seen a filename, and now we have seen the modtype
- # line. Set the found_modtype flag. The next line of input
- # will be caught by the rule above, and we will print out
- # the member if the modtype is RE.
- found_modtype = 1
- }
-
- /:$/ {
- numfields = split($0,fields, "/")
- # chop off the trailing colon
- fieldlen = length(fields[numfields])-1
- member= substr(fields[numfields], 1, fieldlen)
- # Set the flat to indicate we found a file or a file(member).
- found_file_or_member = 1
- }
- ' # end of awk
-done | sort -u
-#comment out the previous line and uncomment the next line when debugging
-#done
diff --git a/autodeps/aix4.req b/autodeps/aix4.req
deleted file mode 100644
index 79e988b88..000000000
--- a/autodeps/aix4.req
+++ /dev/null
@@ -1,99 +0,0 @@
-#! /usr/bin/ksh
-#
-# Current Maintainer: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# Original Author: Ralph Goers(rgoer@Candle.Com)
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-requires is part of RPM, the RedHat Package Manager. find-requires
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries the package requires to run correctly.
-#
-# On AIX, use `dump -H' to find the library dependencies for an executable
-#
-# Example dump output:
-#
-#$dump -H /usr/bin/dump
-#
-#/usr/bin/dump:
-#
-# ***Loader Section***
-# Loader Header Information
-#VERSION# #SYMtableENT #RELOCent LENidSTR
-#0x00000001 0x00000021 0x0000006c 0x0000002f
-#
-##IMPfilID OFFidSTR LENstrTBL OFFstrTBL
-#0x00000002 0x00000848 0x00000049 0x00000877
-#
-#
-# ***Import File Strings***
-#INDEX PATH BASE MEMBER
-#0 /usr/lib:/lib:/usr/lpp/xlC/lib
-#1 libc.a shr.o
-#
-#
-
-PATH=/usr/bin:/usr/ccs/bin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-filelist=`sed "s/['\"]/\\\&/g" | xargs file \
- | grep -E '^.*:.*(executable |archive )' | cut -d: -f1`
-
-for f in $filelist
-do
- dump -H $f 2>/dev/null | awk '
-
- #
- # Since this entire awk script is enclosed in single quotes,
- # you need to be careful to not use single quotes, even in awk
- # comments, if you modify this script.
- #
-
- BEGIN {
- in_shlib_list = 0;
- in_file_strings = 0;
- FS = " ";
- RS = "\n";
- }
-
- in_shlib_list == 1 && /^$/ {
- in_shlib_list = 0;
- in_file_strings = 0;
- }
-
- in_shlib_list == 1 {
- pos = index($2, "/")
- numfields = split($0, fields, " ")
-
- if (pos == 0) {
- namevar = 2
- }
- else {
- namevar = 3
- }
- if (namevar < numfields) {
- printf("%s(%s)\n", fields[namevar], fields[namevar+1])
- }
- else {
- print fields[namevar]
- }
- }
-
- in_file_strings == 1 && $1 == "0" {
- in_shlib_list = 1
- }
-
- /\*Import File Strings\*/ {
- in_file_strings = 1
- }
-
- ' # end of awk
-done | sort -u
diff --git a/autodeps/amigaos.prov b/autodeps/amigaos.prov
deleted file mode 100644
index 87ad08f65..000000000
--- a/autodeps/amigaos.prov
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-cat > /dev/null
diff --git a/autodeps/amigaos.req b/autodeps/amigaos.req
deleted file mode 100644
index 87ad08f65..000000000
--- a/autodeps/amigaos.req
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-cat > /dev/null
diff --git a/autodeps/darwin.prov b/autodeps/darwin.prov
deleted file mode 100644
index b068912a3..000000000
--- a/autodeps/darwin.prov
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-# ----------------------------------------------------------
-# find-provides for Darwin/MacOSX
-# ----------------------------------------------------------
-# This script reads filenames from STDIN and outputs any relevant provides
-# information that needs to be included in the package.
-
-filelist=$(sed -n -e '/\.dylib/p' -e '/\.so/p' -e '/\.bundle/p' | sort | uniq | xargs file -L 2>/dev/null | grep "Mach-O.*\(ppc\|i386\)" | cut -d: -f1)
-
-for f in $filelist; do
- libname=$(basename $f | sed -e 's;\..*;;')
- soname=$(otool -l $f | grep $libname | awk '/ name/ {print $2}')
-
- if [ "$soname" != "" ]; then
- if [ ! -L $f ]; then
- basename $soname
- fi
- else
- echo ${f##*/}
- fi
-done | sort -u
diff --git a/autodeps/darwin.req b/autodeps/darwin.req
deleted file mode 100644
index e571710d8..000000000
--- a/autodeps/darwin.req
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------
-# find-requires for Darwin/MacOSX
-# ----------------------------------------------------------------
-ulimit -c 0
-
-filelist=`sed "s/['\"]/\\\&/g"`
-exelist=`echo $filelist | xargs file | grep -F Mach-O | cut -d: -f1 `
-scriptlist=`echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1 `
-
-for f in $exelist; do
- if [ -x $f ]; then
- otool -L $f \
- | awk '/^\t/ { print }' \
- | sed -n -e '/ (compatibility version .* current version .*)/p' \
- | sed -e 's/ (compatibility version .* current version .*)//'
- fi
-done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u
-
-for f in $scriptlist; do
- if [ -x $f ]; then
- head -1 $f | sed -e 's/^\#\![ ]*//' \
- | sed -n -e '/^\/bin/!p' | sed -n -e '/^\/usr\/bin/!p' | uniq \
- | cut -d" " -f1
- fi
-done
diff --git a/autodeps/freebsd.prov b/autodeps/freebsd.prov
deleted file mode 100644
index cf00d4f14..000000000
--- a/autodeps/freebsd.prov
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------
-# find-provides for FreeBSD-2.2.x
-# ----------------------------------------------------------
-filelist=$(grep "\\.so" | grep -v "^/lib/ld.so" | xargs file -L 2>/dev/null | grep "FreeBSD.*shared" | cut -d: -f1)
-
-for f in $filelist; do
- echo ${f##*/}
-done | sort -u
diff --git a/autodeps/freebsd.req b/autodeps/freebsd.req
deleted file mode 100644
index 9a1e0f4aa..000000000
--- a/autodeps/freebsd.req
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------
-# find-requires for FreeBSD-2.2.x
-# how do we know what is required by a.out shared libraries?
-# ----------------------------------------------------------------
-ulimit -c 0
-
-filelist=`sed "s/['\"]/\\\&/g"`
-exelist=`echo $filelist | xargs file | grep -F executable | cut -d: -f1 `
-scriptlist=`echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1 `
-
-for f in $exelist; do
- if [ -x $f ]; then
- ldd $f | /usr/bin/awk '/=>/&&!/not found/ { print $3 }'
- fi
-done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u
-
-for f in $scriptlist; do
- if [ -x $f ]; then
- head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1
- fi
-done | sort -u
diff --git a/autodeps/freebsdelf.prov b/autodeps/freebsdelf.prov
deleted file mode 100644
index df7d82977..000000000
--- a/autodeps/freebsdelf.prov
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------
-# find-provides for FreeBSD >= 3.3
-# ----------------------------------------------------------
-filelist=$(grep "\\.so" | grep -v "^/lib/ld.so" | xargs file -L 2>/dev/null | grep "ELF.*shared" | cut -d: -f1)
-
-for f in $filelist; do
- echo ${f##*/}
-done | sort -u
diff --git a/autodeps/freebsdelf.req b/autodeps/freebsdelf.req
deleted file mode 100644
index dde04c599..000000000
--- a/autodeps/freebsdelf.req
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-
-# note this works for both a.out and ELF executables
-# it also auto-generates requirment lines for shell scripts
-
-ulimit -c 0
-
-filelist=`sed "s/['\"]/\\\&/g"`
-exelist=`if test "x$filelist" != x; then echo $filelist | xargs file | grep ":.*executable" | cut -d: -f1; fi`
-scriptlist=`if test "x$filelist" != x; then echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1; fi`
-liblist=`if test "x$filelist" != x; then echo $filelist | xargs file | grep ":.*shared object" | cut -d : -f1; fi`
-
-LDDLIST=`for f in $exelist; do
- if [ -x $f ]; then
- ldd $f | awk '/=>/ { print $1 }'
- fi
-done | sort -u | sed "s/['\"]/\\\&/g"`
-if test "x$LDDLIST" != x; then
- echo $LDDLIST | xargs -n 1 basename | grep -v 'libNoVersion.so' | sort -u
-fi
-
-LDDLIST=`for f in $liblist; do
- ldd $f | awk '/=>/ { print $1 }'
-done | sort -u | sed "s/['\"]/\\\&/g"`
-if test "x$LDDLIST" != x; then
- echo $LDDLIST | xargs -n 1 basename | grep -v 'libNoVersion.so' | sort -u
-fi
-
-for f in $scriptlist; do
- if [ -x $f ]; then
- head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1
- fi
-done | sort -u
-
-for f in $liblist $exelist ; do
- objdump -p $f | awk '
- BEGIN { START=0; LIBNAME=""; }
- /Version References:/ { START=1; }
- /required from/ && (START==1) {
- sub(/:/, "", $3);
- LIBNAME=$3;
- }
- (START==1) && (LIBNAME!="") && ($4~/^GLIBC_*/) { print LIBNAME "(" $4 ")"; }
- /^$/ { START=0; }
- '
-done | sort -u
diff --git a/autodeps/hpux.prov b/autodeps/hpux.prov
deleted file mode 100644
index 9fd4ce674..000000000
--- a/autodeps/hpux.prov
+++ /dev/null
@@ -1,175 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# $Id: hpux.prov,v 1.8 2001/09/15 13:49:11 jbj Exp $
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-provides is part of RPM, the Red Hat Package Manager. find-provides
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries provided by (contained in) the package.
-#
-#
-# On HP-UX, use `chatr' to find what libraries a package provides
-#
-# Example chatr output:
-#
-#$chatr /usr/lib/libc.sl
-#
-#/usr/lib/libc.sl:
-# shared library
-# shared library dynamic path search:
-# SHLIB_PATH disabled second
-# embedded path disabled first Not Defined
-# internal name:
-# libc.1
-# shared library list:
-# dynamic /usr/lib/libdld.1
-# static branch prediction disabled
-# kernel assisted branch predictionenabled
-# lazy swap allocationdisabled
-# text segment lockingdisabled
-# data segment lockingdisabled
-# data page size: 4K
-# instruction page size: 4K
-#
-
-#
-# Implementation notes: some of the system libraries are built without an
-# `internal name' (HP-UX's equivalent to a SONAME), so I need to track what
-# chatr outputs as its first line. We'll use the basename of that line in
-# the event of no internal name.
-#
-
-PATH=/usr/bin:/usr/sbin:/usr/ccs/bin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-#
-# TVM: use `while read ...' instead of `for f in ...', because there may
-# be too many files to stuff into one shell variable.
-#
-IFS=""
-while read f
-do
- # It's possible that I should be testing to make sure that the file
- # we're trying isn't a symlink, and skipping it if it is, because of
- # the possible odd situation where we could have a link to a library
- # with no internal name. This would need more investigation, though.
- chatr $f 2>/dev/null \
- | awk '
-
- BEGIN {
- FS = " ";
- RS = "\n";
-
- # This flag signfies that we have seen the internal name:
- # marker. Once we see that, we set the flag to 1. The next
- # line we read should contain the library internal name, the
- # SOM equivalent of an soname. At that point we set the flag
- # found_internal_name to 1 and exit
- # the main body of the awk script, going through the END
- in_internal_name = 0;
-
- #
- # We have seen the internal name: section (yet)?
- #
- found_internal_name = 0;
-
- #
- # assume it is a shared library, until record 2 proves us wrong.
- #
- isa_shared_library = 1;
- }
-
- # Uncomment the next line for some debugging info.
- #{ print NR , ":", $0 }
-
- #
- # save the first line in case there is no internal name built
- # into this object.
- #
- NR == 1 {
- my_name = $0
- opened_something = 1;
- }
-
- #
- # Check the second line (record). Clear the flag if it is not a
- # shared library.
- #
- NR == 2 && $0 !~ /^[ ]+shared library[ ]*$/ {
- # It is not a shared library. Bow out early
- isa_shared_library = 0;
- exit
- }
-
- in_internal_name == 1 {
-
- # We found the library internal name. If it does not contain
- # a path, print it. At least a couple of the system libraries
- # have a full path as the internal name (this is probably a bug).
-
- if ( $0 ~ /\// ) {
- numfields = split($0, internal_name, "/")
- print internal_name[numfields]
- } else {
- print $1
- }
-
- #
- # Set a flag for the EXIT section, to indicate that we found
- # an internal name
- #
- found_internal_name = 1;
- in_internal_name = 0
- exit
- }
-
- #
- # we have hit the internal name section. Set the flag. The next
- # line should be what we are looking for.
- #
- /^ +internal name: *$/ {
- in_internal_name = 1
- }
-
- END {
- # Uncomment the next line for debugging info
- #{ print "END: NR: ", NR }
- if ( (isa_shared_library == 0) || (NR < 2) ) {
- # both of these indicate error conditions, for which we
- # should not generate any output.
- exit;
- } else {
- if (found_internal_name == 1) {
- exit;
- } else {
- #
- # chop the : off the end of the line
- #
- colon = index(my_name, ":")
- colon = colon - 1
- temp = substr(my_name, 1, colon)
- #
- # get the basename
- #
- numfields = split(temp, basename, "/")
- # Uncomment the next line for debugging info
- #print "In END:", numfields, ":", temp
- print basename[numfields]
- exit
- }
- }
- }
- ' # end of awk
-done | sort -u
-#comment out the previous line and uncomment the next line when debugging
-#done
diff --git a/autodeps/hpux.req b/autodeps/hpux.req
deleted file mode 100644
index ab7290008..000000000
--- a/autodeps/hpux.req
+++ /dev/null
@@ -1,126 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# $Id: hpux.req,v 1.7 2001/09/15 13:49:11 jbj Exp $
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-requires is part of RPM, the Red Hat Package Manager. find-requires
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries the package requires to run correctly.
-#
-# On HP-UX, use `chatr' to find the library dependencies for an executable
-#
-# Example chatr output:
-#
-#$chatr /usr/bin/chatr
-#/usr/bin/chatr:
-# shared executable
-# shared library dynamic path search:
-# SHLIB_PATH disabled second
-# embedded path disabled first Not Defined
-# internal name:
-# chatr
-# shared library list:
-# dynamic /usr/lib/libc.1
-# shared library binding:
-# deferred
-# static branch prediction disabled
-# kernel assisted branch predictionenabled
-# lazy swap allocationdisabled
-# text segment lockingdisabled
-# data segment lockingdisabled
-# data page size: 4K
-# instruction page size: 4K
-
-PATH=/usr/bin:/usr/sbin:/sbin:/usr/ccs/bin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-IFS=""
-while read f
-do
- # uncomment the next line if debugging
- # echo "### processing $f"
-
- #
- # Only run the file command once per file:
- #
- file_output=`file $f`
-
- #
- # First, check to see if it's a script, and try figure out what
- # intpreter it requires. This is more work on HP-UX, since `file'
- # doesn't tell us what interpreter the script uses, or even if it
- # really is a script.
- #
- is_shell_script=`od -N 2 -t c $f 2>/dev/null | grep '0000000 # !'`
- if test X"$is_shell_script" != X ; then
- #
- # it's a shell script. Now figure out what interpreter it needs
- # Look at me! I'm good with sed. ;-)
- interp=`head -1 $f | sed -e 's/^#! \{0,1\}\([^ ]*\).*$/\1/'`
- if test X"$interp" != X ; then
- echo "$interp"
- #
- # We've found what we need for this file. Skip back to the
- # top of the loop. This saves me an `else' and another indent
- # level! ;-)
- continue
- fi
- fi
-
- #
- # The `else' is implied here by the `continue' above
- #
-
- #
- # Is it a shared library?
- #
- maybe_shared_lib=`echo "$file_output" | grep -E '(executable|library)'`
- if test X"$maybe_shared_lib" != X ; then
- chatr $f 2>/dev/null \
- | awk '
-
- #
- # For you non-awk-ers, no single quotes in comments -- the shell
- # sees them and things get hosed.
- #
-
- BEGIN {
- in_shlib_list = 0;
- FS = " ";
- RS = "\n";
- }
-
- # uncomment the next line for debugging information
- #{ print NR, ": ", $0 }
-
-
- in_shlib_list == 1 && /dynamic[ ]+[\/\.]/ {
-
- # split the line on "/" and print out the last element
- numfields = split($0,fields,"/")
- print fields[numfields]
-
- }
-
- /^ +shared library list: *$/ {
- in_shlib_list = 1
- }
-
- /^ +shared library binding: *$/ {
- exit
- }
- ' # end of awk
- fi # end of shared library if.
-done | sort -u
-#comment out the previous line and uncomment the next one if debugging.
-#done
diff --git a/autodeps/irix6.prov b/autodeps/irix6.prov
deleted file mode 100644
index 87ee4e1a1..000000000
--- a/autodeps/irix6.prov
+++ /dev/null
@@ -1,201 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# $Id: irix6.prov,v 1.7 2001/09/15 13:49:11 jbj Exp $
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-provides is part of RPM, the Red Hat Package Manager. find-provides
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries provided by (contained in) the package.
-#
-# NOTE: IRIX libraries (even system libraries) have "version information"
-# in both the soname and the internal version field, so it's important to
-# be able to separate the soname and internal version fields. As has
-# become the case on other platforms, the soname/iversion delimiters have
-# become the `(' and `)' characters.
-#
-# On IRIX, use `elfdump -L' to find what libraries a package provides
-#
-# Example `elfdump -L' output:
-#
-#$elfdump -L /usr/lib/libc.so
-#
-#
-#/usr/lib/libc.so:
-#
-# **** DYNAMIC SECTION INFORMATION ****
-#.dynamic :
-#[INDEX] Tag Value
-#[0] HASH 0xfa099d0
-#[1] STRTAB 0xfa0027c
-#[2] SYMTAB 0xfa10e3c
-#[3] STRSZ 0x9751
-#[4] SYMENT 0x10
-#[5] INIT 0
-#[6] FINI 0
-#[7] RLDVERS 0x1
-#[8] FLAGS 0x1411
-#[9] BASEADDR 0xfa00000
-#[10] LOCGOTNO 0x3c
-#[11] PROTECT 0x3c
-#[12] HIDDEN 0x12
-#[13] CNFLCTNO 0
-#[14] LBLISTNO 0
-#[15] SYMTABNO 0xd19
-#[16] UNREFEXT 0x8
-#[17] GOTSYM 0x8b3
-#[18] LOCAL 0x12
-#[19] LOCALPG 0x1
-#[20] LOCALPG 0x10
-#[21] PLTGOT 0xfb483b0
-#[22] RLDTXT_ADR0xfb6b580
-#[23] OPTIONS 0xfa000f4
-#[24] SONAME libc.so.1
-#[25] TIMSTAMP Jun 16 18:23:15 1997
-#[26] CHECKSUM 0x92321a0c
-#[27] IVERSION sgi1.0
-#[28] REL 0xfa1dfcc
-#[29] RELSZ 0x1988
-#[30] RELENT 0x8
-#[31] MSYM 0xfa1f954
-#[32] COMPCTSIZE0xc60c
-#No Library List Section in /usr/lib/libc.so
-#
-
-PATH=/usr/bin:/usr/sbin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-#
-# Use `while read ...' instead of `for f in ...', because there may be too
-# many files to stuff into one shell variable.
-#
-IFS=""
-while read f
-do
- #
- # If it's a shared library, run elfdump on it.
- #
- maybe_shared_lib=`file $f | grep -E 'ELF.*dynamic lib'`
- if test X"$maybe_shared_lib" != X ; then
- elfdump -L $f 2>/dev/null | awk '
-
- #
- # Since this entire awk script is enclosed in single quotes,
- # you need to be careful to not use single quotes, even in awk
- # comments, if you modify this script.
- #
-
- BEGIN {
- FS = " ";
- RS = "\n";
- OFS = "";
-
- found_soname = 0;
- found_iversion = 0;
- }
-
- # Uncomment the next line for some debugging info.
- #{ print NR , ":", $0 }
-
- /[ ]+SONAME .*[ ]*$/ {
- found_soname = 1;
- numfields = split($0, internal_name)
- if (numfields == 3) {
- soname = $3
- } else {
- #
- # Should never be here.
- #
- print "Really odd looking soname:", $0 | "cat 1>&2"
- exit
- }
- }
-
- /[ ]+IVERSION .*[ ]*$/ {
- if (found_soname == 1) {
- numfields = split($0, iversion)
- if (numfields == 3) {
- version = $3
- #
- # handle libraries with multiple versions, like
- # 1.1:1.2. Since they really provide both versions,
- # we need to generate output for each version.
- #
- numfields = split(version, versions, ":")
- if (numfields > 1) {
- for (i = 1; i < numfields; i++) {
- print soname, "(", versions[i], ")"
- }
- #
- # let our END routine print out the *last* version
- # provided
- #
- version = versions[numfields]
- }
- #
- # stick a fork in us.
- #
- found_iversion = 1;
- exit
- } else {
- #
- # handle libraries with comments and other junk in
- # the version field. IRIX has a number of system libraries
- # with whitespace and other junk in the version field!
- #
- # we discard the whitespace and keep the identifier after
- # the # sign.
- #
- version = iversion[numfields]
- numfields = split(version, version_junk, "#")
- if (numfields > 1) {
- version = version_junk[numfields]
- found_iversion = 1;
- }
- }
- } else {
- #
- # found an iversion without an soname. Is that possible?
- #
- print "Found version but no soname:", $0 | "cat 1>&2"
- exit
- }
- }
-
- #
- # we could probably watch for some other token (like RELSZ)
- # that *generally* occurs later in the input than the stuff we watch
- # for, and exit if we see it, but it is just as easy to read all
- # the output, even after we have seen what we are looking for.
- #
-
- END {
- # Uncomment the next line for debugging info
- #{ print "END: NR: ", NR }
- if ( (found_soname == 1) && (found_iversion == 1) ) {
- print soname, "(", version, ")"
- exit
- } else if ( (found_soname == 1) && (found_iversion == 0) ) {
- #
- # no library version information *BUT* any programs linked
- # against this library will pick up a dependency on version 0
- # of this library, so we output that.
- #
- print soname, "(", 0, ")"
- }
- # else do nothing
- }
- ' # end of awk
- fi # end of the 'if test X"$maybe_shared_lib != X ; then' clause
-done | sort -u
-#comment out the previous line and uncomment the next line when debugging
-#done
diff --git a/autodeps/irix6.req b/autodeps/irix6.req
deleted file mode 100644
index 72442acf0..000000000
--- a/autodeps/irix6.req
+++ /dev/null
@@ -1,164 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# $Id: irix6.req,v 1.7 2001/09/15 13:49:11 jbj Exp $
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-requires is part of RPM, the Red Hat Package Manager. find-requires
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries the package requires to execute.
-#
-# NOTE: IRIX libraries (even system libraries) have "version information"
-# in both the soname and the internal version field, so it's important to
-# be able to separate the soname and internal version fields. As has
-# become the case on other platforms, the soname/iversion delimiters have
-# become the `(' and `)' characters.
-#
-# On IRIX, use `elfdump -Dl' to find what libraries are required by
-# an executable. `elfdump -L' does what we need too, but it gives us more
-# than we really need.
-#
-# Example `elfdump -Dl' output:
-#
-#$elfdump -Dl /usr/bin/X11/xterm
-#
-#
-#
-#/usr/bin/X11/xterm:
-#
-# **** MIPS LIBLIST INFORMATION ****
-#.liblist :
-#[INDEX] Timestamp Checksum Flags Name Version
-#[1] Nov 23 15:39:02 1997 0x4da65893 ----- libXaw.so.2 sgi2.0
-#[2] Nov 23 15:39:02 1997 0x414eece6 ----- libXmu.so sgi1.0
-#[3] Nov 23 15:39:02 1997 0x6f314e69 ----- libXt.so sgi1.0
-#[4] Nov 23 15:39:02 1997 0xcbe81fff ----- libXext.so sgi1.0
-#[5] Nov 23 15:39:02 1997 0x89ae8e98 ----- libX11.so.1 sgi1.0
-#[6] Oct 27 01:00:29 1997 0x99b27890 ----- libcurses.so sgi1.0
-#[7] Jun 16 18:23:15 1997 0x92321a0c ----- libc.so.1 sgi1.0
-#
-
-#
-# TVM: it might be better to re-write this so that `file' isn't used, since
-# it can all be done with `elfdump', but this works.
-#
-
-PATH=/usr/bin:/usr/sbin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-#
-# TVM: switch to using `while read ...' instead of `for f in ...', because
-# packages with a large number of files could be too big for one shell
-# variable to hold.
-#
-IFS=""
-while read f
-do
-
- #
- # Uncomment the next line for additional debugging:
- #echo "read ->$f<-"
-
- #
- # Only run file once per file:
- #
- file_output=`file $f`
-
- #
- # Handle scripts first
- #
- is_shell_script=`echo "$file_output" | grep 'script text' | \
- cut -d: -f 2 | awk '{ print $1 }'`
-
- #
- # If it's a script...
- #
- if test X"$is_shell_script" != X ; then
- echo "$is_shell_script"
- #
- # use `continue' to skip back up to the top of the loop. We've
- # already done as much as we need to, and this saves me from having
- # to have an else, and another indent level... ;-)
- #
- continue
- fi
-
- #
- # the `else' is implied here, since we used `continue' in the test above
- #
-
- #
- # It might be a shared library.
- #
- maybe_shared_lib=`echo "$file_output" | grep -E 'executable|lib'`
- if test X"$maybe_shared_lib" != X ; then
-
- elfdump -Dl $f 2>/dev/null \
- | awk '
-
- #
- # Since this entire awk script is enclosed in single quotes,
- # you need to be careful to not use single quotes, even in awk
- # comments, if you modify this script.
- #
-
- BEGIN {
- found_column_headers = 0;
- FS = " ";
- RS = "\n";
- OFS="";
- }
-
- # uncomment the next line for debugging information
- #{ print "Saw input:", $0 }
-
- found_column_headers == 1 && $0 !~ /^$/ {
-
- # get the library name (field 15) and the library version (field 16)
- # if present.
- numfields = split($0,fields)
- if (numfields == 8) {
- print fields[8]
- } else if (numfields == 9) {
- #
- print fields[8], "(", fields[9], ")"
- } else if (numfields > 9) {
- #
- # SGI has this annoying habit of putting comments, complete
- # with whitespace, in their library IVERSION field. Yuck.
- #
- # Handle libraries like this gracefully.
- #
- verfields = split(fields[NF], junk, "#")
- if (verfields == 2) {
- print fields[8], "(", junk[2], ")"
- } else if (verfields > 2) {
- print fields[8], "(", junk[verfields], ")"
- } else {
- print "Cannot find version:", fields[numfields] | "cat 2>&1"
- }
- }
- }
-
- /^\[INDEX\].Timestamp.*Checksum.*Flags.*Name.*Version$/ {
- # we better start paying attention now.
- found_column_headers = 1
- #
- # uncomment the next line for debugging information
- #print "found the column headers: ", $0
- }
-
- ' # end of awk
- fi
-done | sort -u
-# comment out the previous line and uncomment the next when debugging
-#done
diff --git a/autodeps/linux.prov b/autodeps/linux.prov
deleted file mode 100644
index 99e58c467..000000000
--- a/autodeps/linux.prov
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/bin/bash
-
-# This script reads filenames from STDIN and outputs any relevant provides
-# information that needs to be included in the package.
-IFS=$'\n'
-filelist=($(cat))
-
-debuginfolist=($(printf "%s\n" "${filelist[@]}" | grep "/usr/lib/debug/"))
-filelist=($(printf "%s\n" "${filelist[@]}" | grep -v "/usr/lib/debug/"))
-
-solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
- tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
- cut -d: -f1))
-pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/bin/python.\..$'))
-tcllist=
-monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
-firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
-pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$'))
-fontlist=($(printf "%s\n" "${filelist[@]}" | egrep -i "/usr/share/fonts/.*\.(ttf|otf|pfa)$"))
-
-#
-# --- Alpha does not mark 64bit dependencies
-case `uname -m` in
- alpha*) mark64=false ;;
- *) mark64=true ;;
-esac
-
-#
-# --- Library sonames and weak symbol versions (from glibc).
-for f in "${solist[@]}"; do
- soname=$(objdump -p "$f" | awk '/SONAME/ {print $2}')
- [ -n "$soname" -a -L "$f" ] && continue
- [ -z "$soname" ] && soname="${f##*/}"
-
- if $mark64 && file -L "$f" 2>/dev/null | grep "ELF 64-bit" >/dev/null; then
- lib64="()(64bit)" slib64="(64bit)"
- else
- lib64= slib64=
- fi
- echo "$soname$lib64"
- objdump -p "$f" | awk '
- BEGIN { START=0 ; }
- /Version definitions:/ { START=1; }
- /^[0-9]/ && (START==1) { print $4; }
- /^$/ { START=0; }
- ' | \
- while read symbol ; do
- echo "$soname($symbol)$slib64"
- done
-done | sort -u
-
-#
-# --- Perl modules.
-[ -x /usr/lib/rpm/perl.prov ] &&
- printf "%s\n" "${filelist[@]}" | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u
-
-#
-# --- Python modules.
-[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] &&
- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -P | sort -u
-
-#
-# --- Tcl modules.
-[ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] &&
- printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u
-
-#
-# --- firmware files
-[ -x /usr/lib/rpm/firmware.prov -a -n "$firmwarelist" ] &&
- printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u
-
-#
-# --- debuginfo files
-[ -x /usr/lib/rpm/debuginfo.prov -a -n "$debuginfolist" ] &&
- printf "%s\n" "${debuginfolist[@]}" | /usr/lib/rpm/debuginfo.prov | sort -u
-
-#
-# --- Mono exes/dlls
-: ${MONO_PREFIX=/usr}
-if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
- printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides || echo "WARNING: MONO RPM PROVIDES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2
-fi
-
-#
-# --- pkgconfig provides
-[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] &&
- printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -P | sort -u
-
-#
-# --- font provides
-[ -x /usr/lib/rpm/fontconfig.prov -a -n "$fontlist" ] &&
- printf "%s\n" "${fontlist[@]}" | /usr/lib/rpm/fontconfig.prov | sort -u
-
-#
-# --- Kernel module exported symbols
-[ -x /usr/lib/rpm/find-provides.ksyms ] &&
- printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
-
-#
-# --- GStreamer provides, codecs
-[ -x /usr/lib/rpm/gstreamer-provides ] &&
- printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u
-
-exit 0
diff --git a/autodeps/linux.req b/autodeps/linux.req
deleted file mode 100644
index cc19f5fee..000000000
--- a/autodeps/linux.req
+++ /dev/null
@@ -1,155 +0,0 @@
-#!/bin/bash
-
-#
-# Auto-generate requirements for executables (both ELF and a.out) and library
-# sonames, script interpreters, and perl modules.
-#
-
-ulimit -c 0
-
-#
-# --- Set needed to 0 for traditional find-requires behavior.
-needed=1
-if [ X"$1" = Xldd ]; then
- needed=0
-elif [ X"$1" = Xobjdump ]; then
- needed=1
-fi
-
-#
-# --- Grab the file manifest and classify files.
-#filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"`
-filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/'))
-exelist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
- grep -Ev ":.* (commands|script)[, ]" | \
- grep ":.*executable" | cut -d: -f1))
-scriptlist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
- grep -E ":.* (commands|script)[, ]" | cut -d: -f1))
-liblist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
- grep ":.*shared object" | cut -d : -f1))
-
-interplist=()
-perllist=()
-pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..'))
-tcllist=()
-monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
-pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$'))
-
-#
-# --- Alpha does not mark 64bit dependencies
-case `uname -m` in
- alpha*) mark64="" ;;
- *) mark64="()(64bit)" ;;
-esac
-
-if [ "$needed" -eq 0 ]; then
-#
-# --- Executable dependency sonames.
- for f in "${exelist[@]}"; do
- [ -r "$f" -a -x "$f" ] || continue
- lib64=`if file -L "$f" 2>/dev/null | \
- grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- ldd "$f" | awk '/=>/ {
- if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) {
- gsub(/'\''"/,"\\&",$1);
- printf "%s'$lib64'\n", $1
- }
- }'
- done | xargs -r -n 1 basename | sort -u
-
-#
-# --- Library dependency sonames.
- for f in "${liblist[@]}"; do
- [ -r "$f" ] || continue
- lib64=`if file -L "$f" 2>/dev/null | \
- grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- ldd "$f" | awk '/=>/ {
- if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) {
- gsub(/'\''"/,"\\&",$1);
- printf "%s'$lib64'\n", $1
- }
- }'
- done | xargs -r -n 1 basename | sort -u
-fi
-
-#
-# --- Script interpreters.
-for f in "${scriptlist[@]}"; do
- [ -r "$f" -a -x "$f" ] || continue
- interp=`head -n 1 "$f" | sed -ne 's/^\#\![ ]*//p' | cut -d" " -f1`
- interplist=("${interplist[@]}" "$interp")
- case $interp in
- */perl) perllist=("${perllist[@]}" "$f") ;;
- esac
-done
-[ -n "$interplist" ] && { printf "%s\n" "${interplist[@]}" | sort -u ; }
-
-#
-# --- Add perl module files to perllist.
-for f in "${filelist[@]}"; do
- [ -r "$f" -a "${f%.pm}" != "${f}" ] && perllist=("${perllist[@]}" "$f")
-done
-
-#
-# --- Weak symbol versions (from glibc).
-[ -n "$mark64" ] && mark64="(64bit)"
-for f in "${liblist[@]}" "${exelist[@]}" ; do
- [ -r "$f" ] || continue
- lib64=`if file -L "$f" 2>/dev/null | \
- grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- objdump -p "$f" | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
- /^$/ { START=0; }
- /^Dynamic Section:$/ { START=1; }
- (START==1) && /NEEDED/ {
- if (needed) {
- if ("'$lib64'" != "") {
- sub(/$/, "()'$lib64'", $2) ;
- }
- print $2 ;
- }
- }
- (START==2) && /^[A-Za-z]/ { START=3; }
- /^Version References:$/ { START=2; }
- (START==2) && /required from/ {
- sub(/:/, "", $3);
- LIBNAME=$3;
- }
- (START==2) && (LIBNAME!="") && ($4!="") {
- print LIBNAME "(" $4 ")'$lib64'";
- }
- '
-done | sort -u
-
-#
-# --- Perl modules.
-#[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \
-# printf "%s\n" "${perllist[@]}" | /usr/lib/rpm/perl.req | sort -u
-
-#
-# --- Python modules.
-[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && \
- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -R | sort -u
-
-#
-# --- Tcl modules.
-[ -x /usr/lib/rpm/tcl.req -a -n "$tcllist" ] && \
- printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.req | sort -u
-
-#
-# --- Mono exes/dlls
-: ${MONO_PREFIX=/usr}
-if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
- printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires || echo "WARNING: MONO RPM REQUIRES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2
-fi
-
-#
-# --- pkgconfig requires
-[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] &&
- printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -R | sort -u
-
-#
-# --- Kernel module imported symbols
-[ -x ${0%/*}/find-requires.ksyms ] &&
- printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@"
-
-exit 0
diff --git a/autodeps/mint.prov b/autodeps/mint.prov
deleted file mode 100644
index a752f8fb8..000000000
--- a/autodeps/mint.prov
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-#
-# No shared libs on MiNT yet, sigh.
-
-echo > /dev/null
diff --git a/autodeps/mint.req b/autodeps/mint.req
deleted file mode 100644
index a752f8fb8..000000000
--- a/autodeps/mint.req
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-#
-# No shared libs on MiNT yet, sigh.
-
-echo > /dev/null
diff --git a/autodeps/none b/autodeps/none
deleted file mode 100644
index 87ad08f65..000000000
--- a/autodeps/none
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-cat > /dev/null
diff --git a/autodeps/openbsd.prov b/autodeps/openbsd.prov
deleted file mode 100644
index 1e7b06eb3..000000000
--- a/autodeps/openbsd.prov
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------
-# find-provides for OpenBSD-2.5
-# ----------------------------------------------------------
-filelist=$(grep "\\.so" | grep -v "^/lib/ld.so" | xargs file -L 2>/dev/null | grep "OpenBSD.*shared" | cut -d: -f1)
-
-for f in $filelist; do
- echo ${f##*/}
-done | sort -u
diff --git a/autodeps/openbsd.req b/autodeps/openbsd.req
deleted file mode 100644
index ec3bac728..000000000
--- a/autodeps/openbsd.req
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------
-# find-requires for OpenBSD-2.2.x
-# how do we know what is required by a.out shared libraries?
-# ----------------------------------------------------------------
-ulimit -c 0
-
-filelist=`sed "s/['\"]/\\\&/g"`
-exelist=`echo $filelist | xargs file | grep -F executable | cut -d: -f1 `
-scriptlist=`echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1 `
-
-for f in $exelist; do
- if [ -x $f ]; then
- ldd $f | /usr/bin/awk '/\=\>/&&!/not found/ { print $3 }'
- fi
-done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u
-
-for f in $scriptlist; do
- if [ -x $f ]; then
- head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1
- fi
-done | sort -u
diff --git a/autodeps/osf.prov b/autodeps/osf.prov
deleted file mode 100644
index 6b5413364..000000000
--- a/autodeps/osf.prov
+++ /dev/null
@@ -1,188 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# $Id: osf.prov,v 1.7 2000/10/31 20:47:23 mooney Exp $
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-provides is part of RPM, the Red Hat Package Manager. find-provides
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries provided by (contained in) the package.
-#
-#
-# On Digital/Tru64 Unix (OSF1), use `odump -D' to find what libraries a
-# package provides. Note that Tru64 Unix 5.x and later come with `ldd',
-# but sticking with `odump' works with versions of the OS back to at least
-# 3.x, so it's the preferred method.
-#
-# Example `odump -D' output:
-#
-#$odump -D /usr/shlib/libc.so
-#
-#
-#
-#
-# ***DYNAMIC SECTION***
-# Tag Value
-#
-#/usr/shlib/libc.so:
-# UNREFEXTNO: 14.
-# LOCAL_GOTNO: 521.
-# GOTSYM: 2205.
-# LOCAL_GOTNO: 1606.
-# GOTSYM: 3289.
-# SONAME: libc.so
-# TIME_STAMP: (0x34a82daa) Mon Dec 29 17:09:30 1997
-#
-# ICHECKSUM: 0x5e955f9b
-# IVERSION: osf.1
-# CONFLICTNO: 0.
-# RLD_VERSION: 2.
-# HASH: 0x000003ff800a82e0
-# STRTAB: 0x000003ff8008aad0
-# SYMTAB: 0x000003ff80094ab0
-# MSYM: 0x000003ff800842c0
-# STRSZ: 40922.
-# SYMENT: 24.
-# PLTGOT: 0x000003ffc008f240
-# SYMTABNO: 3330.
-# BASE_ADDRESS: 0x000003ff80080000
-# HIPAGENO: 0.
-# RELSZ: 15296.
-# RELENT: 16.
-# REL: 0x000003ff80080700
-# LIBLISTNO: 0.
-# INIT: 0x000003ff8019c520
-# FINI: 0x000003ff8019c570
-# FLAGS: 0x00000001
-#
-
-PATH=/usr/bin:/usr/sbin:/sbin:/usr/ccs/bin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-#
-# Use `while read ...' instead of a `for f in ...', because there may
-# be too many files to stuff into one shell variable.
-#
-IFS=""
-while read f
-do
-
- #
- # if it's a shared library, run odump on it.
- #
- maybe_shared_lib=`file $f | grep -E 'COFF.*shared library'`
- if test X"$maybe_shared_lib" != X ; then
- odump -D $f 2>/dev/null | awk '
-
- BEGIN {
- FS = " ";
- RS = "\n";
- OFS = "";
-
- found_soname = 0;
- found_iversion = 0;
-
- }
-
- # Uncomment the next line for some debugging info.
- #{ print NR , ":", $0 }
-
- /^[ ]+SONAME: .*[ ]*$/ {
- found_soname = 1;
- numfields = split($0, internal_name)
- if (numfields == 2) {
- soname = $2
- #
- # we should probably check to see if the soname ends with
- # a number (indicating that it contains versioning info,
- # possibly in addition to the versioning info in the
- # versions field) and generate a warning here. Shared
- # libraries should not be built with version info in
- # the soname on Digital/Tru64 Unix.
- #
- } else {
- #
- # Should never be here.
- #
- print "Really odd looking soname:", $0 | "cat 1>&2"
- exit
- }
- }
-
- /^[ ]+IVERSION: .*[ ]*$/ {
- if (found_soname == 1) {
- numfields = split($0, iversion)
- if (numfields == 2) {
- version = $2
- #
- # handle libraries with multiple versions, like
- # 1.1:1.2. Since they really provide both versions,
- # we need to generate output for each version.
- #
- numfields = split(version, versions, ":")
- if (numfields > 1) {
- for (i = 1; i < numfields; i++) {
- print soname, "(", versions[i], ")"
- }
- #
- # let our END routine print out the *last* version
- # provided
- #
- version = versions[numfields]
- }
- #
- # stick a fork in us.
- #
- found_iversion = 1;
- exit
- } else {
- #
- # Should never be here.
- #
- print "Odd looking library version:", $0 | "cat 1>&2"
- exit
- }
- } else {
- #
- # found an iversion without an soname. Is that possible?
- #
- print "Found version but no soname:", $0 | "cat 1>&2"
- exit
- }
- }
-
- #
- # we could probably watch for some other token (like RLD_VERSION)
- # that *generally* occurs later in the input than the stuff we watch
- # for, and exit if we see it, but it is just as easy to read all
- # the output, even after we have seen what we are looking for.
- #
-
- END {
- # Uncomment the next line for debugging info
- #{ print "END: NR: ", NR }
- if ( (found_soname == 1) && (found_iversion == 1) ) {
- print soname, "(", version, ")"
- exit
- } else if (found_soname == 1) {
- #
- # no library version information
- #
- print soname
- }
- # else do nothing
- }
- ' # end of awk
- fi
-done | sort -u
-#comment out the previous line and uncomment the next line when debugging
-#done
diff --git a/autodeps/osf.req b/autodeps/osf.req
deleted file mode 100644
index 39d00c342..000000000
--- a/autodeps/osf.req
+++ /dev/null
@@ -1,142 +0,0 @@
-#! /usr/bin/ksh
-
-# Original Author: Tim Mooney <mooney@golem.phys.ndsu.NoDak.edu>
-# $Id: osf.req,v 1.9 2001/09/15 13:49:11 jbj Exp $
-#
-# This file is distributed under the terms of the GNU Public License
-#
-# find-requires is part of RPM, the Red Hat Package Manager. find-requires
-# reads a list of full pathnames (in a package) on stdin, and outputs all
-# shared libraries the package requires to execute.
-#
-# On Digital/Tru64 Unix (OSF1), use `odump -Dl' to find the library
-# dependencies for an executable. `odump -D' does most of what we need,
-# but it doesn't give us library version information, so you must use
-# `odump -Dl'. Note that Tru64 5.x and on have `ldd', but this works just
-# as well, and works on older versions of the OS.
-#
-# Example `odump -Dl' output:
-#
-#$odump -Dl /usr/bin/X11/xterm
-#
-#
-#
-#
-# ***LIBRARY LIST SECTION***
-# Name Time-Stamp CheckSum Flags Version
-#/usr/bin/X11/xterm:
-# libXaw.so Dec 9 00:15:35 1997 0x285006d0 0 6.0
-# libXmu.so Dec 9 00:13:36 1997 0x3bf3a33d 0
-# libXt.so Dec 9 00:12:18 1997 0x10dd9a17 0
-# libSM.so Dec 9 00:08:11 1997 0xb64c7082 0
-# libICE.so Dec 9 00:07:52 1997 0x1199be32 0
-# libXext.so Dec 9 00:08:51 1997 0xafcb84d5 0
-# libX11.so Dec 9 00:06:05 1997 0xaa1bf091 0
-# libc.so Dec 8 18:41:11 1997 0x5e955f9b 0 osf.1
-
-PATH=/usr/bin:/usr/sbin:/sbin:/usr/ccs/bin
-export PATH
-
-#
-# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things
-# like `file', et. al. and expect the output to be what we see in the
-# C/POSIX locale. Make sure it is so.
-#
-LANG=C
-export LANG
-
-#
-# TVM: switch to using `while read ...' instead of `for f in ...', because
-# packages with a large number of files could be too big for one shell variable
-# to hold.
-#
-IFS=""
-while read f
-do
-
- #
- # Uncomment the next line for addtional debugging:
- # echo "read ->$f<-"
-
- #
- # Only run file once per file:
- #
- file_output=`file $f`
-
- #
- # handle shell scripts first
- #
- is_shell_script=`echo "$file_output" | grep 'shell script' | \
- cut -d: -f 2 | awk '{ print $1 }'`
-
- #
- # If it's a script...
- #
- if test X"$is_shell_script" != X ; then
- echo "$is_shell_script"
- #
- # use `continue' to skip back up to the top of the loop.
- # We have already done as much as we need to for this
- # file, and this saves me from having to have an else,
- # and another indent level... ;-)
- #
- continue
- fi
-
- #
- # The `else' here is implied by the `continue' above...
- #
-
- #
- # it might be a shared library.
- #
-
- maybe_shared_lib=`echo "$file_output" | grep 'executable'`
- if test X"$maybe_shared_lib" != X ; then
-
- odump -Dl $f 2>/dev/null \
- | awk '
-
- #
- # Since this entire awk script is enclosed in single quotes,
- # you need to be careful to not use single quotes, even in awk
- # comments, if you modify this script.
- #
-
- BEGIN {
- found_program_name = 0;
- FS = " ";
- RS = "\n";
- OFS="";
- }
-
- # uncomment the next line for debugging information
- #{ print "Saw input:", $0 }
-
- found_program_name == 1 && $0 !~ /^$/ {
-
- # uncomment for debugging information
- #print "found shared library: $0"
-
- # get the library name (field 1) and the library version
- # (field 8) if present.
- numfields = split($0,fields)
- if (numfields == 7) {
- print fields[1]
- } else if (numfields == 8) {
- print fields[1], "(", fields[8], ")"
- }
- }
-
- /^.*: *$/ {
- found_program_name = 1
- #
- # uncomment the next line for debugging information
- #print "found the program name: ", $1
- }
-
- ' # end of awk
- fi
-done | sort -u
-# comment out the previous line and uncomment the next when debugging
-# done
diff --git a/autodeps/solaris.prov b/autodeps/solaris.prov
deleted file mode 100644
index 6e0fe9f1a..000000000
--- a/autodeps/solaris.prov
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-# This script reads filenames from STDIN and outputs any relevant provides
-# information that needs to be included in the package.
-
-PATH=/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin
-export PATH
-
-filelist=`grep "lib.*\\.so" | xargs /usr/ucb/file -L 2>/dev/null |\
- grep "ELF.*dynamic lib" | cut -d: -f1 | sort -u`
-for I in $filelist; do
- basename $I
-done
-
diff --git a/autodeps/solaris.req b/autodeps/solaris.req
deleted file mode 100644
index 05e40247c..000000000
--- a/autodeps/solaris.req
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-# note this works for both a.out and ELF executables
-
-PATH=/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin
-export PATH
-
-ulimit -c 0
-
-filelist=`sed "s/['\"]/\\\&/g"`
-[ -z "$filelist" ] && exit #emulate -r option for xargs
-
-for f in `echo $filelist | xargs file | grep -F executable | cut -d: -f1`; do
- ldd $f 2>/dev/null | awk '/\=\>/ { print $1 }'
-done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u
-
diff --git a/build/Makefile.am b/build/Makefile.am
index 1a540bce3..2fa3c3d6c 100644
--- a/build/Makefile.am
+++ b/build/Makefile.am
@@ -1,6 +1,10 @@
# Makefile for rpmbuild library.
+include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
+
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
AM_CPPFLAGS += @WITH_NSS_INCLUDE@
AM_CPPFLAGS += @WITH_MAGIC_INCLUDE@
AM_CPPFLAGS += @WITH_POPT_INCLUDE@
@@ -16,10 +20,15 @@ librpmbuild_la_SOURCES = \
parsePolicies.c policies.c \
rpmbuild_internal.h rpmbuild_misc.h
-librpmbuild_la_LDFLAGS = -version-info 4:0:1
+librpmbuild_la_LDFLAGS = -version-info $(rpm_version_info)
librpmbuild_la_LIBADD = \
$(top_builddir)/lib/librpm.la \
$(top_builddir)/rpmio/librpmio.la \
$(top_builddir)/misc/libmisc.la \
+ @LTLIBICONV@ \
@WITH_POPT_LIB@ \
@WITH_MAGIC_LIB@
+
+if LIBDW
+librpmbuild_la_LIBADD += @WITH_LIBELF_LIB@ @WITH_LIBDW_LIB@
+endif
diff --git a/build/build.c b/build/build.c
index 04b039c5e..81152e53e 100644
--- a/build/build.c
+++ b/build/build.c
@@ -69,7 +69,7 @@ rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char *name,
pid_t pid;
pid_t child;
int status;
- rpmRC rc;
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
switch (what) {
case RPMBUILD_PREP:
@@ -118,13 +118,11 @@ rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char *name,
fd = rpmMkTempFile(spec->rootDir, &scriptName);
if (Ferror(fd)) {
rpmlog(RPMLOG_ERR, _("Unable to open temp file: %s\n"), Fstrerror(fd));
- rc = RPMRC_FAIL;
goto exit;
}
if ((fp = fdopen(Fileno(fd), "w")) == NULL) {
rpmlog(RPMLOG_ERR, _("Unable to open stream: %s\n"), strerror(errno));
- rc = RPMRC_FAIL;
goto exit;
}
@@ -151,7 +149,6 @@ rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char *name,
}
if (buildDir && buildDir[0] != '/') {
- rc = RPMRC_FAIL;
goto exit;
}
@@ -160,8 +157,6 @@ rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char *name,
rpmlog(RPMLOG_NOTICE, _("Executing(%s): %s\n"), name, buildCmd);
if (!(child = fork())) {
- /* NSPR messes with SIGPIPE, reset to default for the kids */
- signal(SIGPIPE, SIG_DFL);
errno = 0;
(void) execvp(argv[0], (char *const *)argv);
@@ -176,21 +171,19 @@ rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char *name,
if (pid == -1) {
rpmlog(RPMLOG_ERR, _("Error executing scriptlet %s (%s)\n"),
scriptName, name);
- rc = RPMRC_FAIL;
goto exit;
}
if (!WIFEXITED(status) || WEXITSTATUS(status)) {
rpmlog(RPMLOG_ERR, _("Bad exit status from %s (%s)\n"),
scriptName, name);
- rc = RPMRC_FAIL;
} else
rc = RPMRC_OK;
exit:
Fclose(fd);
if (scriptName) {
- if (rc == RPMRC_OK)
+ if (rc == RPMRC_OK && !rpmIsDebug())
(void) unlink(scriptName);
free(scriptName);
}
@@ -209,6 +202,21 @@ static rpmRC buildSpec(BTA_t buildArgs, rpmSpec spec, int what)
int test = (what & RPMBUILD_NOBUILD);
char *cookie = buildArgs->cookie ? xstrdup(buildArgs->cookie) : NULL;
+ if (rpmExpandNumeric("%{?source_date_epoch_from_changelog}") &&
+ getenv("SOURCE_DATE_EPOCH") == NULL) {
+ /* Use date of first (== latest) changelog entry */
+ Header h = spec->packages->header;
+ struct rpmtd_s td;
+ if (headerGet(h, RPMTAG_CHANGELOGTIME, &td, (HEADERGET_MINMEM|HEADERGET_RAW))) {
+ char sdestr[22];
+ snprintf(sdestr, sizeof(sdestr), "%lli",
+ (long long) rpmtdGetNumber(&td));
+ rpmlog(RPMLOG_NOTICE, _("setting %s=%s\n"), "SOURCE_DATE_EPOCH", sdestr);
+ setenv("SOURCE_DATE_EPOCH", sdestr, 0);
+ rpmtdFreeData(&td);
+ }
+ }
+
/* XXX TODO: rootDir is only relevant during build, eliminate from spec */
spec->rootDir = buildArgs->rootdir;
if (!spec->recursing && spec->BACount) {
diff --git a/build/expression.c b/build/expression.c
index a71ad095c..581a79e19 100644
--- a/build/expression.c
+++ b/build/expression.c
@@ -105,7 +105,6 @@ typedef struct _parseState {
char *p; /*!< current position in expression string */
int nextToken; /*!< current lookahead token */
Value tokenValue; /*!< valid when TOK_INTEGER or TOK_STRING */
- rpmSpec spec; /*!< spec file that we are parsing inside of */
} *ParseState;
@@ -644,7 +643,7 @@ static Value doLogical(ParseState state)
return v1;
}
-int parseExpressionBoolean(rpmSpec spec, const char *expr)
+int parseExpressionBoolean(const char *expr)
{
struct _parseState state;
int result = -1;
@@ -654,7 +653,6 @@ int parseExpressionBoolean(rpmSpec spec, const char *expr)
/* Initialize the expression parser state. */
state.p = state.str = xstrdup(expr);
- state.spec = spec;
state.nextToken = 0;
state.tokenValue = NULL;
(void) rdToken(&state);
diff --git a/build/files.c b/build/files.c
index 6f2cc7d98..67268d41d 100644
--- a/build/files.c
+++ b/build/files.c
@@ -9,11 +9,17 @@
#define MYALLPERMS 07777
#include <errno.h>
+#include <stdlib.h>
#include <regex.h>
#if WITH_CAP
#include <sys/capability.h>
#endif
+#if HAVE_LIBDW
+#include <libelf.h>
+#include <elfutils/libdwelf.h>
+#endif
+
#include <rpm/rpmpgp.h>
#include <rpm/argv.h>
#include <rpm/rpmfc.h>
@@ -21,13 +27,8 @@
#include <rpm/rpmlog.h>
#include <rpm/rpmbase64.h>
-#if HAVE_GELF_H
-#include <gelf.h>
-#endif
-
#include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */
-#include "misc/fts.h"
-#include "lib/cpio.h"
+#include "misc/rpmfts.h"
#include "lib/rpmfi_internal.h" /* XXX fi->apath */
#include "lib/rpmug.h"
#include "build/rpmbuild_internal.h"
@@ -37,8 +38,29 @@
#include <libgen.h>
#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; }
-#define SKIPWHITE(_x) {while(*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
-#define SKIPNONWHITE(_x){while(*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;}
+#define SKIPWHITE(_x) {while (*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
+#define SKIPNONWHITE(_x){while (*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;}
+
+/* the following defines must be in sync with the equally hardcoded paths from
+ * scripts/find-debuginfo.sh
+ */
+#define BUILD_ID_DIR "/usr/lib/.build-id"
+#define DEBUG_SRC_DIR "/usr/src/debug"
+#define DEBUG_LIB_DIR "/usr/lib/debug"
+#define DEBUG_LIB_PREFIX "/usr/lib/debug/"
+#define DEBUG_ID_DIR "/usr/lib/debug/.build-id"
+#define DEBUG_DWZ_DIR "/usr/lib/debug/.dwz"
+
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+#define HASHTYPE fileRenameHash
+#define HTKEYTYPE const char *
+#define HTDATATYPE const char *
+#include "lib/rpmhash.C"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
/**
*/
@@ -85,8 +107,8 @@ typedef struct FileListRec_s {
char *diskPath; /* get file from here */
char *cpioPath; /* filename in cpio archive */
- const char *uname;
- const char *gname;
+ rpmsid uname;
+ rpmsid gname;
unsigned flags;
specfFlags specdFlags; /* which attributes have been explicitly specified. */
rpmVerifyFlags verifyFlags;
@@ -97,27 +119,17 @@ typedef struct FileListRec_s {
/**
*/
typedef struct AttrRec_s {
- char *ar_fmodestr;
- char *ar_dmodestr;
- char *ar_user;
- char *ar_group;
+ rpmsid ar_fmodestr;
+ rpmsid ar_dmodestr;
+ rpmsid ar_user;
+ rpmsid ar_group;
mode_t ar_fmode;
mode_t ar_dmode;
} * AttrRec;
-static struct AttrRec_s root_ar = { NULL, NULL, "root", "root", 0, 0 };
-
/* list of files */
static StringBuf check_fileList = NULL;
-typedef struct specialDir_s {
- char * dirname;
- ARGV_t files;
- struct AttrRec_s ar;
- struct AttrRec_s def_ar;
- rpmFlags sdtype;
-} * specialDir;
-
typedef struct FileEntry_s {
rpmfileAttrs attrFlags;
specfFlags specdFlags;
@@ -134,6 +146,23 @@ typedef struct FileEntry_s {
int isDir;
} * FileEntry;
+typedef struct specialDir_s {
+ char * dirname;
+ ARGV_t files;
+ struct AttrRec_s ar;
+ struct AttrRec_s def_ar;
+ rpmFlags sdtype;
+
+ int entriesCount;
+ int entriesAlloced;
+
+ struct {
+ struct FileEntry_s defEntry;
+ struct FileEntry_s curEntry;
+ } *entries;
+
+} * specialDir;
+
typedef struct FileRecords_s {
FileListRec recs;
int alloced;
@@ -146,11 +175,13 @@ typedef struct FileRecords_s {
typedef struct FileList_s {
/* global filelist state */
char * buildRoot;
+ size_t buildRootLen;
int processingFailed;
int haveCaps;
int largeFiles;
ARGV_t docDirs;
rpmBuildPkgFlags pkgFlags;
+ rpmstrPool pool;
/* actual file records */
struct FileRecords_s files;
@@ -162,63 +193,45 @@ typedef struct FileList_s {
struct FileEntry_s cur;
} * FileList;
-/**
- */
static void nullAttrRec(AttrRec ar)
{
- ar->ar_fmodestr = NULL;
- ar->ar_dmodestr = NULL;
- ar->ar_user = NULL;
- ar->ar_group = NULL;
- ar->ar_fmode = 0;
- ar->ar_dmode = 0;
+ memset(ar, 0, sizeof(*ar));
}
-/**
- */
-static void freeAttrRec(AttrRec ar)
-{
- ar->ar_fmodestr = _free(ar->ar_fmodestr);
- ar->ar_dmodestr = _free(ar->ar_dmodestr);
- ar->ar_user = _free(ar->ar_user);
- ar->ar_group = _free(ar->ar_group);
- /* XXX doesn't free ar (yet) */
- return;
-}
-
-/**
- */
static void dupAttrRec(const AttrRec oar, AttrRec nar)
{
if (oar == nar)
return;
- freeAttrRec(nar);
- nar->ar_fmodestr = (oar->ar_fmodestr ? xstrdup(oar->ar_fmodestr) : NULL);
- nar->ar_dmodestr = (oar->ar_dmodestr ? xstrdup(oar->ar_dmodestr) : NULL);
- nar->ar_user = (oar->ar_user ? xstrdup(oar->ar_user) : NULL);
- nar->ar_group = (oar->ar_group ? xstrdup(oar->ar_group) : NULL);
- nar->ar_fmode = oar->ar_fmode;
- nar->ar_dmode = oar->ar_dmode;
+ *nar = *oar; /* struct assignment */
}
-#if 0
-/**
- */
-static void dumpAttrRec(const char * msg, AttrRec ar)
+/* Creates a default $defattr string. Can be used with argvAdd().
+ Caller owns the new string which needs to be freed when done. */
+static char *mkattr(void)
{
- if (msg)
- fprintf(stderr, "%s:\t", msg);
- fprintf(stderr, "(%s, %s, %s, %s)\n",
- ar->ar_fmodestr,
- ar->ar_user,
- ar->ar_group,
- ar->ar_dmodestr);
+ char *s = NULL;
+ rasprintf(&s, "%s(644,%s,%s,755)", "%defattr", UID_0_USER, GID_0_GROUP);
+ return s;
+}
+
+static void copyFileEntry(FileEntry src, FileEntry dest)
+{
+ /* Copying struct makes just shallow copy */
+ *dest = *src;
+
+ /* Do also deep copying */
+ if (src->langs != NULL) {
+ dest->langs = argvNew();
+ argvAppend(&dest->langs, src->langs);
+ }
+
+ if (src->caps != NULL) {
+ dest->caps = xstrdup(src->caps);
+ }
}
-#endif
static void FileEntryFree(FileEntry entry)
{
- freeAttrRec(&(entry->ar));
argvFree(entry->langs);
memset(entry, 0, sizeof(*entry));
}
@@ -290,42 +303,6 @@ static VFA_t const verifyAttrs[] = {
{ NULL, 0 }
};
-/**
- * Add 'provides' information to debuginfo package
- * @param h Header information from debuginfo package
- * @return nothing
- */
-static void addPackageProvides_for_debuginfo_pkg(Header h)
-{
- const char *arch, *name;
- char *evr, *isaprov;
- rpmsenseFlags pflags = RPMSENSE_EQUAL;
-
- /* <name> = <evr> provide */
- name = headerGetString(h, RPMTAG_NAME);
- arch = headerGetString(h, RPMTAG_ARCH);
- evr = headerGetAsString(h, RPMTAG_EVR);
- headerPutString(h, RPMTAG_PROVIDENAME, name);
- headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
- headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1);
-
- /*
- * <name>(<isa>) = <evr> provide
- * FIXME: noarch needs special casing for now as BuildArch: noarch doesn't
- * cause reading in the noarch macros :-/
- */
-
- isaprov = rpmExpand(name, "%{?_isa}", NULL);
- if (!rstreq(arch, "noarch") && !rstreq(name, isaprov)) {
- headerPutString(h, RPMTAG_PROVIDENAME, isaprov);
- headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
- headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1);
- }
-
- free(isaprov);
- free(evr);
-}
-
static rpmFlags vfaMatch(VFA_t *attrs, const char *token, rpmFlags *flags)
{
VFA_t *vfa;
@@ -413,7 +390,11 @@ exit:
return rc;
}
-#define isAttrDefault(_ars) ((_ars)[0] == '-' && (_ars)[1] == '\0')
+static int isAttrDefault(rpmstrPool pool, rpmsid arsid)
+{
+ const char *ars = rpmstrPoolStr(pool, arsid);
+ return (ars && ars[0] == '-' && ars[1] == '\0');
+}
/**
* Parse %dev from file manifest.
@@ -427,6 +408,7 @@ static rpmRC parseForDev(char * buf, FileEntry cur)
const char * errstr = NULL;
char *p, *pe, *q = NULL;
rpmRC rc = RPMRC_FAIL; /* assume error */
+ char *attr_parameters = NULL;
if ((p = strstr(buf, (name = "%dev"))) == NULL)
return RPMRC_OK;
@@ -452,6 +434,10 @@ static rpmRC parseForDev(char * buf, FileEntry cur)
/* Localize. Erase parsed string */
q = xmalloc((pe-p) + 1);
rstrlcpy(q, p, (pe-p) + 1);
+
+ attr_parameters = xmalloc((pe-p) + 1);
+ rstrlcpy(attr_parameters, p, (pe-p) + 1);
+
while (p <= pe)
*p++ = ' ';
@@ -501,23 +487,26 @@ static rpmRC parseForDev(char * buf, FileEntry cur)
exit:
if (rc) {
- rpmlog(RPMLOG_ERR, _("Missing %s in %s %s\n"), errstr, name, p);
+ rpmlog(RPMLOG_ERR, _("Missing %s in %s(%s)\n"), errstr, name, attr_parameters);
}
+ free(attr_parameters);
free(q);
return rc;
}
/**
* Parse %attr and %defattr from file manifest.
+ * @param pool string pool
* @param buf current spec file line
* @param def parse for %defattr or %attr?
* @param entry file entry data (current / default)
* @return 0 on success
*/
-static rpmRC parseForAttr(char * buf, int def, FileEntry entry)
+static rpmRC parseForAttr(rpmstrPool pool, char * buf, int def, FileEntry entry)
{
const char *name = def ? "%defattr" : "%attr";
char *p, *pe, *q = NULL;
+ char *attr_parameters = NULL;
int x;
struct AttrRec_s arbuf;
AttrRec ar = &arbuf;
@@ -555,6 +544,10 @@ static rpmRC parseForAttr(char * buf, int def, FileEntry entry)
/* Localize. Erase parsed string */
q = xmalloc((pe-p) + 1);
rstrlcpy(q, p, (pe-p) + 1);
+
+ attr_parameters = xmalloc((pe-p) + 1);
+ rstrlcpy(attr_parameters, p, (pe-p) + 1);
+
while (p <= pe)
*p++ = ' ';
@@ -563,61 +556,61 @@ static rpmRC parseForAttr(char * buf, int def, FileEntry entry)
p = q; SKIPWHITE(p);
if (*p != '\0') {
pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0';
- ar->ar_fmodestr = p;
+ ar->ar_fmodestr = rpmstrPoolId(pool, p, 1);
p = pe; SKIPWHITE(p);
}
if (*p != '\0') {
pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0';
- ar->ar_user = p;
+ ar->ar_user = rpmstrPoolId(pool, p, 1);
p = pe; SKIPWHITE(p);
}
if (*p != '\0') {
pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0';
- ar->ar_group = p;
+ ar->ar_group = rpmstrPoolId(pool, p, 1);
p = pe; SKIPWHITE(p);
}
if (*p != '\0' && def) { /* %defattr */
pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0';
- ar->ar_dmodestr = p;
+ ar->ar_dmodestr = rpmstrPoolId(pool, p, 1);
p = pe; SKIPWHITE(p);
}
if (!(ar->ar_fmodestr && ar->ar_user && ar->ar_group) || *p != '\0') {
- rpmlog(RPMLOG_ERR, _("Bad syntax: %s(%s)\n"), name, q);
+ rpmlog(RPMLOG_ERR, _("Bad syntax: %s(%s)\n"), name, attr_parameters);
goto exit;
}
/* Do a quick test on the mode argument and adjust for "-" */
- if (ar->ar_fmodestr && !isAttrDefault(ar->ar_fmodestr)) {
+ if (ar->ar_fmodestr && !isAttrDefault(pool, ar->ar_fmodestr)) {
unsigned int ui;
- x = sscanf(ar->ar_fmodestr, "%o", &ui);
+ x = sscanf(rpmstrPoolStr(pool, ar->ar_fmodestr), "%o", &ui);
if ((x == 0) || (ar->ar_fmode & ~MYALLPERMS)) {
- rpmlog(RPMLOG_ERR, _("Bad mode spec: %s(%s)\n"), name, q);
+ rpmlog(RPMLOG_ERR, _("Bad mode spec: %s(%s)\n"), name, attr_parameters);
goto exit;
}
ar->ar_fmode = ui;
} else {
- ar->ar_fmodestr = NULL;
+ ar->ar_fmodestr = 0;
}
- if (ar->ar_dmodestr && !isAttrDefault(ar->ar_dmodestr)) {
+ if (ar->ar_dmodestr && !isAttrDefault(pool, ar->ar_dmodestr)) {
unsigned int ui;
- x = sscanf(ar->ar_dmodestr, "%o", &ui);
+ x = sscanf(rpmstrPoolStr(pool, ar->ar_dmodestr), "%o", &ui);
if ((x == 0) || (ar->ar_dmode & ~MYALLPERMS)) {
- rpmlog(RPMLOG_ERR, _("Bad dirmode spec: %s(%s)\n"), name, q);
+ rpmlog(RPMLOG_ERR, _("Bad dirmode spec: %s(%s)\n"), name, attr_parameters);
goto exit;
}
ar->ar_dmode = ui;
} else {
- ar->ar_dmodestr = NULL;
+ ar->ar_dmodestr = 0;
}
- if (!(ar->ar_user && !isAttrDefault(ar->ar_user))) {
- ar->ar_user = NULL;
+ if (!(ar->ar_user && !isAttrDefault(pool, ar->ar_user))) {
+ ar->ar_user = 0;
}
- if (!(ar->ar_group && !isAttrDefault(ar->ar_group))) {
- ar->ar_group = NULL;
+ if (!(ar->ar_group && !isAttrDefault(pool, ar->ar_group))) {
+ ar->ar_group = 0;
}
dupAttrRec(ar, &(entry->ar));
@@ -628,6 +621,7 @@ static rpmRC parseForAttr(char * buf, int def, FileEntry entry)
exit:
free(q);
+ free(attr_parameters);
return rc;
}
@@ -862,7 +856,9 @@ static VFA_t const virtualAttrs[] = {
{ "%readme", RPMFILE_README },
{ "%license", RPMFILE_LICENSE },
{ "%pubkey", RPMFILE_PUBKEY },
- { "%manifest", RPMFILE_SECMANIFEST },
+ { "%missingok", RPMFILE_MISSINGOK },
+ { "%artifact", RPMFILE_ARTIFACT },
+ { "%manifest", RPMFILE_SECMANIFEST },
{ NULL, 0 }
};
@@ -943,7 +939,7 @@ static int isHardLink(FileListRec flp, FileListRec tlp)
/**
* Verify that file attributes scope over hardlinks correctly.
* If partial hardlink sets are possible, then add tracking dependency.
- * @param fl package file records
+ * @param files package file records
* @return 1 if partial hardlink sets can exist, 0 otherwise.
*/
static int checkHardLinks(FileRecords files)
@@ -982,22 +978,35 @@ static int seenHardLink(FileRecords files, FileListRec flp, rpm_ino_t *fileid)
* @todo Should directories have %doc/%config attributes? (#14531)
* @todo Remove RPMTAG_OLDFILENAMES, add dirname/basename instead.
* @param fl package file tree walk data
- * @retval *fip file info for package
- * @param h
- * @param isSrc
+ * @param pkg (sub) package
+ * @param isSrc pass 1 for source packages 0 otherwise
*/
-static void genCpioListAndHeader(FileList fl,
- rpmfi * fip, Header h, int isSrc)
+static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
{
- int _addDotSlash = !(isSrc || rpmExpandNumeric("%{_noPayloadPrefix}"));
- size_t apathlen = 0;
- size_t dpathlen = 0;
- size_t skipLen = 0;
FileListRec flp;
char buf[BUFSIZ];
- int i;
+ int i, npaths = 0;
uint32_t defaultalgo = PGPHASHALGO_MD5, digestalgo;
rpm_loff_t totalFileSize = 0;
+ Header h = pkg->header; /* just a shortcut */
+ int override_date = 0;
+ time_t source_date_epoch;
+ char *srcdate = getenv("SOURCE_DATE_EPOCH");
+
+ /* Limit the maximum date to SOURCE_DATE_EPOCH if defined
+ * similar to the tar --clamp-mtime option
+ * https://reproducible-builds.org/specs/source-date-epoch/
+ */
+ if (srcdate && rpmExpandNumeric("%{?clamp_mtime_to_source_date_epoch}")) {
+ char *endptr;
+ errno = 0;
+ source_date_epoch = strtol(srcdate, &endptr, 10);
+ if (srcdate == endptr || *endptr || errno != 0) {
+ rpmlog(RPMLOG_ERR, _("unable to parse %s=%s\n"), "SOURCE_DATE_EPOCH", srcdate);
+ exit(28);
+ }
+ override_date = 1;
+ }
/*
* See if non-md5 file digest algorithm is requested. If not
@@ -1015,16 +1024,40 @@ static void genCpioListAndHeader(FileList fl,
digestalgo);
digestalgo = defaultalgo;
}
-
+
+ /* Adjust paths if needed */
+ if (!isSrc && pkg->removePostfixes) {
+ pkg->fileRenameMap = fileRenameHashCreate(fl->files.used,
+ rstrhash, strcmp,
+ (fileRenameHashFreeKey)rfree, (fileRenameHashFreeData)rfree);
+ for (i = 0, flp = fl->files.recs; i < fl->files.used; i++, flp++) {
+ char * cpiopath = flp->cpioPath;
+ char * cpiopath_orig = xstrdup(cpiopath);
+
+ for (ARGV_const_t postfix_p = pkg->removePostfixes; *postfix_p; postfix_p++) {
+ int len = strlen(*postfix_p);
+ int plen = strlen(cpiopath);
+ if (len <= plen && !strncmp(cpiopath+plen-len, *postfix_p, len)) {
+ cpiopath[plen-len] = '\0';
+ if (plen-len > 0 && cpiopath[plen-len-1] == '/') {
+ cpiopath[plen-len-1] = '\0';
+ }
+ }
+ }
+ if (strcmp(cpiopath_orig, cpiopath))
+ fileRenameHashAddEntry(pkg->fileRenameMap, xstrdup(cpiopath), cpiopath_orig);
+ else
+ _free(cpiopath_orig);
+ }
+ }
+
/* Sort the big list */
qsort(fl->files.recs, fl->files.used,
sizeof(*(fl->files.recs)), compareFileListRecs);
- /* Generate the header. */
- if (! isSrc) {
- skipLen = 1;
- }
+ pkg->dpaths = xmalloc((fl->files.used + 1) * sizeof(*pkg->dpaths));
+ /* Generate the header. */
for (i = 0, flp = fl->files.recs; i < fl->files.used; i++, flp++) {
rpm_ino_t fileid = flp - fl->files.recs;
@@ -1080,29 +1113,26 @@ static void genCpioListAndHeader(FileList fl,
}
/* Skip files that were marked with %exclude. */
- if (flp->flags & RPMFILE_EXCLUDE) continue;
+ if (flp->flags & RPMFILE_EXCLUDE)
+ {
+ argvAdd(&pkg->fileExcludeList, flp->cpioPath);
+ continue;
+ }
- /* Omit '/' and/or URL prefix, leave room for "./" prefix */
- apathlen += (strlen(flp->cpioPath) - skipLen + (_addDotSlash ? 3 : 1));
+ /* Collect on-disk paths for archive creation */
+ pkg->dpaths[npaths++] = xstrdup(flp->diskPath);
- /* Leave room for both dirname and basename NUL's */
- dpathlen += (strlen(flp->diskPath) + 2);
-
- /*
- * Make the header. Store the on-disk path to OLDFILENAMES for
- * cpio list generation purposes for now, final path temporarily
- * to ORIGFILENAMES, to be swapped later into OLDFILENAMES.
- */
- headerPutString(h, RPMTAG_OLDFILENAMES, flp->diskPath);
- headerPutString(h, RPMTAG_ORIGFILENAMES, flp->cpioPath);
- headerPutString(h, RPMTAG_FILEUSERNAME, flp->uname);
- headerPutString(h, RPMTAG_FILEGROUPNAME, flp->gname);
+ headerPutString(h, RPMTAG_OLDFILENAMES, flp->cpioPath);
+ headerPutString(h, RPMTAG_FILEUSERNAME,
+ rpmstrPoolStr(fl->pool, flp->uname));
+ headerPutString(h, RPMTAG_FILEGROUPNAME,
+ rpmstrPoolStr(fl->pool, flp->gname));
/* Only use 64bit filesizes tag if required. */
if (fl->largeFiles) {
rpm_loff_t rsize64 = (rpm_loff_t)flp->fl_size;
headerPutUint64(h, RPMTAG_LONGFILESIZES, &rsize64, 1);
- /* XXX TODO: add rpmlib() dependency for large files */
+ (void) rpmlibNeedsFeature(pkg, "LargeFiles", "4.12.0-1");
} else {
rpm_off_t rsize32 = (rpm_off_t)flp->fl_size;
headerPutUint32(h, RPMTAG_FILESIZES, &rsize32, 1);
@@ -1114,6 +1144,9 @@ static void genCpioListAndHeader(FileList fl,
}
}
+ if (override_date && flp->fl_mtime > source_date_epoch) {
+ flp->fl_mtime = source_date_epoch;
+ }
/*
* For items whose size varies between systems, always explicitly
* cast to the header type before inserting.
@@ -1152,7 +1185,7 @@ static void genCpioListAndHeader(FileList fl,
}
buf[0] = '\0';
- if (S_ISREG(flp->fl_mode))
+ if (S_ISREG(flp->fl_mode) && !(flp->flags & RPMFILE_GHOST))
(void) rpmDoDigest(digestalgo, flp->diskPath, 1,
(unsigned char *)buf, NULL);
headerPutString(h, RPMTAG_FILEDIGESTS, buf);
@@ -1167,7 +1200,7 @@ static void genCpioListAndHeader(FileList fl,
} else {
buf[llen] = '\0';
if (buf[0] == '/' && !rstreq(fl->buildRoot, "/") &&
- rstreqn(buf, fl->buildRoot, strlen(fl->buildRoot))) {
+ rstreqn(buf, fl->buildRoot, fl->buildRootLen)) {
rpmlog(RPMLOG_ERR,
_("Symlink points to BuildRoot: %s -> %s\n"),
flp->cpioPath, buf);
@@ -1193,6 +1226,7 @@ static void genCpioListAndHeader(FileList fl,
headerPutUint32(h, RPMTAG_FILEFLAGS, &(flp->flags) ,1);
}
+ pkg->dpaths[npaths] = NULL;
if (totalFileSize < UINT32_MAX) {
rpm_off_t totalsize = totalFileSize;
@@ -1204,69 +1238,31 @@ static void genCpioListAndHeader(FileList fl,
if (digestalgo != defaultalgo) {
headerPutUint32(h, RPMTAG_FILEDIGESTALGO, &digestalgo, 1);
- rpmlibNeedsFeature(h, "FileDigests", "4.6.0-1");
+ rpmlibNeedsFeature(pkg, "FileDigests", "4.6.0-1");
}
if (fl->haveCaps) {
- rpmlibNeedsFeature(h, "FileCaps", "4.6.1-1");
+ rpmlibNeedsFeature(pkg, "FileCaps", "4.6.1-1");
}
- if (_addDotSlash)
- (void) rpmlibNeedsFeature(h, "PayloadFilesHavePrefix", "4.0-1");
-
- {
- struct rpmtd_s filenames;
- rpmfiFlags flags = RPMFI_NOHEADER|RPMFI_NOFILEUSER|RPMFI_NOFILEGROUP;
- rpmfi fi;
- int fc;
- const char *fn;
- char *a, **apath;
+ if (!isSrc && !rpmExpandNumeric("%{_noPayloadPrefix}"))
+ (void) rpmlibNeedsFeature(pkg, "PayloadFilesHavePrefix", "4.0-1");
/* rpmfiNew() only groks compressed filelists */
headerConvert(h, HEADERCONV_COMPRESSFILELIST);
- fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, flags);
+ pkg->cpioList = rpmfilesNew(NULL, h, RPMTAG_BASENAMES,
+ (RPMFI_NOFILEUSER|RPMFI_NOFILEGROUP));
- if (fi == NULL) {
+ if (pkg->cpioList == NULL || rpmfilesFC(pkg->cpioList) != npaths) {
fl->processingFailed = 1;
- return;
}
- /*
- * Grab the real filenames from ORIGFILENAMES and put into OLDFILENAMES,
- * remove temporary cruft and side-effects from filelist compression
- * for rpmfiNew().
- */
- headerGet(h, RPMTAG_ORIGFILENAMES, &filenames, HEADERGET_ALLOC);
- headerDel(h, RPMTAG_ORIGFILENAMES);
- headerDel(h, RPMTAG_BASENAMES);
- headerDel(h, RPMTAG_DIRNAMES);
- headerDel(h, RPMTAG_DIRINDEXES);
- rpmtdSetTag(&filenames, RPMTAG_OLDFILENAMES);
- headerPut(h, &filenames, HEADERPUT_DEFAULT);
-
- /* Create hge-style archive path array, normally adding "./" */
- fc = rpmtdCount(&filenames);
- apath = xmalloc(fc * sizeof(*apath) + apathlen + 1);
- a = (char *)(apath + fc);
- *a = '\0';
- rpmtdInit(&filenames);
- for (int i = 0; (fn = rpmtdNextString(&filenames)); i++) {
- apath[i] = a;
- if (_addDotSlash)
- a = stpcpy(a, "./");
- a = stpcpy(a, (fn + skipLen));
- a++; /* skip apath NUL */
- }
- fi->apath = apath;
- *fip = fi;
- rpmtdFreeData(&filenames);
- }
-
- /* Compress filelist unless legacy format requested */
- if (!(fl->pkgFlags & RPMBUILD_PKG_NODIRTOKENS)) {
- headerConvert(h, HEADERCONV_COMPRESSFILELIST);
+ if (fl->pkgFlags & RPMBUILD_PKG_NODIRTOKENS) {
+ /* Uncompress filelist if legacy format requested */
+ headerConvert(h, HEADERCONV_EXPANDFILELIST);
+ } else {
/* Binary packages with dirNames cannot be installed by legacy rpm. */
- (void) rpmlibNeedsFeature(h, "CompressedFileNames", "3.0.4-1");
+ (void) rpmlibNeedsFeature(pkg, "CompressedFileNames", "3.0.4-1");
}
}
@@ -1289,6 +1285,7 @@ static void FileListFree(FileList fl)
FileRecordsFree(&(fl->files));
free(fl->buildRoot);
argvFree(fl->docDirs);
+ rpmstrPoolFree(fl->pool);
}
/* forward ref */
@@ -1346,6 +1343,10 @@ static rpmRC addFile(FileList fl, const char * diskPath,
}
cpioPath = diskPath;
+ if (strncmp(diskPath, fl->buildRoot, fl->buildRootLen)) {
+ rpmlog(RPMLOG_ERR, _("Path is outside buildroot: %s\n"), diskPath);
+ goto exit;
+ }
/* Path may have prepended buildRoot, so locate the original filename. */
/*
@@ -1359,7 +1360,7 @@ static rpmRC addFile(FileList fl, const char * diskPath,
*
*/
if (fl->buildRoot && !rstreq(fl->buildRoot, "/"))
- cpioPath += strlen(fl->buildRoot);
+ cpioPath += fl->buildRootLen;
/* XXX make sure '/' can be packaged also */
if (*cpioPath == '\0')
@@ -1394,6 +1395,12 @@ static rpmRC addFile(FileList fl, const char * diskPath,
}
}
+ /* Error out when a non-directory is specified as one in spec */
+ if (fl->cur.isDir && (statp == &statbuf) && !S_ISDIR(statp->st_mode)) {
+ rpmlog(RPMLOG_ERR, _("Not a directory: %s\n"), diskPath);
+ goto exit;
+ }
+
/* Don't recurse into explicit %dir, don't double-recurse from fts */
if ((fl->cur.isDir != 1) && (statp == &statbuf) && S_ISDIR(statp->st_mode)) {
return recurseDir(fl, diskPath);
@@ -1404,9 +1411,15 @@ static rpmRC addFile(FileList fl, const char * diskPath,
fileGid = statp->st_gid;
/* Explicit %attr() always wins */
- if (fl->cur.ar.ar_fmodestr != NULL) {
- fileMode &= S_IFMT;
- fileMode |= fl->cur.ar.ar_fmode;
+ if (fl->cur.ar.ar_fmodestr) {
+ if (S_ISLNK(fileMode)) {
+ rpmlog(RPMLOG_WARNING,
+ "Explicit %%attr() mode not applicable to symlink: %s\n",
+ diskPath);
+ } else {
+ fileMode &= S_IFMT;
+ fileMode |= fl->cur.ar.ar_fmode;
+ }
} else {
/* ...but %defattr() for directories and files is different */
if (S_ISDIR(fileMode)) {
@@ -1414,22 +1427,22 @@ static rpmRC addFile(FileList fl, const char * diskPath,
fileMode &= S_IFMT;
fileMode |= fl->def.ar.ar_dmode;
}
- } else if (fl->def.ar.ar_fmodestr) {
+ } else if (!S_ISLNK(fileMode) && fl->def.ar.ar_fmodestr) {
fileMode &= S_IFMT;
fileMode |= fl->def.ar.ar_fmode;
}
}
if (fl->cur.ar.ar_user) {
- fileUname = fl->cur.ar.ar_user;
+ fileUname = rpmstrPoolStr(fl->pool, fl->cur.ar.ar_user);
} else if (fl->def.ar.ar_user) {
- fileUname = fl->def.ar.ar_user;
+ fileUname = rpmstrPoolStr(fl->pool, fl->def.ar.ar_user);
} else {
fileUname = rpmugUname(fileUid);
}
if (fl->cur.ar.ar_group) {
- fileGname = fl->cur.ar.ar_group;
+ fileGname = rpmstrPoolStr(fl->pool, fl->cur.ar.ar_group);
} else if (fl->def.ar.ar_group) {
- fileGname = fl->def.ar.ar_group;
+ fileGname = rpmstrPoolStr(fl->pool, fl->def.ar.ar_group);
} else {
fileGname = rpmugGname(fileGid);
}
@@ -1459,11 +1472,13 @@ static rpmRC addFile(FileList fl, const char * diskPath,
flp->fl_mode = fileMode;
flp->fl_uid = fileUid;
flp->fl_gid = fileGid;
+ if (S_ISDIR(fileMode))
+ flp->fl_size = 0;
flp->cpioPath = xstrdup(cpioPath);
flp->diskPath = xstrdup(diskPath);
- flp->uname = rpmugStashStr(fileUname);
- flp->gname = rpmugStashStr(fileGname);
+ flp->uname = rpmstrPoolId(fl->pool, fileUname, 1);
+ flp->gname = rpmstrPoolId(fl->pool, fileGname, 1);
if (fl->cur.langs) {
flp->langs = argvJoin(fl->cur.langs, "|");
@@ -1472,7 +1487,7 @@ static rpmRC addFile(FileList fl, const char * diskPath,
}
if (fl->cur.caps) {
- flp->caps = fl->cur.caps;
+ flp->caps = xstrdup(fl->cur.caps);
} else {
flp->caps = xstrdup("");
}
@@ -1591,15 +1606,15 @@ static rpmRC processMetadataFile(Package pkg, FileList fl,
apkt = pgpArmorWrap(PGPARMOR_PUBKEY, pkt, pktlen);
break;
}
- case RPMTAG_SECMANIFEST: {
+ case RPMTAG_SECMANIFEST: {
if ((xx = rpmioSlurp(fn, &pkt, &pktlen)) != 0 || pkt == NULL) {
- rpmlog(RPMLOG_ERR, _("%s: Security manifest file read failed.\n"), fn);
- goto exit;
+ rpmlog(RPMLOG_ERR, _("%s: Security manifest file read failed.\n"), fn);
+ goto exit;
+ }
+ apkt = rpmBase64Encode(pkt, pktlen, -1);
+ rpmlog(RPMLOG_INFO, _("Aptk: %s\n"), apkt);
+ break;
}
- apkt = rpmBase64Encode(pkt, pktlen, -1);
- rpmlog(RPMLOG_INFO, _("Aptk: %s\n"), apkt);
- break;
- }
}
if (!apkt) {
@@ -1624,6 +1639,448 @@ exit:
return rc;
}
+/* add a file with possible virtual attributes to the file list */
+static void argvAddAttr(ARGV_t *filesp, rpmfileAttrs attrs, const char *path)
+{
+ char *line = NULL;
+
+ for (VFA_t *vfa = virtualAttrs; vfa->attribute != NULL; vfa++) {
+ if (vfa->flag & attrs)
+ line = rstrscat(&line, vfa->attribute, " ", NULL);
+ }
+ line = rstrscat(&line, path, NULL);
+ argvAdd(filesp, line);
+ free(line);
+}
+
+#if HAVE_LIBDW
+/* How build id links are generated. See macros.in for description. */
+#define BUILD_IDS_NONE 0
+#define BUILD_IDS_ALLDEBUG 1
+#define BUILD_IDS_SEPARATE 2
+#define BUILD_IDS_COMPAT 3
+
+static int addNewIDSymlink(ARGV_t *files,
+ char *targetpath, char *idlinkpath,
+ int isDbg, int *dups)
+{
+ const char *linkerr = _("failed symlink");
+ int rc = 0;
+ int nr = 0;
+ int exists = 0;
+ char *origpath, *linkpath;
+
+ if (isDbg)
+ rasprintf(&linkpath, "%s.debug", idlinkpath);
+ else
+ linkpath = idlinkpath;
+ origpath = linkpath;
+
+ while (faccessat(AT_FDCWD, linkpath, F_OK, AT_SYMLINK_NOFOLLOW) == 0) {
+ /* We don't care about finding dups for compat links, they are
+ OK as is. Otherwise we will need to double check if
+ existing link points to the correct target. */
+ if (dups == NULL)
+ {
+ exists = 1;
+ break;
+ }
+
+ char ltarget[PATH_MAX];
+ ssize_t llen;
+ /* In short-circuited builds the link might already exist */
+ if ((llen = readlink(linkpath, ltarget, sizeof(ltarget)-1)) != -1) {
+ ltarget[llen] = '\0';
+ if (rstreq(ltarget, targetpath)) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (nr > 0)
+ free(linkpath);
+ nr++;
+ rasprintf(&linkpath, "%s.%d%s", idlinkpath, nr,
+ isDbg ? ".debug" : "");
+ }
+
+ if (!exists && symlink(targetpath, linkpath) < 0) {
+ rc = 1;
+ rpmlog(RPMLOG_ERR, "%s: %s -> %s: %m\n",
+ linkerr, linkpath, targetpath);
+ } else {
+ argvAddAttr(files, RPMFILE_ARTIFACT, linkpath);
+ }
+
+ if (nr > 0) {
+ /* Lets see why there are multiple build-ids. If the original
+ targets are hard linked, then it is OK, otherwise warn
+ something fishy is going on. Would be nice to call
+ something like eu-elfcmp to see if they are really the same
+ ELF file or not. */
+ struct stat st1, st2;
+ if (stat (origpath, &st1) != 0) {
+ rpmlog(RPMLOG_WARNING, _("Duplicate build-id, stat %s: %m\n"),
+ origpath);
+ } else if (stat (linkpath, &st2) != 0) {
+ rpmlog(RPMLOG_WARNING, _("Duplicate build-id, stat %s: %m\n"),
+ linkpath);
+ } else if (!(S_ISREG(st1.st_mode) && S_ISREG(st2.st_mode)
+ && st1.st_nlink > 1 && st2.st_nlink == st1.st_nlink
+ && st1.st_ino == st2.st_ino && st1.st_dev == st2.st_dev)) {
+ char *rpath1 = realpath(origpath, NULL);
+ char *rpath2 = realpath(linkpath, NULL);
+ rpmlog(RPMLOG_WARNING, _("Duplicate build-ids %s and %s\n"),
+ rpath1, rpath2);
+ free(rpath1);
+ free(rpath2);
+ }
+ }
+
+ if (isDbg)
+ free(origpath);
+ if (nr > 0)
+ free(linkpath);
+ if (dups != NULL)
+ *dups = nr;
+
+ return rc;
+}
+
+static int generateBuildIDs(FileList fl, ARGV_t *files)
+{
+ int rc = 0;
+ int i;
+ FileListRec flp;
+ char **ids = NULL;
+ char **paths = NULL;
+ size_t nr_ids, allocated;
+ nr_ids = allocated = 0;
+
+ /* How are we supposed to create the build-id links? */
+ char *build_id_links_macro = rpmExpand("%{?_build_id_links}", NULL);
+ int build_id_links;
+ if (*build_id_links_macro == '\0') {
+ rpmlog(RPMLOG_WARNING,
+ _("_build_id_links macro not set, assuming 'compat'\n"));
+ build_id_links = BUILD_IDS_COMPAT;
+ } else if (strcmp(build_id_links_macro, "none") == 0) {
+ build_id_links = BUILD_IDS_NONE;
+ } else if (strcmp(build_id_links_macro, "alldebug") == 0) {
+ build_id_links = BUILD_IDS_ALLDEBUG;
+ } else if (strcmp(build_id_links_macro, "separate") == 0) {
+ build_id_links = BUILD_IDS_SEPARATE;
+ } else if (strcmp(build_id_links_macro, "compat") == 0) {
+ build_id_links = BUILD_IDS_COMPAT;
+ } else {
+ rc = 1;
+ rpmlog(RPMLOG_ERR,
+ _("_build_id_links macro set to unknown value '%s'\n"),
+ build_id_links_macro);
+ build_id_links = BUILD_IDS_NONE;
+ }
+ free(build_id_links_macro);
+
+ if (build_id_links == BUILD_IDS_NONE || rc != 0)
+ return rc;
+
+ /* Historically we have only checked build_ids when __debug_package
+ was defined. So don't terminate the build if __debug_package is
+ unset, even when _missing_build_ids_terminate_build is. */
+ int terminate = (rpmExpandNumeric("%{?_missing_build_ids_terminate_build}")
+ && rpmExpandNumeric("%{?__debug_package}"));
+
+ /* Collect and check all build-ids for ELF files in this package. */
+ int needMain = 0;
+ int needDbg = 0;
+ for (i = 0, flp = fl->files.recs; i < fl->files.used; i++, flp++) {
+ struct stat sbuf;
+ if (lstat(flp->diskPath, &sbuf) == 0 && S_ISREG (sbuf.st_mode)) {
+ /* We determine whether this is a main or
+ debug ELF based on path. */
+ int isDbg = strncmp (flp->cpioPath,
+ DEBUG_LIB_PREFIX, strlen (DEBUG_LIB_PREFIX)) == 0;
+
+ /* For the main package files mimic what find-debuginfo.sh does.
+ Only check build-ids for executable files. Debug files are
+ always non-executable. */
+ if (!isDbg
+ && (sbuf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)
+ continue;
+
+ int fd = open (flp->diskPath, O_RDONLY);
+ if (fd >= 0) {
+ /* Only real ELF files, that are ET_EXEC, ET_DYN or
+ kernel modules (ET_REL files with names ending in .ko)
+ should have build-ids. */
+ GElf_Ehdr ehdr;
+ Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
+ if (elf != NULL && elf_kind(elf) == ELF_K_ELF
+ && gelf_getehdr(elf, &ehdr) != NULL
+ && (ehdr.e_type == ET_EXEC || ehdr.e_type == ET_DYN
+ || (ehdr.e_type == ET_REL
+ && rpmFileHasSuffix (flp->diskPath, ".ko")))) {
+ const void *build_id;
+ ssize_t len = dwelf_elf_gnu_build_id (elf, &build_id);
+ /* len == -1 means error. Zero means no
+ build-id. We want at least a length of 2 so we
+ have at least a xx/yy (hex) dir/file. But
+ reasonable build-ids are between 16 bytes (md5
+ is 128 bits) and 64 bytes (largest sha3 is 512
+ bits), common is 20 bytes (sha1 is 160 bits). */
+ if (len >= 16 && len <= 64) {
+ int addid = 0;
+ if (isDbg) {
+ needDbg = 1;
+ addid = 1;
+ }
+ else if (build_id_links != BUILD_IDS_ALLDEBUG) {
+ needMain = 1;
+ addid = 1;
+ }
+ if (addid) {
+ const unsigned char *p = build_id;
+ const unsigned char *end = p + len;
+ char *id_str;
+ if (allocated <= nr_ids) {
+ allocated += 16;
+ paths = xrealloc (paths,
+ allocated * sizeof(char *));
+ ids = xrealloc (ids,
+ allocated * sizeof(char *));
+ }
+
+ paths[nr_ids] = xstrdup(flp->cpioPath);
+ id_str = ids[nr_ids] = xmalloc(2 * len + 1);
+ while (p < end)
+ id_str += sprintf(id_str, "%02x",
+ (unsigned)*p++);
+ *id_str = '\0';
+ nr_ids++;
+ }
+ } else {
+ if (len < 0) {
+ rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING,
+ _("error reading build-id in %s: %s\n"),
+ flp->diskPath, elf_errmsg (-1));
+ } else if (len == 0) {
+ rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING,
+ _("Missing build-id in %s\n"),
+ flp->diskPath);
+ } else {
+ rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING,
+ (len < 16
+ ? _("build-id found in %s too small\n")
+ : _("build-id found in %s too large\n")),
+ flp->diskPath);
+ }
+ if (terminate)
+ rc = 1;
+ }
+ elf_end (elf);
+ }
+ close (fd);
+ }
+ }
+ }
+
+ /* Process and clean up all build-ids. */
+ if (nr_ids > 0) {
+ const char *errdir = _("failed to create directory");
+ char *mainiddir = NULL;
+ char *debugiddir = NULL;
+ if (rc == 0) {
+ char *attrstr;
+ /* Add .build-id directories to hold the subdirs/symlinks. */
+
+ mainiddir = rpmGetPath(fl->buildRoot, BUILD_ID_DIR, NULL);
+ debugiddir = rpmGetPath(fl->buildRoot, DEBUG_ID_DIR, NULL);
+
+ /* Make sure to reset all file flags to defaults. */
+ attrstr = mkattr();
+ argvAdd(files, attrstr);
+ free (attrstr);
+
+ /* Supported, but questionable. */
+ if (needMain && needDbg)
+ rpmlog(RPMLOG_WARNING,
+ _("Mixing main ELF and debug files in package"));
+
+ if (needMain) {
+ if ((rc = rpmioMkpath(mainiddir, 0755, -1, -1)) != 0) {
+ rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, mainiddir);
+ } else {
+ argvAddAttr(files, RPMFILE_DIR|RPMFILE_ARTIFACT, mainiddir);
+ }
+ }
+
+ if (rc == 0 && needDbg) {
+ if ((rc = rpmioMkpath(debugiddir, 0755, -1, -1)) != 0) {
+ rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, debugiddir);
+ } else {
+ argvAddAttr(files, RPMFILE_DIR|RPMFILE_ARTIFACT, debugiddir);
+ }
+ }
+ }
+
+ /* In case we need ALLDEBUG links we might need the vra as
+ tagged onto the .debug file name. */
+ char *vra = NULL;
+ if (rc == 0 && needDbg && build_id_links == BUILD_IDS_ALLDEBUG) {
+ int unique_debug_names =
+ rpmExpandNumeric("%{?_unique_debug_names}");
+ if (unique_debug_names == 1)
+ vra = rpmExpand("-%{VERSION}-%{RELEASE}.%{_arch}", NULL);
+ }
+
+ /* Now add a subdir and symlink for each buildid found. */
+ for (i = 0; i < nr_ids; i++) {
+ /* Don't add anything more when an error occurred. But do
+ cleanup. */
+ if (rc == 0) {
+ int isDbg = strncmp (paths[i], DEBUG_LIB_PREFIX,
+ strlen (DEBUG_LIB_PREFIX)) == 0;
+
+ char *buildidsubdir;
+ char subdir[4];
+ subdir[0] = '/';
+ subdir[1] = ids[i][0];
+ subdir[2] = ids[i][1];
+ subdir[3] = '\0';
+ if (isDbg)
+ buildidsubdir = rpmGetPath(debugiddir, subdir, NULL);
+ else
+ buildidsubdir = rpmGetPath(mainiddir, subdir, NULL);
+ /* We only need to create and add the subdir once. */
+ int addsubdir = access (buildidsubdir, F_OK) == -1;
+ if (addsubdir
+ && (rc = rpmioMkpath(buildidsubdir, 0755, -1, -1)) != 0) {
+ rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, buildidsubdir);
+ } else {
+ if (addsubdir)
+ argvAddAttr(files, RPMFILE_DIR|RPMFILE_ARTIFACT, buildidsubdir);
+ if (rc == 0) {
+ char *linkpattern, *targetpattern;
+ char *linkpath, *targetpath;
+ int dups = 0;
+ if (isDbg) {
+ linkpattern = "%s/%s";
+ targetpattern = "../../../../..%s";
+ } else {
+ linkpattern = "%s/%s";
+ targetpattern = "../../../..%s";
+ }
+ rasprintf(&linkpath, linkpattern,
+ buildidsubdir, &ids[i][2]);
+ rasprintf(&targetpath, targetpattern, paths[i]);
+ rc = addNewIDSymlink(files, targetpath, linkpath,
+ isDbg, &dups);
+
+ /* We might want to have a link from the debug
+ build_ids dir to the main one. We create it
+ when we are creating compat links or doing
+ an old style alldebug build-ids package. In
+ the first case things are simple since we
+ just link to the main build-id symlink. The
+ second case is a bit tricky, since we
+ cannot be 100% sure the file names in the
+ main and debug package match. Currently
+ they do, but when creating parallel
+ installable debuginfo packages they might
+ not (in that case we might have to also
+ strip the nvr from the debug name).
+
+ In general either method is discouraged
+ since it might create dangling symlinks if
+ the package versions get out of sync. */
+ if (rc == 0 && isDbg
+ && build_id_links == BUILD_IDS_COMPAT) {
+ /* buildidsubdir already points to the
+ debug buildid. We just need to setup
+ the symlink to the main one. There
+ might be duplicate IDs, those are found
+ by the addNewIDSymlink above. Target
+ the last found duplicate, if any. */
+ free(linkpath);
+ free(targetpath);
+ if (dups == 0)
+ {
+ rasprintf(&linkpath, "%s/%s",
+ buildidsubdir, &ids[i][2]);
+ rasprintf(&targetpath,
+ "../../../.build-id%s/%s",
+ subdir, &ids[i][2]);
+ }
+ else
+ {
+ rasprintf(&linkpath, "%s/%s.%d",
+ buildidsubdir, &ids[i][2], dups);
+ rasprintf(&targetpath,
+ "../../../.build-id%s/%s.%d",
+ subdir, &ids[i][2], dups);
+ }
+ rc = addNewIDSymlink(files, targetpath, linkpath,
+ 0, NULL);
+ }
+
+ if (rc == 0 && isDbg
+ && build_id_links == BUILD_IDS_ALLDEBUG) {
+ /* buildidsubdir already points to the
+ debug buildid. We do have to figure out
+ the main ELF file though (which is most
+ likely not in this package). Guess we
+ can find it by stripping the
+ /usr/lib/debug path and .debug
+ prefix. Which might not really be
+ correct if there was a more involved
+ transformation (for example for
+ parallel installable debuginfo
+ packages), but then we shouldn't be
+ using ALLDEBUG in the first place.
+ Also ignore things like .dwz multifiles
+ which don't end in ".debug". */
+ int pathlen = strlen(paths[i]);
+ int debuglen = strlen(".debug");
+ int prefixlen = strlen(DEBUG_LIB_DIR);
+ int vralen = vra == NULL ? 0 : strlen(vra);
+ if (pathlen > prefixlen + debuglen + vralen
+ && strcmp ((paths[i] + pathlen - debuglen),
+ ".debug") == 0) {
+ free(linkpath);
+ free(targetpath);
+ char *targetstr = xstrdup (paths[i]
+ + prefixlen);
+ int targetlen = pathlen - prefixlen;
+ int targetend = targetlen - debuglen - vralen;
+ targetstr[targetend] = '\0';
+ rasprintf(&linkpath, "%s/%s",
+ buildidsubdir, &ids[i][2]);
+ rasprintf(&targetpath, "../../../../..%s",
+ targetstr);
+ rc = addNewIDSymlink(files, targetpath,
+ linkpath, 0, &dups);
+ free(targetstr);
+ }
+ }
+ free(linkpath);
+ free(targetpath);
+ }
+ }
+ free(buildidsubdir);
+ }
+ free(paths[i]);
+ free(ids[i]);
+ }
+ free(mainiddir);
+ free(debugiddir);
+ free(vra);
+ free(paths);
+ free(ids);
+ }
+ return rc;
+}
+#endif
+
/**
* Add a file to a binary package.
* @param pkg
@@ -1683,16 +2140,13 @@ static rpmRC processBinaryFile(Package pkg, FileList fl, const char * fileName)
}
argvFree(argv);
} else {
- int lvl = RPMLOG_WARNING;
const char *msg = (fl->cur.isDir) ?
- _("Directory not found by glob: %s\n") :
- _("File not found by glob: %s\n");
- if (!(fl->cur.attrFlags & RPMFILE_EXCLUDE)) {
- lvl = RPMLOG_ERR;
- rc = RPMRC_FAIL;
- }
- rpmlog(lvl, msg, diskPath);
- goto exit;
+ _("Directory not found by glob: %s. "
+ "Trying without globbing.\n") :
+ _("File not found by glob: %s. "
+ "Trying without globbing.\n");
+ rpmlog(RPMLOG_DEBUG, msg, diskPath);
+ rc = addFile(fl, diskPath, NULL);
}
} else {
rc = addFile(fl, diskPath, NULL);
@@ -1712,6 +2166,8 @@ static rpmRC readFilesManifest(rpmSpec spec, Package pkg, const char *path)
char *fn, buf[BUFSIZ];
FILE *fd = NULL;
rpmRC rc = RPMRC_FAIL;
+ unsigned int nlines = 0;
+ char *expanded;
if (*path == '/') {
fn = rpmGetPath(path, NULL);
@@ -1726,13 +2182,28 @@ static rpmRC readFilesManifest(rpmSpec spec, Package pkg, const char *path)
goto exit;
}
+ /* XXX unmask %license while parsing files manifest*/
+ rpmPushMacro(spec->macros, "license", NULL, "%%license", RMIL_SPEC);
+
while (fgets(buf, sizeof(buf), fd)) {
- handleComments(buf);
- if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
+ if (handleComments(buf))
+ continue;
+ if (rpmExpandMacros(spec->macros, buf, &expanded, 0) < 0) {
rpmlog(RPMLOG_ERR, _("line: %s\n"), buf);
goto exit;
}
- argvAdd(&(pkg->fileList), buf);
+ argvAdd(&(pkg->fileList), expanded);
+ free(expanded);
+ nlines++;
+ }
+
+ if (nlines == 0) {
+ int terminate =
+ rpmExpandNumeric("%{?_empty_manifest_terminate_build}");
+ rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING,
+ _("Empty %%files file %s\n"), fn);
+ if (terminate)
+ goto exit;
}
if (ferror(fd))
@@ -1741,6 +2212,7 @@ static rpmRC readFilesManifest(rpmSpec spec, Package pkg, const char *path)
rc = RPMRC_OK;
exit:
+ rpmPopMacro(NULL, "license");
if (fd) fclose(fd);
free(fn);
return rc;
@@ -1773,24 +2245,47 @@ static char * getSpecialDocDir(Header h, rpmFlags sdtype)
return res;
}
-static specialDir specialDirNew(Header h, rpmFlags sdtype,
- AttrRec ar, AttrRec def_ar)
+static specialDir specialDirNew(Header h, rpmFlags sdtype)
{
specialDir sd = xcalloc(1, sizeof(*sd));
- dupAttrRec(ar, &(sd->ar));
- dupAttrRec(def_ar, &(sd->def_ar));
+
+ sd->entriesCount = 0;
+ sd->entriesAlloced = 10;
+ sd->entries = xcalloc(sd->entriesAlloced, sizeof(sd->entries[0]));
+
sd->dirname = getSpecialDocDir(h, sdtype);
sd->sdtype = sdtype;
return sd;
}
+static void addSpecialFile(specialDir sd, const char *path, FileEntry cur,
+ FileEntry def)
+{
+ argvAdd(&sd->files, path);
+
+ if (sd->entriesCount >= sd->entriesAlloced) {
+ sd->entriesAlloced <<= 1;
+ sd->entries = xrealloc(sd->entries, sd->entriesAlloced *
+ sizeof(sd->entries[0]));
+ }
+
+ copyFileEntry(cur, &sd->entries[sd->entriesCount].curEntry);
+ copyFileEntry(def, &sd->entries[sd->entriesCount].defEntry);
+ sd->entriesCount++;
+}
+
static specialDir specialDirFree(specialDir sd)
{
+ int i = 0;
+
if (sd) {
argvFree(sd->files);
- freeAttrRec(&(sd->ar));
- freeAttrRec(&(sd->def_ar));
free(sd->dirname);
+ for (i = 0; i < sd->entriesCount; i++) {
+ FileEntryFree(&sd->entries[i].curEntry);
+ FileEntryFree(&sd->entries[i].defEntry);
+ }
+ free(sd->entries);
free(sd);
}
return NULL;
@@ -1803,10 +2298,13 @@ static void processSpecialDir(rpmSpec spec, Package pkg, FileList fl,
const char *sdname = (sd->sdtype == RPMFILE_DOC) ? "%doc" : "%license";
char *mkdocdir = rpmExpand("%{__mkdir_p} $", sdenv, NULL);
StringBuf docScript = newStringBuf();
+ char *basepath, **files;
+ int fi;
appendStringBuf(docScript, sdenv);
appendStringBuf(docScript, "=$RPM_BUILD_ROOT");
appendLineStringBuf(docScript, sd->dirname);
+ appendLineStringBuf(docScript, "export LC_ALL=C");
appendStringBuf(docScript, "export ");
appendLineStringBuf(docScript, sdenv);
appendLineStringBuf(docScript, mkdocdir);
@@ -1817,7 +2315,8 @@ static void processSpecialDir(rpmSpec spec, Package pkg, FileList fl,
appendStringBuf(docScript, "cp -pr ");
appendStringBuf(docScript, efn);
appendStringBuf(docScript, " $");
- appendLineStringBuf(docScript, sdenv);
+ appendStringBuf(docScript, sdenv);
+ appendLineStringBuf(docScript, " ||:");
free(efn);
}
@@ -1829,52 +2328,77 @@ static void processSpecialDir(rpmSpec spec, Package pkg, FileList fl,
fl->processingFailed = 1;
}
- /* Reset for %doc */
- FileEntryFree(&fl->cur);
-
- fl->cur.attrFlags |= sd->sdtype;
- fl->cur.verifyFlags = fl->def.verifyFlags;
- dupAttrRec(&(sd->ar), &(fl->cur.ar));
- dupAttrRec(&(sd->def_ar), &(fl->def.ar));
+ basepath = rpmGenPath(spec->rootDir, "%{_builddir}", spec->buildSubdir);
+ files = sd->files;
+ fi = 0;
+ while (*files != NULL) {
+ char *origfile = rpmGenPath(basepath, *files, NULL);
+ char *eorigfile = rpmEscapeSpaces(origfile);
+ ARGV_t globFiles;
+ int globFilesCount, i;
+ char *newfile;
+
+ FileEntryFree(&fl->cur);
+ FileEntryFree(&fl->def);
+ copyFileEntry(&sd->entries[fi].curEntry, &fl->cur);
+ copyFileEntry(&sd->entries[fi].defEntry, &fl->def);
+ fi++;
+
+ if (rpmGlob(eorigfile, &globFilesCount, &globFiles) == 0) {
+ for (i = 0; i < globFilesCount; i++) {
+ rasprintf(&newfile, "%s/%s", sd->dirname, basename(globFiles[i]));
+ processBinaryFile(pkg, fl, newfile);
+ free(newfile);
+ }
+ argvFree(globFiles);
+ } else {
+ rpmlog(RPMLOG_ERR, _("File not found by glob: %s\n"), eorigfile);
+ fl->processingFailed = 1;
+ }
+ free(eorigfile);
+ free(origfile);
+ files++;
+ }
+ free(basepath);
+ FileEntryFree(&fl->cur);
+ FileEntryFree(&fl->def);
+ copyFileEntry(&sd->entries[0].defEntry, &fl->def);
+ fl->cur.isDir = 1;
(void) processBinaryFile(pkg, fl, sd->dirname);
freeStringBuf(docScript);
free(mkdocdir);
}
-
-static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
- Package pkg, int installSpecialDoc, int test)
-{
- struct FileList_s fl;
- ARGV_t fileNames = NULL;
- specialDir specialDoc = NULL;
- specialDir specialLic = NULL;
-
- pkg->cpioList = NULL;
- for (ARGV_const_t fp = pkg->fileFile; fp && *fp != NULL; fp++) {
- if (readFilesManifest(spec, pkg, *fp))
- return RPMRC_FAIL;
- }
- /* Init the file list structure */
- memset(&fl, 0, sizeof(fl));
+/* Resets the default settings for files in the package list.
+ Used in processPackageFiles whenever a new set of files is added. */
+static void resetPackageFilesDefaults (struct FileList_s *fl,
+ rpmBuildPkgFlags pkgFlags)
+{
+ struct AttrRec_s root_ar = { 0, 0, 0, 0, 0, 0 };
- /* XXX spec->buildRoot == NULL, then xstrdup("") is returned */
- fl.buildRoot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
+ root_ar.ar_user = rpmstrPoolId(fl->pool, UID_0_USER, 1);
+ root_ar.ar_group = rpmstrPoolId(fl->pool, GID_0_GROUP, 1);
+ dupAttrRec(&root_ar, &fl->def.ar); /* XXX assume %defattr(-,root,root) */
- dupAttrRec(&root_ar, &fl.def.ar); /* XXX assume %defattr(-,root,root) */
- fl.def.verifyFlags = RPMVERIFY_ALL;
+ fl->def.verifyFlags = RPMVERIFY_ALL;
- fl.pkgFlags = pkgFlags;
+ fl->pkgFlags = pkgFlags;
+}
- { char *docs = rpmGetPath("%{?__docdir_path}", NULL);
- argvSplit(&fl.docDirs, docs, ":");
- free(docs);
- }
-
- for (ARGV_const_t fp = pkg->fileList; *fp != NULL; fp++) {
+/* Adds the given fileList to the package. If fromSpecFileList is not zero
+ then the specialDirs are also filled in and the files are sanitized
+ through processBinaryFile(). Otherwise no special files are processed
+ and the files are added directly through addFile(). */
+static void addPackageFileList (struct FileList_s *fl, Package pkg,
+ ARGV_t *fileList,
+ specialDir *specialDoc, specialDir *specialLic,
+ int fromSpecFileList)
+{
+ ARGV_t fileNames = NULL;
+ for (ARGV_const_t fp = *fileList; *fp != NULL; fp++) {
char buf[strlen(*fp) + 1];
const char *s = *fp;
SKIPSPACE(s);
@@ -1884,92 +2408,169 @@ static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
rstrlcpy(buf, s, sizeof(buf));
/* Reset for a new line in %files */
- FileEntryFree(&fl.cur);
+ FileEntryFree(&fl->cur);
/* turn explicit flags into %def'd ones (gosh this is hacky...) */
- fl.cur.specdFlags = ((unsigned)fl.def.specdFlags) >> 8;
- fl.cur.verifyFlags = fl.def.verifyFlags;
-
- if (parseForVerify(buf, 0, &fl.cur) ||
- parseForVerify(buf, 1, &fl.def) ||
- parseForAttr(buf, 0, &fl.cur) ||
- parseForAttr(buf, 1, &fl.def) ||
- parseForDev(buf, &fl.cur) ||
- parseForConfig(buf, &fl.cur) ||
- parseForLang(buf, &fl.cur) ||
- parseForCaps(buf, &fl.cur) ||
- parseForSimple(buf, &fl.cur, &fileNames))
+ fl->cur.specdFlags = ((unsigned)fl->def.specdFlags) >> 8;
+ fl->cur.verifyFlags = fl->def.verifyFlags;
+
+ if (parseForVerify(buf, 0, &fl->cur) ||
+ parseForVerify(buf, 1, &fl->def) ||
+ parseForAttr(fl->pool, buf, 0, &fl->cur) ||
+ parseForAttr(fl->pool, buf, 1, &fl->def) ||
+ parseForDev(buf, &fl->cur) ||
+ parseForConfig(buf, &fl->cur) ||
+ parseForLang(buf, &fl->cur) ||
+ parseForCaps(buf, &fl->cur) ||
+ parseForSimple(buf, &fl->cur, &fileNames))
{
- fl.processingFailed = 1;
+ fl->processingFailed = 1;
continue;
}
for (ARGV_const_t fn = fileNames; fn && *fn; fn++) {
- if (fl.cur.attrFlags & RPMFILE_SPECIALDIR) {
- rpmFlags oattrs = (fl.cur.attrFlags & ~RPMFILE_SPECIALDIR);
+
+ /* For file lists that don't come from a spec file list
+ processing is easy. There are no special files and the
+ file names don't need to be adjusted. */
+ if (!fromSpecFileList) {
+ if (fl->cur.attrFlags & RPMFILE_SPECIALDIR
+ || fl->cur.attrFlags & RPMFILE_DOCDIR
+ || fl->cur.attrFlags & RPMFILE_PUBKEY) {
+ rpmlog(RPMLOG_ERR,
+ _("Special file in generated file list: %s\n"),
+ *fn);
+ fl->processingFailed = 1;
+ continue;
+ }
+ if (fl->cur.attrFlags & RPMFILE_DIR)
+ fl->cur.isDir = 1;
+ addFile(fl, *fn, NULL);
+ continue;
+ }
+
+ /* File list does come from the spec, try to detect special
+ files and adjust the actual file names. */
+ if (fl->cur.attrFlags & RPMFILE_SPECIALDIR) {
+ rpmFlags oattrs = (fl->cur.attrFlags & ~RPMFILE_SPECIALDIR);
specialDir *sdp = NULL;
if (oattrs == RPMFILE_DOC) {
- sdp = &specialDoc;
+ sdp = specialDoc;
} else if (oattrs == RPMFILE_LICENSE) {
- sdp = &specialLic;
+ sdp = specialLic;
}
if (sdp == NULL || **fn == '/') {
rpmlog(RPMLOG_ERR,
_("Can't mix special %s with other forms: %s\n"),
(oattrs & RPMFILE_DOC) ? "%doc" : "%license", *fn);
- fl.processingFailed = 1;
+ fl->processingFailed = 1;
continue;
}
/* save attributes on first special doc/license for later use */
if (*sdp == NULL) {
- *sdp = specialDirNew(pkg->header, oattrs,
- &fl.cur.ar, &fl.def.ar);
+ *sdp = specialDirNew(pkg->header, oattrs);
}
- argvAdd(&(*sdp)->files, *fn);
+ addSpecialFile(*sdp, *fn, &fl->cur, &fl->def);
continue;
}
/* this is now an artificial limitation */
if (fn != fileNames) {
rpmlog(RPMLOG_ERR, _("More than one file on a line: %s\n"),*fn);
- fl.processingFailed = 1;
+ fl->processingFailed = 1;
continue;
}
- if (fl.cur.attrFlags & RPMFILE_DOCDIR) {
- argvAdd(&(fl.docDirs), *fn);
- } else if (fl.cur.attrFlags & RPMFILE_PUBKEY) {
- (void) processMetadataFile(pkg, &fl, *fn, RPMTAG_PUBKEYS);
- } else if (fl.cur.attrFlags & RPMFILE_SECMANIFEST) {
- (void) processMetadataFile(pkg, &fl, *fn, RPMTAG_SECMANIFEST);
- } else {
- if (fl.cur.attrFlags & RPMFILE_DIR)
- fl.cur.isDir = 1;
- (void) processBinaryFile(pkg, &fl, *fn);
+ if (fl->cur.attrFlags & RPMFILE_DOCDIR) {
+ argvAdd(&(fl->docDirs), *fn);
+ } else if (fl->cur.attrFlags & RPMFILE_PUBKEY) {
+ (void) processMetadataFile(pkg, fl, *fn, RPMTAG_PUBKEYS);
+ } else if (fl->cur.attrFlags & RPMFILE_SECMANIFEST) {
+ (void) processMetadataFile(pkg, fl, *fn, RPMTAG_SECMANIFEST);
+ }else {
+ if (fl->cur.attrFlags & RPMFILE_DIR)
+ fl->cur.isDir = 1;
+ (void) processBinaryFile(pkg, fl, *fn);
}
}
- if (fl.cur.caps)
- fl.haveCaps = 1;
+ if (fl->cur.caps)
+ fl->haveCaps = 1;
}
+ argvFree(fileNames);
+}
+
+static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
+ Package pkg, int didInstall, int test)
+{
+ struct FileList_s fl;
+ specialDir specialDoc = NULL;
+ specialDir specialLic = NULL;
+
+ pkg->cpioList = NULL;
+
+ for (ARGV_const_t fp = pkg->fileFile; fp && *fp != NULL; fp++) {
+ if (readFilesManifest(spec, pkg, *fp))
+ return RPMRC_FAIL;
+ }
+ /* Init the file list structure */
+ memset(&fl, 0, sizeof(fl));
+
+ fl.pool = rpmstrPoolLink(spec->pool);
+ /* XXX spec->buildRoot == NULL, then xstrdup("") is returned */
+ fl.buildRoot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
+ fl.buildRootLen = strlen(fl.buildRoot);
+
+ resetPackageFilesDefaults (&fl, pkgFlags);
+
+ { char *docs = rpmGetPath("%{?__docdir_path}", NULL);
+ argvSplit(&fl.docDirs, docs, ":");
+ free(docs);
+ }
+
+ addPackageFileList (&fl, pkg, &pkg->fileList,
+ &specialDoc, &specialLic, 1);
/* Now process special docs and licenses if present */
if (specialDoc)
- processSpecialDir(spec, pkg, &fl, specialDoc, installSpecialDoc, test);
+ processSpecialDir(spec, pkg, &fl, specialDoc, didInstall, test);
if (specialLic)
- processSpecialDir(spec, pkg, &fl, specialLic, installSpecialDoc, test);
+ processSpecialDir(spec, pkg, &fl, specialLic, didInstall, test);
if (fl.processingFailed)
goto exit;
+#if HAVE_LIBDW
+ /* Check build-ids and add build-ids links for files to package list. */
+ const char *arch = headerGetString(pkg->header, RPMTAG_ARCH);
+ if (!rstreq(arch, "noarch")) {
+ /* Go through the current package list and generate a files list. */
+ ARGV_t idFiles = NULL;
+ if (generateBuildIDs (&fl, &idFiles) != 0) {
+ rpmlog(RPMLOG_ERR, _("Generating build-id links failed\n"));
+ fl.processingFailed = 1;
+ argvFree(idFiles);
+ goto exit;
+ }
+
+ if (idFiles != NULL) {
+ resetPackageFilesDefaults (&fl, pkgFlags);
+ addPackageFileList (&fl, pkg, &idFiles, NULL, NULL, 0);
+ }
+ argvFree(idFiles);
+
+ if (fl.processingFailed)
+ goto exit;
+ }
+#endif
+
/* Verify that file attributes scope over hardlinks correctly. */
if (checkHardLinks(&fl.files))
- (void) rpmlibNeedsFeature(pkg->header,
- "PartialHardlinkSets", "4.0.4-1");
+ (void) rpmlibNeedsFeature(pkg, "PartialHardlinkSets", "4.0.4-1");
- genCpioListAndHeader(&fl, &pkg->cpioList, pkg->header, 0);
+ genCpioListAndHeader(&fl, pkg, 0);
exit:
FileListFree(&fl);
@@ -1994,6 +2595,7 @@ rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags)
struct FileList_s fl;
ARGV_t files = NULL;
Package pkg;
+ Package sourcePkg = spec->sourcePackage;
static char *_srcdefattr;
static int oneshot;
@@ -2024,13 +2626,14 @@ rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags)
}
}
- spec->sourceCpioList = NULL;
+ sourcePkg->cpioList = NULL;
/* Init the file list structure */
memset(&fl, 0, sizeof(fl));
+ fl.pool = rpmstrPoolLink(spec->pool);
if (_srcdefattr) {
char *a = rstrscat(NULL, "%defattr ", _srcdefattr, NULL);
- parseForAttr(a, 1, &fl.def);
+ parseForAttr(fl.pool, a, 1, &fl.def);
free(a);
}
fl.files.alloced = spec->numSources + 1;
@@ -2075,31 +2678,39 @@ rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags)
flp->fl_mode &= S_IFMT;
flp->fl_mode |= fl.def.ar.ar_fmode;
}
+
if (fl.def.ar.ar_user) {
- flp->uname = rpmugStashStr(fl.def.ar.ar_user);
+ flp->uname = fl.def.ar.ar_user;
} else {
- flp->uname = rpmugStashStr(rpmugUname(flp->fl_uid));
+ flp->uname = rpmstrPoolId(fl.pool, rpmugUname(flp->fl_uid), 1);
+ }
+ if (! flp->uname) {
+ flp->uname = rpmstrPoolId(fl.pool, rpmugUname(getuid()), 1);
+ }
+ if (! flp->uname) {
+ flp->uname = rpmstrPoolId(fl.pool, UID_0_USER, 1);
}
+
if (fl.def.ar.ar_group) {
- flp->gname = rpmugStashStr(fl.def.ar.ar_group);
+ flp->gname = fl.def.ar.ar_group;
} else {
- flp->gname = rpmugStashStr(rpmugGname(flp->fl_gid));
+ flp->gname = rpmstrPoolId(fl.pool, rpmugGname(flp->fl_gid), 1);
}
- flp->langs = xstrdup("");
-
- if (! (flp->uname && flp->gname)) {
- rpmlog(RPMLOG_ERR, _("Bad owner/group: %s\n"), diskPath);
- fl.processingFailed = 1;
+ if (! flp->gname) {
+ flp->gname = rpmstrPoolId(fl.pool, rpmugGname(getgid()), 1);
+ }
+ if (! flp->gname) {
+ flp->gname = rpmstrPoolId(fl.pool, GID_0_GROUP, 1);
}
+ flp->langs = xstrdup("");
fl.files.used++;
}
argvFree(files);
if (! fl.processingFailed) {
- if (spec->sourceHeader != NULL) {
- genCpioListAndHeader(&fl, &spec->sourceCpioList,
- spec->sourceHeader, 1);
+ if (sourcePkg->header != NULL) {
+ genCpioListAndHeader(&fl, sourcePkg, 1);
}
}
@@ -2109,6 +2720,7 @@ rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags)
/**
* Check packaged file list against what's in the build root.
+ * @param buildRoot path of build root
* @param fileList packaged file list
* @return -1 if skipped, 0 on OK, 1 on error
*/
@@ -2145,259 +2757,357 @@ exit:
return rc;
}
-#if HAVE_GELF_H && HAVE_LIBELF
-/* Query the build-id from the ELF file NAME and store it in the newly
- allocated *build_id array of size *build_id_size. Returns -1 on
- error. */
+static rpmTag copyTagsFromMainDebug[] = {
+ RPMTAG_ARCH,
+ RPMTAG_SUMMARY,
+ RPMTAG_DESCRIPTION,
+ RPMTAG_GROUP,
+ /* see addTargets */
+ RPMTAG_OS,
+ RPMTAG_PLATFORM,
+ RPMTAG_OPTFLAGS,
+};
-int
-getELFBuildId (const char *name,
- unsigned char **id, size_t *id_size)
+/* this is a hack: patch the summary and the description to include
+ * the correct package name */
+static void patchDebugPackageString(Package dbg, rpmTag tag, Package pkg, Package mainpkg)
{
- int fd, i;
- Elf *elf;
- GElf_Ehdr ehdr;
- Elf_Data *build_id = NULL;
- size_t build_id_offset = 0, build_id_size = 0;
-
- /* Now query the build-id of the file and add the
- corresponding links in the .build-id tree.
- The following code is based on tools/debugedit.c. */
- fd = open (name, O_RDONLY);
- if (fd < 0)
- return -1;
- elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- {
- fprintf (stderr, "cannot open ELF file: %s",
- elf_errmsg (-1));
- close (fd);
- return -1;
- }
- if (elf_kind (elf) != ELF_K_ELF
- || gelf_getehdr (elf, &ehdr) == NULL
- || (ehdr.e_type != ET_DYN
- && ehdr.e_type != ET_EXEC
- && ehdr.e_type != ET_REL))
- {
- elf_end (elf);
- close (fd);
- return -1;
- }
- for (i = 0; i < ehdr.e_shnum; ++i)
- {
- Elf_Scn *s = elf_getscn (elf, i);
- GElf_Shdr shdr;
- Elf_Data *data;
- Elf32_Nhdr nh;
- Elf_Data dst =
- {
- .d_version = EV_CURRENT, .d_type = ELF_T_NHDR,
- .d_buf = &nh, .d_size = sizeof nh
- };
- Elf_Data src = dst;
-
- gelf_getshdr (s, &shdr);
- if (shdr.sh_type != SHT_NOTE
- || !(shdr.sh_flags & SHF_ALLOC))
- continue;
-
- /* Look for a build-ID note here. */
- data = elf_rawdata (s, NULL);
- src.d_buf = data->d_buf;
- assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
- while (data->d_buf + data->d_size - src.d_buf > (int) sizeof nh
- && elf32_xlatetom (&dst, &src, ehdr.e_ident[EI_DATA]))
- {
- Elf32_Word len = sizeof nh + nh.n_namesz;
- len = (len + 3) & ~3;
+ const char *oldname, *newname, *old;
+ char *oldsubst = NULL, *newsubst = NULL, *p;
+ oldname = headerGetString(mainpkg->header, RPMTAG_NAME);
+ newname = headerGetString(pkg->header, RPMTAG_NAME);
+ rasprintf(&oldsubst, "package %s", oldname);
+ rasprintf(&newsubst, "package %s", newname);
+ old = headerGetString(dbg->header, tag);
+ p = old ? strstr(old, oldsubst) : NULL;
+ if (p) {
+ char *new = NULL;
+ rasprintf(&new, "%.*s%s%s", (int)(p - old), old, newsubst, p + strlen(oldsubst));
+ headerDel(dbg->header, tag);
+ headerPutString(dbg->header, tag, new);
+ _free(new);
+ }
+ _free(oldsubst);
+ _free(newsubst);
+}
- if (nh.n_namesz == sizeof "GNU" && nh.n_type == 3
- && !memcmp (src.d_buf + sizeof nh, "GNU", sizeof "GNU"))
- {
- build_id = data;
- build_id_offset = src.d_buf + len - data->d_buf;
- build_id_size = nh.n_descsz;
- break;
- }
+/* Early prototype for use in filterDebuginfoPackage. */
+static void addPackageDeps(Package from, Package to, enum rpmTag_e tag);
- len += nh.n_descsz;
- len = (len + 3) & ~3;
- src.d_buf += len;
- }
+/* create a new debuginfo subpackage for package pkg from the
+ * main debuginfo package */
+static Package cloneDebuginfoPackage(rpmSpec spec, Package pkg, Package maindbg)
+{
+ const char *name = headerGetString(pkg->header, RPMTAG_NAME);
+ char *dbgname = NULL;
+ Package dbg;
+
+ rasprintf(&dbgname, "%s-%s", name, "debuginfo");
+ dbg = newPackage(dbgname, spec->pool, &spec->packages);
+ headerPutString(dbg->header, RPMTAG_NAME, dbgname);
+ copyInheritedTags(dbg->header, pkg->header);
+ headerDel(dbg->header, RPMTAG_GROUP);
+ headerCopyTags(maindbg->header, dbg->header, copyTagsFromMainDebug);
+ dbg->autoReq = maindbg->autoReq;
+ dbg->autoProv = maindbg->autoProv;
+
+ /* patch summary and description strings */
+ patchDebugPackageString(dbg, RPMTAG_SUMMARY, pkg, spec->packages);
+ patchDebugPackageString(dbg, RPMTAG_DESCRIPTION, pkg, spec->packages);
+
+ /* Add self-provides (normally done by addTargets) */
+ addPackageProvides(dbg);
+ dbg->ds = rpmdsThis(dbg->header, RPMTAG_REQUIRENAME, RPMSENSE_EQUAL);
+
+ _free(dbgname);
+ return dbg;
+}
- if (build_id != NULL)
- break;
- }
+/* collect the debug files for package pkg and put them into
+ * a (possibly new) debuginfo subpackage */
+static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
+ Package maindbg, Package dbgsrc,
+ char *buildroot, char *uniquearch)
+{
+ rpmfi fi;
+ ARGV_t files = NULL;
+ ARGV_t dirs = NULL;
+ int lastdiridx = -1, dirsadded;
+ char *path = NULL, *p, *pmin;
+ size_t buildrootlen = strlen(buildroot);
- if (build_id == NULL)
- return -1;
+ /* ignore noarch subpackages */
+ if (rstreq(headerGetString(pkg->header, RPMTAG_ARCH), "noarch"))
+ return;
- *id = malloc (build_id_size);
- *id_size = build_id_size;
- memcpy (*id, build_id->d_buf + build_id_offset, build_id_size);
+ if (!uniquearch)
+ uniquearch = "";
+
+ fi = rpmfilesIter(pkg->cpioList, RPMFI_ITER_FWD);
+ /* Check if the current package has files with debug info
+ and add them to the file list */
+ fi = rpmfiInit(fi, 0);
+ while (rpmfiNext(fi) >= 0) {
+ const char *name = rpmfiFN(fi);
+ int namel = strlen(name);
+
+ /* strip trailing .debug like in find-debuginfo.sh */
+ if (namel > 6 && !strcmp(name + namel - 6, ".debug"))
+ namel -= 6;
+
+ /* fileRenameMap doesn't necessarily have to be initialized */
+ if (pkg->fileRenameMap) {
+ const char **names = NULL;
+ int namec = 0;
+ fileRenameHashGetEntry(pkg->fileRenameMap, name, &names, &namec, NULL);
+ if (namec) {
+ if (namec > 1)
+ rpmlog(RPMLOG_WARNING, _("%s was mapped to multiple filenames"), name);
+ name = *names;
+ namel = strlen(name);
+ }
+ }
+
+ /* generate path */
+ rasprintf(&path, "%s%s%.*s%s.debug", buildroot, DEBUG_LIB_DIR, namel, name, uniquearch);
+
+ /* If that file exists we have debug information for it */
+ if (access(path, F_OK) == 0) {
+ /* Append the file list preamble */
+ if (!files) {
+ char *attr = mkattr();
+ argvAdd(&files, attr);
+ argvAddAttr(&files, RPMFILE_DIR, DEBUG_LIB_DIR);
+ free(attr);
+ }
- elf_end (elf);
- close (fd);
+ /* Add the files main debug-info file */
+ argvAdd(&files, path + buildrootlen);
+
+ /* Add the dir(s) */
+ dirsadded = 0;
+ pmin = path + buildrootlen + strlen(DEBUG_LIB_DIR);
+ while ((p = strrchr(path + buildrootlen, '/')) != NULL && p > pmin) {
+ *p = 0;
+ if (lastdiridx >= 0 && !strcmp(dirs[lastdiridx], path + buildrootlen))
+ break; /* already added this one */
+ argvAdd(&dirs, path + buildrootlen);
+ dirsadded++;
+ }
+ if (dirsadded)
+ lastdiridx = argvCount(dirs) - dirsadded; /* remember longest dir */
+ }
+ path = _free(path);
+ }
+ rpmfiFree(fi);
+ /* Exclude debug files for files which were excluded in respective non-debug package */
+ for (ARGV_const_t excl = pkg->fileExcludeList; excl && *excl; excl++) {
+ const char *name = *excl;
+
+ /* generate path */
+ rasprintf(&path, "%s%s%s%s.debug", buildroot, DEBUG_LIB_DIR, name, uniquearch);
+ /* Exclude only debuginfo files which actually exist */
+ if (access(path, F_OK) == 0) {
+ char *line = NULL;
+ rasprintf(&line, "%%exclude %s", path + buildrootlen);
+ argvAdd(&files, line);
+ _free(line);
+ }
+ path = _free(path);
+ }
- return 0;
-}
+ /* add collected directories to file list */
+ if (dirs) {
+ int i;
+ argvSort(dirs, NULL);
+ for (i = 0; dirs[i]; i++) {
+ if (!i || strcmp(dirs[i], dirs[i - 1]) != 0)
+ argvAddAttr(&files, RPMFILE_DIR, dirs[i]);
+ }
+ dirs = argvFree(dirs);
+ }
+ if (files) {
+ /* Add security manifest to set right SMACK labels */
+ argvAdd(&files, "%manifest %{name}-debuginfo.manifest");
-static rpmTag copyTagsForDebug[] = {
- RPMTAG_EPOCH,
- RPMTAG_VERSION,
- RPMTAG_RELEASE,
- RPMTAG_LICENSE,
- RPMTAG_PACKAGER,
- RPMTAG_DISTRIBUTION,
- RPMTAG_DISTURL,
- RPMTAG_VENDOR,
- RPMTAG_ICON,
- RPMTAG_URL,
- RPMTAG_CHANGELOGTIME,
- RPMTAG_CHANGELOGNAME,
- RPMTAG_CHANGELOGTEXT,
- RPMTAG_PREFIXES,
- RPMTAG_RHNPLATFORM,
- RPMTAG_OS,
- RPMTAG_DISTTAG,
- RPMTAG_CVSID,
- RPMTAG_ARCH,
- 0
-};
+ /* we have collected some files. Now put them in a debuginfo
+ * package. If this is not the main package, clone the main
+ * debuginfo package */
+ if (pkg == spec->packages)
+ maindbg->fileList = files;
+ else {
+ Package dbg = cloneDebuginfoPackage(spec, pkg, maindbg);
+ dbg->fileList = files;
+ /* Recommend the debugsource package (or the main debuginfo). */
+ addPackageDeps(dbg, dbgsrc ? dbgsrc : maindbg,
+ RPMTAG_RECOMMENDNAME);
+ }
+ }
+}
-static void addDebuginfoPackage(rpmSpec spec, Package pkg, char *buildroot)
+/* add the debug dwz files to package pkg.
+ * return 1 if something was added, 0 otherwise. */
+static int addDebugDwz(Package pkg, char *buildroot)
{
- const char *a;
- const char *ver, *rel;
-
- elf_version(EV_CURRENT);
- a = headerGetString(pkg->header, RPMTAG_ARCH);
- ver = headerGetAsString(pkg->header, RPMTAG_VERSION);
- rel = headerGetAsString(pkg->header, RPMTAG_RELEASE);
-
- if (strcmp(a, "noarch") != 0 && strcmp(a, "src") != 0 && strcmp(a, "nosrc") != 0)
- {
- Package dbg;
- rpmfi fi = pkg->cpioList;
- char tmp[1024];
- const char *name;
- ARGV_t files = NULL;
- int seen_build_id = 0;
-
- /* Check if the current package has files with debug info
- and record them. */
- fi = rpmfiInit (fi, 0);
- while (rpmfiNext (fi) >= 0)
- {
- const char *base;
- int i;
- unsigned char *build_id;
- size_t build_id_size = 0;
- struct stat sbuf;
-
- name = rpmfiFN (fi);
- /* Skip leading buildroot. */
- base = name + strlen (buildroot);
- /* Pre-pend %buildroot/usr/lib/debug and append .debug. */
- snprintf (tmp, 1024, "%s/usr/lib/debug%s.debug",
- buildroot, base);
- /* If that file exists we have debug information for it. */
- if (access (tmp, F_OK) != 0)
- continue;
+ int ret = 0;
+ char *path = NULL;
+ struct stat sbuf;
+
+ rasprintf(&path, "%s%s", buildroot, DEBUG_DWZ_DIR);
+ if (lstat(path, &sbuf) == 0 && S_ISDIR(sbuf.st_mode)) {
+ if (!pkg->fileList) {
+ char *attr = mkattr();
+ argvAdd(&pkg->fileList, attr);
+ argvAddAttr(&pkg->fileList, RPMFILE_DIR|RPMFILE_ARTIFACT, DEBUG_LIB_DIR);
+ free(attr);
+ }
+ argvAddAttr(&pkg->fileList, RPMFILE_ARTIFACT, DEBUG_DWZ_DIR);
+ ret = 1;
+ }
+ path = _free(path);
+ return ret;
+}
- /* Append the file list preamble. */
- if (!files)
- {
- argvAdd(&files, "%defattr(-,root,root)");
- argvAdd(&files, "%dir /usr/lib/debug");
- }
- /* Add the files main debug-info file. */
- snprintf (tmp, 1024, "/usr/lib/debug/%s.debug", base);
- argvAdd(&files, tmp);
-
- /* Do not bother to check build-ids for symbolic links.
- We'll handle them for the link target. */
- if (lstat (name, &sbuf) == -1
- || S_ISLNK (sbuf.st_mode))
- continue;
+/* add the debug source files to package pkg.
+ * return 1 if something was added, 0 otherwise. */
+static int addDebugSrc(Package pkg, char *buildroot)
+{
+ int ret = 0;
+ char *path = NULL;
+ DIR *d;
+ struct dirent *de;
+
+ /* not needed if we have an extra debugsource subpackage */
+ if (rpmExpandNumeric("%{?_debugsource_packages}"))
+ return 0;
+
+ rasprintf(&path, "%s%s", buildroot, DEBUG_SRC_DIR);
+ d = opendir(path);
+ path = _free(path);
+ if (d) {
+ while ((de = readdir(d)) != NULL) {
+ if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
+ continue;
+ rasprintf(&path, "%s/%s", DEBUG_SRC_DIR, de->d_name);
+ if (!pkg->fileList) {
+ char *attr = mkattr();
+ argvAdd(&pkg->fileList, attr);
+ free(attr);
+ }
+ argvAdd(&pkg->fileList, path);
+ path = _free(path);
+ ret = 1;
+ }
+ closedir(d);
+ }
+ return ret;
+}
- /* Try to gather the build-id from the binary. */
- if (getELFBuildId (name, &build_id, &build_id_size) == -1)
- continue;
+/* find the debugsource package, if it has been created.
+ * We do this simply by searching for a package with the right name. */
+static Package findDebugsourcePackage(rpmSpec spec)
+{
+ Package pkg = NULL;
+ if (lookupPackage(spec, "debugsource", PART_SUBNAME|PART_QUIET, &pkg))
+ return NULL;
+ return pkg && pkg->fileList ? pkg : NULL;
+}
- /* If we see build-id links for the first time add the
- directory. */
- if (!seen_build_id)
- argvAdd(&files, "%dir /usr/lib/debug/.build-id");
-
- /* From the build-id construct the two links pointing back
- to the debug information file and the binary. */
- snprintf (tmp, 1024, "/usr/lib/debug/.build-id/%02x/",
- build_id[0]);
- for (i = 1; i < build_id_size; ++i)
- sprintf (tmp + strlen (tmp), "%02x", build_id[i]);
- argvAdd(&files, tmp);
- sprintf (tmp + strlen (tmp), ".debug");
- argvAdd(&files, tmp);
-
- free (build_id);
- }
+/* find the main debuginfo package. We do this simply by
+ * searching for a package with the right name. */
+static Package findDebuginfoPackage(rpmSpec spec)
+{
+ Package pkg = NULL;
+ if (lookupPackage(spec, "debuginfo", PART_SUBNAME|PART_QUIET, &pkg))
+ return NULL;
+ return pkg && pkg->fileList ? pkg : NULL;
+}
- /* If there are debuginfo files for this package add a
- new debuginfo package. */
- if (files)
- {
- /* Add security manifest to set right SMACK labels */
- argvAdd(&files, "%manifest %{name}-debuginfo.manifest");
-
- dbg = newPackage (spec);
- headerNVR (pkg->header, &name, NULL, NULL);
- /* Set name, summary and group. */
- snprintf (tmp, 1024, "%s-debuginfo", name);
- headerPutString(dbg->header, RPMTAG_NAME, tmp);
- headerPutString(dbg->header, RPMTAG_VERSION, ver);
- headerPutString(dbg->header, RPMTAG_RELEASE, rel);
- headerPutString(dbg->header, RPMTAG_ARCH, a);
- snprintf (tmp, 1024, "Debug information for package %s", name);
- headerPutString(dbg->header, RPMTAG_SUMMARY, tmp);
- snprintf (tmp, 1024, "This package provides debug information for package %s.\n"
- "Debug information is useful when developing applications that use this\n"
- "package or when debugging this package.", name);
- headerPutString(dbg->header, RPMTAG_DESCRIPTION, tmp);
- headerPutString(dbg->header, RPMTAG_GROUP, "Development/Debug");
-
- /* Add 'provides' information to debuginfo package. */
- addPackageProvides_for_debuginfo_pkg(dbg->header);
-
- /* Inherit other tags from parent. */
- headerCopyTags (pkg->header, dbg->header, copyTagsForDebug);
-
- /* Build up the files list. */
- dbg->fileList = files;
- }
- }
+/* add a dependency (e.g. RPMTAG_REQUIRENAME or RPMTAG_RECOMMENDNAME)
+ for package "to" into package "from". */
+static void addPackageDeps(Package from, Package to, enum rpmTag_e tag)
+{
+ const char *name;
+ char *evr, *isaprov;
+ name = headerGetString(to->header, RPMTAG_NAME);
+ evr = headerGetAsString(to->header, RPMTAG_EVR);
+ isaprov = rpmExpand(name, "%{?_isa}", NULL);
+ addReqProv(from, tag, isaprov, evr, RPMSENSE_EQUAL, 0);
+ free(isaprov);
+ free(evr);
}
-#endif
rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
- int installSpecialDoc, int test)
+ int didInstall, int test)
{
Package pkg;
rpmRC rc = RPMRC_OK;
char *buildroot;
+ char *uniquearch = NULL;
+ Package maindbg = NULL; /* the (existing) main debuginfo package */
+ Package deplink = NULL; /* create requires to this package */
+ /* The debugsource package, if it exists, that the debuginfo package(s)
+ should Recommend. */
+ Package dbgsrcpkg = findDebugsourcePackage(spec);
+#if HAVE_LIBDW
+ elf_version (EV_CURRENT);
+#endif
check_fileList = newStringBuf();
- buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
genSourceRpmName(spec);
+ buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
+ if (rpmExpandNumeric("%{?_debuginfo_subpackages}")) {
+ maindbg = findDebuginfoPackage(spec);
+ if (maindbg) {
+ /* move debuginfo package to back */
+ if (maindbg->next) {
+ Package *pp;
+ /* dequeue */
+ for (pp = &spec->packages; *pp != maindbg; pp = &(*pp)->next)
+ ;
+ *pp = maindbg->next;
+ maindbg->next = 0;
+ /* enqueue at tail */
+ for (; *pp; pp = &(*pp)->next)
+ ;
+ *pp = maindbg;
+ }
+ /* delete unsplit file list, we will re-add files back later */
+ maindbg->fileFile = argvFree(maindbg->fileFile);
+ maindbg->fileList = argvFree(maindbg->fileList);
+ if (rpmExpandNumeric("%{?_unique_debug_names}"))
+ uniquearch = rpmExpand("-%{VERSION}-%{RELEASE}.%{_arch}", NULL);
+ }
+ } else if (dbgsrcpkg != NULL) {
+ /* We have a debugsource package, but no debuginfo subpackages.
+ The main debuginfo package should recommend the debugsource one. */
+ Package dbgpkg = findDebuginfoPackage(spec);
+ if (dbgpkg)
+ addPackageDeps(dbgpkg, dbgsrcpkg, RPMTAG_RECOMMENDNAME);
+ }
+
for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
char *nvr;
const char *a;
int header_color;
int arch_color;
+ if (pkg == maindbg) {
+ /* if there is just one debuginfo package, we put our extra stuff
+ * in it. Otherwise we put it in the main debug package */
+ Package extradbg = !maindbg->fileList && maindbg->next && !maindbg->next->next ?
+ maindbg->next : maindbg;
+ if (addDebugDwz(extradbg, buildroot))
+ deplink = extradbg;
+ if (addDebugSrc(extradbg, buildroot))
+ deplink = extradbg;
+ if (dbgsrcpkg != NULL)
+ addPackageDeps(extradbg, dbgsrcpkg, RPMTAG_RECOMMENDNAME);
+ maindbg = NULL; /* all normal packages processed */
+ }
+
if (pkg->fileList == NULL)
continue;
@@ -2406,13 +3116,17 @@ rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
nvr = headerGetAsString(pkg->header, RPMTAG_NVRA);
rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr);
free(nvr);
-
- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK)
+
+ if ((rc = processPackageFiles(spec, pkgFlags, pkg, didInstall, test)) != RPMRC_OK)
goto exit;
-#if HAVE_GELF_H && HAVE_LIBELF
- addDebuginfoPackage(spec, pkg, buildroot);
-#endif
- if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
+
+ if (maindbg)
+ filterDebuginfoPackage(spec, pkg, maindbg, dbgsrcpkg,
+ buildroot, uniquearch);
+ else if (deplink && pkg != deplink)
+ addPackageDeps(pkg, deplink, RPMTAG_REQUIRENAME);
+
+ if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
goto exit;
a = headerGetString(pkg->header, RPMTAG_ARCH);
@@ -2447,6 +3161,8 @@ rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
}
exit:
check_fileList = freeStringBuf(check_fileList);
+ _free(buildroot);
+ _free(uniquearch);
return rc;
}
diff --git a/build/pack.c b/build/pack.c
index 6b710380e..34e0568a7 100644
--- a/build/pack.c
+++ b/build/pack.c
@@ -6,8 +6,7 @@
#include "system.h"
#include <errno.h>
-#include <netdb.h>
-#include <time.h>
+#include <sys/wait.h>
#include <rpm/rpmlib.h> /* RPMSIGTAG*, rpmReadPackageFile */
#include <rpm/rpmfileutil.h>
@@ -15,7 +14,6 @@
#include "rpmio/rpmio_internal.h" /* fdInitDigest, fdFiniDigest */
#include "lib/fsm.h"
-#include "lib/cpio.h"
#include "lib/signature.h"
#include "lib/rpmlead.h"
#include "build/rpmbuild_internal.h"
@@ -23,15 +21,54 @@
#include "debug.h"
-typedef struct cpioSourceArchive_s {
- rpm_loff_t cpioArchiveSize;
- rpmfi cpioList;
-} * CSA_t;
+static int rpmPackageFilesArchive(rpmfiles fi, int isSrc,
+ FD_t cfd, ARGV_t dpaths,
+ rpm_loff_t * archiveSize, char ** failedFile)
+{
+ int rc = 0;
+ rpmfi archive = rpmfiNewArchiveWriter(cfd, fi);
+
+ while (!rc && (rc = rpmfiNext(archive)) >= 0) {
+ /* Copy file into archive. */
+ FD_t rfd = NULL;
+ const char *path = dpaths[rpmfiFX(archive)];
+ rfd = Fopen(path, "r.ufdio");
+ if (Ferror(rfd)) {
+ rc = RPMERR_OPEN_FAILED;
+ } else {
+ rc = rpmfiArchiveWriteFile(archive, rfd);
+ }
+
+ if (rc && failedFile)
+ *failedFile = xstrdup(path);
+ if (rfd) {
+ /* preserve any prior errno across close */
+ int myerrno = errno;
+ Fclose(rfd);
+ errno = myerrno;
+ }
+ }
+
+ if (rc == RPMERR_ITER_END)
+ rc = 0;
+
+ /* Finish the payload stream */
+ if (!rc)
+ rc = rpmfiArchiveClose(archive);
+
+ if (archiveSize)
+ *archiveSize = (rc == 0) ? rpmfiArchiveTell(archive) : 0;
+
+ rpmfiFree(archive);
+
+ return rc;
+}
/**
* @todo Create transaction set *much* earlier.
*/
-static rpmRC cpio_doio(FD_t fdo, Header h, CSA_t csa, const char * fmodeMacro)
+static rpmRC cpio_doio(FD_t fdo, Package pkg, const char * fmodeMacro,
+ rpm_loff_t *archiveSize)
{
char *failedFile = NULL;
FD_t cfd;
@@ -42,16 +79,18 @@ static rpmRC cpio_doio(FD_t fdo, Header h, CSA_t csa, const char * fmodeMacro)
if (cfd == NULL)
return RPMRC_FAIL;
- fsmrc = rpmPackageFilesArchive(csa->cpioList, headerIsSource(h), cfd,
- &csa->cpioArchiveSize, &failedFile);
+ fsmrc = rpmPackageFilesArchive(pkg->cpioList, headerIsSource(pkg->header),
+ cfd, pkg->dpaths,
+ archiveSize, &failedFile);
if (fsmrc) {
+ char *emsg = rpmfileStrerror(fsmrc);
if (failedFile)
rpmlog(RPMLOG_ERR, _("create archive failed on file %s: %s\n"),
- failedFile, rpmcpioStrerror(fsmrc));
+ failedFile, emsg);
else
- rpmlog(RPMLOG_ERR, _("create archive failed: %s\n"),
- rpmcpioStrerror(fsmrc));
+ rpmlog(RPMLOG_ERR, _("create archive failed: %s\n"), emsg);
+ free(emsg);
}
free(failedFile);
@@ -92,11 +131,13 @@ static rpmRC addFileToTag(rpmSpec spec, const char * file,
}
while (fgets(buf, sizeof(buf), f)) {
- if (expandMacros(spec, spec->macros, buf, sizeof(buf))) {
+ char *expanded;
+ if (rpmExpandMacros(spec->macros, buf, &expanded, 0) < 0) {
rpmlog(RPMLOG_ERR, _("%s: line: %s\n"), fn, buf);
goto exit;
}
- appendStringBuf(sb, buf);
+ appendStringBuf(sb, expanded);
+ free(expanded);
}
headerPutString(h, tag, getStringBuf(sb));
rc = RPMRC_OK;
@@ -109,40 +150,31 @@ exit:
return rc;
}
-static rpm_time_t * getBuildTime(void)
-{
- static rpm_time_t buildTime[1];
-
- if (buildTime[0] == 0)
- buildTime[0] = (int32_t) time(NULL);
- return buildTime;
-}
-
-static const char * buildHost(void)
-{
- static char hostname[1024];
- static int oneshot = 0;
- struct hostent *hbn;
-
- if (! oneshot) {
- (void) gethostname(hostname, sizeof(hostname));
- hbn = gethostbyname(hostname);
- if (hbn)
- strcpy(hostname, hbn->h_name);
- else
- rpmlog(RPMLOG_WARNING,
- _("Could not canonicalize hostname: %s\n"), hostname);
- oneshot = 1;
- }
- return(hostname);
-}
-
static rpmRC processScriptFiles(rpmSpec spec, Package pkg)
{
struct TriggerFileEntry *p;
int addflags = 0;
rpmRC rc = RPMRC_FAIL;
Header h = pkg->header;
+ struct TriggerFileEntry *tfa[] = {pkg->triggerFiles,
+ pkg->fileTriggerFiles,
+ pkg->transFileTriggerFiles};
+
+ rpmTagVal progTags[] = {RPMTAG_TRIGGERSCRIPTPROG,
+ RPMTAG_FILETRIGGERSCRIPTPROG,
+ RPMTAG_TRANSFILETRIGGERSCRIPTPROG};
+
+ rpmTagVal flagTags[] = {RPMTAG_TRIGGERSCRIPTFLAGS,
+ RPMTAG_FILETRIGGERSCRIPTFLAGS,
+ RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS};
+
+ rpmTagVal scriptTags[] = {RPMTAG_TRIGGERSCRIPTS,
+ RPMTAG_FILETRIGGERSCRIPTS,
+ RPMTAG_TRANSFILETRIGGERSCRIPTS};
+ rpmTagVal priorityTags[] = {0,
+ RPMTAG_FILETRIGGERPRIORITIES,
+ RPMTAG_TRANSFILETRIGGERPRIORITIES};
+ int i;
if (addFileToTag(spec, pkg->preInFile, h, RPMTAG_PREIN, 1) ||
addFileToTag(spec, pkg->preUnFile, h, RPMTAG_PREUN, 1) ||
@@ -155,30 +187,39 @@ static rpmRC processScriptFiles(rpmSpec spec, Package pkg)
goto exit;
}
- /* if any trigger has flags, we need to add flags entry for all of them */
- for (p = pkg->triggerFiles; p != NULL; p = p->next) {
- if (p->flags) {
- addflags = 1;
- break;
- }
- }
- for (p = pkg->triggerFiles; p != NULL; p = p->next) {
- headerPutString(h, RPMTAG_TRIGGERSCRIPTPROG, p->prog);
- if (addflags) {
- headerPutUint32(h, RPMTAG_TRIGGERSCRIPTFLAGS, &p->flags, 1);
+ for (i = 0; i < sizeof(tfa)/sizeof(tfa[0]); i++) {
+ addflags = 0;
+ /* if any trigger has flags, we need to add flags entry for all of them */
+ for (p = tfa[i]; p != NULL; p = p->next) {
+ if (p->flags) {
+ addflags = 1;
+ break;
+ }
}
- if (p->script) {
- headerPutString(h, RPMTAG_TRIGGERSCRIPTS, p->script);
- } else if (p->fileName) {
- if (addFileToTag(spec, p->fileName, h, RPMTAG_TRIGGERSCRIPTS, 0)) {
- goto exit;
+ for (p = tfa[i]; p != NULL; p = p->next) {
+ headerPutString(h, progTags[i], p->prog);
+
+ if (priorityTags[i]) {
+ headerPutUint32(h, priorityTags[i], &p->priority, 1);
+ }
+
+ if (addflags) {
+ headerPutUint32(h, flagTags[i], &p->flags, 1);
+ }
+
+ if (p->script) {
+ headerPutString(h, scriptTags[i], p->script);
+ } else if (p->fileName) {
+ if (addFileToTag(spec, p->fileName, h, scriptTags[i], 0)) {
+ goto exit;
+ }
+ } else {
+ /* This is dumb. When the header supports NULL string */
+ /* this will go away. */
+ headerPutString(h, scriptTags[i], "");
}
- } else {
- /* This is dumb. When the header supports NULL string */
- /* this will go away. */
- headerPutString(h, RPMTAG_TRIGGERSCRIPTS, "");
}
}
rc = RPMRC_OK;
@@ -187,92 +228,40 @@ exit:
return rc;
}
-static rpmRC copyPayload(FD_t ifd, const char *ifn, FD_t ofd, const char *ofn)
+static int haveTildeDep(Package pkg)
{
- char buf[BUFSIZ];
- size_t nb;
- rpmRC rc = RPMRC_OK;
-
- while ((nb = Fread(buf, 1, sizeof(buf), ifd)) > 0) {
- if (Fwrite(buf, sizeof(buf[0]), nb, ofd) != nb) {
- rpmlog(RPMLOG_ERR, _("Unable to write payload to %s: %s\n"),
- ofn, Fstrerror(ofd));
- rc = RPMRC_FAIL;
- break;
+ for (int i = 0; i < PACKAGE_NUM_DEPS; i++) {
+ rpmds ds = rpmdsInit(pkg->dependencies[i]);
+ while (rpmdsNext(ds) >= 0) {
+ if (strchr(rpmdsEVR(ds), '~'))
+ return 1;
}
}
-
- if (nb < 0) {
- rpmlog(RPMLOG_ERR, _("Unable to read payload from %s: %s\n"),
- ifn, Fstrerror(ifd));
- rc = RPMRC_FAIL;
- }
-
- return rc;
+ return 0;
}
-static int depContainsTilde(Header h, rpmTagVal tagEVR)
+static int haveRichDep(Package pkg)
{
- struct rpmtd_s evrs;
- const char *evr = NULL;
-
- if (headerGet(h, tagEVR, &evrs, HEADERGET_MINMEM)) {
- while ((evr = rpmtdNextString(&evrs)) != NULL)
- if (strchr(evr, '~'))
- break;
- rpmtdFreeData(&evrs);
+ for (int i = 0; i < PACKAGE_NUM_DEPS; i++) {
+ rpmds ds = rpmdsInit(pkg->dependencies[i]);
+ rpmTagVal tagN = rpmdsTagN(ds);
+ if (tagN != RPMTAG_REQUIRENAME && tagN != RPMTAG_CONFLICTNAME)
+ continue;
+ while (rpmdsNext(ds) >= 0) {
+ if (rpmdsIsRich(ds))
+ return 1;
+ }
}
- return evr != NULL;
-}
-
-static rpmTagVal depevrtags[] = {
- RPMTAG_PROVIDEVERSION,
- RPMTAG_REQUIREVERSION,
- RPMTAG_OBSOLETEVERSION,
- RPMTAG_CONFLICTVERSION,
- RPMTAG_ORDERVERSION,
- RPMTAG_TRIGGERVERSION,
- RPMTAG_SUGGESTSVERSION,
- RPMTAG_ENHANCESVERSION,
- 0
-};
-
-static int haveTildeDep(Header h)
-{
- int i;
-
- for (i = 0; depevrtags[i] != 0; i++)
- if (depContainsTilde(h, depevrtags[i]))
- return 1;
return 0;
}
-static rpmRC writeRPM(Header *hdrp, unsigned char ** pkgidp, const char *fileName,
- CSA_t csa, char **cookie)
+static char *getIOFlags(Package pkg)
{
- FD_t fd = NULL;
- FD_t ifd = NULL;
- char * sigtarget = NULL;;
- char * rpmio_flags = NULL;
- char * SHA1 = NULL;
+ char *rpmio_flags;
const char *s;
- Header h;
- Header sig = NULL;
- int xx;
- rpmRC rc = RPMRC_OK;
- struct rpmtd_s td;
- rpmTagVal sizetag;
- rpmTagVal payloadtag;
-
- /* Transfer header reference form *hdrp to h. */
- h = headerLink(*hdrp);
- *hdrp = headerFree(*hdrp);
-
- if (pkgidp)
- *pkgidp = NULL;
/* Save payload information */
- if (headerIsSource(h))
+ if (headerIsSource(pkg->header))
rpmio_flags = rpmExpand("%{?_source_payload}", NULL);
else
rpmio_flags = rpmExpand("%{?_binary_payload}", NULL);
@@ -286,7 +275,7 @@ static rpmRC writeRPM(Header *hdrp, unsigned char ** pkgidp, const char *fileNam
if (s) {
char *buf = NULL;
const char *compr = NULL;
- headerPutString(h, RPMTAG_PAYLOADFORMAT, "cpio");
+ headerPutString(pkg->header, RPMTAG_PAYLOADFORMAT, "cpio");
if (rstreq(s+1, "ufdio")) {
compr = NULL;
@@ -296,252 +285,300 @@ static rpmRC writeRPM(Header *hdrp, unsigned char ** pkgidp, const char *fileNam
} else if (rstreq(s+1, "bzdio")) {
compr = "bzip2";
/* Add prereq on rpm version that understands bzip2 payloads */
- (void) rpmlibNeedsFeature(h, "PayloadIsBzip2", "3.0.5-1");
+ (void) rpmlibNeedsFeature(pkg, "PayloadIsBzip2", "3.0.5-1");
#endif
#if HAVE_LZMA_H
} else if (rstreq(s+1, "xzdio")) {
compr = "xz";
- (void) rpmlibNeedsFeature(h, "PayloadIsXz", "5.2-1");
+ (void) rpmlibNeedsFeature(pkg, "PayloadIsXz", "5.2-1");
} else if (rstreq(s+1, "lzdio")) {
compr = "lzma";
- (void) rpmlibNeedsFeature(h, "PayloadIsLzma", "4.4.6-1");
+ (void) rpmlibNeedsFeature(pkg, "PayloadIsLzma", "4.4.6-1");
+#endif
+#ifdef HAVE_ZSTD
+ } else if (rstreq(s+1, "zstdio")) {
+ compr = "zstd";
+ /* Add prereq on rpm version that understands zstd payloads */
+ (void) rpmlibNeedsFeature(pkg, "PayloadIsZstd", "5.4.18-1");
#endif
} else {
rpmlog(RPMLOG_ERR, _("Unknown payload compression: %s\n"),
rpmio_flags);
- rc = RPMRC_FAIL;
+ rpmio_flags = _free(rpmio_flags);
goto exit;
}
if (compr)
- headerPutString(h, RPMTAG_PAYLOADCOMPRESSOR, compr);
+ headerPutString(pkg->header, RPMTAG_PAYLOADCOMPRESSOR, compr);
buf = xstrdup(rpmio_flags);
buf[s - rpmio_flags] = '\0';
- headerPutString(h, RPMTAG_PAYLOADFLAGS, buf+1);
+ headerPutString(pkg->header, RPMTAG_PAYLOADFLAGS, buf+1);
free(buf);
}
+exit:
+ return rpmio_flags;
+}
+static void finalizeDeps(Package pkg)
+{
/* check if the package has a dependency with a '~' */
- if (haveTildeDep(h))
- (void) rpmlibNeedsFeature(h, "TildeInVersions", "4.10.0-1");
+ if (haveTildeDep(pkg))
+ (void) rpmlibNeedsFeature(pkg, "TildeInVersions", "4.10.0-1");
+
+ /* check if the package has a rich dependency */
+ if (haveRichDep(pkg))
+ (void) rpmlibNeedsFeature(pkg, "RichDependencies", "4.12.0-1");
+
+ /* All dependencies added finally, write them into the header */
+ for (int i = 0; i < PACKAGE_NUM_DEPS; i++) {
+ /* Nuke any previously added dependencies from the header */
+ headerDel(pkg->header, rpmdsTagN(pkg->dependencies[i]));
+ headerDel(pkg->header, rpmdsTagEVR(pkg->dependencies[i]));
+ headerDel(pkg->header, rpmdsTagF(pkg->dependencies[i]));
+ headerDel(pkg->header, rpmdsTagTi(pkg->dependencies[i]));
+ /* ...and add again, now with automatic dependencies included */
+ rpmdsPutToHeader(pkg->dependencies[i], pkg->header);
+ }
+}
- /* Create and add the cookie */
- if (cookie) {
- rasprintf(cookie, "%s %d", buildHost(), (int) (*getBuildTime()));
- headerPutString(h, RPMTAG_COOKIE, *cookie);
+static void *nullDigest(int algo, int ascii)
+{
+ void *d = NULL;
+ DIGEST_CTX ctx = rpmDigestInit(algo, 0);
+ rpmDigestFinal(ctx, &d, NULL, ascii);
+ return d;
+}
+
+static rpmRC fdJump(FD_t fd, off_t offset)
+{
+ if (Fseek(fd, offset, SEEK_SET) < 0) {
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ Fdescr(fd), Fstrerror(fd));
+ return RPMRC_FAIL;
}
+ return RPMRC_OK;
+}
- /*
- * Add system-wide Tizen build information
- */
- char *buildinfo = rpmExpand("%{?_buildinfo}", NULL);
- if (buildinfo && *buildinfo) {
- int err;
- int count = 0;
- char **strings = NULL;
-
- if ((err = poptParseArgvString(buildinfo, &count, &strings))) {
- rc = RPMRC_FAIL;
- free(buildinfo);
- rpmlog(RPMLOG_ERR, _("Can't parse BUILDINFO tag: %s\n"), poptStrerror(err));
- goto exit;
- }
+static rpmRC fdConsume(FD_t fd, off_t start, off_t nbytes)
+{
+ size_t bufsiz = 32*BUFSIZ;
+ unsigned char buf[bufsiz];
+ off_t left = nbytes;
+ ssize_t nb;
- if (count)
- headerPutStringArray(h, RPMTAG_BUILDINFO, strings, count);
+ if (start && fdJump(fd, start))
+ return RPMRC_FAIL;
- strings = _free(strings);
- }
- free(buildinfo);
+ while (left > 0) {
+ nb = Fread(buf, 1, (left < bufsiz) ? left : bufsiz, fd);
+ if (nb > 0)
+ left -= nb;
+ else
+ break;
+ };
- /* Reallocate the header into one contiguous region. */
- h = headerReload(h, RPMTAG_HEADERIMMUTABLE);
- if (h == NULL) { /* XXX can't happen */
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to create immutable header region.\n"));
- goto exit;
+ if (left) {
+ rpmlog(RPMLOG_ERR, _("Failed to read %jd bytes in file %s: %s\n"),
+ (intmax_t) nbytes, Fdescr(fd), Fstrerror(fd));
}
- /* Re-reference reallocated header. */
- *hdrp = headerLink(h);
- /*
- * Write the header+archive into a temp file so that the size of
- * archive (after compression) can be added to the header.
- */
- fd = rpmMkTempFile(NULL, &sigtarget);
- if (fd == NULL || Ferror(fd)) {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to open temp file.\n"));
+ return (left == 0) ? RPMRC_OK : RPMRC_FAIL;
+}
+
+static rpmRC writeHdr(FD_t fd, Header pkgh)
+{
+ /* Reallocate the header into one contiguous region for writing. */
+ Header h = headerReload(headerCopy(pkgh), RPMTAG_HEADERIMMUTABLE);
+ rpmRC rc = RPMRC_FAIL;
+
+ if (h == NULL) {
+ rpmlog(RPMLOG_ERR,_("Unable to create immutable header region\n"));
goto exit;
}
- fdInitDigest(fd, PGPHASHALGO_SHA1, 0);
if (headerWrite(fd, h, HEADER_MAGIC_YES)) {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to write temp header\n"));
- } else { /* Write the archive and get the size */
- (void) Fflush(fd);
- fdFiniDigest(fd, PGPHASHALGO_SHA1, (void **)&SHA1, NULL, 1);
- if (csa->cpioList != NULL) {
- rc = cpio_doio(fd, h, csa, rpmio_flags);
- } else {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Bad CSA data\n"));
- }
+ rpmlog(RPMLOG_ERR, _("Unable to write header to %s: %s\n"),
+ Fdescr(fd), Fstrerror(fd));
+ goto exit;
}
+ (void) Fflush(fd);
+ rc = RPMRC_OK;
+
+exit:
+ headerFree(h);
+ return rc;
+}
+
+/*
+ * This is more than just a little insane:
+ * In order to write the signature, we need to know the size and
+ * the size and digests of the header and payload, which are located
+ * after the signature on disk. We also need a digest of the compressed
+ * payload for the main header, and of course the payload is after the
+ * header on disk. So we need to create placeholders for both the
+ * signature and main header that exactly match the final sizes, calculate
+ * the payload digest, then generate and write the real main header to
+ * be able to FINALLY calculate the digests we need for the signature
+ * header. In other words, we need to write things in the exact opposite
+ * order to how the RPM format is laid on disk.
+ */
+static rpmRC writeRPM(Package pkg, unsigned char ** pkgidp,
+ const char *fileName, char **cookie,
+ rpm_time_t buildTime, const char* buildHost)
+{
+ FD_t fd = NULL;
+ char * rpmio_flags = NULL;
+ char * SHA1 = NULL;
+ char * SHA256 = NULL;
+ uint8_t * MD5 = NULL;
+ char * pld = NULL;
+ uint32_t pld_algo = PGPHASHALGO_SHA256; /* TODO: macro configuration */
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ rpm_loff_t archiveSize = 0;
+ off_t sigStart, hdrStart, payloadStart, payloadEnd;
- if (rc != RPMRC_OK)
+ if (pkgidp)
+ *pkgidp = NULL;
+
+ rpmio_flags = getIOFlags(pkg);
+ if (!rpmio_flags)
goto exit;
- (void) Fclose(fd);
- fd = NULL;
- (void) unlink(fileName);
+ finalizeDeps(pkg);
- /* Generate the signature */
- (void) fflush(stdout);
- sig = rpmNewSignature();
+ /* Create and add the cookie */
+ if (cookie) {
+ rasprintf(cookie, "%s %d", buildHost, buildTime);
+ headerPutString(pkg->header, RPMTAG_COOKIE, *cookie);
+ }
/*
- * There should be rpmlib() dependency on this, but that doesn't
- * really do much good as these are signature tags that get read
- * way before dependency checking has a chance to figure out anything.
- * On the positive side, not inserting the 32bit tag at all means
- * older rpm will just bail out with error message on attempt to read
- * such a package.
+ * Add system-wide Tizen build information
*/
- if (csa->cpioArchiveSize < UINT32_MAX) {
- sizetag = RPMSIGTAG_SIZE;
- payloadtag = RPMSIGTAG_PAYLOADSIZE;
- } else {
- sizetag = RPMSIGTAG_LONGSIZE;
- payloadtag = RPMSIGTAG_LONGARCHIVESIZE;
- }
- (void) rpmGenDigest(sig, sigtarget, sizetag);
- (void) rpmGenDigest(sig, sigtarget, RPMSIGTAG_MD5);
-
- if (SHA1) {
- /* XXX can't use rpmtdFromFoo() on RPMSIGTAG_* items */
- rpmtdReset(&td);
- td.tag = RPMSIGTAG_SHA1;
- td.type = RPM_STRING_TYPE;
- td.data = SHA1;
- td.count = 1;
- headerPut(sig, &td, HEADERPUT_DEFAULT);
- SHA1 = _free(SHA1);
- }
+ char *buildinfo = rpmExpand("%{?_buildinfo}", NULL);
+ if (buildinfo && *buildinfo) {
+ int xx;
+ int count = 0;
+ char **strings = NULL;
- {
- /* XXX can't use headerPutType() on legacy RPMSIGTAG_* items */
- rpmtdReset(&td);
- td.tag = payloadtag;
- td.count = 1;
- if (payloadtag == RPMSIGTAG_PAYLOADSIZE) {
- rpm_off_t asize = csa->cpioArchiveSize;
- td.type = RPM_INT32_TYPE;
- td.data = &asize;
- headerPut(sig, &td, HEADERPUT_DEFAULT);
- } else {
- rpm_loff_t asize = csa->cpioArchiveSize;
- td.type = RPM_INT64_TYPE;
- td.data = &asize;
- headerPut(sig, &td, HEADERPUT_DEFAULT);
- }
+
+ if ((xx = poptParseArgvString(buildinfo, &count, &strings))) {
+ rc = RPMRC_FAIL;
+ free(buildinfo);
+ rpmlog(RPMLOG_ERR, _("Can't parse BUILDINFO tag: %s\n"), poptStrerror(xx));
+ goto exit;
+ }
+
+ if (count)
+ headerPutStringArray(pkg->header, RPMTAG_BUILDINFO, strings, count);
+
+ strings = _free(strings);
}
+ free(buildinfo);
- /* Reallocate the signature into one contiguous region. */
- sig = headerReload(sig, RPMTAG_HEADERSIGNATURES);
- if (sig == NULL) { /* XXX can't happen */
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to reload signature header.\n"));
+ /* Create a dummy payload digest to get the header size right */
+ pld = nullDigest(pld_algo, 1);
+ headerPutUint32(pkg->header, RPMTAG_PAYLOADDIGESTALGO, &pld_algo, 1);
+ headerPutString(pkg->header, RPMTAG_PAYLOADDIGEST, pld);
+ pld = _free(pld);
+
+ /* Check for UTF-8 encoding of string tags, add encoding tag if all good */
+ if (checkForEncoding(pkg->header, 1))
goto exit;
- }
/* Open the output file */
- fd = Fopen(fileName, "w.ufdio");
+ fd = Fopen(fileName, "w+.ufdio");
if (fd == NULL || Ferror(fd)) {
- rc = RPMRC_FAIL;
rpmlog(RPMLOG_ERR, _("Could not open %s: %s\n"),
fileName, Fstrerror(fd));
goto exit;
}
/* Write the lead section into the package. */
- {
- rpmlead lead = rpmLeadFromHeader(h);
- rc = rpmLeadWrite(fd, lead);
- rpmLeadFree(lead);
- if (rc != RPMRC_OK) {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to write package: %s\n"),
- Fstrerror(fd));
- goto exit;
- }
+ if (rpmLeadWrite(fd, pkg->header)) {
+ rpmlog(RPMLOG_ERR, _("Unable to write package: %s\n"), Fstrerror(fd));
+ goto exit;
}
- /* Write the signature section into the package. */
- if (rpmWriteSignature(fd, sig)) {
- rc = RPMRC_FAIL;
+ /* Save the position of signature section */
+ sigStart = Ftell(fd);
+
+ /* Generate and write a placeholder signature header */
+ SHA1 = nullDigest(PGPHASHALGO_SHA1, 1);
+ SHA256 = nullDigest(PGPHASHALGO_SHA256, 1);
+ MD5 = nullDigest(PGPHASHALGO_MD5, 0);
+ if (rpmGenerateSignature(SHA256, SHA1, MD5, 0, 0, fd))
goto exit;
- }
+ SHA1 = _free(SHA1);
+ SHA256 = _free(SHA256);
+ MD5 = _free(MD5);
- /* Append the header and archive */
- ifd = Fopen(sigtarget, "r.ufdio");
- if (ifd == NULL || Ferror(ifd)) {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to open sigtarget %s: %s\n"),
- sigtarget, Fstrerror(ifd));
+ /* Write a placeholder header. */
+ hdrStart = Ftell(fd);
+ if (writeHdr(fd, pkg->header))
goto exit;
- }
- /* Add signatures to header, and write header into the package. */
- /* XXX header+payload digests/signatures might be checked again here. */
- { Header nh = headerRead(ifd, HEADER_MAGIC_YES);
+ /* Write payload section (cpio archive) */
+ payloadStart = Ftell(fd);
+ if (cpio_doio(fd, pkg, rpmio_flags, &archiveSize))
+ goto exit;
+ payloadEnd = Ftell(fd);
- if (nh == NULL) {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to read header from %s: %s\n"),
- sigtarget, Fstrerror(ifd));
- goto exit;
- }
+ /* Re-read payload to calculate compressed digest */
+ fdInitDigestID(fd, pld_algo, RPMTAG_PAYLOADDIGEST, 0);
+ if (fdConsume(fd, payloadStart, payloadEnd - payloadStart))
+ goto exit;
+ fdFiniDigest(fd, RPMTAG_PAYLOADDIGEST, (void **)&pld, NULL, 1);
- xx = headerWrite(fd, nh, HEADER_MAGIC_YES);
- headerFree(nh);
+ /* Insert the payload digest in main header */
+ headerDel(pkg->header, RPMTAG_PAYLOADDIGEST);
+ headerPutString(pkg->header, RPMTAG_PAYLOADDIGEST, pld);
+ pld = _free(pld);
- if (xx) {
- rc = RPMRC_FAIL;
- rpmlog(RPMLOG_ERR, _("Unable to write header to %s: %s\n"),
- fileName, Fstrerror(fd));
- goto exit;
- }
- }
-
- /* Write the payload into the package. */
- rc = copyPayload(ifd, fileName, fd, sigtarget);
+ /* Write the final header */
+ if (fdJump(fd, hdrStart))
+ goto exit;
+ if (writeHdr(fd, pkg->header))
+ goto exit;
+
+ /* Calculate digests: SHA on header, legacy MD5 on header + payload */
+ fdInitDigestID(fd, PGPHASHALGO_MD5, RPMTAG_SIGMD5, 0);
+ fdInitDigestID(fd, PGPHASHALGO_SHA1, RPMTAG_SHA1HEADER, 0);
+ fdInitDigestID(fd, PGPHASHALGO_SHA256, RPMTAG_SHA256HEADER, 0);
+ if (fdConsume(fd, hdrStart, payloadStart - hdrStart))
+ goto exit;
+ fdFiniDigest(fd, RPMTAG_SHA1HEADER, (void **)&SHA1, NULL, 1);
+ fdFiniDigest(fd, RPMTAG_SHA256HEADER, (void **)&SHA256, NULL, 1);
+
+ if (fdConsume(fd, 0, payloadEnd - payloadStart))
+ goto exit;
+ fdFiniDigest(fd, RPMTAG_SIGMD5, (void **)&MD5, NULL, 0);
+
+ if (fdJump(fd, sigStart))
+ goto exit;
+
+ /* Generate the signature. Now with right values */
+ if (rpmGenerateSignature(SHA256, SHA1, MD5, payloadEnd - hdrStart, archiveSize, fd))
+ goto exit;
+
+ rc = RPMRC_OK;
exit:
free(rpmio_flags);
free(SHA1);
- headerFree(h);
+ free(SHA256);
/* XXX Fish the pkgid out of the signature header. */
- if (sig != NULL && pkgidp != NULL) {
- struct rpmtd_s md5tag;
- headerGet(sig, RPMSIGTAG_MD5, &md5tag, HEADERGET_DEFAULT);
- if (rpmtdType(&md5tag) == RPM_BIN_TYPE &&
- md5tag.count == 16 && md5tag.data != NULL) {
- *pkgidp = md5tag.data;
+ if (pkgidp != NULL) {
+ if (MD5 != NULL) {
+ *pkgidp = MD5;
}
+ } else {
+ free(MD5);
}
- rpmFreeSignature(sig);
- Fclose(ifd);
Fclose(fd);
- if (sigtarget) {
- (void) unlink(sigtarget);
- free(sigtarget);
- }
-
if (rc == RPMRC_OK)
rpmlog(RPMLOG_NOTICE, _("Wrote: %s\n"), fileName);
else
@@ -576,78 +613,13 @@ static rpmRC checkPackages(char *pkgcheck)
return RPMRC_OK;
}
-static void trimChangelog(Header h)
+static rpmRC packageBinary(rpmSpec spec, Package pkg, const char *cookie, int cheating, char** filename)
{
- static int oneshot;
- static int cuttime, minnum, maxnum;
- int * times;
- char ** names = 0, ** texts = 0;
- int i, keep, count = 0;
-
- if (!oneshot) {
- char *binarychangelogtrim = rpmExpand("%{?_binarychangelogtrim}", NULL);
- oneshot = 1;
- if (binarychangelogtrim && *binarychangelogtrim) {
- maxnum = atoi(binarychangelogtrim);
- binarychangelogtrim = strchr(binarychangelogtrim, ',');
- if (binarychangelogtrim)
- binarychangelogtrim++;
- }
- if (binarychangelogtrim && *binarychangelogtrim) {
- cuttime = atoi(binarychangelogtrim);
- binarychangelogtrim = strchr(binarychangelogtrim, ',');
- if (binarychangelogtrim)
- binarychangelogtrim++;
- }
- if (binarychangelogtrim && *binarychangelogtrim) {
- minnum = atoi(binarychangelogtrim);
- binarychangelogtrim = strchr(binarychangelogtrim, ',');
- }
- }
- if (!cuttime && !minnum && !maxnum) {
- return;
- }
- if (!headerGetEntry(h, RPMTAG_CHANGELOGTIME, NULL, (void **) &times, &count))
- return;
- if ((!cuttime || count <= minnum) && (!maxnum || count <= maxnum)) {
- return;
- }
- keep = count;
- if (maxnum && keep > maxnum)
- keep = maxnum;
- if (cuttime) {
- for (i = 0; i < keep; i++) {
- if (i >= minnum && times[i] < cuttime)
- break;
- }
- keep = i;
- }
- if (keep >= count)
- return;
- headerGetEntry(h, RPMTAG_CHANGELOGNAME, NULL, (void **) &names, &count);
- headerGetEntry(h, RPMTAG_CHANGELOGTEXT, NULL, (void **) &texts, &count);
- headerModifyEntry(h, RPMTAG_CHANGELOGTIME, RPM_INT32_TYPE, times, keep);
- headerModifyEntry(h, RPMTAG_CHANGELOGNAME, RPM_STRING_ARRAY_TYPE, names, keep);
- headerModifyEntry(h, RPMTAG_CHANGELOGTEXT, RPM_STRING_ARRAY_TYPE, texts, keep);
- free(names);
- free(texts);
-}
-
-rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
-{
- struct cpioSourceArchive_s csabuf;
- CSA_t csa = &csabuf;
- rpmRC rc;
- const char *errorString;
- Package pkg;
- char *pkglist = NULL;
-
- trimChangelog(spec->packages->header);
- for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
- char *fn;
+ const char *errorString;
+ rpmRC rc = RPMRC_OK;
if (pkg->fileList == NULL)
- continue;
+ return rc;
if ((rc = processScriptFiles(spec, pkg)))
return rc;
@@ -660,15 +632,15 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
headerCopyTags(spec->packages->header, pkg->header, copyTags);
headerPutString(pkg->header, RPMTAG_RPMVERSION, VERSION);
- headerPutString(pkg->header, RPMTAG_BUILDHOST, buildHost());
- headerPutUint32(pkg->header, RPMTAG_BUILDTIME, getBuildTime(), 1);
+ headerPutString(pkg->header, RPMTAG_BUILDHOST, spec->buildHost);
+ headerPutUint32(pkg->header, RPMTAG_BUILDTIME, &(spec->buildTime), 1);
if (spec->sourcePkgId != NULL) {
headerPutBin(pkg->header, RPMTAG_SOURCEPKGID, spec->sourcePkgId,16);
}
if (cheating) {
- (void) rpmlibNeedsFeature(pkg->header, "ShortCircuited", "4.9.0-1");
+ (void) rpmlibNeedsFeature(pkg, "ShortCircuited", "4.9.0-1");
}
{ char *binFormat = rpmGetPath("%{_rpmfilename}", NULL);
@@ -681,14 +653,14 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
headerGetString(pkg->header, RPMTAG_NAME), errorString);
return RPMRC_FAIL;
}
- fn = rpmGetPath("%{_rpmdir}/", binRpm, NULL);
+ *filename = rpmGetPath("%{_rpmdir}/", binRpm, NULL);
if ((binDir = strchr(binRpm, '/')) != NULL) {
struct stat st;
char *dn;
*binDir = '\0';
dn = rpmGetPath("%{_rpmdir}/", binRpm, NULL);
if (stat(dn, &st) < 0) {
- switch(errno) {
+ switch (errno) {
case ENOENT:
if (mkdir(dn, 0755) == 0)
break;
@@ -703,19 +675,28 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
free(binRpm);
}
- memset(csa, 0, sizeof(*csa));
- csa->cpioArchiveSize = 0;
- csa->cpioList = rpmfiLink(pkg->cpioList);
-
- rc = writeRPM(&pkg->header, NULL, fn, csa, NULL);
- csa->cpioList = rpmfiFree(csa->cpioList);
+ rc = writeRPM(pkg, NULL, *filename, NULL, spec->buildTime, spec->buildHost);
if (rc == RPMRC_OK) {
/* Do check each written package if enabled */
- char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", fn, NULL);
+ char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", *filename, NULL);
if (pkgcheck[0] != ' ') {
rc = checkPackages(pkgcheck);
}
free(pkgcheck);
+ }
+ return rc;
+}
+
+rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
+{
+ rpmRC rc;
+ Package pkg;
+ char *pkglist = NULL;
+
+ for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
+ char *fn = NULL;
+ rc = packageBinary(spec, pkg, cookie, cheating, &fn);
+ if (rc == RPMRC_OK) {
rstrcat(&pkglist, fn);
rstrcat(&pkglist, " ");
}
@@ -741,32 +722,28 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
rpmRC packageSources(rpmSpec spec, char **cookie)
{
- struct cpioSourceArchive_s csabuf;
- CSA_t csa = &csabuf;
+ Package sourcePkg = spec->sourcePackage;
rpmRC rc;
+ uint32_t one = 1;
/* Add some cruft */
- headerPutString(spec->sourceHeader, RPMTAG_RPMVERSION, VERSION);
- headerPutString(spec->sourceHeader, RPMTAG_BUILDHOST, buildHost());
- headerPutUint32(spec->sourceHeader, RPMTAG_BUILDTIME, getBuildTime(), 1);
+ headerPutString(sourcePkg->header, RPMTAG_RPMVERSION, VERSION);
+ headerPutString(sourcePkg->header, RPMTAG_BUILDHOST, spec->buildHost);
+ headerPutUint32(sourcePkg->header, RPMTAG_BUILDTIME, &(spec->buildTime), 1);
+ headerPutUint32(sourcePkg->header, RPMTAG_SOURCEPACKAGE, &one, 1);
/* XXX this should be %_srpmdir */
{ char *fn = rpmGetPath("%{_srcrpmdir}/", spec->sourceRpmName,NULL);
char *pkgcheck = rpmExpand("%{?_build_pkgcheck_srpm} ", fn, NULL);
- memset(csa, 0, sizeof(*csa));
- csa->cpioArchiveSize = 0;
- csa->cpioList = rpmfiLink(spec->sourceCpioList);
-
spec->sourcePkgId = NULL;
- rc = writeRPM(&spec->sourceHeader, &spec->sourcePkgId, fn, csa, cookie);
+ rc = writeRPM(sourcePkg, &spec->sourcePkgId, fn, cookie, spec->buildTime, spec->buildHost);
/* Do check SRPM package if enabled */
if (rc == RPMRC_OK && pkgcheck[0] != ' ') {
rc = checkPackages(pkgcheck);
}
- rpmfiFree(csa->cpioList);
free(pkgcheck);
free(fn);
}
diff --git a/build/parseBuildInstallClean.c b/build/parseBuildInstallClean.c
index 7cfd70755..f7b4bb715 100644
--- a/build/parseBuildInstallClean.c
+++ b/build/parseBuildInstallClean.c
@@ -49,7 +49,7 @@ int parseBuildInstallClean(rpmSpec spec, int parsePart)
if (parsePart == PART_BUILD) {
char* buf = strdup(
- "if [[ $RPM_ARCH == \"aarch64\" ]]; then\n"
+ "if [[ `uname -m` == \"aarch64\" ]]; then\n"
"ref=/usr/lib/rpm\n"
"for s in guess sub; do\n"
" for c in $(find -maxdepth 8 -name \"config.$s\"); do\n"
diff --git a/build/parseChangelog.c b/build/parseChangelog.c
index b06c9236b..105bb20c3 100644
--- a/build/parseChangelog.c
+++ b/build/parseChangelog.c
@@ -32,17 +32,20 @@ static int sameDate(const struct tm *ot, const struct tm *nt)
/**
* Parse date string to seconds.
+ * accepted date formats are "Mon Jun 6 2016" (original one)
+ * and "Thu Oct 6 06:48:39 CEST 2016" (extended one)
* @param datestr date string (e.g. 'Wed Jan 1 1997')
* @retval secs secs since the unix epoch
* @return 0 on success, -1 on error
*/
-static int dateToTimet(const char * datestr, time_t * secs)
+static int dateToTimet(const char * datestr, time_t * secs, int * date_words)
{
int rc = -1; /* assume failure */
struct tm time, ntime;
const char * const * idx;
char *p, *pe, *q, *date, *tz;
-
+ char tz_name[10]; /* name of timezone (if extended format is used) */
+
static const char * const days[] =
{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL };
static const char * const months[] =
@@ -80,26 +83,93 @@ static int dateToTimet(const char * datestr, time_t * secs)
if (*p == '\0') goto exit;
pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0';
- /* make this noon so the day is always right (as we make this UTC) */
- time.tm_hour = 12;
-
time.tm_mday = strtol(p, &q, 10);
if (!(q && *q == '\0')) goto exit;
if (time.tm_mday < 0 || time.tm_mday > lengths[time.tm_mon]) goto exit;
- /* year */
- p = pe; SKIPSPACE(p);
- if (*p == '\0') goto exit;
- pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe = '\0';
+ /* first part of year entry (original format) / time entry (extended format)*/
+ p = pe;
+ SKIPSPACE(p);
+ if (*p == '\0')
+ goto exit;
+
+ /* in the original format here is year record (e.g. 1999),
+ * in the extended one here is time stamp (e.g. 10:22:30).
+ * Choose the format
+ */
+ if ((p[1]==':') || ((p[1]!='\0') && ((p[2]==':')))) {
+ /* it can be extended format */
+ *date_words = 6;
+
+ /* second part of time entry */
+ /* hours */
+ time.tm_hour = strtol(p, &q, 10);
+ if ( (time.tm_hour < 0) || (time.tm_hour > 23) )
+ goto exit;
+ if (*q!=':')
+ goto exit;
+ p = ++q;
+ /* minutes */
+ time.tm_min = strtol(p, &q, 10);
+ if ( (time.tm_min < 0) || (time.tm_min > 59) )
+ goto exit;
+ if (*q != ':')
+ goto exit;
+ p = ++q;
+ /* time - seconds */
+ time.tm_sec = strtol(p, &q, 10);
+ if ( (time.tm_sec < 0) || (time.tm_sec > 59) )
+ goto exit;
+ p = q;
+
+ /* time zone name */
+ SKIPSPACE(p);
+ if (*p == '\0')
+ goto exit;
+ pe = p;
+ SKIPNONSPACE(pe);
+ if (*pe != '\0')
+ *pe++ = '\0';
+ if (((int)(pe-p) + 1) > 9 )
+ goto exit;
+ strncpy(tz_name, p, (int)(pe-p));
+ tz_name[(int)(pe-p)] = '\0';
+
+ /* first part of year entry */
+ p = pe;
+ SKIPSPACE(p);
+ if (*p == '\0')
+ goto exit;
+ } else {
+ *date_words = 4;
+ /* the original format */
+ /* make this noon so the day is always right (as we make this UTC) */
+ time.tm_hour = 12;
+ }
+
+ /* year - second part */
+ pe = p;
+ SKIPNONSPACE(pe);
+ if (*pe != '\0')
+ *pe = '\0';
time.tm_year = strtol(p, &q, 10);
if (!(q && *q == '\0')) goto exit;
if (time.tm_year < 1990 || time.tm_year >= 3000) goto exit;
time.tm_year -= 1900;
- /* chnagelog date is always in UTC */
+ /* change time zone and compute calendar time representation */
tz = getenv("TZ");
- if (tz) tz = xstrdup(tz);
- setenv("TZ", "UTC", 1);
+ if (tz)
+ tz = xstrdup(tz);
+ if (*date_words == 6) {
+ /* changelog date is in read time zone */
+ tz = getenv("TZ");
+ if (tz) tz = xstrdup(tz);
+ setenv("TZ", tz_name, 1);
+ } else {
+ /* changelog date is always in UTC */
+ setenv("TZ", "UTC", 1);
+ }
ntime = time; /* struct assignment */
*secs = mktime(&ntime);
unsetenv("TZ");
@@ -107,6 +177,7 @@ static int dateToTimet(const char * datestr, time_t * secs)
setenv("TZ", tz, 1);
free(tz);
}
+
if (*secs == -1) goto exit;
/* XXX Turn this into a hard error in a release or two */
@@ -135,6 +206,7 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
time_t lastTime = 0;
time_t trimtime = rpmExpandNumeric("%{?_changelog_trimtime}");
char *date, *name, *text, *next;
+ int date_words; /* number of words in date string */
s = sp = argvJoin(sb, "");
@@ -149,7 +221,7 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
/* find end of line */
date = s;
- while(*s && *s != '\n') s++;
+ while (*s && *s != '\n') s++;
if (! *s) {
rpmlog(RPMLOG_ERR, _("incomplete %%changelog entry\n"));
goto exit;
@@ -160,12 +232,8 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
/* 4 fields of date */
date++;
s = date;
- for (i = 0; i < 4; i++) {
- SKIPSPACE(s);
- SKIPNONSPACE(s);
- }
SKIPSPACE(date);
- if (dateToTimet(date, &time)) {
+ if (dateToTimet(date, &time, &date_words)) {
rpmlog(RPMLOG_ERR, _("bad date in %%changelog: %s\n"), date);
goto exit;
}
@@ -174,6 +242,10 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
_("%%changelog not in descending chronological order\n"));
goto exit;
}
+ for (i = 0; i < date_words; i++) {
+ SKIPSPACE(s);
+ SKIPNONSPACE(s);
+ }
lastTime = time;
/* skip space to the name */
@@ -237,6 +309,11 @@ int parseChangelog(rpmSpec spec)
{
int nextPart, rc, res = PART_ERROR;
ARGV_t sb = NULL;
+
+ if (headerIsEntry(spec->packages->header, RPMTAG_CHANGELOGTIME)) {
+ rpmlog(RPMLOG_ERR, _("line %d: second %%changelog\n"), spec->lineNum);
+ goto exit;
+ }
/* There are no options to %changelog */
if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) {
diff --git a/build/parseDescription.c b/build/parseDescription.c
index f233d8d24..428821e56 100644
--- a/build/parseDescription.c
+++ b/build/parseDescription.c
@@ -60,22 +60,8 @@ int parseDescription(rpmSpec spec)
}
}
- if (lookupPackage(spec, name, flag, &pkg)) {
- rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"),
- spec->lineNum, spec->line);
+ if (lookupPackage(spec, name, flag, &pkg))
goto exit;
- }
-
-
- /******************/
-
-#if 0
- if (headerIsEntry(pkg->header, RPMTAG_DESCRIPTION)) {
- rpmlog(RPMLOG_ERR, _("line %d: Second description\n"),
- spec->lineNum);
- goto exit;
- }
-#endif
sb = newStringBuf();
@@ -99,11 +85,10 @@ int parseDescription(rpmSpec spec)
}
stripTrailingBlanksStringBuf(sb);
- if (!((spec->flags & RPMSPEC_NOLANG) && !rstreq(lang, RPMBUILD_DEFAULT_LANG))) {
- (void) headerAddI18NString(pkg->header, RPMTAG_DESCRIPTION,
- getStringBuf(sb), lang);
+ if (addLangTag(spec, pkg->header,
+ RPMTAG_DESCRIPTION, getStringBuf(sb), lang)) {
+ nextPart = PART_ERROR;
}
-
exit:
freeStringBuf(sb);
diff --git a/build/parseFiles.c b/build/parseFiles.c
index ea0d6385f..5ccc94509 100644
--- a/build/parseFiles.c
+++ b/build/parseFiles.c
@@ -27,7 +27,7 @@ int parseFiles(rpmSpec spec)
};
/* XXX unmask %license while parsing %files */
- addMacro(spec->macros, "license", NULL, "%%license", RMIL_SPEC);
+ rpmPushMacro(spec->macros, "license", NULL, "%%license", RMIL_SPEC);
if ((rc = poptParseArgvString(spec->line, &argc, &argv))) {
rpmlog(RPMLOG_ERR, _("line %d: Error parsing %%files: %s\n"),
@@ -61,10 +61,18 @@ int parseFiles(rpmSpec spec)
}
}
- if (lookupPackage(spec, name, flag, &pkg)) {
- rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"),
- spec->lineNum, spec->line);
+ if (lookupPackage(spec, name, flag, &pkg))
goto exit;
+
+ /*
+ * This should be an error, but its surprisingly commonly abused for the
+ * effect of multiple -f arguments in versions that dont support it.
+ * Warn but preserve behavior, except for leaking memory.
+ */
+ if (pkg->fileList != NULL) {
+ rpmlog(RPMLOG_WARNING, _("line %d: multiple %%files for package '%s'\n"),
+ spec->lineNum, rpmstrPoolStr(pkg->pool, pkg->name));
+ pkg->fileList = argvFree(pkg->fileList);
}
for (arg=1; arg<argc; arg++) {
@@ -95,7 +103,7 @@ int parseFiles(rpmSpec spec)
res = nextPart;
exit:
- delMacro(NULL, "license");
+ rpmPopMacro(NULL, "license");
free(argv);
poptFreeContext(optCon);
diff --git a/build/parsePolicies.c b/build/parsePolicies.c
index 129541635..54c8593ec 100644
--- a/build/parsePolicies.c
+++ b/build/parsePolicies.c
@@ -58,11 +58,8 @@ int parsePolicies(rpmSpec spec)
}
}
- if (lookupPackage(spec, name, flag, &pkg)) {
- rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"),
- spec->lineNum, spec->line);
+ if (lookupPackage(spec, name, flag, &pkg))
goto exit;
- }
if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
nextPart = PART_NONE;
diff --git a/build/parsePreamble.c b/build/parsePreamble.c
index f02e14e92..96bf9c035 100644
--- a/build/parsePreamble.c
+++ b/build/parsePreamble.c
@@ -19,8 +19,8 @@
#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; }
#define SKIPNONSPACE(s) { while (*(s) && !risspace(*(s))) (s)++; }
-#define SKIPWHITE(_x) {while(*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
-#define SKIPNONWHITE(_x){while(*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;}
+#define SKIPWHITE(_x) {while (*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
+#define SKIPNONWHITE(_x){while (*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;}
/**
*/
@@ -92,7 +92,7 @@ static int parseSimplePart(const char *line, char **name, int *flag)
*name = NULL;
if (!(tok = strtok(NULL, " \t\n"))) {
- rc = 0;
+ rc = 1;
goto exit;
}
@@ -299,14 +299,14 @@ static int addSource(rpmSpec spec, Package pkg, const char *field, rpmTagVal tag
rasprintf(&buf, "%s%d",
(flag & RPMBUILD_ISPATCH) ? "PATCH" : "SOURCE", num);
- addMacro(spec->macros, buf, NULL, body, RMIL_SPEC);
+ rpmPushMacro(spec->macros, buf, NULL, body, RMIL_SPEC);
free(buf);
rasprintf(&buf, "%sURL%d",
(flag & RPMBUILD_ISPATCH) ? "PATCH" : "SOURCE", num);
- addMacro(spec->macros, buf, NULL, p->fullSource, RMIL_SPEC);
+ rpmPushMacro(spec->macros, buf, NULL, p->fullSource, RMIL_SPEC);
free(buf);
#ifdef WITH_LUA
- if (!spec->recursing) {
+ {
rpmlua lua = NULL; /* global state */
const char * what = (flag & RPMBUILD_ISPATCH) ? "patches" : "sources";
rpmluaPushTable(lua, what);
@@ -428,6 +428,11 @@ static rpmRC checkForValidArchitectures(rpmSpec spec)
char *arch = rpmExpand("%{_target_cpu}", NULL);
char *os = rpmExpand("%{_target_os}", NULL);
rpmRC rc = RPMRC_FAIL; /* assume failure */
+
+ if (!strcmp(arch, "noarch")) {
+ free(arch);
+ arch = rpmExpand("%{_build_cpu}", NULL);
+ }
if (isMemberInEntry(spec->buildRestrictions,
arch, RPMTAG_EXCLUDEARCH) == 1) {
@@ -539,6 +544,13 @@ static void fillOutMainPackage(Header h)
/**
*/
+void copyInheritedTags(Header h, Header fromh)
+{
+ headerCopyTags(fromh, h, (rpmTagVal *)copyTagsDuringParse);
+}
+
+/**
+ */
static rpmRC readIcon(Header h, const char * file)
{
char *fn = NULL;
@@ -598,36 +610,113 @@ if (multiToken) { \
return RPMRC_FAIL; \
}
+static void specLog(rpmSpec spec, int lvl, const char *line, const char *msg)
+{
+ if (spec) {
+ rpmlog(lvl, _("line %d: %s in: %s\n"), spec->lineNum, msg, spec->line);
+ } else {
+ rpmlog(lvl, _("%s in: %s\n"), msg, line);
+ }
+}
+
/**
* Check for inappropriate characters. All alphanums are considered sane.
- * @param spec spec
+ * @param spec spec (or NULL)
* @param field string to check
- * @param fsize size of string to check
* @param whitelist string of permitted characters
* @return RPMRC_OK if OK
*/
-rpmRC rpmCharCheck(rpmSpec spec, const char *field, size_t fsize, const char *whitelist)
+rpmRC rpmCharCheck(rpmSpec spec, const char *field, const char *whitelist)
{
- const char *ch, *stop = &field[fsize];
+ const char *ch;
+ char *err = NULL;
+ rpmRC rc = RPMRC_OK;
- for (ch=field; *ch && ch < stop; ch++) {
+ for (ch=field; *ch; ch++) {
if (risalnum(*ch) || strchr(whitelist, *ch)) continue;
- if (isprint(*ch)) {
- rpmlog(RPMLOG_ERR, _("line %d: Illegal char '%c' in: %s\n"),
- spec->lineNum, *ch, spec->line);
- } else {
- rpmlog(RPMLOG_ERR, _("line %d: Illegal char in: %s\n"),
- spec->lineNum, spec->line);
+ rasprintf(&err, _("Illegal char '%c' (0x%x)"),
+ isprint(*ch) ? *ch : '?', *ch);
+ }
+ for (ch=field; *ch; ch++) {
+ if (strchr("%{}", *ch)) {
+ specLog(spec, RPMLOG_WARNING, field,
+ _("Possible unexpanded macro"));
+ break;
}
- return RPMRC_FAIL;
}
- if (strstr(field, "..") != NULL) {
- rpmlog(RPMLOG_ERR, _("line %d: Illegal sequence \"..\" in: %s\n"),
- spec->lineNum, spec->line);
- return RPMRC_FAIL;
+
+ if (err == NULL && strstr(field, "..") != NULL) {
+ rasprintf(&err, _("Illegal sequence \"..\""));
}
-
- return RPMRC_OK;
+
+ if (err) {
+ specLog(spec, RPMLOG_ERR, field, err);
+ free(err);
+ rc = RPMRC_FAIL;
+ }
+ return rc;
+}
+
+static int haveLangTag(Header h, rpmTagVal tag, const char *lang)
+{
+ int rc = 0; /* assume tag not present */
+ int langNum = -1;
+
+ if (lang && *lang) {
+ /* See if the language is in header i18n table */
+ struct rpmtd_s langtd;
+ const char *s = NULL;
+ headerGet(h, RPMTAG_HEADERI18NTABLE, &langtd, HEADERGET_MINMEM);
+ while ((s = rpmtdNextString(&langtd)) != NULL) {
+ if (rstreq(s, lang)) {
+ langNum = rpmtdGetIndex(&langtd);
+ break;
+ }
+ }
+ rpmtdFreeData(&langtd);
+ } else {
+ /* C locale */
+ langNum = 0;
+ }
+
+ /* If locale is present, check the actual tag content */
+ if (langNum >= 0) {
+ struct rpmtd_s td;
+ headerGet(h, tag, &td, HEADERGET_MINMEM|HEADERGET_RAW);
+ if (rpmtdSetIndex(&td, langNum) == langNum) {
+ const char *s = rpmtdGetString(&td);
+ /* non-empty string means a dupe */
+ if (s && *s)
+ rc = 1;
+ }
+ rpmtdFreeData(&td);
+ };
+
+ return rc;
+}
+
+int addLangTag(rpmSpec spec, Header h, rpmTagVal tag,
+ const char *field, const char *lang)
+{
+ int skip = 0;
+
+ if (haveLangTag(h, tag, lang)) {
+ /* Turn this into an error eventually */
+ rpmlog(RPMLOG_WARNING, _("line %d: second %s\n"),
+ spec->lineNum, rpmTagGetName(tag));
+ }
+
+ if (!*lang) {
+ headerPutString(h, tag, field);
+ } else {
+ skip = ((spec->flags & RPMSPEC_NOLANG) &&
+ !rstreq(lang, RPMBUILD_DEFAULT_LANG));
+ if (skip)
+ return 0;
+ headerAddI18NString(h, tag, field, lang);
+ }
+
+ return 0;
}
static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
@@ -669,14 +758,17 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
switch (tag) {
case RPMTAG_NAME:
SINGLE_TOKEN_ONLY;
- if (rpmCharCheck(spec, field, strlen(field), ".-_+%{}"))
+ if (rpmCharCheck(spec, field, WHITELIST_NAME))
goto exit;
headerPutString(pkg->header, tag, field);
+ /* Main pkg name is unknown at the start, populate as soon as we can */
+ if (pkg == spec->packages)
+ pkg->name = rpmstrPoolId(spec->pool, field, 1);
break;
case RPMTAG_VERSION:
case RPMTAG_RELEASE:
SINGLE_TOKEN_ONLY;
- if (rpmCharCheck(spec, field, strlen(field), "._+%{}~"))
+ if (rpmCharCheck(spec, field, "._+%{}~"))
goto exit;
headerPutString(pkg->header, tag, field);
break;
@@ -694,11 +786,8 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
case RPMTAG_VENDOR:
case RPMTAG_LICENSE:
case RPMTAG_PACKAGER:
- if (!*lang) {
- headerPutString(pkg->header, tag, field);
- } else if (!((spec->flags & RPMSPEC_NOLANG) &&
- !rstreq(lang, RPMBUILD_DEFAULT_LANG)))
- headerAddI18NString(pkg->header, tag, field, lang);
+ if (addLangTag(spec, pkg->header, tag, field, lang))
+ goto exit;
break;
case RPMTAG_BUILDROOT:
/* just silently ignore BuildRoot */
@@ -731,8 +820,8 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
goto exit;
}
macro = NULL;
- delMacro(NULL, "_docdir");
- addMacro(NULL, "_docdir", NULL, field, RMIL_SPEC);
+ rpmPopMacro(NULL, "_docdir");
+ rpmPushMacro(NULL, "_docdir", NULL, field, RMIL_SPEC);
break;
case RPMTAG_EPOCH: {
SINGLE_TOKEN_ONLY;
@@ -773,8 +862,8 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
if (parseNoSource(spec, field, tag))
goto exit;
break;
- case RPMTAG_ORDERFLAGS:
- case RPMTAG_REQUIREFLAGS:
+ case RPMTAG_ORDERNAME:
+ case RPMTAG_REQUIRENAME:
if (parseBits(lang, installScriptBits, &tagflags)) {
rpmlog(RPMLOG_ERR, _("line %d: Bad %s: qualifiers: %s\n"),
spec->lineNum, rpmTagGetName(tag), spec->line);
@@ -782,17 +871,24 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
}
/* fallthrough */
case RPMTAG_PREREQ:
+ case RPMTAG_RECOMMENDNAME:
+ case RPMTAG_SUGGESTNAME:
+ case RPMTAG_SUPPLEMENTNAME:
+ case RPMTAG_ENHANCENAME:
+ case RPMTAG_CONFLICTNAME:
+ case RPMTAG_OBSOLETENAME:
+ case RPMTAG_PROVIDENAME:
+ if (parseRCPOT(spec, pkg, field, tag, 0, tagflags, addReqProvPkg, NULL))
+ goto exit;
+ break;
case RPMTAG_BUILDPREREQ:
case RPMTAG_BUILDREQUIRES:
case RPMTAG_BUILDCONFLICTS:
- case RPMTAG_CONFLICTFLAGS:
- case RPMTAG_OBSOLETEFLAGS:
- case RPMTAG_PROVIDEFLAGS:
- if (parseRCPOT(spec, pkg, field, tag, 0, tagflags))
+ if (parseRCPOT(spec, spec->sourcePackage, field, tag, 0, tagflags, addReqProvPkg, NULL))
goto exit;
break;
- case RPMTAG_SUGGESTSFLAGS:
- case RPMTAG_ENHANCESFLAGS:
+ case RPMTAG_OLDSUGGESTSFLAGS:
+ case RPMTAG_OLDENHANCESFLAGS:
case RPMTAG_BUILDSUGGESTS:
case RPMTAG_BUILDENHANCES:
tagflags = RPMSENSE_MISSINGOK;
@@ -800,7 +896,7 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
tagflags |= RPMSENSE_STRONG;
if (macro && (!strcmp(macro, "supplements") || !strcmp(macro, "buildsupplements")))
tagflags |= RPMSENSE_STRONG;
- if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
+ if (parseRCPOT(spec, pkg, field, tag, 0, tagflags, addReqProvPkg, NULL))
return rc;
break;
case RPMTAG_EXCLUDEARCH:
@@ -820,6 +916,13 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
goto exit;
}
if (spec->packages == pkg) {
+ if (spec->BANames) {
+ rpmlog(RPMLOG_ERR,
+ _("line %d: Duplicate BuildArch entry: %s\n"),
+ spec->lineNum, spec->line);
+ BANames = _free(BANames);
+ goto exit;
+ }
spec->BACount = BACount;
spec->BANames = BANames;
} else {
@@ -836,8 +939,10 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
spec->BANames = _free(spec->BANames);
break;
}
- case RPMTAG_COLLECTIONS:
- case RPMTAG_BUILDINFO:
+ case RPMTAG_REMOVEPATHPOSTFIXES:
+ argvSplit(&pkg->removePostfixes, field, ":");
+ break;
+ case RPMTAG_BUILDINFO:
if (addOrAppendListEntry(pkg->header, tag, field))
goto exit;
break;
@@ -846,8 +951,17 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
goto exit;
}
- if (macro)
- addMacro(spec->macros, macro, NULL, field, RMIL_SPEC);
+ if (macro) {
+ rpmPushMacro(spec->macros, macro, NULL, field, RMIL_SPEC);
+ /* Add a separate uppercase macro for tags from the main package */
+ if (pkg == spec->packages) {
+ char *m = xstrdup(macro);
+ for (char *p = m; *p; ++p)
+ *p = rtoupper(*p);
+ rpmPushMacro(spec->macros, m, NULL, field, RMIL_SPEC);
+ free(m);
+ }
+ }
rc = RPMRC_OK;
exit:
return rc;
@@ -881,7 +995,7 @@ static struct PreambleRec_s const preambleList[] = {
{RPMTAG_GROUP, 1, 0, LEN_AND_STR("group")},
{RPMTAG_PACKAGER, 0, 0, LEN_AND_STR("packager")},
{RPMTAG_URL, 0, 0, LEN_AND_STR("url")},
- {RPMTAG_VCS, 0, 0, LEN_AND_STR("vcs")},
+ {RPMTAG_VCS, 0, 0, LEN_AND_STR("vcs")},
{RPMTAG_SOURCE, 0, 0, LEN_AND_STR("source")},
{RPMTAG_PATCH, 0, 0, LEN_AND_STR("patch")},
{RPMTAG_NOSOURCE, 0, 0, LEN_AND_STR("nosource")},
@@ -891,11 +1005,15 @@ static struct PreambleRec_s const preambleList[] = {
{RPMTAG_EXCLUDEOS, 0, 0, LEN_AND_STR("excludeos")},
{RPMTAG_EXCLUSIVEOS, 0, 0, LEN_AND_STR("exclusiveos")},
{RPMTAG_ICON, 0, 0, LEN_AND_STR("icon")},
- {RPMTAG_PROVIDEFLAGS, 0, 0, LEN_AND_STR("provides")},
- {RPMTAG_REQUIREFLAGS, 2, 0, LEN_AND_STR("requires")},
+ {RPMTAG_PROVIDENAME, 0, 0, LEN_AND_STR("provides")},
+ {RPMTAG_REQUIRENAME, 2, 0, LEN_AND_STR("requires")},
+ {RPMTAG_RECOMMENDNAME, 0, 0, LEN_AND_STR("recommends")},
+ {RPMTAG_SUGGESTNAME, 0, 0, LEN_AND_STR("suggests")},
+ {RPMTAG_SUPPLEMENTNAME, 0, 0, LEN_AND_STR("supplements")},
+ {RPMTAG_ENHANCENAME, 0, 0, LEN_AND_STR("enhances")},
{RPMTAG_PREREQ, 2, 1, LEN_AND_STR("prereq")},
- {RPMTAG_CONFLICTFLAGS, 0, 0, LEN_AND_STR("conflicts")},
- {RPMTAG_OBSOLETEFLAGS, 0, 0, LEN_AND_STR("obsoletes")},
+ {RPMTAG_CONFLICTNAME, 0, 0, LEN_AND_STR("conflicts")},
+ {RPMTAG_OBSOLETENAME, 0, 0, LEN_AND_STR("obsoletes")},
{RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefixes")},
{RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefix")},
{RPMTAG_BUILDROOT, 0, 0, LEN_AND_STR("buildroot")},
@@ -910,18 +1028,19 @@ static struct PreambleRec_s const preambleList[] = {
{RPMTAG_DOCDIR, 0, 0, LEN_AND_STR("docdir")},
{RPMTAG_DISTTAG, 0, 0, LEN_AND_STR("disttag")},
{RPMTAG_BUGURL, 0, 0, LEN_AND_STR("bugurl")},
- {RPMTAG_COLLECTIONS, 0, 0, LEN_AND_STR("collections")},
{RPMTAG_ORDERFLAGS, 2, 0, LEN_AND_STR("orderwithrequires")},
- {RPMTAG_SUGGESTSFLAGS, 0, 0, LEN_AND_STR("recommends")},
- {RPMTAG_SUGGESTSFLAGS, 0, 0, LEN_AND_STR("suggests")},
- {RPMTAG_ENHANCESFLAGS, 0, 0, LEN_AND_STR("supplements")},
- {RPMTAG_ENHANCESFLAGS, 0, 0, LEN_AND_STR("enhances")},
+ {RPMTAG_OLDSUGGESTSFLAGS, 0, 0, LEN_AND_STR("recommends")},
+ {RPMTAG_OLDSUGGESTSFLAGS, 0, 0, LEN_AND_STR("suggests")},
+ {RPMTAG_OLDENHANCESFLAGS, 0, 0, LEN_AND_STR("supplements")},
+ {RPMTAG_OLDENHANCESFLAGS, 0, 0, LEN_AND_STR("enhances")},
{RPMTAG_BUILDSUGGESTS, 0, 0, LEN_AND_STR("buildrecommends")},
{RPMTAG_BUILDSUGGESTS, 0, 0, LEN_AND_STR("buildsuggests")},
{RPMTAG_BUILDENHANCES, 0, 0, LEN_AND_STR("buildsupplements")},
{RPMTAG_BUILDENHANCES, 0, 0, LEN_AND_STR("buildenhances")},
{RPMTAG_SECMANIFEST, 0, 0, LEN_AND_STR("manifest")},
- {RPMTAG_BUILDINFO, 0, 0, LEN_AND_STR("buildinfo")},
+ {RPMTAG_ORDERNAME, 2, 0, LEN_AND_STR("orderwithrequires")},
+ {RPMTAG_REMOVEPATHPOSTFIXES,0, 0, LEN_AND_STR("removepathpostfixes")},
+ {RPMTAG_BUILDINFO, 0, 0, LEN_AND_STR("buildinfo")},
{0, 0, 0, 0}
};
@@ -995,8 +1114,6 @@ int parsePreamble(rpmSpec spec, int initialPackage)
char *NVR = NULL;
char lang[BUFSIZ];
- pkg = newPackage(spec);
-
if (! initialPackage) {
/* There is one option to %package: <pkg> or -n <pkg> */
if (parseSimplePart(spec->line, &name, &flag)) {
@@ -1004,9 +1121,11 @@ int parsePreamble(rpmSpec spec, int initialPackage)
spec->line);
goto exit;
}
+
+ //if (rpmCharCheck(spec, name, WHITELIST_NAME))
+ // goto exit;
if (!lookupPackage(spec, name, flag, NULL)) {
- rpmlog(RPMLOG_ERR, _("Package already exists: %s\n"), spec->line);
free(name);
goto exit;
}
@@ -1018,9 +1137,13 @@ int parsePreamble(rpmSpec spec, int initialPackage)
} else
NVR = xstrdup(name);
free(name);
+ pkg = newPackage(NVR, spec->pool, &spec->packages);
headerPutString(pkg->header, RPMTAG_NAME, NVR);
} else {
NVR = xstrdup("(main package)");
+ pkg = newPackage(NULL, spec->pool, &spec->packages);
+ spec->sourcePackage = newPackage(NULL, spec->pool, NULL);
+
}
if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
@@ -1037,6 +1160,14 @@ int parsePreamble(rpmSpec spec, int initialPackage)
SKIPSPACE(linep);
if (*linep != '\0') {
if (findPreambleTag(spec, &tag, &macro, lang)) {
+ if (spec->lineNum == 1 &&
+ (unsigned char)(spec->line[0]) == 0xed &&
+ (unsigned char)(spec->line[1]) == 0xab &&
+ (unsigned char)(spec->line[2]) == 0xee &&
+ (unsigned char)(spec->line[3]) == 0xdb) {
+ rpmlog(RPMLOG_ERR, _("Binary rpm package found. Expected spec file!\n"));
+ goto exit;
+ }
rpmlog(RPMLOG_ERR, _("line %d: Unknown tag: %s\n"),
spec->lineNum, spec->line);
goto exit;
@@ -1060,7 +1191,7 @@ int parsePreamble(rpmSpec spec, int initialPackage)
}
}
- /*
+ /*
* Expand buildroot one more time to get %{version} and the like
* from the main package, validate sanity. The spec->buildRoot could
* still contain unexpanded macros but it cannot be empty or '/', and it
@@ -1078,7 +1209,7 @@ int parsePreamble(rpmSpec spec, int initialPackage)
}
free(spec->buildRoot);
spec->buildRoot = buildRoot;
- addMacro(spec->macros, "buildroot", NULL, spec->buildRoot, RMIL_SPEC);
+ rpmPushMacro(spec->macros, "buildroot", NULL, spec->buildRoot, RMIL_SPEC);
}
/* XXX Skip valid arch check if not building binary package */
@@ -1100,8 +1231,7 @@ int parsePreamble(rpmSpec spec, int initialPackage)
}
if (pkg != spec->packages) {
- headerCopyTags(spec->packages->header, pkg->header,
- (rpmTagVal *)copyTagsDuringParse);
+ copyInheritedTags(pkg->header, spec->packages->header);
}
if (checkForRequired(pkg->header, NVR)) {
diff --git a/build/parsePrep.c b/build/parsePrep.c
index fd4d30cdf..a62123e25 100644
--- a/build/parsePrep.c
+++ b/build/parsePrep.c
@@ -6,6 +6,7 @@
#include "system.h"
#include <errno.h>
+#include <libgen.h>
#include <rpm/header.h>
#include <rpm/rpmlog.h>
@@ -29,10 +30,6 @@ static rpmRC checkOwners(const char * urlfn)
urlfn, strerror(errno));
return RPMRC_FAIL;
}
- if (!rpmugUname(sb.st_uid) || !rpmugGname(sb.st_gid)) {
- rpmlog(RPMLOG_ERR, _("Bad owner/group: %s\n"), urlfn);
- return RPMRC_FAIL;
- }
return RPMRC_OK;
}
@@ -47,21 +44,25 @@ static rpmRC checkOwners(const char * urlfn)
* @param removeEmpties include -E?
* @param fuzz fuzz factor, fuzz<0 means no fuzz set
* @param dir dir to change to (i.e. patch -d argument)
+ * @param outfile send output to this file (i.e. patch -o argument)
* @return expanded %patch macro (NULL on error)
*/
static char *doPatch(rpmSpec spec, uint32_t c, int strip, const char *db,
- int reverse, int removeEmpties, int fuzz, const char *dir)
+ int reverse, int removeEmpties, int fuzz, const char *dir,
+ const char *outfile)
{
char *fn = NULL;
char *buf = NULL;
char *arg_backup = NULL;
char *arg_fuzz = NULL;
char *arg_dir = NULL;
+ char *arg_outfile = NULL;
char *args = NULL;
char *arg_patch_flags = rpmExpand("%{?_default_patch_flags}", NULL);
struct Source *sp;
char *patchcmd;
+ rpmCompressedMagic compressed = COMPRESSED_NOT;
for (sp = spec->sources; sp != NULL; sp = sp->next) {
if ((sp->flags & RPMBUILD_ISPATCH) && (sp->num == c)) {
@@ -80,7 +81,7 @@ static char *doPatch(rpmSpec spec, uint32_t c, int strip, const char *db,
fn = rpmGetPath("%{_sourcedir}/", sp->source, NULL);
/* On non-build parse's, file cannot be stat'd or read. */
- if ((spec->flags & RPMSPEC_FORCE) || checkOwners(fn)) goto exit;
+ if ((spec->flags & RPMSPEC_FORCE) || rpmFileIsCompressed(fn, &compressed) || checkOwners(fn)) goto exit;
if (db) {
rasprintf(&arg_backup,
@@ -94,17 +95,28 @@ static char *doPatch(rpmSpec spec, uint32_t c, int strip, const char *db,
rasprintf(&arg_dir, " -d %s", dir);
} else arg_dir = xstrdup("");
+ if (outfile) {
+ rasprintf(&arg_outfile, " -o %s", outfile);
+ } else arg_outfile = xstrdup("");
+
if (fuzz >= 0) {
rasprintf(&arg_fuzz, " --fuzz=%d", fuzz);
} else arg_fuzz = xstrdup("");
- rasprintf(&args, "%s -p%d %s%s%s%s%s", arg_patch_flags, strip, arg_backup, arg_fuzz, arg_dir,
+ rasprintf(&args, "%s -p%d %s%s%s%s%s%s", arg_patch_flags, strip, arg_backup, arg_fuzz, arg_dir, arg_outfile,
reverse ? " -R" : "",
removeEmpties ? " -E" : "");
- patchcmd = rpmExpand("%{uncompress: ", fn, "} | %{__patch} ", args, NULL);
+ /* Avoid the extra cost of fork and pipe for uncompressed patches */
+ if (compressed != COMPRESSED_NOT) {
+ patchcmd = rpmExpand("{ %{uncompress: ", fn, "} || echo patch_fail ; } | "
+ "%{__patch} ", args, NULL);
+ } else {
+ patchcmd = rpmExpand("%{__patch} ", args, " < ", fn, NULL);
+ }
free(arg_fuzz);
+ free(arg_outfile);
free(arg_dir);
free(arg_backup);
free(args);
@@ -138,7 +150,7 @@ static char *doUntar(rpmSpec spec, uint32_t c, int quietly)
char *fn = NULL;
char *buf = NULL;
char *tar = NULL;
- const char *taropts = ((rpmIsVerbose() && !quietly) ? "-xvvf" : "-xf");
+ const char *taropts = ((rpmIsVerbose() && !quietly) ? "-xvvof" : "-xof");
struct Source *sp;
rpmCompressedMagic compressed = COMPRESSED_NOT;
@@ -167,6 +179,7 @@ static char *doUntar(rpmSpec spec, uint32_t c, int quietly)
if (compressed != COMPRESSED_NOT) {
char *zipper, *t = NULL;
int needtar = 1;
+ int needgemspec = 0;
switch (compressed) {
case COMPRESSED_NOT: /* XXX can't happen */
@@ -197,6 +210,14 @@ static char *doUntar(rpmSpec spec, uint32_t c, int quietly)
t = "%{__7zip} x";
needtar = 0;
break;
+ case COMPRESSED_ZSTD:
+ t = "%{__zstd} -dc";
+ break;
+ case COMPRESSED_GEM:
+ t = "%{__gem} unpack";
+ needtar = 0;
+ needgemspec = 1;
+ break;
}
zipper = rpmGetPath(t, NULL);
if (needtar) {
@@ -205,6 +226,22 @@ static char *doUntar(rpmSpec spec, uint32_t c, int quietly)
"if [ $STATUS -ne 0 ]; then\n"
" exit $STATUS\n"
"fi", zipper, fn, tar, taropts);
+ } else if (needgemspec) {
+ char *gem = rpmGetPath("%{__gem}", NULL);
+ char *gemspec = NULL;
+ char gemnameversion[strlen(sp->source) - 3];
+
+ rstrlcpy(gemnameversion, sp->source, strlen(sp->source) - 3);
+ gemspec = rpmGetPath("%{_builddir}/", gemnameversion, ".gemspec", NULL);
+
+ rasprintf(&buf, "%s '%s' && %s spec '%s' --ruby > '%s'\n"
+ "STATUS=$?\n"
+ "if [ $STATUS -ne 0 ]; then\n"
+ " exit $STATUS\n"
+ "fi", zipper, fn, gem, fn, gemspec);
+
+ free(gemspec);
+ free(gem);
} else {
rasprintf(&buf, "%s '%s'\n"
"STATUS=$?\n"
@@ -225,7 +262,6 @@ exit:
/**
* Parse %setup macro.
- * @todo FIXME: Option -q broken when not immediately after %setup.
* @param spec build info
* @param line current line from spec file
* @return RPMRC_OK on success
@@ -245,6 +281,7 @@ static int doSetupMacro(rpmSpec spec, const char *line)
uint32_t num;
int leaveDirs = 0, skipDefaultAction = 0;
int createDir = 0, quietly = 0;
+ int buildInPlace = 0;
const char * dirName = NULL;
struct poptOption optionsTable[] = {
{ NULL, 'a', POPT_ARG_STRING, NULL, 'a', NULL, NULL},
@@ -257,6 +294,8 @@ static int doSetupMacro(rpmSpec spec, const char *line)
{ 0, 0, 0, 0, 0, NULL, NULL}
};
+ if (strstr(line+6, " -q")) quietly = 1;
+
if ((xx = poptParseArgvString(line, &argc, &argv))) {
rpmlog(RPMLOG_ERR, _("Error parsing %%setup: %s\n"), poptStrerror(xx));
goto exit;
@@ -298,7 +337,16 @@ static int doSetupMacro(rpmSpec spec, const char *line)
headerGetString(spec->packages->header, RPMTAG_NAME),
headerGetString(spec->packages->header, RPMTAG_VERSION));
}
- addMacro(spec->macros, "buildsubdir", NULL, spec->buildSubdir, RMIL_SPEC);
+ /* Mer addition - support --build-in-place */
+ if (rpmExpandNumeric("%{_build_in_place}")) {
+ buildInPlace = 1;
+ spec->buildSubdir = NULL;
+ }
+ rpmPushMacro(spec->macros, "buildsubdir", NULL, spec->buildSubdir, RMIL_SPEC);
+ if (buildInPlace) {
+ rc = RPMRC_OK;
+ goto exit;
+ }
/* cd to the build dir */
{ char * buildDir = rpmGenPath(spec->rootDir, "%{_builddir}", "");
@@ -316,6 +364,8 @@ static int doSetupMacro(rpmSpec spec, const char *line)
free(buf);
}
+ appendStringBuf(spec->prep, getStringBuf(before));
+
/* if necessary, create and cd into the proper dir */
if (createDir) {
buf = rpmExpand("%{__mkdir_p} ", spec->buildSubdir, "\n",
@@ -333,8 +383,6 @@ static int doSetupMacro(rpmSpec spec, const char *line)
free(chptr);
}
- appendStringBuf(spec->prep, getStringBuf(before));
-
if (!createDir) {
rasprintf(&buf, "cd '%s'", spec->buildSubdir);
appendLineStringBuf(spec->prep, buf);
@@ -372,12 +420,12 @@ exit:
/**
* Parse %patch line.
* This supports too many crazy syntaxes:
- * - %patchN is equal to %patch -P<N>
- * - -P<N> -P<N+1>... can be used to apply several patch on a single line
+ * - %patchN is equal to %patch -P\<N\>
+ * - -P\<N\> -P\<N+1\>... can be used to apply several patch on a single line
* - Any trailing arguments are treated as patch numbers
* - Any combination of the above, except unless at least one -P is specified,
- * %patch is treated as %patch -P0 so that "%patch 1" is actually
- * equal to "%patch -P0 -P1".
+ * %patch is treated as "numberless patch" so that "%patch 1" actually tries
+ * to pull in numberless "Patch:" and numbered "Patch1:".
*
* @param spec build info
* @param line current line from spec file
@@ -385,7 +433,7 @@ exit:
*/
static rpmRC doPatchMacro(rpmSpec spec, const char *line)
{
- char *opt_b, *opt_P, *opt_d;
+ char *opt_b, *opt_P, *opt_d, *opt_o;
char *buf = NULL;
int opt_p, opt_R, opt_E, opt_F;
int argc, c;
@@ -402,13 +450,14 @@ static rpmRC doPatchMacro(rpmSpec spec, const char *line)
{ NULL, 'z', POPT_ARG_STRING, &opt_b, 'z', NULL, NULL },
{ NULL, 'F', POPT_ARG_INT, &opt_F, 'F', NULL, NULL },
{ NULL, 'd', POPT_ARG_STRING, &opt_d, 'd', NULL, NULL },
+ { NULL, 'o', POPT_ARG_STRING, &opt_o, 'o', NULL, NULL },
{ NULL, 0, 0, NULL, 0, NULL, NULL }
};
poptContext optCon = NULL;
opt_p = opt_R = opt_E = 0;
opt_F = rpmExpandNumeric("%{_default_patch_fuzz}"); /* get default fuzz factor for %patch */
- opt_b = opt_d = NULL;
+ opt_b = opt_d = opt_o = NULL;
/* Convert %patchN to %patch -PN to simplify further processing */
if (! strchr(" \t\n", line[6])) {
@@ -460,7 +509,7 @@ static rpmRC doPatchMacro(rpmSpec spec, const char *line)
*patch, line);
goto exit;
}
- s = doPatch(spec, pnum, opt_p, opt_b, opt_R, opt_E, opt_F, opt_d);
+ s = doPatch(spec, pnum, opt_p, opt_b, opt_R, opt_E, opt_F, opt_d, opt_o);
if (s == NULL) {
goto exit;
}
diff --git a/build/parseReqs.c b/build/parseReqs.c
index 1507090d3..4d7e8e8bf 100644
--- a/build/parseReqs.c
+++ b/build/parseReqs.c
@@ -12,119 +12,230 @@
#include "build/rpmbuild_misc.h"
#include "debug.h"
-/**
- */
-static struct ReqComp {
-const char * token;
- rpmsenseFlags sense;
-} const ReqComparisons[] = {
- { "<=", RPMSENSE_LESS | RPMSENSE_EQUAL},
- { "=<", RPMSENSE_LESS | RPMSENSE_EQUAL},
- { "<", RPMSENSE_LESS},
-
- { "==", RPMSENSE_EQUAL},
- { "=", RPMSENSE_EQUAL},
-
- { ">=", RPMSENSE_GREATER | RPMSENSE_EQUAL},
- { "=>", RPMSENSE_GREATER | RPMSENSE_EQUAL},
- { ">", RPMSENSE_GREATER},
-
- { NULL, 0 },
+
+#define SKIPWHITE(_x) {while (*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
+#define SKIPNONWHITE(_x){while (*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;}
+
+static rpmRC checkSep(const char *s, char c, char **emsg)
+{
+ const char *sep = strchr(s, c);
+ if (sep && strchr(sep + 1, c)) {
+ rasprintf(emsg, "Invalid version (double separator '%c'): %s", c, s);
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static rpmRC checkEpoch(const char *s, char **emsg)
+{
+ const char *si, *sep = strchr(s, ':');
+
+ if (!sep)
+ return RPMRC_OK;
+
+ for (si = s; si != sep; si++) {
+ if (!risdigit(*si)) {
+ rasprintf(emsg, "Invalid version (epoch must be unsigned integer): %s", s);
+ return RPMRC_FAIL;
+ }
+ }
+ return RPMRC_OK;
+}
+
+static rpmRC checkDep(rpmSpec spec, char *N, char *EVR, char **emsg)
+{
+ /*
+ * Tokens must begin with alphanumeric, _, or /, but we don't know
+ * the spec's encoding so we only check what we can: plain ascii.
+ */
+ if (isascii(N[0]) && !(risalnum(N[0]) || N[0] == '_' || N[0] == '/')) {
+ rasprintf(emsg, _("Dependency tokens must begin with alpha-numeric, '_' or '/'"));
+ return RPMRC_FAIL;
+ }
+ if (EVR) {
+ if (N[0] == '/') {
+ rasprintf(emsg, _("Versioned file name not permitted"));
+ return RPMRC_FAIL;
+ }
+ // if (rpmCharCheck(spec, EVR, ".-_+:%{}~"))
+ // return RPMRC_FAIL;
+ if (checkSep(EVR, '-', emsg) != RPMRC_OK ||
+ checkSep(EVR, ':', emsg) != RPMRC_OK ||
+ checkEpoch(EVR, emsg) != RPMRC_OK) {
+
+ if (rpmExpandNumeric("%{?_wrong_version_format_terminate_build}"))
+ return RPMRC_FAIL;
+ }
+ }
+ return RPMRC_OK;
+}
+
+struct parseRCPOTRichData {
+ rpmSpec spec;
+ StringBuf sb;
};
-#define SKIPWHITE(_x) {while(*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
-#define SKIPNONWHITE(_x){while(*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;}
+/* Callback for the rich dependency parser. We use this to do check for invalid
+ * characters and to build a normailzed version of the dependency */
+static rpmRC parseRCPOTRichCB(void *cbdata, rpmrichParseType type,
+ const char *n, int nl, const char *e, int el, rpmsenseFlags sense,
+ rpmrichOp op, char **emsg) {
+ struct parseRCPOTRichData *data = cbdata;
+ StringBuf sb = data->sb;
+ rpmRC rc = RPMRC_OK;
+
+ if (type == RPMRICH_PARSE_ENTER) {
+ appendStringBuf(sb, "(");
+ } else if (type == RPMRICH_PARSE_LEAVE) {
+ appendStringBuf(sb, ")");
+ } else if (type == RPMRICH_PARSE_SIMPLE) {
+ char *N = xmalloc(nl + 1);
+ char *EVR = NULL;
+ rstrlcpy(N, n, nl + 1);
+ appendStringBuf(sb, N);
+ if (el) {
+ char rel[6], *rp = rel;
+ EVR = xmalloc(el + 1);
+ rstrlcpy(EVR, e, el + 1);
+ *rp++ = ' ';
+ if (sense & RPMSENSE_LESS)
+ *rp++ = '<';
+ if (sense & RPMSENSE_GREATER)
+ *rp++ = '>';
+ if (sense & RPMSENSE_EQUAL)
+ *rp++ = '=';
+ *rp++ = ' ';
+ *rp = 0;
+ appendStringBuf(sb, rel);
+ appendStringBuf(sb, EVR);
+ }
+ rc = checkDep(data->spec, N, EVR, emsg);
+ _free(N);
+ _free(EVR);
+ } else if (type == RPMRICH_PARSE_OP) {
+ appendStringBuf(sb, " ");
+ appendStringBuf(sb, rpmrichOpStr(op));
+ appendStringBuf(sb, " ");
+ }
+ return rc;
+}
rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char *field, rpmTagVal tagN,
- int index, rpmsenseFlags tagflags)
+ int index, rpmsenseFlags tagflags, addReqProvFunction cb, void *cbdata)
{
- const char *r, *re, *v, *ve;
- const char *emsg = NULL;
- char * N = NULL, * EVR = NULL;
- rpmTagVal nametag = RPMTAG_NOT_FOUND;
- rpmsenseFlags Flags;
- Header h = pkg->header; /* everything except buildrequires go here */
- rpmRC rc = RPMRC_FAIL; /* assume failure */
-
- switch (tagN) {
- default:
- case RPMTAG_REQUIREFLAGS:
- nametag = RPMTAG_REQUIRENAME;
+ const char *r, *re, *v, *ve;
+ char *emsg = NULL;
+ char * N = NULL, * EVR = NULL;
+ rpmTagVal nametag = RPMTAG_NOT_FOUND;
+ rpmsenseFlags Flags;
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ int allow_richdeps = 0;
+
+ if (!cbdata)
+ cbdata = pkg;
+
+ switch (tagN) {
+ default:
+ case RPMTAG_REQUIRENAME:
tagflags |= RPMSENSE_ANY;
+ /* fall through */
+ case RPMTAG_RECOMMENDNAME:
+ case RPMTAG_SUGGESTNAME:
+ case RPMTAG_SUPPLEMENTNAME:
+ case RPMTAG_ENHANCENAME:
+ case RPMTAG_CONFLICTNAME:
+ allow_richdeps = 1;
+ /* fall through */
+ case RPMTAG_PROVIDENAME:
+ case RPMTAG_OBSOLETENAME:
+ case RPMTAG_ORDERNAME:
+ nametag = tagN;
break;
- case RPMTAG_PROVIDEFLAGS:
- nametag = RPMTAG_PROVIDENAME;
- break;
- case RPMTAG_OBSOLETEFLAGS:
- nametag = RPMTAG_OBSOLETENAME;
- break;
- case RPMTAG_CONFLICTFLAGS:
- nametag = RPMTAG_CONFLICTNAME;
- break;
- case RPMTAG_ORDERFLAGS:
- nametag = RPMTAG_ORDERNAME;
- break;
- case RPMTAG_PREREQ:
+ case RPMTAG_PREREQ:
/* XXX map legacy PreReq into Requires(pre,preun) */
nametag = RPMTAG_REQUIRENAME;
tagflags |= (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_PREUN);
+ allow_richdeps = 1;
break;
- case RPMTAG_TRIGGERPREIN:
+ case RPMTAG_TRIGGERPREIN:
nametag = RPMTAG_TRIGGERNAME;
tagflags |= RPMSENSE_TRIGGERPREIN;
break;
- case RPMTAG_TRIGGERIN:
+ case RPMTAG_TRIGGERIN:
nametag = RPMTAG_TRIGGERNAME;
tagflags |= RPMSENSE_TRIGGERIN;
break;
- case RPMTAG_TRIGGERPOSTUN:
+ case RPMTAG_TRIGGERPOSTUN:
nametag = RPMTAG_TRIGGERNAME;
tagflags |= RPMSENSE_TRIGGERPOSTUN;
break;
- case RPMTAG_TRIGGERUN:
+ case RPMTAG_TRIGGERUN:
nametag = RPMTAG_TRIGGERNAME;
tagflags |= RPMSENSE_TRIGGERUN;
break;
- case RPMTAG_BUILDPREREQ:
- case RPMTAG_BUILDREQUIRES:
+ case RPMTAG_BUILDPREREQ:
+ case RPMTAG_BUILDREQUIRES:
nametag = RPMTAG_REQUIRENAME;
tagflags |= RPMSENSE_ANY;
- h = spec->buildRestrictions;
+ allow_richdeps = 1;
break;
- case RPMTAG_BUILDCONFLICTS:
+ case RPMTAG_BUILDCONFLICTS:
nametag = RPMTAG_CONFLICTNAME;
- h = spec->buildRestrictions;
+ allow_richdeps = 1;
break;
- case RPMTAG_SUGGESTSFLAGS:
- nametag = RPMTAG_SUGGESTSNAME;
+ case RPMTAG_FILETRIGGERIN:
+ nametag = RPMTAG_FILETRIGGERNAME;
+ tagflags |= RPMSENSE_TRIGGERIN;
break;
- case RPMTAG_ENHANCESFLAGS:
- nametag = RPMTAG_ENHANCESNAME;
+ case RPMTAG_FILETRIGGERUN:
+ nametag = RPMTAG_FILETRIGGERNAME;
+ tagflags |= RPMSENSE_TRIGGERUN;
break;
- case RPMTAG_BUILDSUGGESTS:
- nametag = RPMTAG_SUGGESTSNAME;
- h = spec->buildRestrictions;
+ case RPMTAG_FILETRIGGERPOSTUN:
+ nametag = RPMTAG_FILETRIGGERNAME;
+ tagflags |= RPMSENSE_TRIGGERPOSTUN;
break;
- case RPMTAG_BUILDENHANCES:
- nametag = RPMTAG_ENHANCESNAME;
- h = spec->buildRestrictions;
+ case RPMTAG_TRANSFILETRIGGERIN:
+ nametag = RPMTAG_TRANSFILETRIGGERNAME;
+ tagflags |= RPMSENSE_TRIGGERIN;
break;
- }
+ case RPMTAG_TRANSFILETRIGGERUN:
+ nametag = RPMTAG_TRANSFILETRIGGERNAME;
+ tagflags |= RPMSENSE_TRIGGERUN;
+ break;
+ case RPMTAG_TRANSFILETRIGGERPOSTUN:
+ nametag = RPMTAG_TRANSFILETRIGGERNAME;
+ tagflags |= RPMSENSE_TRIGGERPOSTUN;
+ break;
+ }
- for (r = field; *r != '\0'; r = re) {
+ for (r = field; *r != '\0'; r = re) {
SKIPWHITE(r);
if (*r == '\0')
- break;
+ break;
Flags = (tagflags & ~RPMSENSE_SENSEMASK);
- /*
- * Tokens must begin with alphanumeric, _, or /, but we don't know
- * the spec's encoding so we only check what we can: plain ascii.
- */
- if (isascii(r[0]) && !(risalnum(r[0]) || r[0] == '_' || r[0] == '/')) {
- emsg = _("Dependency tokens must begin with alpha-numeric, '_' or '/'");
- goto exit;
+ if (r[0] == '(') {
+ struct parseRCPOTRichData data;
+ if (!allow_richdeps) {
+ rasprintf(&emsg, _("No rich dependencies allowed for this type"));
+ goto exit;
+ }
+ data.spec = spec;
+ data.sb = newStringBuf();
+ if (rpmrichParseForTag(&r, &emsg, parseRCPOTRichCB, &data, nametag) != RPMRC_OK) {
+ freeStringBuf(data.sb);
+ goto exit;
+ }
+ if (cb && cb(cbdata, nametag, getStringBuf(data.sb), NULL, Flags, index) != RPMRC_OK) {
+ rasprintf(&emsg, _("invalid dependency"));
+ freeStringBuf(data.sb);
+ goto exit;
+ }
+ freeStringBuf(data.sb);
+ re = r;
+ continue;
}
re = r;
@@ -133,71 +244,106 @@ rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char *field, rpmTagVal tagN,
rstrlcpy(N, r, (re-r) + 1);
/* Parse EVR */
+ EVR = NULL;
v = re;
SKIPWHITE(v);
ve = v;
SKIPNONWHITE(ve);
- re = v; /* ==> next token (if no EVR found) starts here */
+ re = v; /* ==> next token (if no EVR found) starts here */
/* Check for possible logical operator */
if (ve > v) {
- const struct ReqComp *rc;
- for (rc = ReqComparisons; rc->token != NULL; rc++) {
- if ((ve-v) != strlen(rc->token) || !rstreqn(v, rc->token, (ve-v)))
- continue;
+ rpmsenseFlags sense = rpmParseDSFlags(v, ve - v);
+ if (sense) {
+ Flags |= sense;
+
+ /* now parse EVR */
+ v = ve;
+ SKIPWHITE(v);
+ ve = v;
+ SKIPNONWHITE(ve);
+ if (*v == '\0' || ve == v) {
+ rasprintf(&emsg, _("Version required"));
+ goto exit;
+ }
+ EVR = xmalloc((ve-v) + 1);
+ rstrlcpy(EVR, v, (ve-v) + 1);
+ re = ve; /* ==> next token after EVR string starts here */
+ }
+ }
- if (r[0] == '/') {
- emsg = _("Versioned file name not permitted");
+ /* check that dependency is well-formed */
+ if (checkDep(spec, N, EVR, &emsg))
goto exit;
- }
- Flags |= rc->sense;
+ if (nametag == RPMTAG_OBSOLETENAME) {
+ if (rpmCharCheck(spec, N, WHITELIST_NAME)) {
+ rasprintf(&emsg, _("Only package names are allowed in "
+ "Obsoletes"));
+ goto exit;
+ }
+ if (!EVR) {
+ rasprintf(&emsg, _("It's not recommended to have "
+ "unversioned Obsoletes"));
+ } else if (Flags & RPMSENSE_GREATER) {
+ rasprintf(&emsg, _("It's not recommended to use "
+ "'>' in Obsoletes"));
+ }
+ }
- /* now parse EVR */
- v = ve;
- SKIPWHITE(v);
- ve = v;
- SKIPNONWHITE(ve);
- break;
- }
+ if (nametag == RPMTAG_FILETRIGGERNAME ||
+ nametag == RPMTAG_TRANSFILETRIGGERNAME) {
+ if (N[0] != '/') {
+ rasprintf(&emsg, _("Only absolute paths are allowed in "
+ "file triggers"));
+ }
}
- if (Flags & RPMSENSE_SENSEMASK) {
- if (*v == '\0' || ve == v) {
- emsg = _("Version required");
+
+ /* Deny more "normal" triggers fired by the same pakage. File triggers are ok */
+ if (nametag == RPMTAG_TRIGGERNAME) {
+ rpmds *pdsp = packageDependencies(pkg, nametag);
+ rpmds newds = rpmdsSingle(nametag, N, EVR, Flags);
+ rpmdsInit(*pdsp);
+ while (rpmdsNext(*pdsp) >= 0) {
+ if (rpmdsCompare(*pdsp, newds) && (rpmdsFlags(*pdsp) & tagflags )) {
+ rasprintf(&emsg, _("Trigger fired by the same package "
+ "is already defined in spec file"));
+ break;
+ }
+ }
+ rpmdsFree(newds);
+ if (emsg)
+ goto exit;
+ }
+
+ if (cb && cb(cbdata, nametag, N, EVR, Flags, index) != RPMRC_OK) {
+ rasprintf(&emsg, _("invalid dependency"));
goto exit;
- }
- EVR = xmalloc((ve-v) + 1);
- rstrlcpy(EVR, v, (ve-v) + 1);
- if (rpmCharCheck(spec, EVR, ve-v, ".-_+:%{}~")) goto exit;
- re = ve; /* ==> next token after EVR string starts here */
- } else
- EVR = NULL;
-
- if (addReqProv(h, nametag, N, EVR, Flags, index)) {
- emsg = _("invalid dependency");
- goto exit;
}
N = _free(N);
EVR = _free(EVR);
- }
- rc = RPMRC_OK;
+ }
+ rc = RPMRC_OK;
exit:
- if (emsg) {
+ if (emsg) {
+ int lvl = (rc == RPMRC_OK) ? RPMLOG_WARNING : RPMLOG_ERR;
/* Automatic dependencies don't relate to spec lines */
if (tagflags & (RPMSENSE_FIND_REQUIRES|RPMSENSE_FIND_PROVIDES)) {
- rpmlog(RPMLOG_ERR, "%s: %s\n", emsg, r);
+ rpmlog(lvl, "%s: %s\n", emsg, r);
} else {
- rpmlog(RPMLOG_ERR, _("line %d: %s: %s\n"),
+ rpmlog(lvl, _("line %d: %s: %s\n"),
spec->lineNum, emsg, spec->line);
}
- }
- free(N);
- free(EVR);
+ free(emsg);
+ }
+ _free(N);
+ _free(EVR);
- return rc;
+ return rc;
}
+
diff --git a/build/parseScript.c b/build/parseScript.c
index 1a149e137..bd0c2f072 100644
--- a/build/parseScript.c
+++ b/build/parseScript.c
@@ -15,16 +15,29 @@
#include "debug.h"
+#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; }
/**
*/
static int addTriggerIndex(Package pkg, const char *file,
- const char *script, const char *prog, rpmscriptFlags flags)
+ const char *script, const char *prog, rpmscriptFlags flags,
+ rpmTagVal tag, uint32_t priority)
{
struct TriggerFileEntry *tfe;
- struct TriggerFileEntry *list = pkg->triggerFiles;
+ struct TriggerFileEntry *list;
struct TriggerFileEntry *last = NULL;
int index = 0;
+ struct TriggerFileEntry **tfp;
+
+ if (tag == RPMTAG_FILETRIGGERSCRIPTS) {
+ tfp = &pkg->fileTriggerFiles;
+ } else if (tag == RPMTAG_TRANSFILETRIGGERSCRIPTS) {
+ tfp = &pkg->transFileTriggerFiles;
+ } else {
+ tfp = &pkg->triggerFiles;
+ }
+
+ list = *tfp;
while (list) {
last = list;
@@ -41,12 +54,13 @@ static int addTriggerIndex(Package pkg, const char *file,
tfe->prog = xstrdup(prog);
tfe->flags = flags;
tfe->index = index;
+ tfe->priority = priority;
tfe->next = NULL;
if (last)
last->next = tfe;
else
- pkg->triggerFiles = tfe;
+ *tfp = tfe;
return index;
}
@@ -90,6 +104,7 @@ int parseScript(rpmSpec spec, int parsePart)
const char *name = NULL;
const char *prog = "/bin/sh";
const char *file = NULL;
+ int priority = 1000000;
struct poptOption optionsTable[] = {
{ NULL, 'p', POPT_ARG_STRING, &prog, 'p', NULL, NULL},
{ NULL, 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL},
@@ -98,6 +113,7 @@ int parseScript(rpmSpec spec, int parsePart)
NULL, NULL},
{ NULL, 'q', POPT_BIT_SET, &scriptFlags, RPMSCRIPT_FLAG_QFORMAT,
NULL, NULL},
+ { NULL, 'P', POPT_ARG_INT, &priority, 'P', NULL, NULL},
{ 0, 0, 0, 0, 0, NULL, NULL}
};
@@ -183,19 +199,82 @@ int parseScript(rpmSpec spec, int parsePart)
flagtag = RPMTAG_TRIGGERSCRIPTFLAGS;
partname = "%triggerpostun";
break;
+ case PART_FILETRIGGERIN:
+ tag = RPMTAG_FILETRIGGERSCRIPTS;
+ tagflags = 0;
+ reqtag = RPMTAG_FILETRIGGERIN;
+ progtag = RPMTAG_FILETRIGGERSCRIPTPROG;
+ flagtag = RPMTAG_FILETRIGGERSCRIPTFLAGS;
+ partname = "%filetriggerin";
+ break;
+ case PART_FILETRIGGERUN:
+ tag = RPMTAG_FILETRIGGERSCRIPTS;
+ tagflags = 0;
+ reqtag = RPMTAG_FILETRIGGERUN;
+ progtag = RPMTAG_FILETRIGGERSCRIPTPROG;
+ flagtag = RPMTAG_FILETRIGGERSCRIPTFLAGS;
+ partname = "%filetriggerun";
+ break;
+ case PART_FILETRIGGERPOSTUN:
+ tag = RPMTAG_FILETRIGGERSCRIPTS;
+ tagflags = 0;
+ reqtag = RPMTAG_FILETRIGGERPOSTUN;
+ progtag = RPMTAG_FILETRIGGERSCRIPTPROG;
+ flagtag = RPMTAG_FILETRIGGERSCRIPTFLAGS;
+ partname = "%filetriggerpostun";
+ break;
+ case PART_TRANSFILETRIGGERIN:
+ tag = RPMTAG_TRANSFILETRIGGERSCRIPTS;
+ tagflags = 0;
+ reqtag = RPMTAG_TRANSFILETRIGGERIN;
+ progtag = RPMTAG_TRANSFILETRIGGERSCRIPTPROG;
+ flagtag = RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS;
+ partname = "%transfiletriggerin";
+ break;
+ case PART_TRANSFILETRIGGERUN:
+ tag = RPMTAG_TRANSFILETRIGGERSCRIPTS;
+ tagflags = 0;
+ reqtag = RPMTAG_TRANSFILETRIGGERUN;
+ progtag = RPMTAG_TRANSFILETRIGGERSCRIPTPROG;
+ flagtag = RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS;
+ partname = "%transfiletriggerun";
+ break;
+ case PART_TRANSFILETRIGGERPOSTUN:
+ tag = RPMTAG_TRANSFILETRIGGERSCRIPTS;
+ tagflags = 0;
+ reqtag = RPMTAG_TRANSFILETRIGGERPOSTUN;
+ progtag = RPMTAG_TRANSFILETRIGGERSCRIPTPROG;
+ flagtag = RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS;
+ partname = "%transfiletriggerpostun";
+ break;
}
- if (tag == RPMTAG_TRIGGERSCRIPTS) {
- /* break line into two */
- char *s = strstr(spec->line, "--");
- if (!s) {
+ if (tag == RPMTAG_TRIGGERSCRIPTS || tag == RPMTAG_FILETRIGGERSCRIPTS ||
+ tag == RPMTAG_TRANSFILETRIGGERSCRIPTS) {
+ /* break line into two at the -- separator */
+ char *sep, *s = spec->line;
+ while ((s = strstr(s, "--")) != NULL) {
+ s += 2;
+ if (risblank(*(s-3)) && risblank(*s))
+ break;
+ }
+
+ if (s == NULL) {
rpmlog(RPMLOG_ERR, _("line %d: triggers must have --: %s\n"),
spec->lineNum, spec->line);
- return PART_ERROR;
+ goto exit;
+ }
+
+ sep = s;
+ SKIPSPACE(s);
+ if (*s == '\0') {
+ rpmlog(RPMLOG_ERR, _("line %d: missing trigger condition: %s\n"),
+ spec->lineNum, spec->line);
+ goto exit;
}
- *s = '\0';
- reqargs = xstrdup(s + 2);
+ *sep = '\0';
+ reqargs = xstrdup(s);
}
if ((rc = poptParseArgvString(spec->line, &argc, &argv))) {
@@ -225,9 +304,19 @@ int parseScript(rpmSpec spec, int parsePart)
case 'n':
flag = PART_NAME;
break;
+ case 'P':
+ if (tag != RPMTAG_TRIGGERSCRIPTS &&
+ tag != RPMTAG_FILETRIGGERSCRIPTS &&
+ tag != RPMTAG_TRANSFILETRIGGERSCRIPTS) {
+
+ rpmlog(RPMLOG_ERR,
+ _("line %d: Priorities are allowed only for file "
+ "triggers : %s\n"), spec->lineNum, prog);
+ goto exit;
+ }
}
}
-
+
if (arg < -1) {
rpmlog(RPMLOG_ERR, _("line %d: Bad option %s: %s\n"),
spec->lineNum,
@@ -247,11 +336,8 @@ int parseScript(rpmSpec spec, int parsePart)
}
}
- if (lookupPackage(spec, name, flag, &pkg)) {
- rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"),
- spec->lineNum, spec->line);
+ if (lookupPackage(spec, name, flag, &pkg))
goto exit;
- }
if (tag != RPMTAG_TRIGGERSCRIPTS) {
if (headerIsEntry(pkg->header, progtag)) {
@@ -292,8 +378,7 @@ int parseScript(rpmSpec spec, int parsePart)
if (rpmluaCheckScript(lua, p, partname) != RPMRC_OK) {
goto exit;
}
- (void) rpmlibNeedsFeature(pkg->header,
- "BuiltinLuaScripts", "4.2.2-1");
+ (void) rpmlibNeedsFeature(pkg, "BuiltinLuaScripts", "4.2.2-1");
} else
#endif
if (progArgv[0][0] == '<') {
@@ -302,17 +387,24 @@ int parseScript(rpmSpec spec, int parsePart)
spec->lineNum, progArgv[0]);
goto exit;
} else {
- (void) addReqProv(pkg->header, RPMTAG_REQUIRENAME,
+ (void) addReqProv(pkg, RPMTAG_REQUIRENAME,
progArgv[0], NULL, (tagflags | RPMSENSE_INTERP), 0);
}
if (scriptFlags) {
- rpmlibNeedsFeature(pkg->header, "ScriptletExpansion", "4.9.0-1");
+ rpmlibNeedsFeature(pkg, "ScriptletExpansion", "4.9.0-1");
}
/* Trigger script insertion is always delayed in order to */
/* get the index right. */
- if (tag == RPMTAG_TRIGGERSCRIPTS) {
+ if (tag == RPMTAG_TRIGGERSCRIPTS || tag == RPMTAG_FILETRIGGERSCRIPTS ||
+ tag == RPMTAG_TRANSFILETRIGGERSCRIPTS) {
+ if (tag != RPMTAG_TRIGGERSCRIPTS && *reqargs != '/') {
+ rpmlog(RPMLOG_ERR,
+ _("line %d: file trigger condition must begin with '/': %s"),
+ spec->lineNum, reqargs);
+ goto exit;
+ }
if (progArgc > 1) {
rpmlog(RPMLOG_ERR,
_("line %d: interpreter arguments not allowed in triggers: %s\n"),
@@ -320,10 +412,11 @@ int parseScript(rpmSpec spec, int parsePart)
goto exit;
}
/* Add file/index/prog triple to the trigger file list */
- index = addTriggerIndex(pkg, file, p, progArgv[0], scriptFlags);
+ index = addTriggerIndex(pkg, file, p, progArgv[0], scriptFlags, tag,
+ priority);
/* Generate the trigger tags */
- if (parseRCPOT(spec, pkg, reqargs, reqtag, index, tagflags))
+ if (parseRCPOT(spec, pkg, reqargs, reqtag, index, tagflags, addReqProvPkg, NULL))
goto exit;
} else {
struct rpmtd_s td;
@@ -339,7 +432,7 @@ int parseScript(rpmSpec spec, int parsePart)
td.data = (void *) *progArgv;
td.type = RPM_STRING_TYPE;
} else {
- (void) rpmlibNeedsFeature(pkg->header,
+ (void) rpmlibNeedsFeature(pkg,
"ScriptletInterpreterArgs", "4.0.3-1");
td.data = progArgv;
td.type = RPM_STRING_ARRAY_TYPE;
diff --git a/build/parseSpec.c b/build/parseSpec.c
index 729d4fad9..d0c42a43e 100644
--- a/build/parseSpec.c
+++ b/build/parseSpec.c
@@ -6,6 +6,9 @@
#include "system.h"
#include <errno.h>
+#ifdef HAVE_ICONV
+#include <iconv.h>
+#endif
#include <rpm/rpmtypes.h>
#include <rpm/rpmlib.h> /* RPM_MACHTABLE & related */
@@ -28,7 +31,8 @@ typedef struct OpenFileInfo {
char * fileName;
FILE *fp;
int lineNum;
- char readBuf[BUFSIZ];
+ char *readBuf;
+ size_t readBufLen;
const char * readPtr;
struct OpenFileInfo * next;
} OFI_t;
@@ -60,6 +64,16 @@ static const struct PartRec {
{ PART_TRIGGERIN, LEN_AND_STR("%trigger")},
{ PART_VERIFYSCRIPT, LEN_AND_STR("%verifyscript")},
{ PART_POLICIES, LEN_AND_STR("%sepolicy")},
+ { PART_FILETRIGGERIN, LEN_AND_STR("%filetriggerin")},
+ { PART_FILETRIGGERIN, LEN_AND_STR("%filetrigger")},
+ { PART_FILETRIGGERUN, LEN_AND_STR("%filetriggerun")},
+ { PART_FILETRIGGERPOSTUN, LEN_AND_STR("%filetriggerpostun")},
+ { PART_TRANSFILETRIGGERIN, LEN_AND_STR("%transfiletriggerin")},
+ { PART_TRANSFILETRIGGERIN, LEN_AND_STR("%transfiletrigger")},
+ { PART_TRANSFILETRIGGERUN, LEN_AND_STR("%transfiletriggerun")},
+ { PART_TRANSFILETRIGGERUN, LEN_AND_STR("%transfiletriggerun")},
+ { PART_TRANSFILETRIGGERPOSTUN, LEN_AND_STR("%transfiletriggerpostun")},
+ { PART_EMPTY, LEN_AND_STR("%end")},
{0, 0, 0}
};
@@ -102,11 +116,14 @@ static int matchTok(const char *token, const char *line)
return rc;
}
-void handleComments(char *s)
+int handleComments(char *s)
{
SKIPSPACE(s);
- if (*s == '#')
+ if (*s == '#') {
*s = '\0';
+ return 1;
+ }
+ return 0;
}
/* Push a file to spec's file stack, return the newly pushed entry */
@@ -117,6 +134,8 @@ static OFI_t * pushOFI(rpmSpec spec, const char *fn)
ofi->fp = NULL;
ofi->fileName = xstrdup(fn);
ofi->lineNum = 0;
+ ofi->readBufLen = BUFSIZ;
+ ofi->readBuf = xmalloc(ofi->readBufLen);
ofi->readBuf[0] = '\0';
ofi->readPtr = NULL;
ofi->next = spec->fileStack;
@@ -135,6 +154,7 @@ static OFI_t * popOFI(rpmSpec spec)
if (ofi->fp)
fclose(ofi->fp);
free(ofi->fileName);
+ free(ofi->readBuf);
free(ofi);
}
return spec->fileStack;
@@ -151,8 +171,57 @@ static int restoreFirstChar(rpmSpec spec)
return 0;
}
+static int expandMacrosInSpecBuf(rpmSpec spec, int strip)
+{
+ char *lbuf = NULL;
+ int isComment = 0;
+
+ /* Don't expand macros (eg. %define) in false branch of %if clause */
+ if (!spec->readStack->reading)
+ return 0;
+
+ lbuf = spec->lbuf;
+ SKIPSPACE(lbuf);
+ if (lbuf[0] == '#')
+ isComment = 1;
+
+
+ if (rpmExpandMacros(spec->macros, spec->lbuf, &lbuf, 0) < 0) {
+ rpmlog(RPMLOG_ERR, _("line %d: %s\n"),
+ spec->lineNum, spec->lbuf);
+ return 1;
+ }
+
+ if (strip & STRIP_COMMENTS && isComment) {
+ char *bufA = spec->lbuf;
+ char *bufB = lbuf;
+
+ while (*bufA != '\0' && *bufB != '\0') {
+ if (*bufA == '%' && *(bufA + 1) == '%')
+ bufA++;
+
+ if (*bufA != *bufB)
+ break;
+
+ bufA++;
+ bufB++;
+ }
+
+ if (*bufA != '\0' || *bufB != '\0')
+ rpmlog(RPMLOG_WARNING,
+ _("Macro expanded in comment on line %d: %s\n"),
+ spec->lineNum, bufA);
+ }
+
+ free(spec->lbuf);
+ spec->lbuf = lbuf;
+ spec->lbufSize = strlen(spec->lbuf) + 1;
+
+ return 0;
+}
+
/* Return zero on success, 1 if we need to read more and -1 on errors. */
-static int copyNextLineFromOFI(rpmSpec spec, OFI_t *ofi)
+static int copyNextLineFromOFI(rpmSpec spec, OFI_t *ofi, int strip)
{
/* Expand next line from file into line buffer */
if (!(spec->nextline && *spec->nextline)) {
@@ -203,13 +272,9 @@ static int copyNextLineFromOFI(rpmSpec spec, OFI_t *ofi)
}
spec->lbufOff = 0;
- /* Don't expand macros (eg. %define) in false branch of %if clause */
- if (spec->readStack->reading &&
- expandMacros(spec, spec->macros, spec->lbuf, spec->lbufSize)) {
- rpmlog(RPMLOG_ERR, _("line %d: %s\n"),
- spec->lineNum, spec->lbuf);
- return -1;
- }
+ if (expandMacrosInSpecBuf(spec, strip))
+ return -1;
+
spec->nextline = spec->lbuf;
}
return 0;
@@ -258,7 +323,7 @@ retry:
/* Make sure we have something in the read buffer */
if (!(ofi->readPtr && *(ofi->readPtr))) {
- if (!fgets(ofi->readBuf, BUFSIZ, ofi->fp)) {
+ if (getline(&ofi->readBuf, &ofi->readBufLen, ofi->fp) <= 0) {
/* EOF, remove this file from the stack */
ofi = popOFI(spec);
@@ -280,8 +345,8 @@ retry:
do { \
char *os = s; \
char *exp = rpmExpand(token, NULL); \
- while(*s && !risblank(*s)) s++; \
- while(*s && risblank(*s)) s++; \
+ while (*s && !risblank(*s)) s++; \
+ while (*s && risblank(*s)) s++; \
if (!*s) { \
rpmlog(RPMLOG_ERR, _("%s:%d: Argument expected for %s\n"), ofi->fileName, ofi->lineNum, os); \
free(exp); \
@@ -319,7 +384,7 @@ int readLine(rpmSpec spec, int strip)
ofi = spec->fileStack;
/* Copy next file line into the spec line buffer */
- rc = copyNextLineFromOFI(spec, ofi);
+ rc = copyNextLineFromOFI(spec, ofi, strip);
if (rc > 0) {
if (startLine == 0)
startLine = spec->lineNum;
@@ -349,7 +414,7 @@ int readLine(rpmSpec spec, int strip)
match = !match;
} else if (ISMACROWITHARG(s, "%if")) {
s += 3;
- match = parseExpressionBoolean(spec, s);
+ match = parseExpressionBoolean(s);
if (match < 0) {
rpmlog(RPMLOG_ERR,
_("%s:%d: bad %%if condition\n"),
@@ -385,10 +450,13 @@ int readLine(rpmSpec spec, int strip)
fileName = s+8;
SKIPSPACE(fileName);
endFileName = fileName;
- SKIPNONSPACE(endFileName);
- p = endFileName;
- SKIPSPACE(p);
- if (*fileName == '\0' || *p != '\0') {
+ do {
+ SKIPNONSPACE(endFileName);
+ p = endFileName;
+ SKIPSPACE(p);
+ if (*p != '\0') endFileName = p;
+ } while (*p != '\0');
+ if (*fileName == '\0') {
rpmlog(RPMLOG_ERR, _("%s:%d: malformed %%include statement\n"),
ofi->fileName, ofi->lineNum);
return PART_ERROR;
@@ -453,22 +521,26 @@ static const rpmTagVal sourceTags[] = {
static void initSourceHeader(rpmSpec spec)
{
+ Package sourcePkg = spec->sourcePackage;
struct Source *srcPtr;
- if (spec->sourceHeader)
+ if (headerIsEntry(sourcePkg->header, RPMTAG_NAME))
return;
- spec->sourceHeader = headerNew();
/* Only specific tags are added to the source package header */
- headerCopyTags(spec->packages->header, spec->sourceHeader, sourceTags);
+ headerCopyTags(spec->packages->header, sourcePkg->header, sourceTags);
/* Add the build restrictions */
+ for (int i=0; i<PACKAGE_NUM_DEPS; i++) {
+ rpmdsPutToHeader(sourcePkg->dependencies[i], sourcePkg->header);
+ }
+
{
HeaderIterator hi = headerInitIterator(spec->buildRestrictions);
struct rpmtd_s td;
while (headerNext(hi, &td)) {
if (rpmtdCount(&td) > 0) {
- (void) headerPut(spec->sourceHeader, &td, HEADERPUT_DEFAULT);
+ (void) headerPut(sourcePkg->header, &td, HEADERPUT_DEFAULT);
}
rpmtdFreeData(&td);
}
@@ -476,23 +548,23 @@ static void initSourceHeader(rpmSpec spec)
}
if (spec->BANames && spec->BACount > 0) {
- headerPutStringArray(spec->sourceHeader, RPMTAG_BUILDARCHS,
+ headerPutStringArray(sourcePkg->header, RPMTAG_BUILDARCHS,
spec->BANames, spec->BACount);
}
/* Add tags for sources and patches */
for (srcPtr = spec->sources; srcPtr != NULL; srcPtr = srcPtr->next) {
if (srcPtr->flags & RPMBUILD_ISSOURCE) {
- headerPutString(spec->sourceHeader, RPMTAG_SOURCE, srcPtr->source);
+ headerPutString(sourcePkg->header, RPMTAG_SOURCE, srcPtr->source);
if (srcPtr->flags & RPMBUILD_ISNO) {
- headerPutUint32(spec->sourceHeader, RPMTAG_NOSOURCE,
+ headerPutUint32(sourcePkg->header, RPMTAG_NOSOURCE,
&srcPtr->num, 1);
}
}
if (srcPtr->flags & RPMBUILD_ISPATCH) {
- headerPutString(spec->sourceHeader, RPMTAG_PATCH, srcPtr->source);
+ headerPutString(sourcePkg->header, RPMTAG_PATCH, srcPtr->source);
if (srcPtr->flags & RPMBUILD_ISNO) {
- headerPutUint32(spec->sourceHeader, RPMTAG_NOPATCH,
+ headerPutUint32(sourcePkg->header, RPMTAG_NOPATCH,
&srcPtr->num, 1);
}
}
@@ -500,19 +572,17 @@ static void initSourceHeader(rpmSpec spec)
}
/* Add extra provides to package. */
-static void addPackageProvides(Header h)
+void addPackageProvides(Package pkg)
{
const char *arch, *name;
char *evr, *isaprov;
rpmsenseFlags pflags = RPMSENSE_EQUAL;
/* <name> = <evr> provide */
- name = headerGetString(h, RPMTAG_NAME);
- arch = headerGetString(h, RPMTAG_ARCH);
- evr = headerGetAsString(h, RPMTAG_EVR);
- headerPutString(h, RPMTAG_PROVIDENAME, name);
- headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
- headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1);
+ name = headerGetString(pkg->header, RPMTAG_NAME);
+ arch = headerGetString(pkg->header, RPMTAG_ARCH);
+ evr = headerGetAsString(pkg->header, RPMTAG_EVR);
+ addReqProv(pkg, RPMTAG_PROVIDENAME, name, evr, pflags, 0);
/*
* <name>(<isa>) = <evr> provide
@@ -521,9 +591,7 @@ static void addPackageProvides(Header h)
*/
isaprov = rpmExpand(name, "%{?_isa}", NULL);
if (!rstreq(arch, "noarch") && !rstreq(name, isaprov)) {
- headerPutString(h, RPMTAG_PROVIDENAME, isaprov);
- headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
- headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1);
+ addReqProv(pkg, RPMTAG_PROVIDENAME, isaprov, evr, pflags, 0);
}
free(isaprov);
free(evr);
@@ -545,8 +613,13 @@ static void addTargets(Package Pkgs)
headerPutString(pkg->header, RPMTAG_PLATFORM, platform);
headerPutString(pkg->header, RPMTAG_OPTFLAGS, optflags);
+ /* Add manual dependencies early for rpmspec etc to look at */
+ addPackageProvides(pkg);
+ for (int i=0; i<PACKAGE_NUM_DEPS; i++) {
+ rpmdsPutToHeader(pkg->dependencies[i], pkg->header);
+ }
+
pkg->ds = rpmdsThis(pkg->header, RPMTAG_REQUIRENAME, RPMSENSE_EQUAL);
- addPackageProvides(pkg->header);
}
free(platform);
free(arch);
@@ -554,10 +627,134 @@ static void addTargets(Package Pkgs)
free(optflags);
}
+rpmRC checkForEncoding(Header h, int addtag)
+{
+ rpmRC rc = RPMRC_OK;
+#if HAVE_ICONV
+ const char *encoding = "utf-8";
+ rpmTagVal tag;
+ iconv_t ic;
+ char *dest = NULL;
+ size_t destlen = 0;
+ int strict = rpmExpandNumeric("%{_invalid_encoding_terminates_build}");
+ HeaderIterator hi = headerInitIterator(h);
+
+ ic = iconv_open(encoding, encoding);
+ if (ic == (iconv_t) -1) {
+ rpmlog(RPMLOG_WARNING,
+ _("encoding %s not supported by system\n"), encoding);
+ goto exit;
+ }
+
+ while ((tag = headerNextTag(hi)) != RPMTAG_NOT_FOUND) {
+ struct rpmtd_s td;
+ const char *src = NULL;
+
+ if (rpmTagGetClass(tag) != RPM_STRING_CLASS)
+ continue;
+
+ headerGet(h, tag, &td, (HEADERGET_RAW|HEADERGET_MINMEM));
+ while ((src = rpmtdNextString(&td)) != NULL) {
+ size_t srclen = strlen(src);
+ size_t outlen, inlen = srclen;
+ char *out, *in = (char *) src;
+
+ if (destlen < srclen) {
+ destlen = srclen * 2;
+ dest = xrealloc(dest, destlen);
+ }
+ out = dest;
+ outlen = destlen;
+
+ /* reset conversion state */
+ iconv(ic, NULL, &inlen, &out, &outlen);
+
+ if (iconv(ic, &in, &inlen, &out, &outlen) == (size_t) -1) {
+ rpmlog(strict ? RPMLOG_ERR : RPMLOG_WARNING,
+ _("Package %s: invalid %s encoding in %s: %s - %s\n"),
+ headerGetString(h, RPMTAG_NAME),
+ encoding, rpmTagGetName(tag), src, strerror(errno));
+ rc = RPMRC_FAIL;
+ }
+
+ }
+ rpmtdFreeData(&td);
+ }
+
+ /* Stomp "known good utf" mark in header if requested */
+ if (rc == RPMRC_OK && addtag)
+ headerPutString(h, RPMTAG_ENCODING, encoding);
+ if (!strict)
+ rc = RPMRC_OK;
+
+exit:
+ if (ic != (iconv_t) -1)
+ iconv_close(ic);
+ headerFreeIterator(hi);
+ free(dest);
+#endif /* HAVE_ICONV */
+
+ return rc;
+}
+
+static int parseEmpty(rpmSpec spec, int prevParsePart)
+{
+ int res = PART_ERROR;
+ int nextPart, rc;
+ char *line;
+
+ line = spec->line + sizeof("%end") - 1;
+ SKIPSPACE(line);
+ if (line[0] != '\0') {
+ rpmlog(RPMLOG_ERR,
+ _("line %d: %%end doesn't take any arguments: %s\n"),
+ spec->lineNum, spec->line);
+ goto exit;
+ }
+
+ if (prevParsePart == PART_EMPTY) {
+ rpmlog(RPMLOG_ERR,
+ _("line %d: %%end not expected here, no section to close: %s\n"),
+ spec->lineNum, spec->line);
+ goto exit;
+ }
+
+ if ((rc = readLine(spec, STRIP_TRAILINGSPACE|STRIP_COMMENTS)) > 0) {
+ nextPart = PART_NONE;
+ } else if (rc < 0) {
+ goto exit;
+ } else {
+ while (! (nextPart = isPart(spec->line))) {
+ line = spec->line;
+ SKIPSPACE(line);
+
+ if (line[0] != '\0') {
+ rpmlog(RPMLOG_ERR,
+ _("line %d doesn't belong to any section: %s\n"),
+ spec->lineNum, spec->line);
+ goto exit;
+ }
+ if ((rc = readLine(spec, STRIP_TRAILINGSPACE|STRIP_COMMENTS)) > 0) {
+ nextPart = PART_NONE;
+ break;
+ } else if (rc < 0) {
+ goto exit;
+ }
+ }
+ }
+
+ res = nextPart;
+
+exit:
+ return res;
+}
+
static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
const char *buildRoot, int recursing)
{
int parsePart = PART_PREAMBLE;
+ int prevParsePart = PART_EMPTY;
+ int storedParsePart;
int initialPackage = 1;
rpmSpec spec;
@@ -572,8 +769,8 @@ static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
} else {
spec->buildRoot = rpmGetPath("%{?buildroot:%{buildroot}}", NULL);
}
- addMacro(NULL, "_docdir", NULL, "%{_defaultdocdir}", RMIL_SPEC);
- addMacro(NULL, "_licensedir", NULL, "%{_defaultlicensedir}", RMIL_SPEC);
+ rpmPushMacro(NULL, "_docdir", NULL, "%{_defaultdocdir}", RMIL_SPEC);
+ rpmPushMacro(NULL, "_licensedir", NULL, "%{_defaultlicensedir}", RMIL_SPEC);
spec->recursing = recursing;
spec->flags = flags;
@@ -583,11 +780,15 @@ static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
while (parsePart != PART_NONE) {
int goterror = 0;
+ storedParsePart = parsePart;
switch (parsePart) {
case PART_ERROR: /* fallthrough */
default:
goterror = 1;
break;
+ case PART_EMPTY:
+ parsePart = parseEmpty(spec, prevParsePart);
+ break;
case PART_PREAMBLE:
parsePart = parsePreamble(spec, initialPackage);
initialPackage = 0;
@@ -619,6 +820,12 @@ static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
case PART_TRIGGERIN:
case PART_TRIGGERUN:
case PART_TRIGGERPOSTUN:
+ case PART_FILETRIGGERIN:
+ case PART_FILETRIGGERUN:
+ case PART_FILETRIGGERPOSTUN:
+ case PART_TRANSFILETRIGGERIN:
+ case PART_TRANSFILETRIGGERUN:
+ case PART_TRANSFILETRIGGERPOSTUN:
parsePart = parseScript(spec, parsePart);
break;
@@ -635,6 +842,7 @@ static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
case PART_BUILDARCHITECTURES:
break;
}
+ prevParsePart = storedParsePart;
if (goterror || parsePart >= PART_LAST) {
goto errxit;
@@ -654,13 +862,13 @@ static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
/* Skip if not arch is not compatible. */
if (!rpmMachineScore(RPM_MACHTABLE_BUILDARCH, spec->BANames[x]))
continue;
- addMacro(NULL, "_target_cpu", NULL, spec->BANames[x], RMIL_RPMRC);
+ rpmPushMacro(NULL, "_target_cpu", NULL, spec->BANames[x], RMIL_RPMRC);
spec->BASpecs[index] = parseSpec(specFile, flags, buildRoot, 1);
if (spec->BASpecs[index] == NULL) {
spec->BACount = index;
goto errxit;
}
- delMacro(NULL, "_target_cpu");
+ rpmPopMacro(NULL, "_target_cpu");
index++;
}
@@ -710,6 +918,18 @@ static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags,
/* Add arch, os and platform, self-provides etc for each package */
addTargets(spec->packages);
+ /* Check for encoding in each package unless disabled */
+ if (!(spec->flags & RPMSPEC_NOUTF8)) {
+ int badenc = 0;
+ for (Package pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
+ if (checkForEncoding(pkg->header, 0) != RPMRC_OK) {
+ badenc = 1;
+ }
+ }
+ if (badenc)
+ goto errxit;
+ }
+
closeSpec(spec);
exit:
/* Assemble source header from parsed components */
diff --git a/build/reqprov.c b/build/reqprov.c
index bc2f7ea26..5fa0a1c6b 100644
--- a/build/reqprov.c
+++ b/build/reqprov.c
@@ -7,124 +7,49 @@
#include <rpm/header.h>
#include <rpm/rpmstring.h>
-#include "build/rpmbuild_misc.h"
+#include <rpm/rpmlog.h>
+#include "build/rpmbuild_internal.h"
#include "debug.h"
-static int isNewDep(Header h, rpmTagVal nametag,
- const char *N, const char *EVR, rpmsenseFlags Flags,
- rpmTagVal indextag, uint32_t index)
-{
- int isnew = 1;
- struct rpmtd_s idx;
- rpmds ads = rpmdsNew(h, nametag, 0);
- rpmds bds = rpmdsSingle(nametag, N, EVR, Flags);
-
- if (indextag) {
- headerGet(h, indextag, &idx, HEADERGET_MINMEM);
- }
-
- /* XXX there's no guarantee the ds is sorted here so rpmdsFind() wont do */
- rpmdsInit(ads);
- while (isnew && rpmdsNext(ads) >= 0) {
- if (!rstreq(rpmdsN(ads), rpmdsN(bds))) continue;
- if (!rstreq(rpmdsEVR(ads), rpmdsEVR(bds))) continue;
- if (rpmdsFlags(ads) != rpmdsFlags(bds)) continue;
- if (indextag && rpmtdSetIndex(&idx, rpmdsIx(ads)) >= 0 &&
- rpmtdGetNumber(&idx) != index) continue;
- isnew = 0;
- }
-
- if (indextag) {
- rpmtdFreeData(&idx);
- }
- rpmdsFree(ads);
- rpmdsFree(bds);
- return isnew;
-}
-
-int addReqProv(Header h, rpmTagVal tagN,
+int addReqProv(Package pkg, rpmTagVal tagN,
const char * N, const char * EVR, rpmsenseFlags Flags,
uint32_t index)
{
- rpmTagVal versiontag = 0;
- rpmTagVal flagtag = 0;
- rpmTagVal indextag = 0;
- rpmsenseFlags extra = RPMSENSE_ANY;
+ rpmds newds, *dsp = NULL;
- switch (tagN) {
- case RPMTAG_PROVIDENAME:
- versiontag = RPMTAG_PROVIDEVERSION;
- flagtag = RPMTAG_PROVIDEFLAGS;
- extra = Flags & RPMSENSE_FIND_PROVIDES;
- break;
- case RPMTAG_OBSOLETENAME:
- versiontag = RPMTAG_OBSOLETEVERSION;
- flagtag = RPMTAG_OBSOLETEFLAGS;
- break;
- case RPMTAG_CONFLICTNAME:
- versiontag = RPMTAG_CONFLICTVERSION;
- flagtag = RPMTAG_CONFLICTFLAGS;
- break;
- case RPMTAG_ORDERNAME:
- versiontag = RPMTAG_ORDERVERSION;
- flagtag = RPMTAG_ORDERFLAGS;
- break;
- case RPMTAG_TRIGGERNAME:
- versiontag = RPMTAG_TRIGGERVERSION;
- flagtag = RPMTAG_TRIGGERFLAGS;
- indextag = RPMTAG_TRIGGERINDEX;
- extra = Flags & RPMSENSE_TRIGGER;
- break;
- case RPMTAG_SUGGESTSNAME:
- versiontag = RPMTAG_SUGGESTSVERSION;
- flagtag = RPMTAG_SUGGESTSFLAGS;
- extra = Flags & _ALL_REQUIRES_MASK;
- break;
- case RPMTAG_ENHANCESNAME:
- versiontag = RPMTAG_ENHANCESVERSION;
- flagtag = RPMTAG_ENHANCESFLAGS;
- extra = Flags & _ALL_REQUIRES_MASK;
- break;
- case RPMTAG_REQUIRENAME:
- default:
- tagN = RPMTAG_REQUIRENAME;
- versiontag = RPMTAG_REQUIREVERSION;
- flagtag = RPMTAG_REQUIREFLAGS;
- extra = Flags & _ALL_REQUIRES_MASK;
- }
+ dsp = packageDependencies(pkg, tagN);
/* rpmlib() dependency sanity: only requires permitted, ensure sense bit */
if (rstreqn(N, "rpmlib(", sizeof("rpmlib(")-1)) {
if (tagN != RPMTAG_REQUIRENAME) return 1;
- extra |= RPMSENSE_RPMLIB;
+ Flags |= RPMSENSE_RPMLIB;
}
- Flags = (Flags & RPMSENSE_SENSEMASK) | extra;
+ newds = rpmdsSinglePoolTix(pkg->pool, tagN, N, EVR,
+ rpmSanitizeDSFlags(tagN, Flags), index);
- if (EVR == NULL)
- EVR = "";
-
- /* Avoid adding duplicate dependencies. */
- if (isNewDep(h, tagN, N, EVR, Flags, indextag, index)) {
- headerPutString(h, tagN, N);
- headerPutString(h, versiontag, EVR);
- headerPutUint32(h, flagtag, &Flags, 1);
- if (indextag) {
- headerPutUint32(h, indextag, &index, 1);
- }
- }
+ rpmdsMerge(dsp, newds);
+ rpmdsFree(newds);
return 0;
}
-int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR)
+rpmRC addReqProvPkg(void *cbdata, rpmTagVal tagN,
+ const char * N, const char *EVR, rpmsenseFlags Flags,
+ int index)
+{
+ Package pkg = cbdata;
+ return addReqProv(pkg, tagN, N, EVR, Flags, index) ? RPMRC_FAIL : RPMRC_OK;
+}
+
+int rpmlibNeedsFeature(Package pkg, const char * feature, const char * featureEVR)
{
char *reqname = NULL;
int res;
rasprintf(&reqname, "rpmlib(%s)", feature);
- res = addReqProv(h, RPMTAG_REQUIRENAME, reqname, featureEVR,
+ res = addReqProv(pkg, RPMTAG_REQUIRENAME, reqname, featureEVR,
RPMSENSE_RPMLIB|(RPMSENSE_LESS|RPMSENSE_EQUAL), 0);
free(reqname);
diff --git a/build/rpmbuild.h b/build/rpmbuild.h
index 51a735d3d..4777f587e 100644
--- a/build/rpmbuild.h
+++ b/build/rpmbuild.h
@@ -15,7 +15,8 @@ extern "C" {
#endif
/** \ingroup rpmbuild
- * Bit(s) to control rpmSpecBuild() operation.
+ * Bit(s) to control rpmSpecBuild() operation. Also used as argument to
+ * rpmSpecGetSection and rpmSpecPkgGetSection.
*/
enum rpmBuildFlags_e {
RPMBUILD_NONE = 0,
@@ -31,6 +32,9 @@ enum rpmBuildFlags_e {
RPMBUILD_RMBUILD = (1 << 9), /*!< Remove build sub-tree. */
RPMBUILD_STRINGBUF = (1 << 10), /*!< Internal use only */
RPMBUILD_RMSPEC = (1 << 11), /*!< Remove spec file. */
+ RPMBUILD_FILE_FILE = (1 << 16), /*!< rpmSpecPkgGetSection: %files -f */
+ RPMBUILD_FILE_LIST = (1 << 17), /*!< rpmSpecPkgGetSection: %files */
+ RPMBUILD_POLICY = (1 << 18), /*!< rpmSpecPkgGetSection: %policy */
RPMBUILD_NOBUILD = (1 << 31) /*!< Don't execute or package. */
};
diff --git a/build/rpmbuild_internal.h b/build/rpmbuild_internal.h
index fb6198d76..86a4f6274 100644
--- a/build/rpmbuild_internal.h
+++ b/build/rpmbuild_internal.h
@@ -3,8 +3,22 @@
#include <rpm/rpmbuild.h>
#include <rpm/rpmutil.h>
+#include <rpm/rpmstrpool.h>
#include "build/rpmbuild_misc.h"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+#define HASHTYPE fileRenameHash
+#define HTKEYTYPE const char *
+#define HTDATATYPE const char *
+#include "lib/rpmhash.H"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+
+#define WHITELIST_NAME ".-_+%{}"
+
struct TriggerFileEntry {
int index;
char * fileName;
@@ -12,6 +26,7 @@ struct TriggerFileEntry {
char * prog;
uint32_t flags;
struct TriggerFileEntry * next;
+ uint32_t priority;
};
typedef struct ReadLevelEntry {
@@ -36,6 +51,9 @@ typedef struct Package_s * Package;
* The structure used to store values parsed from a spec file.
*/
struct rpmSpec_s {
+ char * buildHost;
+ rpm_time_t buildTime;
+
char * specFile; /*!< Name of the spec file. */
char * buildRoot;
char * buildSubdir;
@@ -66,10 +84,10 @@ struct rpmSpec_s {
char * sourceRpmName;
unsigned char * sourcePkgId;
- Header sourceHeader;
- rpmfi sourceCpioList;
+ Package sourcePackage;
rpmMacroContext macros;
+ rpmstrPool pool;
StringBuf prep; /*!< %prep scriptlet. */
StringBuf build; /*!< %build scriptlet. */
@@ -82,13 +100,19 @@ struct rpmSpec_s {
Package packages; /*!< Package list. */
};
+#define PACKAGE_NUM_DEPS 12
+
/** \ingroup rpmbuild
* The structure used to store values for a package.
*/
struct Package_s {
+ rpmsid name;
+ rpmstrPool pool;
Header header;
rpmds ds; /*!< Requires: N = EVR */
- rpmfi cpioList;
+ rpmds dependencies[PACKAGE_NUM_DEPS];
+ rpmfiles cpioList;
+ ARGV_t dpaths;
struct Source * icon;
@@ -104,9 +128,14 @@ struct Package_s {
char * verifyFile; /*!< %verifyscript scriptlet. */
struct TriggerFileEntry * triggerFiles;
+ struct TriggerFileEntry * fileTriggerFiles;
+ struct TriggerFileEntry * transFileTriggerFiles;
ARGV_t fileFile;
ARGV_t fileList; /* If NULL, package will not be written */
+ ARGV_t fileExcludeList;
+ ARGV_t removePostfixes;
+ fileRenameHash fileRenameMap;
ARGV_t policyList;
Package next;
@@ -114,6 +143,7 @@ struct Package_s {
#define PART_SUBNAME 0
#define PART_NAME 1
+#define PART_QUIET 2
/** \ingroup rpmbuild
* rpmSpec file parser states.
@@ -145,7 +175,14 @@ typedef enum rpmParseState_e {
PART_TRIGGERPOSTUN = 30+PART_BASE, /*!< */
PART_TRIGGERPREIN = 31+PART_BASE, /*!< */
PART_POLICIES = 32+PART_BASE, /*!< */
- PART_LAST = 33+PART_BASE /*!< */
+ PART_FILETRIGGERIN = 33+PART_BASE, /*!< */
+ PART_FILETRIGGERUN = 34+PART_BASE, /*!< */
+ PART_FILETRIGGERPOSTUN = 35+PART_BASE, /*!< */
+ PART_TRANSFILETRIGGERIN = 36+PART_BASE, /*!< */
+ PART_TRANSFILETRIGGERUN = 37+PART_BASE, /*!< */
+ PART_TRANSFILETRIGGERPOSTUN = 38+PART_BASE, /*!< */
+ PART_EMPTY = 39+PART_BASE, /*!< */
+ PART_LAST = 40+PART_BASE /*!< */
} rpmParseState;
@@ -259,12 +296,15 @@ int parseScript(rpmSpec spec, int parsePart);
* Check for inappropriate characters. All alphanums are considered sane.
* @param spec spec
* @param field string to check
- * @param fsize size of string to check
* @param whitelist string of permitted characters
* @return RPMRC_OK if OK
*/
RPM_GNUC_INTERNAL
-rpmRC rpmCharCheck(rpmSpec spec, const char *field, size_t fsize, const char *whitelist);
+rpmRC rpmCharCheck(rpmSpec spec, const char *field, const char *whitelist);
+
+typedef rpmRC (*addReqProvFunction) (void *cbdata, rpmTagVal tagN,
+ const char * N, const char * EVR, rpmsenseFlags Flags,
+ int index);
/** \ingroup rpmbuild
* Parse dependency relations from spec file and/or autogenerated output buffer.
@@ -274,20 +314,21 @@ rpmRC rpmCharCheck(rpmSpec spec, const char *field, size_t fsize, const char *wh
* @param tagN tag, identifies type of dependency
* @param index (0 always)
* @param tagflags dependency flags already known from context
+ * @param cb Callback for adding dependency (nullable)
+ * @param cbdata Callback data (@pkg if NULL)
* @return RPMRC_OK on success, RPMRC_FAIL on failure
*/
RPM_GNUC_INTERNAL
rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char * field, rpmTagVal tagN,
- int index, rpmsenseFlags tagflags);
+ int index, rpmsenseFlags tagflags, addReqProvFunction cb, void *cbdata);
/** \ingroup rpmbuild
* Evaluate boolean expression.
- * @param spec spec file control structure
* @param expr expression to parse
* @return
*/
RPM_GNUC_INTERNAL
-int parseExpressionBoolean(rpmSpec spec, const char * expr);
+int parseExpressionBoolean(const char * expr);
/** \ingroup rpmbuild
* Run a build script, assembled from spec file scriptlet section.
@@ -317,23 +358,35 @@ rpmRC lookupPackage(rpmSpec spec, const char * name, int flag,
/** \ingroup rpmbuild
* Create and initialize package control structure.
- * @param spec spec file control structure
+ * @param name package name for sub-packages (or NULL)
+ * @param pool string pool
+ * @param pkglist package list pointer to append to (or NULL)
* @return package control structure
*/
RPM_GNUC_INTERNAL
-Package newPackage(rpmSpec spec);
+Package newPackage(const char *name, rpmstrPool pool, Package * pkglist);
+
+
+/** \ingroup rpmbuild
+ * Return rpmds containing the dependencies of a given type
+ * @param pkg package
+ * @param tag name tag denominating the dependency
+ * @return pointer to dependency set
+ */
+RPM_GNUC_INTERNAL
+rpmds * packageDependencies(Package pkg, rpmTagVal tag);
/** \ingroup rpmbuild
* Post-build processing for binary package(s).
* @param spec spec file control structure
* @param pkgFlags bit(s) to control package generation
- * @param installSpecialDoc
+ * @param didInstall was %install executed?
* @param test don't execute scripts or package if testing
* @return 0 on success
*/
RPM_GNUC_INTERNAL
rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
- int installSpecialDoc, int test);
+ int didInstall, int test);
/** \ingroup rpmfc
* Generate package dependencies.
@@ -393,6 +446,59 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating);
RPM_GNUC_INTERNAL
rpmRC packageSources(rpmSpec spec, char **cookie);
+RPM_GNUC_INTERNAL
+int addLangTag(rpmSpec spec, Header h, rpmTagVal tag,
+ const char *field, const char *lang);
+
+/** \ingroup rpmbuild
+ * Add dependency to package, filtering duplicates.
+ * @param pkg package
+ * @param tagN tag, identifies type of dependency
+ * @param N (e.g. Requires: foo < 0:1.2-3, "foo")
+ * @param EVR (e.g. Requires: foo < 0:1.2-3, "0:1.2-3")
+ * @param Flags (e.g. Requires: foo < 0:1.2-3, both "Requires:" and "<")
+ * @param index (# trigger script for triggers, 0 for others)
+ * @return 0 on success, 1 on error
+ */
+RPM_GNUC_INTERNAL
+int addReqProv(Package pkg, rpmTagVal tagN,
+ const char * N, const char * EVR, rpmsenseFlags Flags,
+ uint32_t index);
+
+RPM_GNUC_INTERNAL
+rpmRC addReqProvPkg(void *cbdata, rpmTagVal tagN,
+ const char * N, const char * EVR, rpmsenseFlags Flags,
+ int index);
+
+/** \ingroup rpmbuild
+ * Add self-provides to package.
+ * @param pkg package
+ */
+RPM_GNUC_INTERNAL
+void addPackageProvides(Package pkg);
+
+/** \ingroup rpmbuild
+ * Add rpmlib feature dependency.
+ * @param pkg package
+ * @param feature rpm feature name (i.e. "rpmlib(Foo)" for feature Foo)
+ * @param featureEVR rpm feature epoch/version/release
+ * @return 0 always
+ */
+RPM_GNUC_INTERNAL
+int rpmlibNeedsFeature(Package pkg, const char * feature, const char * featureEVR);
+
+RPM_GNUC_INTERNAL
+rpmRC checkForEncoding(Header h, int addtag);
+
+
+/** \ingroup rpmbuild
+ * Copy tags inherited by subpackages from the source header to the target header
+ * @param h target header
+ * @param fromh source header
+ */
+RPM_GNUC_INTERNAL
+void copyInheritedTags(Header h, Header fromh);
+
#ifdef __cplusplus
}
#endif
diff --git a/build/rpmbuild_misc.h b/build/rpmbuild_misc.h
index 9665c975f..843dfea78 100644
--- a/build/rpmbuild_misc.h
+++ b/build/rpmbuild_misc.h
@@ -12,9 +12,10 @@ extern "C" {
/** \ingroup rpmbuild
* Truncate comment lines.
* @param s skip white space, truncate line at '#'
+ * @return 1 on comment lines, 0 otherwise
*/
RPM_GNUC_INTERNAL
-void handleComments(char * s);
+int handleComments(char * s);
/** \ingroup rpmstring
*/
@@ -62,31 +63,6 @@ void appendStringBufAux(StringBuf sb, const char * s, int nl);
RPM_GNUC_INTERNAL
uint32_t parseUnsignedNum(const char * line, uint32_t * res);
-/** \ingroup rpmbuild
- * Add dependency to header, filtering duplicates.
- * @param h header
- * @param tagN tag, identifies type of dependency
- * @param N (e.g. Requires: foo < 0:1.2-3, "foo")
- * @param EVR (e.g. Requires: foo < 0:1.2-3, "0:1.2-3")
- * @param Flags (e.g. Requires: foo < 0:1.2-3, both "Requires:" and "<")
- * @param index (0 always)
- * @return 0 on success, 1 on error
- */
-RPM_GNUC_INTERNAL
-int addReqProv(Header h, rpmTagVal tagN,
- const char * N, const char * EVR, rpmsenseFlags Flags,
- uint32_t index);
-
-/** \ingroup rpmbuild
- * Add rpmlib feature dependency.
- * @param h header
- * @param feature rpm feature name (i.e. "rpmlib(Foo)" for feature Foo)
- * @param featureEVR rpm feature epoch/version/release
- * @return 0 always
- */
-RPM_GNUC_INTERNAL
-int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR);
-
#ifdef __cplusplus
}
#endif
diff --git a/build/rpmfc.c b/build/rpmfc.c
index f8e340288..2fbfc69ab 100644
--- a/build/rpmfc.c
+++ b/build/rpmfc.c
@@ -1,6 +1,7 @@
#include "system.h"
#include <errno.h>
+#include <libgen.h>
#include <sys/select.h>
#include <sys/wait.h>
#include <signal.h>
@@ -16,6 +17,7 @@
#include <rpm/rpmfi.h>
#include <rpm/rpmstrpool.h>
+#include "lib/rpmfi_internal.h" /* rpmfiles stuff for now */
#include "build/rpmbuild_internal.h"
#include "debug.h"
@@ -32,13 +34,24 @@ typedef struct rpmfcAttr_s {
struct matchRule excl;
} * rpmfcAttr;
+typedef struct {
+ int fileIx;
+ rpmds dep;
+} rpmfcFileDep;
+
+typedef struct {
+ rpmfcFileDep *data;
+ int size;
+ int alloced;
+} rpmfcFileDeps;
+
/**
*/
struct rpmfc_s {
+ Package pkg;
int nfiles; /*!< no. of files */
int fknown; /*!< no. of classified files */
int fwhite; /*!< no. of "white" files */
- int ix; /*!< current file index */
int skipProv; /*!< Don't auto-generate Provides:? */
int skipReq; /*!< Don't auto-generate Requires:? */
char *buildRoot; /*!< (Build) root dir */
@@ -54,11 +67,9 @@ struct rpmfc_s {
ARGI_t fddictn; /*!< (no. files) file depends dictionary no. entries */
ARGI_t ddictx; /*!< (no. dependencies) file->dependency mapping */
rpmstrPool cdict; /*!< file class dictionary */
- rpmstrPool ddict; /*!< file depends dictionary */
+ rpmfcFileDeps fileDeps; /*!< file dependency mapping */
- rpmds provides; /*!< (no. provides) package provides */
- rpmds requires; /*!< (no. requires) package requires */
- rpmds supplements; /*!< (no. supplements) package supplements */
+ rpmstrPool pool; /*!< general purpose string storage */
};
struct rpmfcTokens_s {
@@ -87,22 +98,62 @@ static void ruleFree(struct matchRule *rule)
argvFree(rule->flags);
}
-static char *rpmfcAttrMacro(const char *name,
- const char *attr_prefix, const char *attr)
+static char *rpmfcAttrMacroV(const char *arg, va_list args)
{
- char *ret;
- if (attr_prefix && attr_prefix[0] != '\0')
- ret = rpmExpand("%{?__", name, "_", attr_prefix, "_", attr, "}", NULL);
- else
- ret = rpmExpand("%{?__", name, "_", attr, "}", NULL);
- return rstreq(ret, "") ? _free(ret) : ret;
+ const char *s;
+ int blen;
+ char *buf = NULL, *obuf;
+ char *pe;
+ va_list args2;
+
+ if (arg == NULL || rstreq(arg, ""))
+ return NULL;
+
+ va_copy(args2, args);
+ blen = sizeof("%{?_") - 1;
+ for (s = arg; s != NULL; s = va_arg(args, const char *)) {
+ blen += sizeof("_") - 1 + strlen(s);
+ }
+ blen += sizeof("}") - 1;
+
+ buf = xmalloc(blen + 1);
+
+ pe = buf;
+ pe = stpcpy(pe, "%{?_");
+ for (s = arg; s != NULL; s = va_arg(args2, const char *)) {
+ *pe++ = '_';
+ pe = stpcpy(pe, s);
+ }
+ va_end(args2);
+ *pe++ = '}';
+ *pe = '\0';
+
+ obuf = rpmExpand(buf, NULL);
+ free(buf);
+
+ return rstreq(obuf, "") ? _free(obuf) : obuf;
}
-static regex_t *rpmfcAttrReg(const char *name,
- const char *attr_prefix, const char *attr)
+static char *rpmfcAttrMacro(const char *arg, ...)
+{
+ va_list args;
+ char *s;
+
+ va_start(args, arg);
+ s = rpmfcAttrMacroV(arg, args);
+ va_end(args);
+ return s;
+}
+
+static regex_t *rpmfcAttrReg(const char *arg, ...)
{
regex_t *reg = NULL;
- char *pattern = rpmfcAttrMacro(name, attr_prefix, attr);
+ char *pattern;
+ va_list args;
+
+ va_start(args, arg);
+ pattern = rpmfcAttrMacroV(arg, args);
+ va_end(args);
if (pattern) {
reg = xcalloc(1, sizeof(*reg));
if (regcomp(reg, pattern, REG_EXTENDED) != 0) {
@@ -122,10 +173,19 @@ static rpmfcAttr rpmfcAttrNew(const char *name)
attr->name = xstrdup(name);
for (struct matchRule **rule = rules; rule && *rule; rule++) {
const char *prefix = (*rule == &attr->incl) ? NULL : "exclude";
- char *flags = rpmfcAttrMacro(name, prefix, "flags");
+ char *flags;
+
+ if (prefix) {
+ flags = rpmfcAttrMacro(name, prefix, "flags", NULL);
- (*rule)->path = rpmfcAttrReg(name, prefix, "path");
- (*rule)->magic = rpmfcAttrReg(name, prefix, "magic");
+ (*rule)->path = rpmfcAttrReg(name, prefix, "path", NULL);
+ (*rule)->magic = rpmfcAttrReg(name, prefix, "magic", NULL);
+ } else {
+ flags = rpmfcAttrMacro(name, "flags", NULL);
+
+ (*rule)->path = rpmfcAttrReg(name, "path", NULL);
+ (*rule)->magic = rpmfcAttrReg(name, "magic", NULL);
+ }
(*rule)->flags = argvSplitString(flags, ",", ARGV_SKIPEMPTY);
argvSort((*rule)->flags, NULL);
@@ -163,16 +223,17 @@ static int rpmfcExpandAppend(ARGV_t * argvp, ARGV_const_t av)
return 0;
}
-static rpmds rpmdsSingleNS(rpmTagVal tagN, const char *namespace,
+static rpmds rpmdsSingleNS(rpmstrPool pool,
+ rpmTagVal tagN, const char *namespace,
const char * N, const char * EVR, rpmsenseFlags Flags)
{
rpmds ds = NULL;
if (namespace) {
char *NSN = rpmExpand(namespace, "(", N, ")", NULL);
- ds = rpmdsSingle(tagN, NSN, EVR, Flags);
+ ds = rpmdsSinglePool(pool, tagN, NSN, EVR, Flags);
free(NSN);
} else {
- ds = rpmdsSingle(tagN, N, EVR, Flags);
+ ds = rpmdsSinglePool(pool, tagN, N, EVR, Flags);
}
return ds;
}
@@ -208,8 +269,6 @@ static StringBuf getOutputFrom(ARGV_t argv,
child = fork();
if (child == 0) {
- /* NSPR messes with SIGPIPE, reset to default for the kids */
- signal(SIGPIPE, SIG_DFL);
close(toProg[1]);
close(fromProg[0]);
@@ -369,6 +428,12 @@ int rpmfcExec(ARGV_const_t av, StringBuf sb_stdin, StringBuf * sb_stdoutp,
buf_stdin_len = strlen(buf_stdin);
}
+ if (_rpmfc_debug) {
+ char *cmd = argvJoin(xav, " ");
+ rpmlog(RPMLOG_DEBUG, "Executing %s on %s\n", cmd, buf_stdin);
+ free(cmd);
+ }
+
/* Read output from exec'd helper. */
sb = getOutputFrom(xav, buf_stdin, buf_stdin_len, failnonzero, buildRoot);
@@ -397,15 +462,15 @@ static void argvAddUniq(ARGV_t * argvp, const char * key)
#define hasAttr(_a, _n) (argvSearch((_a), (_n), NULL) != NULL)
-static void rpmfcAddFileDep(rpmstrPool ddict, int ix, rpmds ds, char deptype)
+static void rpmfcAddFileDep(rpmfcFileDeps *fileDeps, rpmds ds, int ix)
{
- if (ds) {
- char *key = NULL;
- rasprintf(&key, "%08d%c %s %s 0x%08x", ix, deptype,
- rpmdsN(ds), rpmdsEVR(ds), rpmdsFlags(ds));
- rpmstrPoolId(ddict, key, 1);
- free(key);
+ if (fileDeps->size == fileDeps->alloced) {
+ fileDeps->alloced <<= 2;
+ fileDeps->data = xrealloc(fileDeps->data,
+ fileDeps->alloced * sizeof(fileDeps->data[0]));
}
+ fileDeps->data[fileDeps->size].fileIx = ix;
+ fileDeps->data[fileDeps->size++].dep = ds;
}
static ARGV_t runCmd(const char *nsdep, const char *depname,
@@ -424,7 +489,7 @@ static ARGV_t runCmd(const char *nsdep, const char *depname,
appendLineStringBuf(sb_stdin, fn);
if (rpmfcExec(av, sb_stdin, &sb_stdout, 0, buildRoot) == 0) {
- argvSplit(&output, getStringBuf(sb_stdout), " \t\n\r");
+ argvSplit(&output, getStringBuf(sb_stdout), "\n\r");
}
argvFree(av);
@@ -436,74 +501,77 @@ static ARGV_t runCmd(const char *nsdep, const char *depname,
return output;
}
+struct addReqProvDataFc {
+ rpmfc fc;
+ const char *namespace;
+ regex_t *exclude;
+};
+
+static rpmRC addReqProvFc(void *cbdata, rpmTagVal tagN,
+ const char * N, const char * EVR, rpmsenseFlags Flags,
+ int index)
+{
+ struct addReqProvDataFc *data = cbdata;
+ rpmfc fc = data->fc;
+ const char *namespace = data->namespace;
+ regex_t *exclude = data->exclude;
+
+ rpmds ds = rpmdsSingleNS(fc->pool, tagN, namespace, N, EVR, Flags);
+ /* Add to package and file dependencies unless filtered */
+ if (regMatch(exclude, rpmdsDNEVR(ds)+2) == 0)
+ rpmfcAddFileDep(&fc->fileDeps, ds, index);
+
+ return RPMRC_OK;
+}
+
/**
* Run per-interpreter dependency helper.
* @param fc file classifier
+ * @param ix file index
* @param nsdep class name for interpreter (e.g. "perl")
* @param depname "provides" or "requires"
- * @param depsp fc->provides or fc->requires
* @param dsContext RPMSENSE_FIND_PROVIDES or RPMSENSE_FIND_REQUIRES
* @param tagN RPMTAG_PROVIDENAME or RPMTAG_REQUIRENAME
- * @return 0
+ * @return 0 on success
*/
-static int rpmfcHelper(rpmfc fc, const char *nsdep, const char *depname,
- rpmds *depsp, rpmsenseFlags dsContext, rpmTagVal tagN)
+static int rpmfcHelper(rpmfc fc, int ix,
+ const char *nsdep, const char *depname,
+ rpmsenseFlags dsContext, rpmTagVal tagN)
{
ARGV_t pav = NULL;
- const char * fn = fc->fn[fc->ix];
+ const char * fn = fc->fn[ix];
char *namespace = NULL;
int pac;
+ int rc = 0;
regex_t *exclude = NULL;
regex_t *exclude_from = NULL;
+ regex_t *global_exclude_from = NULL;
/* If the entire path is filtered out, there's nothing more to do */
- exclude_from = rpmfcAttrReg(depname, "exclude", "from");
+ exclude_from = rpmfcAttrReg(depname, "exclude", "from", NULL);
if (regMatch(exclude_from, fn+fc->brlen))
goto exit;
+ global_exclude_from = rpmfcAttrReg("global", depname, "exclude", "from", NULL);
+ if (regMatch(global_exclude_from, fn+fc->brlen))
+ goto exit;
+
pav = runCmd(nsdep, depname, fc->buildRoot, fn);
if (pav == NULL)
goto exit;
pac = argvCount(pav);
- namespace = rpmfcAttrMacro(nsdep, NULL, "namespace");
- exclude = rpmfcAttrReg(depname, NULL, "exclude");
-
- for (int i = 0; i < pac; i++) {
- rpmds ds = NULL;
- const char *N = pav[i];
- const char *EVR = "";
- rpmsenseFlags Flags = dsContext;
- if (pav[i+1] && strchr("=<>", *pav[i+1])) {
- i++;
- for (const char *s = pav[i]; *s; s++) {
- switch(*s) {
- default:
- break;
- case '=':
- Flags |= RPMSENSE_EQUAL;
- break;
- case '<':
- Flags |= RPMSENSE_LESS;
- break;
- case '>':
- Flags |= RPMSENSE_GREATER;
- break;
- }
- }
- i++;
- EVR = pav[i];
- }
-
- ds = rpmdsSingleNS(tagN, namespace, N, EVR, Flags);
+ namespace = rpmfcAttrMacro(nsdep, "namespace", NULL);
+ exclude = rpmfcAttrReg(depname, "exclude", NULL);
- /* Add to package and file dependencies unless filtered */
- if (regMatch(exclude, rpmdsDNEVR(ds)+2) == 0) {
- (void) rpmdsMerge(depsp, ds);
- rpmfcAddFileDep(fc->ddict, fc->ix, ds, tagN == RPMTAG_PROVIDENAME ? 'P' : 'R');
- }
+ struct addReqProvDataFc data;
+ data.fc = fc;
+ data.namespace = namespace;
+ data.exclude = exclude;
- rpmdsFree(ds);
+ for (int i = 0; i < pac; i++) {
+ if (parseRCPOT(NULL, fc->pkg, pav[i], tagN, ix, dsContext, addReqProvFc, &data))
+ rc++;
}
argvFree(pav);
@@ -512,55 +580,8 @@ static int rpmfcHelper(rpmfc fc, const char *nsdep, const char *depname,
exit:
regFree(exclude_from);
- return 0;
-}
-
-/**
- * Run per-interpreter Provides: dependency helper.
- * @param fc file classifier
- * @param nsdep class name for interpreter (e.g. "perl")
- * @return 0
- */
-static int rpmfcHelperProvides(rpmfc fc, const char * nsdep)
-{
- if (fc->skipProv)
- return 0;
-
- rpmfcHelper(fc, nsdep, "provides", &fc->provides, RPMSENSE_FIND_PROVIDES, RPMTAG_PROVIDENAME);
-
- return 0;
-}
-
-/**
- * Run per-interpreter Requires: dependency helper.
- * @param fc file classifier
- * @param nsdep class name for interpreter (e.g. "perl")
- * @return 0
- */
-static int rpmfcHelperRequires(rpmfc fc, const char * nsdep)
-{
- if (fc->skipReq)
- return 0;
-
- rpmfcHelper(fc, nsdep, "requires", &fc->requires, RPMSENSE_FIND_REQUIRES, RPMTAG_REQUIRENAME);
-
- return 0;
-}
-
-/**
- * Run per-interpreter Supplements: dependency helper.
- * @param fc file classifier
- * @param nsdep class name for interpreter (e.g. "perl")
- * @return 0
- */
-static int rpmfcHelperSupplements(rpmfc fc, const char * nsdep)
-{
- if (fc->skipReq)
- return 0;
-
- rpmfcHelper(fc, nsdep, "supplements", &fc->supplements, RPMSENSE_FIND_REQUIRES|RPMSENSE_STRONG|RPMSENSE_MISSINGOK, RPMTAG_ENHANCESNAME);
-
- return 0;
+ regFree(global_exclude_from);
+ return rc;
}
/* Only used for elf coloring and controlling RPMTAG_FILECLASS inclusion now */
@@ -635,7 +656,7 @@ static int matches(const struct matchRule *rule,
}
}
-static void rpmfcAttributes(rpmfc fc, const char *ftype, const char *fullpath)
+static void rpmfcAttributes(rpmfc fc, int ix, const char *ftype, const char *fullpath)
{
const char *path = fullpath + fc->brlen;
int is_executable = 0;
@@ -652,7 +673,7 @@ static void rpmfcAttributes(rpmfc fc, const char *ftype, const char *fullpath)
/* Add attributes on libmagic type & path pattern matches */
if (matches(&(*attr)->incl, ftype, path, is_executable))
- argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
+ argvAddTokens(&fc->fattrs[ix], (*attr)->name);
}
}
@@ -676,39 +697,34 @@ static rpm_color_t rpmfcColor(const char * fmstr)
void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp)
{
- rpm_color_t fcolor;
int ndx;
int dx;
int fx;
-int nprovides;
-int nrequires;
-
if (fp == NULL) fp = stderr;
if (msg)
fprintf(fp, "===================================== %s\n", msg);
-nprovides = rpmdsCount(fc->provides);
-nrequires = rpmdsCount(fc->requires);
-
if (fc)
for (fx = 0; fx < fc->nfiles; fx++) {
- rpmsid cx = fc->fcdictx[fx] + 1; /* id's are one off */
- fcolor = fc->fcolor[fx];
- ARGV_t fattrs = fc->fattrs[fx];
-
fprintf(fp, "%3d %s", fx, fc->fn[fx]);
- if (fcolor != RPMFC_BLACK)
+ if (_rpmfc_debug) {
+ rpmsid cx = fc->fcdictx[fx] + 1; /* id's are one off */
+ rpm_color_t fcolor = fc->fcolor[fx];
+ ARGV_t fattrs = fc->fattrs[fx];
+
+ if (fcolor != RPMFC_BLACK)
fprintf(fp, "\t0x%x", fc->fcolor[fx]);
- else
+ else
fprintf(fp, "\t%s", rpmstrPoolStr(fc->cdict, cx));
- if (fattrs) {
- char *attrs = argvJoin(fattrs, ",");
- fprintf(fp, " [%s]", attrs);
- free(attrs);
- } else {
- fprintf(fp, " [none]");
+ if (fattrs) {
+ char *attrs = argvJoin(fattrs, ",");
+ fprintf(fp, " [%s]", attrs);
+ free(attrs);
+ } else {
+ fprintf(fp, " [none]");
+ }
}
fprintf(fp, "\n");
@@ -724,32 +740,16 @@ assert(fx < fc->fddictn->nvals);
const char * depval;
unsigned char deptype;
unsigned ix;
+ rpmds ds;
ix = fc->ddictx->vals[dx++];
deptype = ((ix >> 24) & 0xff);
ix &= 0x00ffffff;
depval = NULL;
- switch (deptype) {
- default:
-assert(depval != NULL);
- break;
- case 'P':
- if (nprovides > 0) {
-assert(ix < nprovides);
- (void) rpmdsSetIx(fc->provides, ix-1);
- if (rpmdsNext(fc->provides) >= 0)
- depval = rpmdsDNEVR(fc->provides);
- }
- break;
- case 'R':
- if (nrequires > 0) {
-assert(ix < nrequires);
- (void) rpmdsSetIx(fc->requires, ix-1);
- if (rpmdsNext(fc->requires) >= 0)
- depval = rpmdsDNEVR(fc->requires);
- }
- break;
- }
+ ds = rpmfcDependencies(fc, rpmdsDToTagN(deptype));
+ (void) rpmdsSetIx(ds, ix-1);
+ if (rpmdsNext(ds) >= 0)
+ depval = rpmdsDNEVR(ds);
if (depval)
fprintf(fp, "\t%s\n", depval);
}
@@ -771,16 +771,19 @@ rpmfc rpmfcFree(rpmfc fc)
free(fc->fattrs);
free(fc->fcolor);
free(fc->fcdictx);
+ free(fc->pkg);
argiFree(fc->fddictx);
argiFree(fc->fddictn);
argiFree(fc->ddictx);
- rpmstrPoolFree(fc->ddict);
+ for (int i = 0; i < fc->fileDeps.size; i++) {
+ rpmdsFree(fc->fileDeps.data[i].dep);
+ }
+ free(fc->fileDeps.data);
+
rpmstrPoolFree(fc->cdict);
- rpmdsFree(fc->provides);
- rpmdsFree(fc->requires);
- rpmdsFree(fc->supplements);
+ rpmstrPoolFree(fc->pool);
memset(fc, 0, sizeof(*fc)); /* trash and burn */
free(fc);
}
@@ -794,6 +797,11 @@ rpmfc rpmfcCreate(const char *buildRoot, rpmFlags flags)
fc->buildRoot = xstrdup(buildRoot);
fc->brlen = strlen(buildRoot);
}
+ fc->pool = rpmstrPoolCreate();
+ fc->pkg = xcalloc(1, sizeof(*fc->pkg));
+ fc->fileDeps.alloced = 10;
+ fc->fileDeps.data = xmalloc(fc->fileDeps.alloced *
+ sizeof(fc->fileDeps.data[0]));
return fc;
}
@@ -802,97 +810,183 @@ rpmfc rpmfcNew(void)
return rpmfcCreate(NULL, 0);
}
+rpmds rpmfcDependencies(rpmfc fc, rpmTagVal tag)
+{
+ if (fc) {
+ return *packageDependencies(fc->pkg, tag);
+ }
+ return NULL;
+}
+
rpmds rpmfcProvides(rpmfc fc)
{
- return (fc != NULL ? fc->provides : NULL);
+ return rpmfcDependencies(fc, RPMTAG_PROVIDENAME);
}
rpmds rpmfcRequires(rpmfc fc)
{
- return (fc != NULL ? fc->requires : NULL);
+ return rpmfcDependencies(fc, RPMTAG_REQUIRENAME);
+}
+
+rpmds rpmfcRecommends(rpmfc fc)
+{
+ return rpmfcDependencies(fc, RPMTAG_RECOMMENDNAME);
+}
+
+rpmds rpmfcSuggests(rpmfc fc)
+{
+ return rpmfcDependencies(fc, RPMTAG_SUGGESTNAME);
}
rpmds rpmfcSupplements(rpmfc fc)
{
- return (fc != NULL ? fc->supplements : NULL);
+ return rpmfcDependencies(fc, RPMTAG_SUPPLEMENTNAME);
}
-rpmRC rpmfcApply(rpmfc fc)
+rpmds rpmfcEnhances(rpmfc fc)
{
- const char * s;
- char * se;
- rpmds ds;
- const char * N;
- const char * EVR;
- rpmsenseFlags Flags;
- unsigned char deptype;
- int nddict;
+ return rpmfcDependencies(fc, RPMTAG_ENHANCENAME);
+}
+
+rpmds rpmfcConflicts(rpmfc fc)
+{
+ return rpmfcDependencies(fc, RPMTAG_CONFLICTNAME);
+}
+
+rpmds rpmfcObsoletes(rpmfc fc)
+{
+ return rpmfcDependencies(fc, RPMTAG_OBSOLETENAME);
+}
+
+
+/* Versioned deps are less than unversioned deps */
+static int cmpVerDeps(const void *a, const void *b)
+{
+ rpmfcFileDep *fDepA = (rpmfcFileDep *) a;
+ rpmfcFileDep *fDepB = (rpmfcFileDep *) b;
+
+ int aIsVersioned = rpmdsFlags(fDepA->dep) & RPMSENSE_SENSEMASK ? 1 : 0;
+ int bIsVersioned = rpmdsFlags(fDepB->dep) & RPMSENSE_SENSEMASK ? 1 : 0;
+
+ return bIsVersioned - aIsVersioned;
+}
+
+/* Sort by index */
+static int cmpIndexDeps(const void *a, const void *b)
+{
+ rpmfcFileDep *fDepA = (rpmfcFileDep *) a;
+ rpmfcFileDep *fDepB = (rpmfcFileDep *) b;
+
+ return fDepA->fileIx - fDepB->fileIx;
+}
+
+/*
+ * Remove unversioned deps if corresponding versioned deps exist but only
+ * if the versioned dependency has the same type and the same color as the versioned.
+ */
+static void rpmfcNormalizeFDeps(rpmfc fc)
+{
+ rpmstrPool versionedDeps = rpmstrPoolCreate();
+ rpmfcFileDep *normalizedFDeps = xmalloc(fc->fileDeps.size *
+ sizeof(normalizedFDeps[0]));
+ int ix = 0;
+ char *depStr;
+
+ /* Sort. Versioned dependencies first */
+ qsort(fc->fileDeps.data, fc->fileDeps.size, sizeof(fc->fileDeps.data[0]),
+ cmpVerDeps);
+
+ for (int i = 0; i < fc->fileDeps.size; i++) {
+ switch (rpmdsTagN(fc->fileDeps.data[i].dep)) {
+ case RPMTAG_REQUIRENAME:
+ case RPMTAG_RECOMMENDNAME:
+ case RPMTAG_SUGGESTNAME:
+ rasprintf(&depStr, "%08x_%c_%s",
+ fc->fcolor[fc->fileDeps.data[i].fileIx],
+ rpmdsD(fc->fileDeps.data[i].dep),
+ rpmdsN(fc->fileDeps.data[i].dep));
+
+ if (rpmdsFlags(fc->fileDeps.data[i].dep) & RPMSENSE_SENSEMASK) {
+ /* preserve versioned require dependency */
+ normalizedFDeps[ix++] = fc->fileDeps.data[i];
+ rpmstrPoolId(versionedDeps, depStr, 1);
+ } else if (!rpmstrPoolId(versionedDeps, depStr, 0)) {
+ /* preserve unversioned require dep only if versioned dep doesn't exist */
+ normalizedFDeps[ix++] =fc-> fileDeps.data[i];
+ } else {
+ rpmdsFree(fc->fileDeps.data[i].dep);
+ }
+ free(depStr);
+ break;
+ default:
+ /* Preserve all non-require dependencies */
+ normalizedFDeps[ix++] = fc->fileDeps.data[i];
+ break;
+ }
+ }
+ rpmstrPoolFree(versionedDeps);
+
+ free(fc->fileDeps.data);
+ fc->fileDeps.data = normalizedFDeps;
+ fc->fileDeps.size = ix;
+}
+
+static rpmRC rpmfcApplyInternal(rpmfc fc)
+{
+ rpmds ds, * dsp;
int previx;
unsigned int val;
int dix;
int ix;
/* Generate package and per-file dependencies. */
- for (fc->ix = 0; fc->ix < fc->nfiles && fc->fn[fc->ix] != NULL; fc->ix++) {
- for (ARGV_t fattr = fc->fattrs[fc->ix]; fattr && *fattr; fattr++) {
- rpmfcHelperProvides(fc, *fattr);
- rpmfcHelperRequires(fc, *fattr);
- rpmfcHelperSupplements(fc, *fattr);
+ for (ix = 0; ix < fc->nfiles && fc->fn[ix] != NULL; ix++) {
+ for (ARGV_t fattr = fc->fattrs[ix]; fattr && *fattr; fattr++) {
+ if (!fc->skipProv) {
+ rpmfcHelper(fc, ix, *fattr, "provides",
+ RPMSENSE_FIND_PROVIDES, RPMTAG_PROVIDENAME);
+ }
+ if (!fc->skipReq) {
+ rpmfcHelper(fc, ix, *fattr, "requires",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_REQUIRENAME);
+ rpmfcHelper(fc, ix, *fattr, "recommends",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_RECOMMENDNAME);
+ rpmfcHelper(fc, ix, *fattr, "suggests",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_SUGGESTNAME);
+ rpmfcHelper(fc, ix, *fattr, "supplements",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_SUPPLEMENTNAME);
+ rpmfcHelper(fc, ix, *fattr, "enhances",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_ENHANCENAME);
+ rpmfcHelper(fc, ix, *fattr, "conflicts",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_CONFLICTNAME);
+ rpmfcHelper(fc, ix, *fattr, "obsoletes",
+ RPMSENSE_FIND_REQUIRES, RPMTAG_OBSOLETENAME);
+ }
}
}
/* No more additions after this, freeze pool to minimize memory use */
- rpmstrPoolFreeze(fc->ddict, 0);
+
+ rpmfcNormalizeFDeps(fc);
+ for (int i = 0; i < fc->fileDeps.size; i++) {
+ ds = fc->fileDeps.data[i].dep;
+ rpmdsMerge(packageDependencies(fc->pkg, rpmdsTagN(ds)), ds);
+ }
+
+ /* Sort by index */
+ qsort(fc->fileDeps.data, fc->fileDeps.size,
+ sizeof(fc->fileDeps.data[0]), cmpIndexDeps);
/* Generate per-file indices into package dependencies. */
- nddict = rpmstrPoolNumStr(fc->ddict);
previx = -1;
- for (rpmsid id = 1; id <= nddict; id++) {
- s = rpmstrPoolStr(fc->ddict, id);
-
- /* Parse out (file#,deptype,N,EVR,Flags) */
- ix = strtol(s, &se, 10);
- if ( se == NULL ) {
- rpmlog(RPMLOG_ERR, _("Conversion of %s to long integer failed.\n"), s);
- return RPMRC_FAIL;
- }
-
- deptype = *se++;
- se++;
- N = se;
- while (*se && *se != ' ')
- se++;
- *se++ = '\0';
- EVR = se;
- while (*se && *se != ' ')
- se++;
- *se++ = '\0';
- Flags = strtol(se, NULL, 16);
-
- dix = -1;
- switch (deptype) {
- default:
- break;
- case 'P':
- ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags);
- dix = rpmdsFind(fc->provides, ds);
- rpmdsFree(ds);
- break;
- case 'R':
- ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags);
- dix = rpmdsFind(fc->requires, ds);
- rpmdsFree(ds);
- break;
- case 'S':
- ds = rpmdsSingle(RPMTAG_ENHANCESNAME, N, EVR, Flags);
- dix = rpmdsFind(fc->supplements, ds);
- ds = rpmdsFree(ds);
- break;
- }
-
+ for (int i = 0; i < fc->fileDeps.size; i++) {
+ ds = fc->fileDeps.data[i].dep;
+ ix = fc->fileDeps.data[i].fileIx;
+ dsp = packageDependencies(fc->pkg, rpmdsTagN(ds));
+ dix = rpmdsFind(*dsp, ds);
if (dix < 0)
continue;
- val = (deptype << 24) | (dix & 0x00ffffff);
+ val = (rpmdsD(ds) << 24) | (dix & 0x00ffffff);
argiAdd(&fc->ddictx, -1, val);
if (previx != ix) {
@@ -901,8 +995,8 @@ rpmRC rpmfcApply(rpmfc fc)
}
if (fc->fddictn && fc->fddictn->vals)
fc->fddictn->vals[ix]++;
- }
+ }
return RPMRC_OK;
}
@@ -960,7 +1054,6 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
/* Build (sorted) file class dictionary. */
fc->cdict = rpmstrPoolCreate();
- fc->ddict = rpmstrPoolCreate();
ms = magic_open(msflags);
if (ms == NULL) {
@@ -974,13 +1067,13 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
goto exit;
}
- for (fc->ix = 0; fc->ix < fc->nfiles; fc->ix++) {
+ for (int ix = 0; ix < fc->nfiles; ix++) {
rpmsid ftypeId;
const char * ftype;
- const char * s = argv[fc->ix];
+ const char * s = argv[ix];
size_t slen = strlen(s);
int fcolor = RPMFC_BLACK;
- rpm_mode_t mode = (fmode ? fmode[fc->ix] : 0);
+ rpm_mode_t mode = (fmode ? fmode[ix] : 0);
int is_executable = (mode & (S_IXUSR|S_IXGRP|S_IXOTH));
switch (mode & S_IFMT) {
@@ -1026,15 +1119,15 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
rpmlog(RPMLOG_DEBUG, "%s: %s\n", s, ftype);
/* Save the path. */
- fc->fn[fc->ix] = xstrdup(s);
+ fc->fn[ix] = xstrdup(s);
/* Add (filtered) file coloring */
fcolor |= rpmfcColor(ftype);
/* Add attributes based on file type and/or path */
- rpmfcAttributes(fc, ftype, s);
+ rpmfcAttributes(fc, ix, ftype, s);
- fc->fcolor[fc->ix] = fcolor;
+ fc->fcolor[ix] = fcolor;
/* Add to file class dictionary and index array */
if (fcolor != RPMFC_WHITE && (fcolor & RPMFC_INCLUDE)) {
@@ -1045,7 +1138,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
fc->fwhite++;
}
/* Pool id's start from 1, for headers we want it from 0 */
- fc->fcdictx[fc->ix] = ftypeId - 1;
+ fc->fcdictx[ix] = ftypeId - 1;
}
rc = RPMRC_OK;
@@ -1101,6 +1194,12 @@ static struct DepMsg_s depMsgs[] = {
{ "Requires(postun)", { NULL, "postun", NULL, NULL },
-1, -1, RPMTAG_REQUIREFLAGS,
RPMSENSE_SCRIPT_POSTUN, 0 },
+ { "Requires(pretrans)", { NULL, "pretrans", NULL, NULL },
+ -1, -1, RPMTAG_REQUIREFLAGS,
+ RPMSENSE_PRETRANS, 0 },
+ { "Requires(posttrans)", { NULL, "posttrans", NULL, NULL },
+ -1, -1, RPMTAG_REQUIREFLAGS,
+ RPMSENSE_POSTTRANS, 0 },
{ "Requires", { "%{?__find_requires}", NULL, NULL, NULL },
-1, -1, RPMTAG_REQUIREFLAGS, /* XXX inherit name/version arrays */
RPMSENSE_FIND_REQUIRES|RPMSENSE_TRIGGERIN|RPMSENSE_TRIGGERUN|RPMSENSE_TRIGGERPOSTUN|RPMSENSE_TRIGGERPREIN, 0 },
@@ -1110,12 +1209,18 @@ static struct DepMsg_s depMsgs[] = {
{ "Obsoletes", { "%{?__find_obsoletes}", NULL, NULL, NULL },
RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
0, -1 },
- { "Enhances", { "%{?__find_enhances}", NULL, NULL, NULL },
- RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
- RPMSENSE_STRONG, RPMSENSE_STRONG },
+ { "Recommends", { "%{?__find_recommends}", NULL, NULL, NULL },
+ RPMTAG_RECOMMENDNAME, RPMTAG_RECOMMENDVERSION, RPMTAG_RECOMMENDFLAGS,
+ 0, -1 },
+ { "Suggests", { "%{?__find_suggests}", NULL, NULL, NULL },
+ RPMTAG_SUGGESTNAME, RPMTAG_SUGGESTVERSION, RPMTAG_SUGGESTFLAGS,
+ 0, -1 },
{ "Supplements", { "%{?__find_supplements}", NULL, NULL, NULL },
- RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
- RPMSENSE_STRONG, 0 },
+ RPMTAG_SUPPLEMENTNAME, RPMTAG_SUPPLEMENTVERSION, RPMTAG_SUPPLEMENTFLAGS,
+ 0, -1 },
+ { "Enhances", { "%{?__find_enhances}", NULL, NULL, NULL },
+ RPMTAG_ENHANCENAME, RPMTAG_ENHANCEVERSION, RPMTAG_ENHANCEFLAGS,
+ 0, -1 },
{ NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 }
};
@@ -1123,7 +1228,7 @@ static DepMsg_t DepMsgs = depMsgs;
/**
*/
-static void printDeps(Header h)
+static void printDeps(rpmfc fc)
{
DepMsg_t dm;
rpmds ds = NULL;
@@ -1133,8 +1238,7 @@ static void printDeps(Header h)
for (dm = DepMsgs; dm->msg != NULL; dm++) {
if (dm->ntag != -1) {
- rpmdsFree(ds);
- ds = rpmdsNew(h, dm->ntag, 0);
+ ds = rpmfcDependencies(fc, dm->ntag);
}
if (dm->ftag == 0)
continue;
@@ -1161,18 +1265,16 @@ static void printDeps(Header h)
if (bingo)
rpmlog(RPMLOG_NOTICE, "\n");
}
- rpmdsFree(ds);
}
-static rpmRC rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi fi)
+static rpmRC rpmfcApplyExternal(rpmfc fc)
{
StringBuf sb_stdin = newStringBuf();
rpmRC rc = RPMRC_OK;
/* Create file manifest buffer to deliver to dependency finder. */
- fi = rpmfiInit(fi, 0);
- while (rpmfiNext(fi) >= 0)
- appendLineStringBuf(sb_stdin, rpmfiFN(fi));
+ for (int i = 0; i < fc->nfiles; i++)
+ appendLineStringBuf(sb_stdin, fc->fn[i]);
for (DepMsg_t dm = DepMsgs; dm->msg != NULL; dm++) {
rpmTagVal tag = (dm->ftag > 0) ? dm->ftag : dm->ntag;
@@ -1181,25 +1283,23 @@ static rpmRC rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi f
StringBuf sb_stdout = NULL;
int failnonzero = (tag == RPMTAG_PROVIDEFLAGS);
- switch(tag) {
+ switch (tag) {
case RPMTAG_PROVIDEFLAGS:
- if (!pkg->autoProv)
+ if (fc->skipProv)
continue;
tagflags = RPMSENSE_FIND_PROVIDES;
break;
case RPMTAG_REQUIREFLAGS:
- if (!pkg->autoReq)
+ case RPMTAG_RECOMMENDFLAGS:
+ case RPMTAG_SUGGESTFLAGS:
+ case RPMTAG_SUPPLEMENTFLAGS:
+ case RPMTAG_ENHANCEFLAGS:
+ case RPMTAG_CONFLICTFLAGS:
+ case RPMTAG_OBSOLETEFLAGS:
+ if (fc->skipReq)
continue;
tagflags = RPMSENSE_FIND_REQUIRES;
break;
- case RPMTAG_ENHANCESFLAGS:
- if (!pkg->autoProv)
- continue;
- failnonzero = 0;
- tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK;
- if (strcmp(dm->msg, "Supplements") == 0)
- tagflags |= RPMSENSE_STRONG;
- break;
default:
continue;
break;
@@ -1210,7 +1310,7 @@ static rpmRC rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi f
free(s);
if (rpmfcExec(dm->argv, sb_stdin, &sb_stdout,
- failnonzero, spec->buildRoot) == -1)
+ failnonzero, fc->buildRoot) == -1)
continue;
if (sb_stdout == NULL) {
@@ -1220,7 +1320,7 @@ static rpmRC rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi f
}
/* Parse dependencies into header */
- rc = parseRCPOT(spec, pkg, getStringBuf(sb_stdout), tag, 0, tagflags);
+ rc = parseRCPOT(NULL, fc->pkg, getStringBuf(sb_stdout), dm->ntag != -1 ? dm->ntag : RPMTAG_REQUIRENAME, 0, tagflags, addReqProvPkg, NULL);
freeStringBuf(sb_stdout);
if (rc) {
@@ -1234,11 +1334,26 @@ static rpmRC rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi f
return rc;
}
+rpmRC rpmfcApply(rpmfc fc)
+{
+ rpmRC rc;
+ /* If new-fangled dependency generation is disabled ... */
+ if (!rpmExpandNumeric("%{?_use_internal_dependency_generator}")) {
+ /* ... then generate dependencies using %{__find_requires} et al. */
+ rpmlog(RPMLOG_WARNING,
+ _("Deprecated external dependency generator is used!\n"));
+ rc = rpmfcApplyExternal(fc);
+ } else {
+ /* ... otherwise generate per-file dependencies */
+ rc = rpmfcApplyInternal(fc);
+ }
+ return rc;
+}
+
rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg)
{
- rpmfi fi = pkg->cpioList;
+ rpmfi fi = rpmfilesIter(pkg->cpioList, RPMFI_ITER_FWD);
rpmfc fc = NULL;
- ARGV_t av = NULL;
rpm_mode_t * fmode = NULL;
int ac = rpmfiFC(fi);
int genConfigDeps = 0;
@@ -1250,82 +1365,46 @@ rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg)
if (ac <= 0)
goto exit;
- /* Skip packages that have dependency generation disabled. */
- if (! (pkg->autoReq || pkg->autoProv))
- goto exit;
-
- /* If new-fangled dependency generation is disabled ... */
- if (!rpmExpandNumeric("%{?_use_internal_dependency_generator}")) {
- /* ... then generate dependencies using %{__find_requires} et al. */
- rc = rpmfcGenerateDependsHelper(spec, pkg, fi);
- goto exit;
- }
-
/* Extract absolute file paths in argv format. */
- av = xcalloc(ac+1, sizeof(*av));
fmode = xcalloc(ac+1, sizeof(*fmode));
fi = rpmfiInit(fi, 0);
while ((idx = rpmfiNext(fi)) >= 0) {
/* Does package have any %config files? */
genConfigDeps |= (rpmfiFFlags(fi) & RPMFILE_CONFIG);
-
- av[idx] = xstrdup(rpmfiFN(fi));
fmode[idx] = rpmfiFMode(fi);
}
- av[ac] = NULL;
fc = rpmfcCreate(spec->buildRoot, 0);
+ free(fc->pkg);
+ fc->pkg = pkg;
fc->skipProv = !pkg->autoProv;
fc->skipReq = !pkg->autoReq;
- /* Copy (and delete) manually generated dependencies to dictionary. */
- if (!fc->skipProv) {
- rpmds ds = rpmdsNew(pkg->header, RPMTAG_PROVIDENAME, 0);
- rpmdsMerge(&fc->provides, ds);
- rpmdsFree(ds);
-
- headerDel(pkg->header, RPMTAG_PROVIDENAME);
- headerDel(pkg->header, RPMTAG_PROVIDEVERSION);
- headerDel(pkg->header, RPMTAG_PROVIDEFLAGS);
-
+ if (!fc->skipProv && genConfigDeps) {
/* Add config dependency, Provides: config(N) = EVR */
- if (genConfigDeps) {
- ds = rpmdsSingleNS(RPMTAG_PROVIDENAME, "config",
- rpmdsN(pkg->ds), rpmdsEVR(pkg->ds),
- (RPMSENSE_EQUAL|RPMSENSE_CONFIG));
- rpmdsMerge(&fc->provides, ds);
- rpmdsFree(ds);
- }
+ rpmds ds = rpmdsSingleNS(fc->pool, RPMTAG_PROVIDENAME, "config",
+ rpmdsN(pkg->ds), rpmdsEVR(pkg->ds),
+ (RPMSENSE_EQUAL|RPMSENSE_CONFIG));
+ rpmdsMerge(packageDependencies(pkg, RPMTAG_PROVIDENAME), ds);
+ rpmdsFree(ds);
}
-
- if (!fc->skipReq) {
- rpmds ds = rpmdsNew(pkg->header, RPMTAG_REQUIRENAME, 0);
- rpmdsMerge(&fc->requires, ds);
+ if (!fc->skipReq && genConfigDeps) {
+ rpmds ds = rpmdsSingleNS(fc->pool, RPMTAG_REQUIRENAME, "config",
+ rpmdsN(pkg->ds), rpmdsEVR(pkg->ds),
+ (RPMSENSE_EQUAL|RPMSENSE_CONFIG));
+ rpmdsMerge(packageDependencies(pkg, RPMTAG_REQUIRENAME), ds);
rpmdsFree(ds);
-
- headerDel(pkg->header, RPMTAG_REQUIRENAME);
- headerDel(pkg->header, RPMTAG_REQUIREVERSION);
- headerDel(pkg->header, RPMTAG_REQUIREFLAGS);
-
- /* Add config dependency, Requires: config(N) = EVR */
- if (genConfigDeps) {
- ds = rpmdsSingleNS(RPMTAG_REQUIRENAME, "config",
- rpmdsN(pkg->ds), rpmdsEVR(pkg->ds),
- (RPMSENSE_EQUAL|RPMSENSE_CONFIG));
- rpmdsMerge(&fc->requires, ds);
- rpmdsFree(ds);
- }
}
/* Build file class dictionary. */
- rc = rpmfcClassify(fc, av, fmode);
+ rc = rpmfcClassify(fc, pkg->dpaths, fmode);
if ( rc != RPMRC_OK )
goto exit;
/* Build file/package dependency dictionary. */
rc = rpmfcApply(fc);
- if ( rc != RPMRC_OK )
+ if (rc != RPMRC_OK)
goto exit;
/* Add per-file colors(#files) */
@@ -1343,54 +1422,18 @@ rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg)
/* Add per-file classes(#files) */
headerPutUint32(pkg->header, RPMTAG_FILECLASS, fc->fcdictx, fc->nfiles);
- /* Add Provides: */
- if (!fc->skipProv) {
- rpmds pi = rpmdsInit(fc->provides);
- while (rpmdsNext(pi) >= 0) {
- rpmsenseFlags flags = rpmdsFlags(pi);
-
- headerPutString(pkg->header, RPMTAG_PROVIDENAME, rpmdsN(pi));
- headerPutString(pkg->header, RPMTAG_PROVIDEVERSION, rpmdsEVR(pi));
- headerPutUint32(pkg->header, RPMTAG_PROVIDEFLAGS, &flags, 1);
- }
- }
-
- /* Add Requires: */
- if (!fc->skipReq) {
- rpmds pi = rpmdsInit(fc->requires);
- while (rpmdsNext(pi) >= 0) {
- rpmsenseFlags flags = rpmdsFlags(pi);
-
- headerPutString(pkg->header, RPMTAG_REQUIRENAME, rpmdsN(pi));
- headerPutString(pkg->header, RPMTAG_REQUIREVERSION, rpmdsEVR(pi));
- headerPutUint32(pkg->header, RPMTAG_REQUIREFLAGS, &flags, 1);
- }
- }
-
- /* Add Supplements: */
- if (!fc->skipReq) {
- rpmds pi = rpmdsInit(fc->supplements);
- while (rpmdsNext(pi) >= 0) {
- rpmsenseFlags flags = rpmdsFlags(pi);
-
- headerPutString(pkg->header, RPMTAG_ENHANCESNAME, rpmdsN(pi));
- headerPutString(pkg->header, RPMTAG_ENHANCESVERSION, rpmdsEVR(pi));
- headerPutUint32(pkg->header, RPMTAG_ENHANCESFLAGS, &flags, 1);
- }
- }
-
/* Add dependency dictionary(#dependencies) */
if (rpmtdFromArgi(&td, RPMTAG_DEPENDSDICT, fc->ddictx)) {
headerPut(pkg->header, &td, HEADERPUT_DEFAULT);
- }
- /* Add per-file dependency (start,number) pairs (#files) */
- if (rpmtdFromArgi(&td, RPMTAG_FILEDEPENDSX, fc->fddictx)) {
- headerPut(pkg->header, &td, HEADERPUT_DEFAULT);
- }
+ /* Add per-file dependency (start,number) pairs (#files) */
+ if (rpmtdFromArgi(&td, RPMTAG_FILEDEPENDSX, fc->fddictx)) {
+ headerPut(pkg->header, &td, HEADERPUT_DEFAULT);
+ }
- if (rpmtdFromArgi(&td, RPMTAG_FILEDEPENDSN, fc->fddictn)) {
- headerPut(pkg->header, &td, HEADERPUT_DEFAULT);
+ if (rpmtdFromArgi(&td, RPMTAG_FILEDEPENDSN, fc->fddictn)) {
+ headerPut(pkg->header, &td, HEADERPUT_DEFAULT);
+ }
}
@@ -1403,12 +1446,14 @@ rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg)
free(msg);
}
exit:
- printDeps(pkg->header);
+ printDeps(fc);
/* Clean up. */
+ if (fc)
+ fc->pkg = NULL;
free(fmode);
rpmfcFree(fc);
- argvFree(av);
+ rpmfiFree(fi);
return rc;
}
diff --git a/build/rpmfc.h b/build/rpmfc.h
index a05fd0e78..3d87b31cf 100644
--- a/build/rpmfc.h
+++ b/build/rpmfc.h
@@ -45,7 +45,6 @@ typedef const struct rpmfcTokens_s * rpmfcToken;
/** \ingroup rpmfc
* Print results of file classification.
- * @todo Remove debugging routine.
* @param msg message prefix (NULL for none)
* @param fc file classifier
* @param fp output file handle (NULL for stderr)
@@ -107,12 +106,55 @@ rpmds rpmfcProvides(rpmfc fc);
rpmds rpmfcRequires(rpmfc fc);
/** \ingroup rpmfc
+ * Retrieve file classification recommends
+ * @param fc file classifier
+ * @return rpmds dependency set of fc recommends
+ */
+rpmds rpmfcRecommends(rpmfc fc);
+
+/** \ingroup rpmfc
+ * Retrieve file classification suggests
+ * @param fc file classifier
+ * @return rpmds dependency set of fc suggests
+ */
+rpmds rpmfcSuggests(rpmfc fc);
+
+/** \ingroup rpmfc
* Retrieve file classification supplements
* @param fc file classifier
- * @return rpmds dependency set of fc requires
+ * @return rpmds dependency set of fc supplements
*/
rpmds rpmfcSupplements(rpmfc fc);
+/** \ingroup rpmfc
+ * Retrieve file classification enhances
+ * @param fc file classifier
+ * @return rpmds dependency set of fc enhances
+ */
+rpmds rpmfcEnhances(rpmfc fc);
+
+/** \ingroup rpmfc
+ * Retrieve file classification conflicts
+ * @param fc file classifier
+ * @return rpmds dependency set of fc conflicts
+ */
+rpmds rpmfcConflicts(rpmfc fc);
+
+/** \ingroup rpmfc
+ * Retrieve file classification obsoletes
+ * @param fc file classifier
+ * @return rpmds dependency set of fc obsoletes
+ */
+rpmds rpmfcObsoletes(rpmfc fc);
+
+/** \ingroup rpmfc
+ * Retrieve file classification dependencies
+ * @param fc file classifier
+ * @param tagN name tag of the wanted dependency
+ * @return rpmds dependency set of fc requires
+ */
+rpmds rpmfcDependencies(rpmfc fc, rpmTagVal tagN);
+
#ifdef __cplusplus
}
#endif
diff --git a/build/rpmspec.h b/build/rpmspec.h
index 195fc720c..164c9b6ac 100644
--- a/build/rpmspec.h
+++ b/build/rpmspec.h
@@ -36,6 +36,7 @@ enum rpmSpecFlags_e {
RPMSPEC_ANYARCH = (1 << 0),
RPMSPEC_FORCE = (1 << 1),
RPMSPEC_NOLANG = (1 << 2),
+ RPMSPEC_NOUTF8 = (1 << 3),
};
typedef rpmFlags rpmSpecFlags;
@@ -55,6 +56,13 @@ rpmSpecPkgIter rpmSpecPkgIterFree(rpmSpecPkgIter iter);
/* Getters for spec package attributes */
Header rpmSpecPkgHeader(rpmSpecPkg pkg);
+/*
+ * Retrieve package specific parsed spec script section (RPMBUILD_FILE_LIST,
+ * RPMBUILD_FILE_FILE, RPMBUILD_POLICY) as a malloc'ed string.
+ */
+char * rpmSpecPkgGetSection(rpmSpecPkg pkg, int section);
+
+
/* Iterator for spec sources */
rpmSpecSrcIter rpmSpecSrcIterInit(rpmSpec spec);
rpmSpecSrc rpmSpecSrcIterNext(rpmSpecSrcIter iter);
diff --git a/build/spec.c b/build/spec.c
index 4b6b6805d..39599e284 100644
--- a/build/spec.c
+++ b/build/spec.c
@@ -13,6 +13,7 @@
#include <rpm/rpmfileutil.h>
#include "rpmio/rpmlua.h"
+#include "lib/rpmfi_internal.h" /* rpmfiles stuff */
#include "build/rpmbuild_internal.h"
#include "debug.h"
@@ -60,8 +61,8 @@ struct Source * freeSources(struct Source * s)
rpmRC lookupPackage(rpmSpec spec, const char *name, int flag,Package *pkg)
{
- const char *pname;
char *fullName = NULL;
+ rpmsid nameid = 0;
Package p;
/* "main" package */
@@ -71,46 +72,66 @@ rpmRC lookupPackage(rpmSpec spec, const char *name, int flag,Package *pkg)
return RPMRC_OK;
}
- /* Construct package name */
- if (flag == PART_SUBNAME) {
- pname = headerGetString(spec->packages->header, RPMTAG_NAME);
- rasprintf(&fullName, "%s-%s", pname, name);
- } else {
- fullName = xstrdup(name);
+ /* Construct partial package name */
+ if (!(flag & PART_NAME)) {
+ rasprintf(&fullName, "%s-%s",
+ headerGetString(spec->packages->header, RPMTAG_NAME), name);
+ name = fullName;
}
+ nameid = rpmstrPoolId(spec->pool, name, 1);
- /* Locate package with fullName */
+ /* Locate package the name */
for (p = spec->packages; p != NULL; p = p->next) {
- pname = headerGetString(p->header, RPMTAG_NAME);
- if (pname && (rstreq(fullName, pname))) {
+ if (p->name && p->name == nameid) {
break;
}
}
- free(fullName);
+
+ if (!(flag & PART_QUIET)) {
+ if (p == NULL && pkg != NULL) {
+ rpmlog(RPMLOG_ERR, _("line %d: %s: package %s does not exist\n"),
+ spec->lineNum, spec->line, name);
+ } else if (p != NULL && pkg == NULL) {
+ rpmlog(RPMLOG_ERR, _("line %d: %s: package %s already exists\n"),
+ spec->lineNum, spec->line, name);
+ }
+ }
+
+ if (fullName == name)
+ free(fullName);
if (pkg)
*pkg = p;
return ((p == NULL) ? RPMRC_FAIL : RPMRC_OK);
}
-Package newPackage(rpmSpec spec)
+Package newPackage(const char *name, rpmstrPool pool, Package *pkglist)
{
Package p = xcalloc(1, sizeof(*p));
p->header = headerNew();
p->autoProv = 1;
p->autoReq = 1;
p->fileList = NULL;
+ p->fileExcludeList = NULL;
p->fileFile = NULL;
p->policyList = NULL;
-
- if (spec->packages == NULL) {
- spec->packages = p;
- } else {
- Package pp;
- /* Always add package to end of list */
- for (pp = spec->packages; pp->next != NULL; pp = pp->next)
- {};
- pp->next = p;
+ p->fileRenameMap = NULL;
+ p->pool = rpmstrPoolLink(pool);
+ p->dpaths = NULL;
+
+ if (name)
+ p->name = rpmstrPoolId(p->pool, name, 1);
+
+ if (pkglist) {
+ if (*pkglist == NULL) {
+ *pkglist = p;
+ } else {
+ Package pp;
+ /* Always add package to end of list */
+ for (pp = *pkglist; pp->next != NULL; pp = pp->next)
+ {};
+ pp->next = p;
+ }
}
p->next = NULL;
@@ -129,13 +150,25 @@ static Package freePackage(Package pkg)
pkg->header = headerFree(pkg->header);
pkg->ds = rpmdsFree(pkg->ds);
+
+ for (int i=0; i<PACKAGE_NUM_DEPS; i++) {
+ pkg->dependencies[i] = rpmdsFree(pkg->dependencies[i]);
+ }
+
pkg->fileList = argvFree(pkg->fileList);
+ pkg->fileExcludeList = argvFree(pkg->fileExcludeList);
pkg->fileFile = argvFree(pkg->fileFile);
pkg->policyList = argvFree(pkg->policyList);
- pkg->cpioList = rpmfiFree(pkg->cpioList);
+ pkg->removePostfixes = argvFree(pkg->removePostfixes);
+ pkg->fileRenameMap = fileRenameHashFree(pkg->fileRenameMap);
+ pkg->cpioList = rpmfilesFree(pkg->cpioList);
+ pkg->dpaths = argvFree(pkg->dpaths);
pkg->icon = freeSources(pkg->icon);
pkg->triggerFiles = freeTriggerFiles(pkg->triggerFiles);
+ pkg->fileTriggerFiles = freeTriggerFiles(pkg->fileTriggerFiles);
+ pkg->transFileTriggerFiles = freeTriggerFiles(pkg->transFileTriggerFiles);
+ pkg->pool = rpmstrPoolFree(pkg->pool);
free(pkg);
return NULL;
@@ -153,6 +186,21 @@ static Package freePackages(Package packages)
return NULL;
}
+rpmds * packageDependencies(Package pkg, rpmTagVal tag)
+{
+ for (int i=0; i<PACKAGE_NUM_DEPS; i++) {
+ if (pkg->dependencies[i] == NULL) {
+ return &pkg->dependencies[i];
+ }
+ rpmTagVal tagN = rpmdsTagN(pkg->dependencies[i]);
+ if (tagN == tag || tagN == 0) {
+ return &pkg->dependencies[i];
+ }
+ }
+ return NULL;
+}
+
+
rpmSpec newSpec(void)
{
rpmSpec spec = xcalloc(1, sizeof(*spec));
@@ -186,8 +234,7 @@ rpmSpec newSpec(void)
spec->sourceRpmName = NULL;
spec->sourcePkgId = NULL;
- spec->sourceHeader = NULL;
- spec->sourceCpioList = NULL;
+ spec->sourcePackage = NULL;
spec->buildRoot = NULL;
spec->buildSubdir = NULL;
@@ -201,11 +248,14 @@ rpmSpec newSpec(void)
spec->flags = RPMSPEC_NONE;
spec->macros = rpmGlobalMacroContext;
+ spec->pool = rpmstrPoolCreate();
#ifdef WITH_LUA
{
/* make sure patches and sources tables always exist */
rpmlua lua = NULL; /* global state */
+ rpmluaDelVar(lua, "patches");
+ rpmluaDelVar(lua, "sources");
rpmluaPushTable(lua, "patches");
rpmluaPushTable(lua, "sources");
rpmluaPop(lua);
@@ -243,8 +293,7 @@ rpmSpec rpmSpecFree(rpmSpec spec)
spec->sourceRpmName = _free(spec->sourceRpmName);
spec->sourcePkgId = _free(spec->sourcePkgId);
- spec->sourceHeader = headerFree(spec->sourceHeader);
- spec->sourceCpioList = rpmfiFree(spec->sourceCpioList);
+ spec->sourcePackage = freePackage(spec->sourcePackage);
spec->buildRestrictions = headerFree(spec->buildRestrictions);
@@ -266,6 +315,7 @@ rpmSpec rpmSpecFree(rpmSpec spec)
spec->sources = freeSources(spec->sources);
spec->packages = freePackages(spec->packages);
+ spec->pool = rpmstrPoolFree(spec->pool);
spec = _free(spec);
@@ -274,12 +324,12 @@ rpmSpec rpmSpecFree(rpmSpec spec)
Header rpmSpecSourceHeader(rpmSpec spec)
{
- return spec->sourceHeader;
+ return (spec && spec->sourcePackage) ? spec->sourcePackage->header : NULL;
}
rpmds rpmSpecDS(rpmSpec spec, rpmTagVal tag)
{
- return (spec != NULL) ? rpmdsNew(spec->buildRestrictions, tag, 0) : NULL;
+ return (spec != NULL) ? rpmdsNew(spec->sourcePackage->header, tag, 0) : NULL;
}
rpmps rpmSpecCheckDeps(rpmts ts, rpmSpec spec)
@@ -341,6 +391,18 @@ Header rpmSpecPkgHeader(rpmSpecPkg pkg)
return (pkg != NULL) ? pkg->header : NULL;
}
+char* rpmSpecPkgGetSection(rpmSpecPkg pkg, int section)
+{
+ if (pkg) {
+ switch (section) {
+ case RPMBUILD_FILE_FILE: return argvJoin(pkg->fileFile, "");
+ case RPMBUILD_FILE_LIST: return argvJoin(pkg->fileList, "");
+ case RPMBUILD_POLICY: return argvJoin(pkg->policyList, "");
+ }
+ }
+ return NULL;
+}
+
rpmSpecSrcIter rpmSpecSrcIterInit(rpmSpec spec)
{
SPEC_LISTITER_INIT(rpmSpecSrcIter, sources);
@@ -405,21 +467,20 @@ int rpmspecQuery(rpmts ts, QVA_t qva, const char * arg)
goto exit;
}
- if (qva->qva_source == RPMQV_SPECRPMS) {
+ if (qva->qva_source == RPMQV_SPECRPMS ||
+ qva->qva_source == RPMQV_SPECBUILTRPMS) {
+
res = 0;
for (Package pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
-#if 0
- /*
- * XXX FIXME: whether to show all or just the packages that
- * would be built needs to be made caller specifiable, for now
- * revert to "traditional" behavior as existing tools rely on this.
- */
- if (pkg->fileList == NULL) continue;
-#endif
+
+ if (qva->qva_source == RPMQV_SPECBUILTRPMS && pkg->fileList == NULL)
+ continue;
+
res += qva->qva_showPackage(qva, ts, pkg->header);
}
} else {
- res = qva->qva_showPackage(qva, ts, spec->sourceHeader);
+ Package sourcePkg = spec->sourcePackage;
+ res = qva->qva_showPackage(qva, ts, sourcePkg->header);
}
exit:
diff --git a/cliutils.c b/cliutils.c
index 5edecc51e..772a105ec 100644
--- a/cliutils.c
+++ b/cliutils.c
@@ -18,7 +18,7 @@ static pid_t pipeChild = 0;
RPM_GNUC_NORETURN
void argerror(const char * desc)
{
- fprintf(stderr, _("%s: %s\n"), __progname, desc);
+ fprintf(stderr, _("%s: %s\n"), xgetprogname(), desc);
exit(EXIT_FAILURE);
}
@@ -55,7 +55,6 @@ int initPipe(void)
}
if (!(pipeChild = fork())) {
- (void) signal(SIGPIPE, SIG_DFL);
(void) close(p[1]);
(void) dup2(p[0], STDIN_FILENO);
(void) close(p[0]);
diff --git a/cliutils.h b/cliutils.h
index 35aa25285..b5deee1ba 100644
--- a/cliutils.h
+++ b/cliutils.h
@@ -1,6 +1,11 @@
#ifndef _CLIUTIL_H
#define _CLIUTIL_H
+/** \file cliutils.h
+ *
+ * Misc helpers for RPM CLI tools
+ */
+
#include <stdio.h>
#include <popt.h>
#include <rpm/rpmutil.h>
diff --git a/compile b/compile
new file mode 100755
index 000000000..a85b723c7
--- /dev/null
+++ b/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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, 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure.ac b/configure.ac
index 419941330..0c29311eb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,11 +1,11 @@
AC_PREREQ(2.61)
-AC_INIT(rpm, 4.11.0.1, rpm-maint@lists.rpm.org)
+AC_INIT(rpm, 4.14.1, rpm-maint@lists.rpm.org)
AC_CONFIG_SRCDIR([rpmqv.c])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE([1.10 foreign tar-ustar dist-bzip2 subdir-objects nostdinc])
+AM_INIT_AUTOMAKE([1.10 foreign tar-pax dist-bzip2 subdir-objects nostdinc])
dnl Allow silent build on automake versions that support it
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
@@ -37,21 +37,24 @@ fi
AS=${AS-as}
AC_SUBST(AS)
if test "$GCC" = yes; then
- cflags_to_try="-fno-strict-aliasing -fstack-protector -Wempty-body"
+ cflags_to_try="-fno-strict-aliasing -fstack-protector-strong -Wempty-body"
AC_MSG_CHECKING([supported compiler flags])
old_cflags=$CFLAGS
echo
for flag in $cflags_to_try; do
CFLAGS="$CFLAGS $flag -Werror"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[#include <alloca.h>
+ alloca(100);]])],[
echo " $flag"
RPMCFLAGS="$RPMCFLAGS $flag"
],[])
CFLAGS=$old_cflags
done
- CFLAGS="$CFLAGS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes $RPMCFLAGS"
+ RPMCFLAGS="-fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes $RPMCFLAGS"
+ CFLAGS="$RPMCFLAGS"
fi
export CFLAGS
+AC_SUBST(RPMCFLAGS)
AC_SYS_LARGEFILE
@@ -90,7 +93,7 @@ fi
dnl
dnl Find some common programs
dnl
-AC_PATH_PROG(__7ZIP, 7zip, /usr/bin/7za, $MYPATH)
+AC_PATH_PROGS(__7ZIP, [7zip 7za 7z], /usr/bin/7za, $MYPATH)
AC_PATH_PROG(__BZIP2, bzip2, /usr/bin/bzip2, $MYPATH)
AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH)
AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH)
@@ -100,7 +103,7 @@ AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH)
AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH)
AC_PATH_PROG(__CURL, curl, /usr/bin/curl, $MYPATH)
AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH)
-AC_PATH_PROG(__GPG, gpg, /usr/bin/gpg, $MYPATH)
+AC_PATH_PROGS(__GPG, gpg2 gpg, /usr/bin/gpg2, $MYPATH)
AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH)
AC_PATH_PROG(__GZIP, gzip, /bin/gzip, $MYPATH)
AC_PATH_PROG(__UNZIP, unzip, /usr/bin/unzip, $MYPATH)
@@ -109,6 +112,7 @@ AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH)
AC_PATH_PROG(__LRZIP, lrzip, /usr/bin/lrzip, $MYPATH)
AC_PATH_PROG(__LZIP, lzip, /usr/bin/lzip, $MYPATH)
AC_PATH_PROG(__XZ, xz, /usr/bin/xz, $MYPATH)
+AC_PATH_PROG(__GEM, gem, /usr/bin/gem, $MYPATH)
AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH)
AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH)
AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH)
@@ -134,6 +138,7 @@ AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
AC_PATH_PROG(__SEMODULE, semodule, /usr/bin/semodule, $MYPATH)
AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
+AC_PATH_PROG(__ZSTD, zstd, /usr/bin/zstd, $MYPATH)
AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
@@ -201,6 +206,31 @@ AC_CHECK_HEADERS([lzma.h],[
AC_SUBST(WITH_LZMA_LIB)
#=================
+# Check for zstd.
+
+AC_ARG_ENABLE([zstd],
+ [AS_HELP_STRING([--enable-zstd=@<:@yes/no/auto@:>@],
+ [build without zstd support (default=auto)])],
+ [enable_zstd="$enableval"],
+ [enable_zstd=auto])
+
+AS_IF([test "x$enable_zstd" != "xno"], [
+ PKG_CHECK_MODULES([ZSTD], [libzstd], [have_zstd=yes], [have_zstd=no])
+ AS_IF([test "$enable_zstd" = "yes"], [
+ if test "$have_zstd" = "no"; then
+ AC_MSG_ERROR([--enable-zstd specified, but not available])
+ fi
+ ])
+])
+
+if test "x$have_zstd" = "xyes"; then
+ AC_DEFINE([HAVE_ZSTD], [1], [Define if libzstd is available])
+ ZSTD_REQUIRES=libzstd
+ AC_SUBST(ZSTD_REQUIRES)
+fi
+AM_CONDITIONAL([HAVE_ZSTD], [test "x$have_zstd" = "xyes"])
+
+#=================
dnl
dnl Check for features
@@ -243,18 +273,30 @@ AC_CHECK_HEADERS([dwarf.h], [
AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
#=================
+# Select crypto library
+AC_ARG_WITH(crypto,
+ [AC_HELP_STRING([--with-crypto=CRYPTO_LIB],
+ [The cryptographic library to use (nss|beecrypt|openssl). The default is nss.])
+ ],[],
+ [with_crypto=nss])
+
+# Refuse to proceed if someone specified --with-beecrypt (removed)
+AC_ARG_WITH(beecrypt,
+ [AC_HELP_STRING([--with-beecrypt (OBSOLETE)], [Obsolete argument. Use --with-crypto=beecrypt])
+ ],[AC_MSG_ERROR([--with-beecrypt no longer supported. Use --with-crypto=beecrypt])],
+ [])
+
# Check for beecrypt library if requested.
-AC_ARG_WITH(beecrypt, [ --with-beecrypt build with beecrypt support ],,[with_beecrypt=no])
AC_ARG_WITH(internal_beecrypt, [ --with-internal-beecrypt build with internal beecrypt library ],,[with_internal_beecrypt=no])
AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes])
if test "$with_internal_beecrypt" = yes ; then
- with_beecrypt=yes
+ with_crypto=beecrypt
fi
-AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_beecrypt" = yes])
+AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_crypto" = beecrypt])
WITH_BEECRYPT_INCLUDE=
WITH_BEECRYPT_LIB=
-if test "$with_beecrypt" = yes ; then
+if test "$with_crypto" = beecrypt ; then
AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?])
if test "$with_internal_beecrypt" = yes ; then
WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt"
@@ -263,7 +305,7 @@ if test "$with_beecrypt" = yes ; then
AC_CHECK_LIB(beecrypt, mpfprintln, [
WITH_BEECRYPT_LIB="-lbeecrypt"
],[
- AC_MSG_ERROR([missing required library 'beecrypt'])
+ AC_MSG_ERROR([missing required library 'beecrypt'])
])
AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
])
@@ -273,13 +315,100 @@ AC_SUBST(WITH_BEECRYPT_LIB)
AC_SUBST(WITH_BEECRYPT_INCLUDE)
#=================
+# Check for OpenSSL library.
+# We need evp.h from OpenSSL.
+
+WITH_OPENSSL_INCLUDE=
+WITH_OPENSSL_LIB=
+if test "$with_crypto" = openssl; then
+# If we have pkgconfig make sure CPPFLAGS are setup correctly for the OpenSSL
+# -I include path.
+AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], [$PATH:/usr/bin:/usr/local/bin])
+if test "x$PKGCONFIG" != "xno"; then
+ CPPFLAGS="$CPPFLAGS $($PKGCONFIG --cflags libcrypto)"
+ WITH_OPENSSL_LIB=$($PKGCONFIG --libs libcrypto)
+else
+ WITH_OPENSSL_LIB=-lcrypto
+fi
+
+AC_CHECK_HEADERS([openssl/evp.h], [], [
+ AC_MSG_ERROR([missing required OpenSSL header])
+])
+AC_CHECK_HEADERS([openssl/rsa.h], [], [
+ AC_MSG_ERROR([missing required OpenSSL header])
+])
+AC_CHECK_HEADERS([openssl/dsa.h], [], [
+ AC_MSG_ERROR([missing required OpenSSL header])
+])
+
+AC_CHECK_LIB(crypto, EVP_DigestInit_ex, [], [
+ AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old])
+])
+
+AC_CHECK_LIB(crypto, EVP_MD_CTX_new, [
+ AC_DEFINE(HAVE_EVP_MD_CTX_NEW, 1, [Define to 1 if OpenSSL has EVP_MD_CTX_new])
+ AC_SUBST(HAVE_EVP_MD_CTX_NEW, [1])
+ ], [
+ AC_CHECK_LIB(crypto, EVP_MD_CTX_create, [], [
+ AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old])
+ ])
+])
+
+AC_CHECK_LIB(crypto, EVP_PKEY_CTX_new, [], [
+ AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old])
+])
+
+AC_CHECK_LIB(crypto, DSA_set0_key, [
+ AC_DEFINE(HAVE_DSA_SET0_KEY, 1, [Define to 1 if OpenSSL has DSA_set0_key])
+ AC_SUBST(HAVE_DSA_SET0_KEY, [1])
+ ], []
+)
+
+AC_CHECK_LIB(crypto, DSA_set0_pqg, [
+ AC_DEFINE(HAVE_DSA_SET0_PQG, 1, [Define to 1 if OpenSSL has DSA_set0_pqg])
+ AC_SUBST(HAVE_DSA_SET0_PQG, [1])
+ ], []
+)
+
+AC_CHECK_LIB(crypto, DSA_SIG_set0, [
+ AC_DEFINE(HAVE_DSA_SIG_SET0, 1, [Define to 1 if OpenSSL has DSA_SIG_set0])
+ AC_SUBST(HAVE_DSA_SIG_SET0, [1])
+ ], []
+)
+
+AC_CHECK_LIB(crypto, RSA_set0_key, [
+ AC_DEFINE(HAVE_RSA_SET0_KEY, 1, [Define to 1 if OpenSSL has RSA_set0_key])
+ AC_SUBST(HAVE_RSA_SET0_KEY, [1])
+ ], []
+)
+
+AC_CHECK_LIB(crypto, BN_bn2binpad, [
+ AC_DEFINE(HAVE_BN2BINPAD, 1, [Define to 1 if OpenSSL has BN_bn2binpad])
+ AC_SUBST(HAVE_BN2BINPAD, [1])
+ ], []
+)
+
+fi
+
+AM_CONDITIONAL([WITH_OPENSSL],[test "$with_crypto" = openssl])
+AC_SUBST(WITH_OPENSSL_INCLUDE)
+AC_SUBST(WITH_OPENSSL_LIB)
+
+#=================
# Check for NSS library.
-# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS
-# have a header named nss.h... so make extra check for NSS's sechash.h
+# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS
+# have a header named nss.h... so make extra check for NSS's sechash.h
# which we use too and hopefully is slightly more unique to NSS.
WITH_NSS_INCLUDE=
WITH_NSS_LIB=
-if test "$with_beecrypt" != yes ; then
+if test "$with_crypto" = nss; then
+# If we have pkgconfig make sure CPPFLAGS are setup correctly for the nss
+# -I include path. Otherwise the below checks will fail because nspr.h
+# cannot be found.
+AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], [$PATH:/usr/bin:/usr/local/bin])
+if test "x$PKGCONFIG" != "xno"; then
+ CPPFLAGS="$CPPFLAGS $($PKGCONFIG --cflags nss)"
+fi
AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
AC_MSG_ERROR([missing required NSPR / NSS header])
])
@@ -335,6 +464,53 @@ AC_SUBST(WITH_POPT_INCLUDE)
AC_SUBST(WITH_POPT_LIB)
#=================
+# Check for libarchive library.
+AC_ARG_WITH([archive], [AS_HELP_STRING([--with-archive], [build rpm2archive - requires libarchive])],
+ [],
+ [with_archive=yes])
+
+WITH_ARCHIVE_INCLUDE=
+WITH_ARCHIVE_LIB=
+AS_IF([test "$with_archive" != no],[
+ AC_CHECK_HEADER([archive.h], [
+ AC_CHECK_LIB(archive, archive_write_open_filename, [
+ WITH_ARCHIVE_INCLUDE=
+ WITH_ARCHIVE_LIB="-larchive"
+ ],[
+ AC_MSG_ERROR([missing required library 'libarchive'])
+ ])
+],[
+ AC_MSG_ERROR([missing required header archive.h])
+ ])
+])
+
+AC_SUBST(WITH_ARCHIVE_INCLUDE)
+AC_SUBST(WITH_ARCHIVE_LIB)
+AM_CONDITIONAL(WITH_ARCHIVE,[test "$with_archive" = yes])
+
+#=================
+# Check for elfutils libdw library with dwelf_elf_gnu_build_id.
+WITH_LIBDW_LIB=
+HAVE_LIBDW_STRTAB=
+AS_IF([test "$WITH_LIBELF" = yes],[
+ AC_CHECK_HEADERS([elfutils/libdwelf.h],[
+ # dwelf_elf_gnu_build_id was introduced in elfutils 0.159
+ AC_CHECK_LIB(dw, dwelf_elf_gnu_build_id, [
+ AC_DEFINE(HAVE_LIBDW, 1,
+ [Define to 1 if you have elfutils libdw library])
+ WITH_LIBDW_LIB="-ldw"
+ WITH_LIBDW=yes
+ # If possible we also want the strtab functions from elfutils 0.167.
+ # But we can fall back on the (unsupported) ebl alternatives if not.
+ AC_CHECK_LIB(dw, dwelf_strtab_init, [HAVE_LIBDW_STRTAB=yes])
+ ])
+ ])
+])
+AC_SUBST(WITH_LIBDW_LIB)
+AM_CONDITIONAL(LIBDW,[test "$WITH_LIBDW" = yes])
+AM_CONDITIONAL(HAVE_LIBDW_STRTAB,[test "$HAVE_LIBDW_STRTAB" = yes])
+
+#=================
# Process --with/without-external-db
AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])],
[case "$with_external_db" in
@@ -360,23 +536,95 @@ yes )
AC_MSG_ERROR([missing required header db.h])
])
;;
-* ) # Fall back to internal db if available
+no|maybe )
+ # Try internal database first, then fall back to external
+ # unless --without-external-db (no) was explicitly given.
if [ test -x db/dist/configure ]; then
AC_DEFINE(HAVE_DB_H, 1, [Define if you have the <db3/db.h> header file])
else
- AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
+ case "$with_external_db" in
+ maybe)
+ AC_CHECK_HEADERS([db.h],[
+ AC_PREPROC_IFELSE([
+ AC_LANG_SOURCE([
+ #include <db.h>
+ #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5))
+ #error Berkeley DB too old
+ #endif
+ ])
+ ],[ WITH_DB_LIB=-ldb ],
+ [ AC_MSG_ERROR([Berkeley DB version >= 4.5 required])
+ ])
+ ],[
+ AC_MSG_ERROR([missing required header db.h])
+ ])
+ ;;
+ no)
+ AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
+ ;;
+ esac
fi
;;
esac
AC_SUBST([WITH_DB_LIB])
+#=================
+# Process --enable-ndb
+AC_ARG_ENABLE([ndb], [AS_HELP_STRING([--enable-ndb (EXPERIMENTAL)],[enable the new rpm database format])],
+[case "$enable_ndb" in
+yes|no) ;;
+*) AC_MSG_ERROR([invalid argument to --enable-ndb])
+ ;;
+esac],
+[enable_ndb=no])
+AS_IF([test "$enable_ndb" = yes],[
+ AC_CHECK_FUNCS([mremap],
+ [AC_DEFINE(ENABLE_NDB, 1, [Enable new rpm database format?])],
+ [AC_MSG_ERROR([mremap function required by ndb])],
+ [#include <sys/mman.h>])
+])
+AM_CONDITIONAL([NDB], [test "$enable_ndb" = yes])
+
+#=================
+# Check for LMDB support
+AC_ARG_ENABLE([lmdb],
+ [AS_HELP_STRING([--enable-lmdb=@<:@yes/no/auto@:>@ (EXPERIMENTAL)],
+ [build with LMDB rpm database format support (default=auto)])],
+ [enable_lmdb="$enableval"],
+ [enable_lmdb=auto])
+
+AS_IF([test "x$enable_lmdb" != "xno"], [
+ PKG_CHECK_MODULES([LMDB], [lmdb], [have_lmdb=yes], [have_lmdb=no])
+ AS_IF([test "$enable_lmdb" = "yes"], [
+ if test "$have_lmdb" = "no"; then
+ AC_MSG_ERROR([--enable-lmdb specified, but not available])
+ fi
+ ])
+])
+
+if test "x$have_lmdb" = "xyes"; then
+ AC_DEFINE([WITH_LMDB], [1], [Define if LMDB is available])
+ LMDB_REQUIRES=lmdb
+ AC_SUBST(LMDB_REQUIRES)
+fi
+AM_CONDITIONAL([LMDB], [test "x$have_lmdb" = "xyes"])
+
AM_GNU_GETTEXT_VERSION([0.16.1])
AM_GNU_GETTEXT([external])
+AM_ICONV
dnl Checks for header files we can live without.
AC_HEADER_STDC
+dnl glibc and autoconf don't really play well together.
+dnl glibc will produce a warning when including the wrong header.
+dnl but still define major and minor. Causing us to include the header
+dnl that produces a giant warning for each major/minor use.
+dnl Use -Werror to work around that.
+old_CFLAGS=$CFLAGS
+CFLAGS="$CFLAGS -Werror"
AC_HEADER_MAJOR
+CFLAGS=$old_CFLAGS
AC_STRUCT_DIRENT_D_TYPE
AC_CHECK_HEADERS(limits.h)
@@ -386,6 +634,7 @@ AC_CHECK_HEADERS(sys/utsname.h)
AC_CHECK_HEADERS(sys/systemcfg.h)
AC_CHECK_HEADERS(sys/param.h)
+AC_CHECK_HEADERS(sys/auxv.h)
dnl statfs portability fiddles.
dnl
@@ -400,25 +649,25 @@ dnl
found_struct_statfs=no
if test X$found_struct_statfs = Xno ; then
-dnl first try including sys/vfs.h
+dnl Solaris 2.6+ wants to use statvfs
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-#include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
- AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
+#include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
+ AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
+ [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
found_struct_statfs=yes],[])
fi
if test X$found_struct_statfs = Xno ; then
-dnl Solaris 2.6+ wants to use statvfs
+dnl first try including sys/vfs.h
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-#include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
- AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
- [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
+#include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
+ AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
found_struct_statfs=yes],[])
fi
@@ -518,13 +767,26 @@ dnl Checks for library functions.
AC_CHECK_FUNCS(putenv)
AC_CHECK_FUNCS(mempcpy)
AC_CHECK_FUNCS(fdatasync)
+AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
+AC_CHECK_FUNCS(lutimes)
+AC_CHECK_FUNCS(mergesort)
+AC_CHECK_FUNCS(getauxval)
+AC_CHECK_FUNCS(setprogname, [], [], [#include <stdlib.h>])
+
+AC_MSG_CHECKING([whether __progname is defined])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([extern const char *__progname;],
+ [if (*__progname == 0) return 0;])],
+ AC_DEFINE([HAVE___PROGNAME], [1], [Define if __progname is defined])
+ AC_MSG_RESULT([yes]),
+ AC_MSG_RESULT([no]))
AC_REPLACE_FUNCS(stpcpy stpncpy)
AC_CHECK_FUNCS([secure_getenv __secure_getenv])
AC_CHECK_FUNCS(
- [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown],
+ [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown \
+ utimes getline],
[], [AC_MSG_ERROR([function required by rpm])])
AC_LIBOBJ(fnmatch)
@@ -538,32 +800,15 @@ yes|no) ;;
esac],
[enable_python=no])
+WITH_PYTHON_SUBPACKAGE=0
AS_IF([test "$enable_python" = yes],[
AM_PATH_PYTHON([2.6],[
- WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'`
- WITH_PYTHON_SUBPACKAGE=1
- save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE"
- AC_CHECK_HEADER([Python.h],[],
- [AC_MSG_ERROR([missing Python.h])
- ])
- CPPFLAGS="$save_CPPFLAGS"
- save_LIBS="$LIBS"
- AC_SEARCH_LIBS([Py_Main],[python${PYTHON_VERSION} python],[
- WITH_PYTHON_LIB="$ac_res"
- ],[AC_MSG_ERROR([missing python library])
- ])
- LIBS="$save_LIBS"
+ PKG_CHECK_MODULES([PYTHON], [python-${PYTHON_VERSION}], [WITH_PYTHON_SUBPACKAGE=1])
+ AC_SUBST(PYTHON_CFLAGS)
+ AC_SUBST(PYTHON_LIB)
])
-],[
- WITH_PYTHON_INCLUDE=
- WITH_PYTHON_LIB=
- WITH_PYTHON_SUBPACKAGE=0
])
-AC_SUBST(WITH_PYTHON_INCLUDE)
-AC_SUBST(WITH_PYTHON_LIB)
-
AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1])
AC_PATH_PROG(DOXYGEN, doxygen, no)
@@ -601,6 +846,8 @@ AS_IF([test "$with_selinux" = yes],[
AC_MSG_ERROR([--with-selinux given, but selinux_getpolicytype not found in libselinux])])
AC_CHECK_LIB([selinux],[selinux_reset_config],[],[
AC_MSG_ERROR([--with-selinux given, but selinux_reset_config not found in libselinux])])
+ AC_CHECK_LIB([selinux],[setexecfilecon],[
+ AC_DEFINE([HAVE_SETEXECFILECON],[1],[Define to 1 if SELinux setexecfilecon is present])])
LIBS="$save_LIBS"
],[
AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found])
@@ -618,48 +865,11 @@ AS_IF([test "$with_selinux" = yes],[
],[
AC_MSG_ERROR([--with-selinux given, but selinux/label.h not found])
])
-
- dnl FIXME: semanage is only needed for the sepolicy plugin
- AC_CHECK_HEADER([semanage/semanage.h],[
- save_LIBS="$LIBS"
- AC_CHECK_LIB([semanage],[semanage_begin_transaction],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_begin_transaction missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_commit],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_commit missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_connect],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_connect missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_disconnect],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_disconnect missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_handle_create],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_handle_create missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_handle_destroy],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_handle_destroy missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_is_connected],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_is_connected missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_module_install_base_file],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_module_install_base_file missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_module_install_file],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_module_install_file missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_module_remove],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_module_remove missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_select_store],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_select_store missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_set_check_contexts],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_set_check_contexts missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_set_create_store],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_set_create_store missing in libsemanage])])
- AC_CHECK_LIB([semanage],[semanage_set_reload],[],[
- AC_MSG_ERROR([--with-selinux given, but semanage_set_reload missing in libsemanage])])
- LIBS="$save_LIBS"
- ],[
- AC_MSG_ERROR([--with-selinux given, but semanage/semanage.h not found])
- ])
])
AS_IF([test "$with_selinux" = yes],[
AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?])
WITH_SELINUX_LIB="-lselinux"
- WITH_SEMANAGE_LIB="-lsemanage"
])
AC_SUBST(WITH_SELINUX_LIB)
AC_SUBST(WITH_SEMANAGE_LIB)
@@ -729,6 +939,27 @@ AC_SUBST(WITH_MSM_LIB)
AC_SUBST(WITH_MSM_INCLUDE)
AM_CONDITIONAL(MSM,[test "$with_msm" = yes])
+
+# libimaevm
+with_iamevm=no
+AC_ARG_WITH(imaevm, [AS_HELP_STRING([--with-imaevm],[build with imaevm support])])
+if test "$with_imaevm" = yes ; then
+ AC_MSG_CHECKING([libimaevm >= 1.0])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <imaevm.h>]],
+ [[return sign_hash(NULL, NULL, 0, NULL, NULL, NULL);]]
+ )],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE(WITH_IMAEVM, 1, [Build with imaevm support?])
+ WITH_IMAEVM_LIB="-limaevm"
+ ],
+ [AC_MSG_ERROR([libimaevm not present or too old (< 1.0)])]
+ )
+fi
+AM_CONDITIONAL(WITH_IMAEVM,[test "$with_imaevm" = yes])
+AC_SUBST(WITH_IMAEVM_LIB)
+
# libcap
WITH_CAP_LIB=
AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])],
@@ -808,6 +1039,21 @@ AS_IF([test "$enable_plugins" = yes],[
])
AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes])
+with_dbus=no
+AS_IF([test "$enable_plugins" != no],[
+ PKG_CHECK_MODULES([DBUS],
+ [dbus-1 >= 1.3],
+ [AC_DEFINE(DBUS, 1, [Build with dbus support?]) with_dbus=yes],
+ [with_dbus=no])
+ AC_SUBST(DBUS_CFLAGS)
+ AC_SUBST(DBUS_LIBS)
+])
+AM_CONDITIONAL(DBUS, [test "$with_dbus" = yes])
+
+AS_IF([test "$enable_plugins" != no],[
+ AC_CHECK_FUNCS(lsetxattr, [], [], [#include <sys/xattr.h>])
+])
+AM_CONDITIONAL(IMA, [test "x$ac_cv_func_lsetxattr" = xyes])
with_dmalloc=no
AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])])
@@ -816,7 +1062,10 @@ if test "$with_dmalloc" = yes ; then
LIBS="$LIBS -ldmalloc"
fi
-AC_CHECK_FUNCS(getpassphrase)
+user_with_uid0=$(awk -F: '$3==0 {print $1;exit}' /etc/passwd)
+group_with_gid0=$(awk -F: '$3==0 {print $1;exit}' /etc/group)
+AC_DEFINE_UNQUOTED([UID_0_USER],["$user_with_uid0"],[Get the user name having userid 0])
+AC_DEFINE_UNQUOTED([GID_0_GROUP],["$group_with_gid0"],[Get the group name having groupid 0])
#
# get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os
@@ -884,6 +1133,13 @@ AC_SUBST(RPMCANONVENDOR)
AC_SUBST(RPMCANONOS)
AC_SUBST(RPMCANONGNU)
+RUNDIR="/run"
+AC_ARG_WITH([rundir],
+ AS_HELP_STRING([--with-rundir=RUNDIR], [specify run-time variable directory]),
+ [RUNDIR=$withval])
+AC_DEFINE_UNQUOTED([RUNDIR],["${RUNDIR}"],[run-time variable directory])
+AC_SUBST(RUNDIR)
+
if test X"$prefix" = XNONE ; then
usrprefix="$ac_default_prefix"
else
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 3921f2472..d2f520d64 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -7,8 +7,9 @@ man_man1_DATA = gendiff.1
EXTRA_DIST += $(man_man1_DATA)
man_man8dir = $(mandir)/man8
-man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
-man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpmqpack.8
+man_man8_DATA = rpm.8 rpm-misc.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
+man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
+man_man8_DATA += rpm-plugin-systemd-inhibit.8
EXTRA_DIST += $(man_man8_DATA)
man_fr_man8dir = $(mandir)/fr/man8
diff --git a/doc/hacking.doxy.in b/doc/hacking.doxy.in
index 257aae6a4..728415a43 100644
--- a/doc/hacking.doxy.in
+++ b/doc/hacking.doxy.in
@@ -1,463 +1,759 @@
-# Doxyfile 1.5.2
+# Doxyfile 1.8.8
# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
#
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
-# This tag specifies the encoding used for all characters in the config file that
-# follow. The default is UTF-8 which is also the encoding used for all text before
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
-# possible encodings.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
PROJECT_NAME = @PACKAGE@
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
PROJECT_NUMBER = @VERSION@
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
OUTPUT_DIRECTORY = doc/hacking
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
CREATE_SUBDIRS = NO
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
OUTPUT_LANGUAGE = English
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
BRIEF_MEMBER_DESC = YES
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
+# The default value is: YES.
REPEAT_BRIEF = YES
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
-ABBREVIATE_BRIEF =
+ABBREVIATE_BRIEF =
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
# description.
+# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
+# The default value is: NO.
INLINE_INHERITED_MEMB = NO
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
FULL_PATH_NAMES = YES
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH = @top_srcdir@/
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
-STRIP_FROM_INC_PATH =
+STRIP_FROM_INC_PATH =
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
SHORT_NAMES = NO
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
JAVADOC_AUTOBRIEF = YES
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
INHERIT_DOCS = YES
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 8
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
-ALIASES =
+TCL_SUBST =
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = YES
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
+# The default value is: NO.
CPP_CLI_SUPPORT = NO
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
+# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
SUBGROUPING = YES
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
EXTRACT_ALL = YES
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
EXTRACT_PRIVATE = NO
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
EXTRACT_STATIC = YES
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
INTERNAL_DOCS = YES
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
CASE_SENSE_NAMES = YES
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
HIDE_SCOPE_NAMES = NO
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
SHOW_INCLUDE_FILES = YES
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
INLINE_INFO = YES
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
SORT_MEMBER_DOCS = YES
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
SORT_BRIEF_DOCS = NO
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
GENERATE_TODOLIST = YES
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
GENERATE_TESTLIST = YES
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
GENERATE_BUGLIST = YES
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
SHOW_USED_FILES = YES
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
-SHOW_DIRECTORIES = NO
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
+SHOW_NAMESPACES = YES
-FILE_VERSION_FILTER =
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
QUIET = NO
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
WARNINGS = YES
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
WARN_IF_DOC_ERROR = YES
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
WARN_NO_PARAMDOC = NO
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
-WARN_LOGFILE =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
-INPUT = @top_srcdir@/doc/hacking/Doxyheader \
- @top_srcdir@/build.c \
- @top_srcdir@/build.h \
+INPUT = @top_srcdir@/doc/hacking/Doxyheader.h \
@top_srcdir@/config.h \
@top_srcdir@/debug.h \
@top_srcdir@/macros \
@@ -465,6 +761,12 @@ INPUT = @top_srcdir@/doc/hacking/Doxyheader \
@top_srcdir@/rpmpopt-@VERSION@ \
@top_srcdir@/rpmrc \
@top_srcdir@/rpm2cpio.c \
+ @top_srcdir@/rpm2archive.c \
+ @top_srcdir@/rpmbuild.c \
+ @top_srcdir@/rpmdb.c \
+ @top_srcdir@/rpmkeys.c \
+ @top_srcdir@/rpmsign.c \
+ @top_srcdir@/rpmspec.c \
@top_srcdir@/system.h \
@top_srcdir@/build/ \
@top_srcdir@/doc/manual/builddependencies \
@@ -483,800 +785,1583 @@ INPUT = @top_srcdir@/doc/hacking/Doxyheader \
@top_srcdir@/doc/manual/tsort \
@top_srcdir@/lib/ \
@top_srcdir@/lua/ \
- @top_srcdir@/rpmdb/ \
@top_srcdir@/rpmio/ \
@top_srcdir@/python/ \
@top_srcdir@/tools/
-# This tag can be used to specify the character encoding of the source files that
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
FILE_PATTERNS = *.c \
*.h
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
RECURSIVE = NO
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
-EXCLUDE = @top_srcdir@/db @top_srcdir@/db.h
+EXCLUDE = @top_srcdir@/db \
+ @top_srcdir@/db.h
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
+# The default value is: NO.
EXCLUDE_SYMLINKS = NO
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS =
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the output.
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
-EXCLUDE_SYMBOLS =
+EXCLUDE_SYMBOLS =
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
EXAMPLE_PATH = @top_srcdir@/doc/manual
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
-EXAMPLE_PATTERNS =
+EXAMPLE_PATTERNS =
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
EXAMPLE_RECURSIVE = NO
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
-IMAGE_PATH =
+IMAGE_PATH =
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
-INPUT_FILTER =
+INPUT_FILTER =
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
-FILTER_PATTERNS =
+FILTER_PATTERNS =
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
FILTER_SOURCE_FILES = NO
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
SOURCE_BROWSER = YES
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
INLINE_SOURCES = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
STRIP_CODE_COMMENTS = YES
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
REFERENCED_BY_RELATION = YES
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
REFERENCES_RELATION = YES
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code. Otherwise they will link to the documentstion.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
ALPHABETICAL_INDEX = NO
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: NO.
GENERATE_HTML = YES
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra stylesheet files is of importance (e.g. the last
+# stylesheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-HTML_HEADER =
+GENERATE_HTMLHELP = NO
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HTML_FOOTER =
+CHM_FILE =
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HTML_STYLESHEET =
+HHC_LOCATION =
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HTML_ALIGN_MEMBERS = YES
+GENERATE_CHI = NO
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-GENERATE_HTMLHELP = NO
+CHM_INDEX_ENCODING =
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-CHM_FILE =
+BINARY_TOC = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HHC_LOCATION =
+TOC_EXPAND = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-GENERATE_CHI = NO
+DISABLE_INDEX = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-BINARY_TOC = NO
+GENERATE_TREEVIEW = NO
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-TOC_EXPAND = NO
+ENUM_VALUES_PER_LINE = 4
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-DISABLE_INDEX = NO
+TREEVIEW_WIDTH = 250
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-ENUM_VALUES_PER_LINE = 4
+EXT_LINKS_IN_WINDOW = NO
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-GENERATE_TREEVIEW = NO
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
+SEARCHENGINE = NO
-TREEVIEW_WIDTH = 250
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
GENERATE_LATEX = NO
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = letter
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
+# for the replacement values of the other commands the user is referred to
+# HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-EXTRA_PACKAGES =
+LATEX_FOOTER =
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-LATEX_HEADER =
+LATEX_EXTRA_FILES =
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = NO
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = NO
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
GENERATE_RTF = NO
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_STYLESHEET_FILE =
+RTF_STYLESHEET_FILE =
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_EXTENSIONS_FILE =
+RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
GENERATE_MAN = NO
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
GENERATE_XML = NO
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
-XML_SCHEMA =
+XML_PROGRAMLISTING = YES
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
-XML_DTD =
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
+GENERATE_DOCBOOK = NO
-XML_PROGRAMLISTING = YES
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_PERLMOD = NO
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
ENABLE_PREPROCESSING = YES
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = YES
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-INCLUDE_PATH =
+INCLUDE_PATH =
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-INCLUDE_FILE_PATTERNS =
+INCLUDE_FILE_PATTERNS =
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-PREDEFINED =
+PREDEFINED =
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-EXPAND_AS_DEFINED =
+EXPAND_AS_DEFINED =
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE = Doxytags
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
ALLEXTERNALS = NO
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
EXTERNAL_GROUPS = YES
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
+# The default value is: YES.
CLASS_DIAGRAMS = YES
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
-# be found in the default search path.
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
-MSCGEN_PATH =
+DIA_PATH =
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
HAVE_DOT = @HAVE_DOT@
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = YES
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALLER_GRAPH = NO
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
-DOT_PATH =
+MSCFILE_DIRS =
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
-DOTFILE_DIRS =
+DIAFILE_DIRS =
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen will always
-# show the root nodes and its direct children regardless of this setting.
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+PLANTUML_JAR_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_GRAPH_MAX_NODES = 50
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
diff --git a/doc/hacking/Doxyheader b/doc/hacking/Doxyheader.h
index 0b254d015..0b254d015 100644
--- a/doc/hacking/Doxyheader
+++ b/doc/hacking/Doxyheader.h
diff --git a/doc/librpm.doxy.in b/doc/librpm.doxy.in
index 440e8265b..407e55cdd 100644
--- a/doc/librpm.doxy.in
+++ b/doc/librpm.doxy.in
@@ -1,1255 +1,2332 @@
-# Doxyfile 1.5.2
+# Doxyfile 1.8.8
# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
#
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
-# This tag specifies the encoding used for all characters in the config file that
-# follow. The default is UTF-8 which is also the encoding used for all text before
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
-# possible encodings.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
PROJECT_NAME = @PACKAGE@
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
PROJECT_NUMBER = @VERSION@
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
OUTPUT_DIRECTORY = doc/librpm
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
CREATE_SUBDIRS = NO
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
OUTPUT_LANGUAGE = English
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
BRIEF_MEMBER_DESC = YES
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
+# The default value is: YES.
REPEAT_BRIEF = YES
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
-ABBREVIATE_BRIEF =
+ABBREVIATE_BRIEF =
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
# description.
+# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
+# The default value is: NO.
INLINE_INHERITED_MEMB = NO
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
-# FULL_PATH_NAMES = YES
-FULL_PATH_NAMES = NO
+FULL_PATH_NAMES = NO
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-# STRIP_FROM_PATH = @top_srcdir@/
STRIP_FROM_PATH =
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
-STRIP_FROM_INC_PATH =
+STRIP_FROM_INC_PATH =
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
SHORT_NAMES = NO
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
JAVADOC_AUTOBRIEF = YES
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
INHERIT_DOCS = YES
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 8
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
-ALIASES =
+TCL_SUBST =
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = YES
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
-# include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
+# The default value is: NO.
CPP_CLI_SUPPORT = NO
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
+# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
SUBGROUPING = YES
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
EXTRACT_ALL = YES
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
EXTRACT_PRIVATE = NO
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
EXTRACT_STATIC = YES
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
INTERNAL_DOCS = YES
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
CASE_SENSE_NAMES = YES
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
HIDE_SCOPE_NAMES = NO
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
SHOW_INCLUDE_FILES = YES
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
INLINE_INFO = YES
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
SORT_MEMBER_DOCS = YES
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
SORT_BRIEF_DOCS = NO
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
GENERATE_TODOLIST = YES
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
GENERATE_TESTLIST = YES
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
GENERATE_BUGLIST = YES
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
SHOW_USED_FILES = YES
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
-SHOW_DIRECTORIES = NO
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
+SHOW_NAMESPACES = YES
-FILE_VERSION_FILTER =
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
QUIET = NO
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
WARNINGS = YES
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
WARN_IF_DOC_ERROR = YES
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
WARN_NO_PARAMDOC = NO
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
-WARN_LOGFILE =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
-INPUT = \
- @top_srcdir@/doc/librpm/Doxyheader \
- @pkginclude_HEADERS@
+INPUT = @top_srcdir@/doc/librpm/Doxyheader.h \
+ @pkginclude_HEADERS@
-# This tag can be used to specify the character encoding of the source files that
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
-FILE_PATTERNS = *.c \
- *.h
+FILE_PATTERNS = *.h
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
RECURSIVE = NO
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
-EXCLUDE =
+EXCLUDE =
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
+# The default value is: NO.
EXCLUDE_SYMLINKS = NO
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS =
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the output.
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
-EXCLUDE_SYMBOLS =
+EXCLUDE_SYMBOLS =
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
EXAMPLE_PATH = @top_srcdir@/doc/manual
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
-EXAMPLE_PATTERNS =
+EXAMPLE_PATTERNS =
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
EXAMPLE_RECURSIVE = NO
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
-IMAGE_PATH =
+IMAGE_PATH =
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
-INPUT_FILTER =
+INPUT_FILTER =
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
-FILTER_PATTERNS =
+FILTER_PATTERNS =
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
FILTER_SOURCE_FILES = NO
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
SOURCE_BROWSER = YES
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
INLINE_SOURCES = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
STRIP_CODE_COMMENTS = YES
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
REFERENCED_BY_RELATION = YES
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
REFERENCES_RELATION = YES
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code. Otherwise they will link to the documentstion.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
ALPHABETICAL_INDEX = NO
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: NO.
GENERATE_HTML = YES
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra stylesheet files is of importance (e.g. the last
+# stylesheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-HTML_HEADER =
+GENERATE_HTMLHELP = NO
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HTML_FOOTER =
+CHM_FILE =
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HTML_STYLESHEET =
+HHC_LOCATION =
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HTML_ALIGN_MEMBERS = YES
+GENERATE_CHI = NO
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-GENERATE_HTMLHELP = NO
+CHM_INDEX_ENCODING =
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-CHM_FILE =
+BINARY_TOC = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HHC_LOCATION =
+TOC_EXPAND = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-GENERATE_CHI = NO
+DISABLE_INDEX = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-BINARY_TOC = NO
+GENERATE_TREEVIEW = NO
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-TOC_EXPAND = NO
+ENUM_VALUES_PER_LINE = 4
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-DISABLE_INDEX = NO
+TREEVIEW_WIDTH = 250
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-ENUM_VALUES_PER_LINE = 4
+EXT_LINKS_IN_WINDOW = NO
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-GENERATE_TREEVIEW = NO
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
+SEARCHENGINE = NO
-TREEVIEW_WIDTH = 250
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
GENERATE_LATEX = NO
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = letter
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
+# for the replacement values of the other commands the user is referred to
+# HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-EXTRA_PACKAGES =
+LATEX_FOOTER =
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-LATEX_HEADER =
+LATEX_EXTRA_FILES =
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = NO
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = NO
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
GENERATE_RTF = NO
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_STYLESHEET_FILE =
+RTF_STYLESHEET_FILE =
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_EXTENSIONS_FILE =
+RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
GENERATE_MAN = NO
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
GENERATE_XML = NO
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
-XML_SCHEMA =
+XML_PROGRAMLISTING = YES
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
-XML_DTD =
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
+GENERATE_DOCBOOK = NO
-XML_PROGRAMLISTING = YES
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_PERLMOD = NO
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
ENABLE_PREPROCESSING = YES
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = YES
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-INCLUDE_PATH =
+INCLUDE_PATH =
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-INCLUDE_FILE_PATTERNS =
+INCLUDE_FILE_PATTERNS =
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-PREDEFINED =
+PREDEFINED =
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-EXPAND_AS_DEFINED =
+EXPAND_AS_DEFINED =
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE = Doxytags
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
ALLEXTERNALS = NO
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
EXTERNAL_GROUPS = YES
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
+# The default value is: YES.
CLASS_DIAGRAMS = YES
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
-# be found in the default search path.
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
-MSCGEN_PATH =
+DIA_PATH =
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
HAVE_DOT = @HAVE_DOT@
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = YES
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALLER_GRAPH = NO
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
-DOT_PATH =
+MSCFILE_DIRS =
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
-DOTFILE_DIRS =
+DIAFILE_DIRS =
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen will always
-# show the root nodes and its direct children regardless of this setting.
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+PLANTUML_JAR_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_GRAPH_MAX_NODES = 50
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
diff --git a/doc/librpm/Doxyheader b/doc/librpm/Doxyheader
deleted file mode 100644
index c8456c342..000000000
--- a/doc/librpm/Doxyheader
+++ /dev/null
@@ -1,58 +0,0 @@
-/*! \mainpage librpm API Documentation.
- */
-/** \defgroup rpmcli Command Line API.
- */
-/** \defgroup rpmbuild Build API.
- */
-/** \defgroup rpmrc RPMRC.
- */
-/** \defgroup rpmtypes RPM data types.
- */
-/** \defgroup rpmts Transaction Set API.
- */
-/** \defgroup rpmte Transaction Element API.
- */
-/** \defgroup rpmds Dependency Set API.
- */
-/** \defgroup rpmfi File Info API.
- */
-/** \defgroup rpmfc File Classification API.
- */
-/** \defgroup rpmps Problem Set API.
- */
-/** \defgroup rpmprob Problem Element API.
- */
-/** \defgroup rpmkeyring RPM keyring API.
- */
-/** \defgroup rpmmacro Macro API.
- */
-/** \defgroup rpmlog Logging API.
- */
-/** \defgroup rpmpgp OpenPGP API.
- */
-/** \defgroup rpmsq Signal Queue API.
- */
-/** \defgroup rpmsw Statistics API.
- */
-/** \defgroup signature Signature API.
- */
-/** \defgroup header Header API.
- */
-/** \defgroup rpmtag RPM Tag API.
- */
-/** \defgroup rpmtd RPM Tag Data Container API.
- */
-/** \defgroup rpmdb Database API.
- */
-/** \defgroup rpmio RPM IO API.
- */
-/** \defgroup rpmfileutil File and Path Manipulation API.
- */
-/** \defgroup rpmurl URL Manipulation API.
- */
-/** \defgroup rpmstring String Manipulation API.
- */
-/** \defgroup rpmstrpool String Pool API.
- */
-/** \defgroup rpmargv Argument Manipulation API.
- */
diff --git a/doc/librpm/Doxyheader.h b/doc/librpm/Doxyheader.h
new file mode 100644
index 000000000..365075ab2
--- /dev/null
+++ b/doc/librpm/Doxyheader.h
@@ -0,0 +1,136 @@
+/*! \mainpage librpm API Documentation.
+ This documents the librpm API as available to rpm itself and to the
+ various depsolvers or language bindings that rely upon it.
+
+ It enables to build tools for:
+ - \link rpmbuild creating \endlink,
+ - \link rpmsign signing \endlink,
+ - \link rpmtd querying \endlink,
+ - or \link rpmts (un)installing \endlink RPM packages.
+
+ */
+/** \defgroup buildsign Building & signing packages:
+ *
+ * @{
+ */
+/** \defgroup rpmbuild Build API.
+ \brief API for building packages.
+ */
+/** \defgroup signature Signature Tags API.
+ \brief List of signature tags.
+ */
+/** \defgroup rpmsign Signature API.
+ \brief How to add or remove a signature from a package header.
+ */
+/** @}*/
+
+/** \defgroup datatypes Data types:
+ *
+ * @{
+ */
+/** \defgroup rpmtypes RPM data types.
+ \brief The abstract RPM data types.
+ */
+/** \defgroup rpmstring String Manipulation API.
+ \brief String Manipulation API.
+ */
+/** \defgroup rpmstrpool String Pool API.
+ \brief How to store strings in pools.
+ */
+/** @} */
+/** \defgroup install (un)Installing packages:
+ *
+ * @{
+ */
+/** \defgroup rpmds Dependency Set API.
+ \brief How to compare dependencies.
+ */
+/** \defgroup rpmcallback Callback signature & types.
+ \brief The signature of function to register as callback and the cases where it can be called
+ */
+/** \defgroup rpmts Transaction Set API.
+ \brief How to create, run & destroy a package transaction.
+ */
+/** \defgroup rpmte Transaction Element API.
+ \brief How to retrieve information from a transaction element.
+ */
+/** \defgroup rpmps Problem Set API.
+ \brief Problem Set API.
+ */
+/** \defgroup rpmprob Problem Element API.
+ \brief Problem Element API.
+ */
+/** \defgroup rpmvf Verify API.
+ \brief How to verify a package
+ */
+/** @} */
+
+/** \defgroup rpmfiles File Info Set API.
+ \brief File Info Set API.
+ */
+/** \defgroup rpmfi File Info Set Iterator API.
+ \brief File Info Set Iterator API.
+ */
+/** \defgroup rpmfc File Classification API.
+ \brief Structures and methods for build-time file classification
+ */
+/** \defgroup rpmkeyring RPM keyring API.
+ \brief RPM keyring API.
+ */
+/** \defgroup rpmmacro Macro API.
+ \brief Macro API.
+ */
+/** \defgroup rpmlog Logging API.
+ \brief RPM Logging facilities.
+ */
+/** \defgroup rpmpgp OpenPGP API.
+ \brief OpenPGP constants and structures from RFC-2440.
+ */
+/** \defgroup headquery Querying package headers:
+ *
+ * @{
+ */
+/** \defgroup header Header API.
+ \brief How to manipulate package headers (which carries all information about a package).
+ */
+/** \defgroup rpmtag RPM Tag API.
+ \brief Manipulating RPM tags (accessing values, types, ...)
+ */
+/** \defgroup rpmtd RPM Tag Data Container API.
+ \brief How to retrieve data from package headers.
+ */
+/** @} */
+/** \defgroup io I/O
+ *
+ * @{
+ */
+/** \defgroup header Header API.
+/** \defgroup rpmdb Database API.
+ \brief Opening & accessing the RPM indices using Berkeley DB (the so called rpmdb)
+ */
+/** \defgroup rpmio RPM IO API.
+ \brief The RPM IO API (Fd_t is RPM equivalent to libc's FILE).
+ */
+/** \defgroup rpmfileutil File and Path Manipulation API.
+ \brief File and path manipulation helper functions.
+ */
+/** \defgroup rpmurl URL Manipulation API.
+ \brief A couple utils for URL Manipulation.
+ */
+/** \defgroup rpmargv Argument Manipulation API.
+ \brief Argument Manipulation API.
+ */
+/** \defgroup rpmcli Command Line API.
+ \brief Parsing RPM command line arguments.
+ */
+/** @} */
+/** \defgroup rpmsq Signal Queue API.
+ \brief Signal Queue API.
+ */
+/** \defgroup rpmsw Statistics API.
+ \brief Statistics API.
+ */
+/** \defgroup rpmrc RPMRC.
+ \brief Reading config files and getting some important configuration values.
+ */
+/** @} */
diff --git a/doc/manual/macros b/doc/manual/macros
index 90d45299a..1faf424dc 100644
--- a/doc/manual/macros
+++ b/doc/manual/macros
@@ -66,21 +66,35 @@ to perform useful operations. The current list is
%trace toggle print of debugging information before/after
expansion
%dump print the active (i.e. non-covered) macro table
+ %verbose is rpm in verbose mode?
- %{echo:...} print ... to stderr
- %{warn:...} print ... to stderr
- %{error:...} print ... to stderr and return BADSPEC
+ %{echo:...} print ... to stdout
+ %{warn:...} print warning: ... to stderr
+ %{error:...} print error: ... to stderr and return an error
%define ... define a macro
%undefine ... undefine a macro
%global ... define a macro whose body is available in global context
+ %{basename:...} basename(1) macro analogue
+ %{dirname:...} dirname(1) macro analogue
+ %{suffix:...} expand to suffix part of a file name
+ %{url2path:...} convert url to a local path
+ %{getenv:...} getenv(3) macro analogue
+ %{getconfdir:...} expand to rpm "home" directory (typically /usr/lib/rpm)
%{uncompress:...} expand ... to <file> and test to see if <file> is
compressed. The expansion is
cat <file> # if not compressed
gzip -dc <file> # if gzip'ed
bzip2 -dc <file> # if bzip'ed
+
+ %{load:...} load a macro file
+ %{lua:...} expand using the embedded Lua interpreter
%{expand:...} like eval, expand ... to <body> and (re-)expand <body>
+ %{shrink:...} trim leading and trailing whitespace, reduce
+ intermediate whitespace to a single space
+ %{quote:...} quote a parametric macro argument, needed to pass
+ empty strings or strings with whitespace
%{S:...} expand ... to <source> file name
%{P:...} expand ... to <patch> file name
diff --git a/doc/rpm-misc.8 b/doc/rpm-misc.8
new file mode 100644
index 000000000..f9bcdbc19
--- /dev/null
+++ b/doc/rpm-misc.8
@@ -0,0 +1,64 @@
+.TH "RPM misc options" 8
+.SH NAME rpm \- lesser need options for rpm(8)
+
+.SH OPTIONS
+.TP
+\fB\-\-predefine\fR='\fIMACRO EXPR\fB'\fR
+Defines \fIMACRO\fR with value \fIEXPR\fR. before loading macro files.
+
+.SH Switching off features
+.TP
+\fB\-\-color [never|auto|always]\fR
+Use terminal colors for highlighting error and debug message. Default is turning colors on for ttys only (\fBauto\fR).
+.TP
+
+\fB\-\-nocontexts\fR
+Disable the SELinux plugin if available. This stops the plugin from setting SELinux contexts for files and scriptlets.
+.TP
+\fB\-\-noglob\fR
+Do not glob arguments when installing package files.
+.TP
+\fB\-\-nocaps\fR
+Don't verify capabilities of files.
+.TP
+\fB\-\-excludeconfigs, \-\-noconfigs\fR
+Do not install configuration files.
+.TP
+\fB\-\-nohdrchk\fR
+Don't verify database header(s) when retrieved.
+
+.SH Debugging
+
+.TP
+\fB-d, \-\-debug\fR
+Print debugging information.
+.TP
+\fB\-\-deploops\fR
+Print dependency loops as warning.
+.TP
+\fB\-\-fsmdebug\fR
+Print debuging information of payload handling code.
+.TP
+\fB\-\-rpmfcdebug\fR
+Print debug information about files packaged.
+.TP
+\fB\-\-rpmiodebug\fR
+Print debug information about file IO.
+.TP
+\fB\-\-stats\fR
+Print runtime statistics of often used functions.
+
+.SH Obsolete Options
+.TP
+\fB-K, \-\-checksig\fR
+See and use rpmkeys(8).
+.TP
+\fB\-\-nodocs\fR
+Do not install documentation.
+Use \fB\-\-excludedocs\fR instead.
+.TP
+\fB\-\-promoteepoch\fR
+Enable obsolete epoch handling used in rpm 3.x time frame.
+.TP
+\fB\-\-prtpkts\fR
+OBSOLETE! Used to print the packages containing and representing the pgp keys for debugging purposes.
diff --git a/doc/rpm-plugin-systemd-inhibit.8 b/doc/rpm-plugin-systemd-inhibit.8
new file mode 100644
index 000000000..372f1be06
--- /dev/null
+++ b/doc/rpm-plugin-systemd-inhibit.8
@@ -0,0 +1,36 @@
+.TH "RPM-SYSTEMD-INHIBIT" "8" "14 Apr 2016" "Red Hat, Inc."
+.SH NAME
+rpm-plugin-systemd-inhibit \- Plugin for the RPM Package Manager
+
+.SH Description
+
+This plugin for RPM prevents the system to enter shutdown, sleep or idle
+mode while there is a rpm transaction running to prevent system corruption
+that can occur if the transaction is interrupted by a reboot.
+
+This is achieved by using the inhibit DBUS interface of systemd. The call is
+roughly equivalent to executing
+
+\fBsystemd-inhibit --mode=block --what=idle:sleep:shutdown --who=RPM --why="Transaction running"\fR
+
+See \fBsystemd-inhibit(1)\fR for the details of this mechanism.
+
+It is strongly advised to have the plugin installed on all systemd
+based systems.
+
+.SH Prerequisites
+
+For the plugin to work systemd has to be used as init system and
+though the DBUS system bus must be available. If the plugin cannot access the
+interface it gives a warning but does not stop the transaction.
+
+.SH Configuration
+
+The plugin currently does not have any configuration option other than
+turning it on and off. It can be disabled by commenting out the
+\fI%__transaction_systemd_inhibit\fR macro in main macros file
+(typically located at \fI/usr/lib/rpm/macros\fR) or otherwise change
+the value of the macro.
+
+Another option is to remove the plugin from the system if it is
+packaged in its own sub package.
diff --git a/doc/rpm.8 b/doc/rpm.8
index 0a757b3ed..f5cba2919 100644
--- a/doc/rpm.8
+++ b/doc/rpm.8
@@ -13,15 +13,10 @@ rpm \- RPM Package Manager
\fBrpm\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR]
-
+\fBrpm\fR \fB--querytags\fR
\fBrpm\fR {\fB-V|--verify\fR} [\fBselect-options\fR] [\fBverify-options\fR]
-
-
-\fBrpm\fR [\fB--nosignature\fR] [\fB--nodigest\fR]
- \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR
-
.SS "INSTALLING, UPGRADING, AND REMOVING PACKAGES:"
.PP
@@ -38,38 +33,51 @@ rpm \- RPM Package Manager
-\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR]
+\fBrpm\fR {\fB--reinstall\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR
+
+
+
+\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--justdb] [\fB--nodeps\fR] [\fB--noscripts\fR]
[\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI\ ...\fR
.SS "MISCELLANEOUS:"
.PP
+\fBrpm\fR \fB--showrc\fR
-\fBrpm\fR {\fB--querytags|--showrc\fR}
-
-
+\fBrpm\fR \fB--setperms\fR \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR
-\fBrpm\fR {\fB--setperms|--setugids\fR} \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR
+\fBrpm\fR \fB--setugids\fR \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR
.SS "select-options"
.PP
-
[\fB\fIPACKAGE_NAME\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIFILE\fB\fR]
[\fB-g,--group \fIGROUP\fB\fR] {\fB-p,--package \fIPACKAGE_FILE\fB\fR]
[\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR]
[\fB--querybynumber \fIHDRNUM\fB\fR] [\fB--triggeredby \fIPACKAGE_NAME\fB\fR]
[\fB--whatprovides \fICAPABILITY\fB\fR] [\fB--whatrequires \fICAPABILITY\fB\fR]
+ [\fB--whatrecommends \fICAPABILITY\fB\fR] [\fB--whatsuggests \fICAPABILITY\fB\fR]
+ [\fB--whatsupplements \fICAPABILITY\fB\fR] [\fB--whatenhances \fICAPABILITY\fB\fR]
.SS "query-options"
.PP
-
-
- [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB--conflicts\fR]
- [\fB-d,--docfiles\fR] [\fB--dump\fR] [\fB--filesbypkg\fR] [\fB-i,--info\fR]
- [\fB--last\fR] [\fB-l,--list\fR] [\fB--obsoletes\fR] [\fB--provides\fR]
- [\fB--qf,--queryformat \fIQUERYFMT\fB\fR] [\fB-R,--requires\fR]
- [\fB--scripts\fR] [\fB-s,--state\fR] [\fB--triggers,--triggerscripts\fR]
+General:
+ [\fB--changelog\fR] [\fB--changes\fR] [\fB--dupes\fR] [\fB-i,--info\fR]
+ [\fB--last\fR] [\fB--qf,--queryformat \fIQUERYFMT\fB\fR] [\fB--xml\fR]
+.PP
+Dependencies:
+ [\fB--conflicts\fR] [\fB--enhances\fR] [\fB--obsoletes\fR] [\fB--provides\fR]
+ [\fB--recommends\fR] [\fB-R,--requires\fR] [\fB--suggests\fR] [\fB--supplements\fR]
+.PP
+Files:
+ [\fB-c,--configfiles\fR] [\fB-d,--docfiles\fR] [\fB--dump\fR] [\fB--fileclass\fR]
+ [\fB--filecolor\fR] [\fB--fileprovide\fR][\fB--filerequire\fR] [\fB--filecaps\fR]
+ [\fB--filesbypkg\fR] [\fB-l,--list\fR] [\fB-s,--state\fR]
+ [\fB--noartifact\fR] [\fB--noghost\fR] [\fB--noconfig\fR
+.PP
+Scripts and triggers:
+ [\fB--filetriggers\fR] [\fB--scripts\fR] [\fB--triggers,--triggerscripts\fR]
.SS "verify-options"
.PP
@@ -88,9 +96,10 @@ rpm \- RPM Package Manager
[\fB--allfiles\fR] [\fB--badreloc\fR] [\fB--excludepath \fIOLDPATH\fB\fR]
[\fB--excludedocs\fR] [\fB--force\fR] [\fB-h,--hash\fR]
[\fB--ignoresize\fR] [\fB--ignorearch\fR] [\fB--ignoreos\fR]
- [\fB--includedocs\fR] [\fB--justdb\fR] [\fB--nocollections\fR]
- [\fB--nodeps\fR] [\fB--nodigest\fR] [\fB--nosignature\fR]
- [\fB--noorder\fR] [\fB--noscripts\fR] [\fB--notriggers\fR]
+ [\fB--includedocs\fR] [\fB--justdb\fR]
+ [\fB--nodeps\fR] [\fB--nodigest\fR] [\fB--noplugins\fR]
+ [\fB--nocaps\fR] [\fB--noorder\fR]
+ [\fB--nosignature\fR] [\fB--noscripts\fR] [\fB--notriggers\fR]
[\fB--oldpackage\fR] [\fB--percent\fR] [\fB--prefix \fINEWPATH\fB\fR]
[\fB--relocate \fIOLDPATH\fB=\fINEWPATH\fB\fR]
[\fB--replacefiles\fR] [\fB--replacepkgs\fR]
@@ -113,7 +122,7 @@ packages.
One of the following basic modes must be selected:
\fBQuery\fR,
\fBVerify\fR,
-\fBInstall/Upgrade/Freshen\fR,
+\fBInstall/Upgrade/Freshen/Reinstall\fR,
\fBUninstall\fR,
\fBSet Owners/Groups\fR,
\fBShow Querytags\fR, and
@@ -133,7 +142,7 @@ being used.
Print as little as possible - normally only error messages will
be displayed.
.TP
-\fB-v\fR
+\fB-v, --verbose\fR
Print verbose information - normally routine progress messages will be
displayed.
.TP
@@ -141,14 +150,25 @@ displayed.
Print lots of ugly debugging information.
.TP
\fB--rcfile \fIFILELIST\fB\fR
-Each of the files in the colon separated
+Replace the list of configuration files to be read. Each of the files in the colon separated
\fIFILELIST\fR
is read sequentially by \fBrpm\fR for configuration
information.
Only the first file in the list must exist, and tildes will be
expanded to the value of \fB$HOME\fR.
The default \fIFILELIST\fR is
-\fI/usr/lib/rpm/rpmrc\fR:\fI/usr/lib/rpm/redhat/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR.
+\fI/usr/\:lib/\:rpm/\:rpmrc\fR:\:\fI/usr/\:lib/\:rpm/\:redhat/\:rpmrc\fR:\:\fI/etc/\:rpmrc\fR:\:\fI~/.rpmrc\fR.
+
+.TP
+\fB--macros \fIFILELIST\fB\fR
+Replace the list of macro files to be loaded. Each of the files in the colon separated
+\fIFILELIST\fR
+is read sequentially by \fBrpm\fR for macro definitions.
+Only the first file in the list must exist, and tildes will be
+expanded to the value of \fB$HOME\fR.
+The default \fIFILELIST\fR is
+\fI/usr/\:lib/\:rpm/\:macros\fR:\:\fI/usr/\:lib/\:rpm/\:macros.d/\:macros.*\fR:\:\fI/usr/\:lib/\:rpm/\:platform/\:%{_target}/\:macros\fR:\:\fI/usr/\:lib/\:rpm/\:fileattrs/\:*.attr\fR:\:\fI/usr/\:lib/\:rpm/\:redhat/\:macros\fR:\:\fI/etc/\:rpm/\:macros.*\fR:\:\fI/etc/\:rpm/\:macros\fR:\:\fI/etc/\:rpm/\:%{_target}/\:macros\fR:\:\fI~/.rpmmacros
+
.TP
\fB--pipe \fICMD\fB\fR
Pipes the output of \fBrpm\fR to the command \fICMD\fR.
@@ -175,6 +195,9 @@ Undefines \fIMACRO\fR.
.TP
\fB-E, --eval='\fIEXPR\fB'\fR
Prints macro expansion of \fIEXPR\fR.
+
+.PP
+More - less often needed - options can be found on the \fBrpm-misc(8)\fR man page.
.SS "INSTALL AND UPGRADE OPTIONS"
.PP
In these options, \fIPACKAGE_FILE\fR can be either \fBrpm\fR binary
@@ -209,6 +232,13 @@ new package is installed.
This will upgrade packages, but only ones for which an earlier version is
installed.
.PP
+The general form of an rpm reinstall command is
+.PP
+\fBrpm\fR {\fB--reinstall\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR
+.PP
+This reinstalls a previously installed package.
+.PP
+.PP
.TP
\fB--allfiles\fR
Installs or upgrades all the missingok files in the package,
@@ -268,23 +298,17 @@ Don't verify package or header signatures when reading.
Don't do a dependency check before installing or upgrading
a package.
.TP
+\fB--nocaps\fR
+Don't set file capabilities.
+.TP
\fB--noorder\fR
Don't reorder the packages for an install. The list of
packages would normally be reordered to satisfy dependencies.
.TP
-\fB--noscripts\fR
-.TP
-\fB--nopre\fR
-.TP
-\fB--nopost\fR
-.TP
-\fB--nopreun\fR
+\fB--noplugins\fR
+Do not load and execute plugins.
.TP
-\fB--nopostun\fR
-.TP
-\fB--nopretrans\fR
-.TP
-\fB--noposttrans\fR
+\fB--noscripts\fR, \fB--nopre\fR, \fB--nopost\fR, \fB--nopreun\fR, \fB--nopostun\fR, \fB--nopretrans\fR, \fB--noposttrans\fR
Don't execute the scriptlet of the same name.
The \fB--noscripts\fR option is equivalent to
@@ -303,16 +327,9 @@ and turns off the execution of the corresponding
\fB%pretrans\fR, and
\fB%posttrans\fR
scriptlet(s).
+
.TP
-\fB--notriggers\fR
-.TP
-\fB--notriggerin\fR
-.TP
-\fB--notriggerun\fR
-.TP
-\fB--notriggerprein\fR
-.TP
-\fB--notriggerpostun\fR
+\fB--notriggers\fR, \fB--notriggerin\fR, \fB--notriggerun\fR, \fB--notriggerprein\fR, \fB--notriggerpostun\fR
Don't execute any trigger scriptlet of the named type.
The \fB--notriggers\fR option is equivalent to
@@ -365,7 +382,7 @@ potential conflicts.
The general form of an rpm erase command is
.PP
-\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR
+\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--justdb] [\fB--nodeps\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR
.PP
The following options may also be used:
@@ -376,14 +393,13 @@ Remove all versions of the package which match
error is issued if \fIPACKAGE_NAME\fR
matches multiple packages.
.TP
+\fB--justdb\fR
+Update only the database, not the filesystem.
+.TP
\fB--nodeps\fR
Don't check dependencies before uninstalling the packages.
.TP
-\fB--noscripts\fR
-.TP
-\fB--nopreun\fR
-.TP
-\fB--nopostun\fR
+\fB--noscripts\fR, \fB--nopreun\fR, \fB--nopostun\fR
Don't execute the scriptlet of the same name.
The \fB--noscripts\fR option during package erase is
equivalent to
@@ -396,11 +412,7 @@ and turns off the execution of the corresponding
\fB%postun\fR
scriptlet(s).
.TP
-\fB--notriggers\fR
-.TP
-\fB--notriggerun\fR
-.TP
-\fB--notriggerpostun\fR
+\fB--notriggers\fR, \fB--notriggerun\fR, \fB--notriggerpostun\fR
Don't execute any trigger scriptlet of the named type.
The \fB--notriggers\fR option is equivalent to
@@ -516,14 +528,34 @@ and information selection.
.PP
.TP
\fB\fIPACKAGE_NAME\fB\fR
-Query installed package named \fIPACKAGE_NAME\fR.
+Query installed package named \fIPACKAGE_NAME\fR. To specify the package more precisely the package name may be followed by the version or version and release
+both separated by a dash or an architecture name separated by a dot. See the output of \fBrpm -qa\fR or \fBrpm -qp \fIPACKAGE_FILE\fB\fR as an example.
+
.TP
\fB-a, --all\fR
Query all installed packages.
.TP
+\fB--dupes\fB
+List duplicated packages.
+.TP
\fB-f, --file \fIFILE\fB\fR
Query package owning \fIFILE\fR.
.TP
+\fB--filecaps\fR
+List file names with POSIX1.e capabilities.
+.TP
+\fB--fileclass\fR
+List file names with their classes (libmagic classification).
+.TP
+\fB--filecolor\fR
+List file names with their colors (0 for noarch, 1 for 32bit, 2 for 64 bit).
+.TP
+\fB--fileprovide\fR
+List file names with their provides.
+.TP
+\fB--filerequire\fR
+List file names with their requires.
+.TP
\fB-g, --group \fIGROUP\fB\fR
Query packages with the group of \fIGROUP\fR.
.TP
@@ -581,12 +613,30 @@ Query all packages that provide the \fICAPABILITY\fR capability.
.TP
\fB--whatrequires \fICAPABILITY\fB\fR
Query all packages that require \fICAPABILITY\fR for proper functioning.
+.TP
+\fB--whatrecommends \fICAPABILITY\fB\fR
+Query all packages that recommend \fICAPABILITY\fR.
+.TP
+\fB--whatsuggests \fICAPABILITY\fB\fR
+Query all packages that suggest \fICAPABILITY\fR.
+.TP
+\fB--whatsupplements \fICAPABILITY\fB\fR
+Query all packages that supplement \fICAPABILITY\fR.
+.TP
+\fB--whatenhances \fICAPABILITY\fB\fR
+Query all packages that enhance \fICAPABILITY\fR.
.SS "PACKAGE QUERY OPTIONS:"
.PP
.TP
+\fB-d, --artifactfiles\fR
+List only artifact files (implies \fB-l\fR).
+.TP
\fB--changelog\fR
Display change information for the package.
.TP
+\fB--changes\fR
+Display change information for the package with full time stamps.
+.TP
\fB-c, --configfiles\fR
List only configuration files (implies \fB-l\fR).
.TP
@@ -607,9 +657,15 @@ path size mtime digest mode owner group isconfig isdoc rdev symlink
.fi
.RE
.TP
+\fB--enhances\fR
+List capabilities enhanced by package(s)
+.TP
\fB--filesbypkg\fR
List all the files in each selected package.
.TP
+\fB--filetriggers\fR
+List filetrigger scriptlets from package(s).
+.TP
\fB-i, --info\fR
Display package information, including name, version, and description.
This uses the \fB--queryformat\fR if one was specified.
@@ -630,9 +686,18 @@ List packages this package obsoletes.
\fB--provides\fR
List capabilities this package provides.
.TP
+\fB--recommends\fR
+List capabilities recommended by package(s)
+.TP
\fB-R, --requires\fR
List capabilities on which this package depends.
.TP
+\fB--suggests\fR
+List capabilities suggested by package(s)
+.TP
+\fB--supplements\fR
+List capabilities supplemented by package(s)
+.TP
\fB--scripts\fR
List the package specific scriptlet(s) that are used as part
of the installation and uninstallation processes.
@@ -647,6 +712,18 @@ Display the \fIstates\fR of files in the package
\fB--triggers, --triggerscripts\fR
Display the trigger scripts, if any, which are contained in
the package.
+.TP
+\fB--noartifact\fR
+Don't display artifact files.
+\fB--noghost\fR
+Don't display ghost files. Useful in combination with option --list.
+.TP
+\fB--noconfig\fR
+Don't display config files.
+.TP
+\fB--xml\fR
+Format package headers as XML.
+
.SS "VERIFY OPTIONS"
.PP
The general form of an rpm verify command is
@@ -678,6 +755,12 @@ Don't verify package or header digests when reading.
\fB--nofiles\fR
Don't verify any attributes of package files.
.TP
+\fB--noghost\fR
+Don't verify ghost files.
+.TP
+\fB--noconfig\fR
+Don't verify config files.
+.TP
\fB--noscripts\fR
Don't execute the \fB%verifyscript\fR scriptlet (if any).
.TP
@@ -700,6 +783,9 @@ Don't verify package or header signatures when reading.
.TP
\fB--nordev\fR
Don't verify the corresponding file attribute.
+.TP
+\fB--nocaps\fR
+Don't verify file capabilities.
.PP
The format of the output is a string of 9 characters, a possible
attribute marker:
@@ -750,7 +836,12 @@ configuration file(s).
sets permissions of files in the given package.
.TP
\fBrpm\fR \fB--setugids\fR \fIPACKAGE_NAME\fR
-sets user/group ownership of files in the given package.
+sets user/group ownership of files in the given package. This command can
+change permissions of files in that package. It is caused by calling command
+\fBchmod\fR that can clear SUID and SGID bits in some situations. So it is
+safer to call also \fB--setperms\fR after calling \fB--setugids\fR.
+.TP
+Options \fB--setperms\fR and \fB--setugids\fR are mutually exclusive.
.SS "FTP/HTTP OPTIONS"
.PP
@@ -846,6 +937,7 @@ Install the package containing \fBrpmbuild\fR (usually \fBrpm-build\fR) and see
.SH "SEE ALSO"
.nf
+\fBrpm-misc(8)\fR(3),
\fBpopt\fR(3),
\fBrpm2cpio\fR(8),
\fBrpmbuild\fR(8),
diff --git a/doc/rpmbuild.8 b/doc/rpmbuild.8
index fca425017..6793f4d10 100644
--- a/doc/rpmbuild.8
+++ b/doc/rpmbuild.8
@@ -14,6 +14,8 @@ rpmbuild \- Build RPM Package(s)
\fBrpmbuild\fR {\fB-ba|-bb|-bp|-bc|-bi|-bl|-bs\fR} [\fBrpmbuild-options\fR] \fB\fISPECFILE\fB\fR\fI ...\fR
+\fBrpmbuild\fR {\fB-ra|-rb|-rp|-rc|-ri|-rl|-rs\fR} [\fBrpmbuild-options\fR] \fB\fISOURCEPACKAGE\fB\fR\fI ...\fR
+
\fBrpmbuild\fR {\fB-ta|-tb|-tp|-tc|-ti|-tl|-ts\fR} [\fBrpmbuild-options\fR] \fB\fITARBALL\fB\fR\fI ...\fR
@@ -32,9 +34,11 @@ rpmbuild \- Build RPM Package(s)
[\fB--buildroot \fIDIRECTORY\fB\fR] [\fB--clean\fR] [\fB--nobuild\fR]
- [\fB--rmsource\fR] [\fB--rmspec\fR] [\fB--short-circuit\fR]
- [\fB--noclean\fR] [\fB--nocheck\fR]
+ [\fB--rmsource\fR] [\fB--rmspec\fR] [\fB--short-circuit\fR] [\fB--build-in-place\fR]
+ [\fB--noprep\fR] [\fB--noclean\fR] [\fB--nocheck\fR]
+ [\fB--rpmfcdebug\fR]
[\fB--target \fIPLATFORM\fB\fR]
+ [\fB--with \fIOPTION\fB\fR] [\fB--without \fIOPTION\fB\fR]
.SH "DESCRIPTION"
.PP
@@ -75,6 +79,9 @@ displayed.
\fB-vv\fR
Print lots of ugly debugging information.
.TP
+\fB--rpmfcdebug\fR
+Enables to debug dependencies generation.
+.TP
\fB--rcfile \fIFILELIST\fB\fR
Each of the files in the colon separated
\fIFILELIST\fR
@@ -109,12 +116,13 @@ Defines \fIMACRO\fR with value \fIEXPR\fR.
The general form of an rpm build command is
.PP
-\fBrpmbuild\fR \fB-b\fISTAGE\fB|-t\fISTAGE\fB\fR [ \fB rpmbuild-options
+\fBrpmbuild\fR \fB-b\fISTAGE\fB|-r\fISTAGE\fB|-t\fISTAGE\fB\fR [ \fB rpmbuild-options
\fR ] \fB\fIFILE\fB\fR\fI ...\fR
.PP
The argument used is \fB-b\fR if a spec file is being
-used to build the package and \fB-t\fR if \fBrpmbuild\fR
+used to build the package, \fB-r\fR if a source package is to be rebuild
+and \fB-t\fR if \fBrpmbuild\fR
should look inside of a (possibly compressed) tar file for
the spec file to use. After the first argument, the next
character (\fISTAGE\fR) specifies the stages
@@ -161,6 +169,9 @@ Remove the build tree after the packages are made.
\fB--nobuild\fR
Do not execute any build stages. Useful for testing out spec files.
.TP
+\fB--noprep\fR
+Do not execute %prep build stage even if present in spec.
+.TP
\fB--noclean\fR
Do not execute %clean build stage even if present in spec.
.TP
@@ -185,6 +196,11 @@ and \fB-bb\fR. Useful for local testing only. Packages built this
way will be marked with an unsatisfiable dependency to prevent
their accidental use.
.TP
+\fB--build-in-place\fR
+Build from locally checked out sources. Sets _builddir to current working
+directory. Skips handling of -n and untar in the %setup and the deletion of
+the buildSubdir.
+.TP
\fB--target \fIPLATFORM\fB\fR
When building the package, interpret \fIPLATFORM\fR
as \fBarch-vendor-os\fR and set the macros
@@ -192,6 +208,12 @@ as \fBarch-vendor-os\fR and set the macros
\fB%_target_cpu\fR, and
\fB%_target_os\fR
accordingly.
+.TP
+\fB--with \fIOPTION\fB\fR
+Enable configure \fIOPTION\fR for build.
+.TP
+\fB--without \fIOPTION\fB\fR
+Disable configure \fIOPTION\fR for build.
.SS "REBUILD AND RECOMPILE OPTIONS"
.PP
There are two other ways to invoke building with rpm:
@@ -206,6 +228,8 @@ package, and does a prep, compile and install. In addition,
has completed, the build directory is removed (as in
\fB--clean\fR) and the the sources and spec file for
the package are removed.
+
+These options are noaways superseded by the \fB-r*\fR options which allow more more fine control over what stages of the build to run.
.SS "SHOWRC"
.PP
The command
diff --git a/doc/rpmdeps.8 b/doc/rpmdeps.8
index 79adcc569..29ada0340 100644
--- a/doc/rpmdeps.8
+++ b/doc/rpmdeps.8
@@ -10,7 +10,7 @@ rpmdeps \- Generate RPM Package Dependencies
.PP
-\fBrpmdeps\fR \fB{-P|--provides}\fR \fB{-R|--requires}\fR \fB\fIFILE\fB\fR\fI ...\fR
+\fBrpmdeps\fR \fB{-P|--provides}\fR \fB{-R|--requires}\fR \fB{--rpmfcdebug}\fR \fB\fIFILE\fB\fR\fI ...\fR
.SH "DESCRIPTION"
.PP
diff --git a/doc/rpmsign.8 b/doc/rpmsign.8
index 53f2d70bd..80ffb6a32 100644
--- a/doc/rpmsign.8
+++ b/doc/rpmsign.8
@@ -2,11 +2,17 @@
.SH NAME
rpmsign \- RPM Package Signing
.SH SYNOPSIS
+.SS "SIGNING PACKAGES:"
+.PP
-\fBrpm\fR \fB--addsign|--resign\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR
+\fBrpm\fR \fB--addsign|--resign\fR [\fBrpmsign-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR
\fBrpm\fR \fB--delsign\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR
+.SS "rpmsign-options"
+.PP
+[\fb--fskpath \fIKEY\fb\fR] [\fB--signfiles\fR]
+
.SH DESCRIPTION
.PP
Both of the \fB--addsign\fR and \fB--resign\fR
@@ -20,6 +26,19 @@ there is no difference in behavior currently.
.PP
Delete all signatures from each package \fIPACKAGE_FILE\fR given.
+.SS "SIGN OPTIONS"
+.PP
+.TP
+\fB--fskpath \fIKEY\fB\fR
+Used with \fB--signfiles\fR, use file signing key \fIKey\fR.
+.TP
+\fB--signfiles\fR
+Sign package files. The macro \fB%_binary_filedigest_algorithm\fR must
+be set to a supported algorithm before building the package. The
+supported algorithms are SHA1, SHA256, SHA384, and SHA512, which are
+represented as 2, 8, 9, and 10 respectively. The file signing key (RSA
+private key) must be set before signing the package, it can be configured on the command line with \fB--fskpath\fR or the macro %_file_signing_key.
+
.SS "USING GPG TO SIGN PACKAGES"
.PP
In order to sign packages using GPG, \fBrpm\fR
@@ -52,7 +71,7 @@ using the executable \fI/usr/bin/gpg\fR you would include
in a macro configuration file. Use \fI/etc/rpm/macros\fR
for per-system configuration and \fI~/.rpmmacros\fR
for per-user configuration. Typically it's sufficient to set just %_gpg_name.
-
+.PP
.SH "SEE ALSO"
.nf
\fBpopt\fR(3),
@@ -78,4 +97,5 @@ Marc Ewing <marc@redhat.com>
Jeff Johnson <jbj@redhat.com>
Erik Troan <ewt@redhat.com>
Panu Matilainen <pmatilai@redhat.com>
+Fionnuala Gunter <fin@linux.vnet.ibm.com>
.fi
diff --git a/doc/rpmspec.8 b/doc/rpmspec.8
index a3912375b..85b7b6639 100644
--- a/doc/rpmspec.8
+++ b/doc/rpmspec.8
@@ -7,11 +7,20 @@ rpmspec \- RPM Spec Tool
\fBrpmspec\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR] \fB\fISPEC_FILE\fB\fR\fI ...\fR
+.SS "PARSING SPEC FILES TO STDOUT:"
+.PP
+
+\fBrpmspec\fR {\fB-P|--parse\fR} \fB\fISPEC_FILE\fB\fR\fI ...\fR
+
+.SH DESCRIPTION
+.PP
+\fBrpmspec\fR is a tool for querying a spec file. More specifically for querying hypothetical packages which would be created from the given spec file. So querying a spec file with \fBrpmspec\fR is similar to querying a package built from that spec file. But is is not identical. With \fBrpmspec\fR you can't query all fields which you can query from a built package. E. g. you can't query BUILDTIME with \fBrpmspec\fR for obvious reasons. You also cannot query other fields automatically generated during a build of a package like auto generated dependencies.
+
.SS "select-options"
.PP
[\fB\--rpms\fB\fR]
- [\fB\--srpms\fB\fR]
+ [\fB\--srpm\fB\fR]
.SS "query-options"
.PP
@@ -39,10 +48,54 @@ See \fBrpm(8)\fR for details.
.SS "SELECT OPTIONS"
.PP
\fB--rpms\fR
-Operate on the binary package header(s).
+Operate on the all binary package headers generated from spec.
+ \fB--builtrpms\fR
+Operate only on the binary package headers of packages which would be built from spec. That means ignoring package headers of packages that won't be built from spec i. e. ignoring package headers of packages without file section.
\fB--srpm\fR
-Operate on the source package header(s).
+Operate on the source package header(s) generated from spec.
+.SH EXAMPLES
+.PP
+Get list of binary packages which would be generated from the rpm spec file:
+.PP
+.RS 4
+.nf
+ $ rpmspec -q rpm.spec
+ rpm-4.11.3-3.fc20.x86_64
+ rpm-libs-4.11.3-3.fc20.x86_64
+ rpm-build-libs-4.11.3-3.fc20.x86_64
+ ...
+.RE
+.PP
+Get summary infos for single binary packages generated from the rpm spec file:
+.PP
+.RS 4
+.nf
+ $ rpmspec -q --qf "%{name}: %{summary}\\n" rpm.spec
+ rpm: The RPM package management system
+ rpm-libs: Libraries for manipulating RPM packages
+ rpm-build-libs: Libraries for building and signing RPM packages
+ ...
+.RE
+.PP
+Get the source package which would be generated from the rpm spec file:
+.PP
+.RS 4
+.nf
+ $ rpmspec -q --srpm rpm.spec
+ rpm-4.11.3-3.fc20.x86_64
+.RE
+.PP
+Parse the rpm spec file to stdout:
+.PP
+.RS 4
+.nf
+ $ rpmspec -P rpm.spec
+ Summary: The RPM package management system
+ Name: rpm
+ Version: 4.14.0
+ ...
+.RE
.SH "SEE ALSO"
.nf
\fBpopt\fR(3),
diff --git a/fileattrs/Makefile.am b/fileattrs/Makefile.am
index 3d1b7e712..c3f1b053d 100644
--- a/fileattrs/Makefile.am
+++ b/fileattrs/Makefile.am
@@ -1,12 +1,13 @@
# Makefile for rpm file attributes
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
fattrsdir = $(rpmconfigdir)/fileattrs
fattrs_DATA = \
- desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \
- pkgconfig.attr python.attr ocaml.attr script.attr mono.attr \
- debuginfo.attr elflib.attr firmware.attr ksyms.attr sysvinit.attr
+ debuginfo.attr desktop.attr elf.attr font.attr libtool.attr metainfo.attr \
+ perl.attr perllib.attr pkgconfig.attr python.attr ocaml.attr script.attr \
+ mono.attr elflib.attr firmware.attr kernel.attr kmp.attr sysvinit.attr
EXTRA_DIST = $(fattrs_DATA)
diff --git a/fileattrs/debuginfo.attr b/fileattrs/debuginfo.attr
index 5f82e84bd..4777df8a5 100644
--- a/fileattrs/debuginfo.attr
+++ b/fileattrs/debuginfo.attr
@@ -1,3 +1,4 @@
# Change how to add "package provide" to debuginfo package : add "package provide" using addPackageProvides_for_debuginfo_pkg
+#comment the below commond, no need to show provides debuginfo, build id info, for example: Provides: debuginfo(build-id) = XXX
#%__debuginfo_provides %{_rpmconfigdir}/debuginfo.prov
%__debuginfo_path ^/usr/lib/debug/
diff --git a/fileattrs/kernel.attr b/fileattrs/kernel.attr
new file mode 100644
index 000000000..a79fde56a
--- /dev/null
+++ b/fileattrs/kernel.attr
@@ -0,0 +1,2 @@
+%__kernel_provides %{_rpmconfigdir}/find-provides.ksyms --opensuse 0%{?is_opensuse}
+%__kernel_path ^(/lib/modules/[^/]*/kernel/.*\.ko(\.gz)?|/boot/vmlinu[xz].*)$
diff --git a/fileattrs/kmp.attr b/fileattrs/kmp.attr
new file mode 100644
index 000000000..772ea3021
--- /dev/null
+++ b/fileattrs/kmp.attr
@@ -0,0 +1,4 @@
+%__kmp_provides %{_rpmconfigdir}/find-provides.ksyms --opensuse 0%{?is_opensuse}
+%__kmp_requires %{_rpmconfigdir}/find-requires.ksyms --opensuse 0%{?is_opensuse}
+%__kmp_supplements %{_rpmconfigdir}/find-supplements.ksyms
+%__kmp_path ^/lib/modules/[^/]*/(updates|extra)/.*\.ko(\.gz)?
diff --git a/fileattrs/metainfo.attr b/fileattrs/metainfo.attr
new file mode 100644
index 000000000..f016d45f4
--- /dev/null
+++ b/fileattrs/metainfo.attr
@@ -0,0 +1,2 @@
+%__metainfo_provides %{_rpmconfigdir}/metainfo.prov
+%__metainfo_path ^%{_datadir}/(appdata|metainfo)/.*\\.(appdata|metainfo)\\.xml$
diff --git a/fileattrs/perllib.attr b/fileattrs/perllib.attr
index 99723546e..77463c841 100644
--- a/fileattrs/perllib.attr
+++ b/fileattrs/perllib.attr
@@ -2,3 +2,5 @@
#disabled for now
#%__perllib_requires %{_rpmconfigdir}/perl.req
%__perllib_magic ^Perl[[:digit:]] module source.*
+%__perllib_path \\.pm$
+%__perllib_flags magic_and_path
diff --git a/installplatform b/installplatform
index ab403f798..79209e080 100755
--- a/installplatform
+++ b/installplatform
@@ -6,9 +6,10 @@ platformdir="${pkglibdir}/platform"
RPMRC="${1:-rpmrc}"
PLATFORM="${2:-platform}"
-VENDOR="${3}"
-OS="${4}"
-RPMRC_GNU="${5}"
+MACROS="${3:-macros}"
+VENDOR="${4}"
+OS="${5}"
+RPMRC_GNU="${6}"
for ARCH in noarch `grep ^arch_canon $RPMRC | cut -d: -f2`; do
RPMRC_OPTFLAGS="`sed -n 's/^optflags: '$ARCH' //p' $RPMRC`"
@@ -53,12 +54,18 @@ for ARCH in noarch `grep ^arch_canon $RPMRC | cut -d: -f2`; do
CANONARCH=s390x
CANONCOLOR=3
;;
- ppc64*)
+ ppc64|ppc64p7)
ISANAME=ppc
ISABITS=64
CANONARCH=ppc64
CANONCOLOR=3
;;
+ ppc64le)
+ ISANAME=ppc
+ ISABITS=64
+ CANONARCH=ppc64le
+ CANONCOLOR=3
+ ;;
ppc*)
ISANAME=ppc
ISABITS=32
@@ -89,6 +96,12 @@ for ARCH in noarch `grep ^arch_canon $RPMRC | cut -d: -f2`; do
CANONARCH=${ARCH}
CANONCOLOR=0
;;
+ armv7h*)
+ ISANAME=armv7hl
+ ISABITS=32
+ CANONARCH=arm
+ CANONCOLOR=0
+ ;;
arm*)
ISANAME=`echo ${ARCH} | sed "s/^\([^-]*\)-.*/\1/"`
ISABITS=32
@@ -107,6 +120,66 @@ for ARCH in noarch `grep ^arch_canon $RPMRC | cut -d: -f2`; do
CANONARCH=aarch64
CANONCOLOR=3
;;
+ mips)
+ ISANAME=mips
+ ISABITS=32
+ CANONARCH=mips
+ CANONCOLOR=0
+ ;;
+ mipsel)
+ ISANAME=mips
+ ISABITS=32
+ CANONARCH=mipsel
+ CANONCOLOR=0
+ ;;
+ mips64)
+ ISANAME=mips
+ ISABITS=64
+ CANONARCH=mips64
+ CANONCOLOR=3
+ ;;
+ mips64el)
+ ISANAME=mips
+ ISABITS=64
+ CANONARCH=mips64el
+ CANONCOLOR=3
+ ;;
+ mipsr6)
+ ISANAME=mipsr6
+ ISABITS=32
+ CANONARCH=mipsr6
+ CANONCOLOR=0
+ ;;
+ mipsr6el)
+ ISANAME=mipsr6
+ ISABITS=32
+ CANONARCH=mipsr6el
+ CANONCOLOR=0
+ ;;
+ mips64r6)
+ ISANAME=mipsr6
+ ISABITS=64
+ CANONARCH=mips64r6
+ CANONCOLOR=3
+ ;;
+ mips64r6el)
+ ISANAME=mipsr6
+ ISABITS=64
+ CANONARCH=mips64r6el
+ CANONCOLOR=3
+ ;;
+ m68k)
+ ISANAME=m68k
+ ISABITS=32
+ CANONARCH=m68k
+ CANONCOLOR=0
+ ;;
+ riscv64)
+ ISANAME=riscv
+ ISABITS=64
+ CANONARCH=riscv64
+ CANONCOLOR=3
+ ;;
noarch)
CANONARCH=noarch
CANONCOLOR=0
@@ -187,3 +260,6 @@ for ARCH in noarch `grep ^arch_canon $RPMRC | cut -d: -f2`; do
> ${PPD}/macros
done
+
+# gently adjust undefined autoconf variables to rpm macros...
+cat $MACROS | sed -e 's,${prefix},%{_prefix},g' > ${DESTDIR}/${pkglibdir}/macros
diff --git a/lib/.gitignore b/lib/.gitignore
deleted file mode 100644
index 1fb7263f8..000000000
--- a/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/tagtbl.C
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 9e725b36d..baf3238ee 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,10 +1,13 @@
# Makefile for rpm library.
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
AM_CPPFLAGS += @WITH_NSS_INCLUDE@
AM_CPPFLAGS += @WITH_POPT_INCLUDE@
+AM_CPPFLAGS += $(LMDB_CFLAGS)
AM_CPPFLAGS += -I$(top_srcdir)/misc
AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\""
AM_CPPFLAGS += -DSYSCONFDIR="\"$(sysconfdir)\""
@@ -21,7 +24,8 @@ EXTRA_PROGRAMS =
usrlib_LTLIBRARIES = librpm.la
librpm_la_SOURCES = \
- backend/dbconfig.c backend/db3.c backend/dbi.h \
+ backend/db3.c backend/dbi.c backend/dbi.h \
+ backend/dbiset.c backend/dbiset.h \
headerutil.c header.c headerfmt.c header_internal.h \
rpmdb.c rpmdb_internal.h \
fprint.c fprint.h tagname.c rpmtd.c \
@@ -34,17 +38,17 @@ librpm_la_SOURCES = \
rpmlead.c rpmlead.h rpmps.c rpmprob.c rpmrc.c \
rpmte.c rpmte_internal.h rpmts.c rpmfs.h rpmfs.c \
rpmvercmp.c signature.c signature.h transaction.c \
- verify.c rpmlock.c rpmlock.h misc.h \
- rpmscript.h rpmscript.c legacy.c merge.c \
+ verify.c rpmlock.c rpmlock.h misc.h relocation.c \
+ rpmscript.h rpmscript.c \
rpmchroot.c rpmchroot.h \
- rpmplugins.c rpmplugins.h rpmug.c rpmug.h
+ rpmplugins.c rpmplugins.h rpmplugin.h rpmug.c rpmug.h \
+ rpmtriggers.h rpmtriggers.c rpmvs.c rpmvs.h
-librpm_la_LDFLAGS = -version-info 4:0:1
+librpm_la_LDFLAGS = -version-info $(rpm_version_info)
librpm_la_LIBADD = \
$(top_builddir)/rpmio/librpmio.la \
@WITH_POPT_LIB@ \
- @WITH_SELINUX_LIB@ \
@WITH_CAP_LIB@ \
@WITH_ACL_LIB@ \
@LIBINTL@
@@ -61,6 +65,24 @@ else
librpm_la_LIBADD += @WITH_DB_LIB@
endif
+if NDB
+librpm_la_SOURCES += \
+ backend/ndb/glue.c \
+ backend/ndb/rpmpkg.c \
+ backend/ndb/rpmpkg.h \
+ backend/ndb/rpmidx.c \
+ backend/ndb/rpmidx.h \
+ backend/ndb/rpmxdb.c \
+ backend/ndb/rpmxdb.h
+endif
+
+if LMDB
+AM_CPPFLAGS += $(LMDB_CFLAGS)
+librpm_la_LIBADD += $(LMDB_LIBS)
+librpm_la_SOURCES += \
+ backend/lmdb.c
+endif
+
tagtbl.C: Makefile.am $(srcdir)/rpmtag.h gentagtbl.sh
@AWK=${AWK} ${SHELL} $(srcdir)/gentagtbl.sh \
$(srcdir)/rpmtag.h > $@.new && \
diff --git a/lib/backend/db3.c b/lib/backend/db3.c
index a55a608cf..7a86d3525 100644
--- a/lib/backend/db3.c
+++ b/lib/backend/db3.c
@@ -8,6 +8,9 @@ static int _debug = 1; /* XXX if < 0 debugging, > 0 unusual error returns */
#include <errno.h>
#include <sys/wait.h>
+#include <popt.h>
+#include <db.h>
+#include <signal.h>
#include <rpm/rpmtypes.h>
#include <rpm/rpmmacro.h>
@@ -22,19 +25,80 @@ static const char * _errpfx = "rpmdb";
struct dbiCursor_s {
dbiIndex dbi;
+ const void *key;
+ unsigned int keylen;
+ int flags;
DBC *cursor;
};
+static struct dbiConfig_s staticdbicfg;
+static struct dbConfig_s staticcfg;
+
+/** \ingroup dbi
+ */
+static const struct poptOption rdbOptions[] = {
+ /* Environment options */
+
+ { "cdb", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_INIT_CDB,
+ NULL, NULL },
+ { "lock", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_INIT_LOCK,
+ NULL, NULL },
+ { "log", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_INIT_LOG,
+ NULL, NULL },
+ { "txn", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_INIT_TXN,
+ NULL, NULL },
+ { "recover", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_RECOVER,
+ NULL, NULL },
+ { "recover_fatal", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_RECOVER_FATAL,
+ NULL, NULL },
+ { "lockdown", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_LOCKDOWN,
+ NULL, NULL },
+ { "private", 0,POPT_BIT_SET, &staticcfg.db_eflags, DB_PRIVATE,
+ NULL, NULL },
+
+ { "deadlock", 0,POPT_BIT_SET, &staticcfg.db_verbose, DB_VERB_DEADLOCK,
+ NULL, NULL },
+ { "recovery", 0,POPT_BIT_SET, &staticcfg.db_verbose, DB_VERB_RECOVERY,
+ NULL, NULL },
+ { "waitsfor", 0,POPT_BIT_SET, &staticcfg.db_verbose, DB_VERB_WAITSFOR,
+ NULL, NULL },
+ { "verbose", 0,POPT_ARG_VAL, &staticcfg.db_verbose, -1,
+ NULL, NULL },
+
+ { "cachesize", 0,POPT_ARG_INT, &staticcfg.db_cachesize, 0,
+ NULL, NULL },
+ { "mmapsize", 0,POPT_ARG_INT, &staticcfg.db_mmapsize, 0,
+ NULL, NULL },
+ { "mp_mmapsize", 0,POPT_ARG_INT, &staticcfg.db_mmapsize, 0,
+ NULL, NULL },
+ { "mp_size", 0,POPT_ARG_INT, &staticcfg.db_cachesize, 0,
+ NULL, NULL },
+
+ { "nofsync", 0,POPT_ARG_NONE, &staticcfg.db_no_fsync, 0,
+ NULL, NULL },
+
+ /* Per-dbi options */
+ { "nommap", 0,POPT_BIT_SET, &staticdbicfg.dbi_oflags, DB_NOMMAP,
+ NULL, NULL },
+
+ { "nodbsync", 0,POPT_ARG_NONE, &staticdbicfg.dbi_no_dbsync, 0,
+ NULL, NULL },
+ { "lockdbfd", 0,POPT_ARG_NONE, &staticdbicfg.dbi_lockdbfd, 0,
+ NULL, NULL },
+
+ POPT_TABLEEND
+};
+
+
static int dbapi_err(rpmdb rdb, const char * msg, int error, int printit)
{
if (printit && error) {
- int db_api = rdb->db_ver;
if (msg)
- rpmlog(RPMLOG_ERR, _("db%d error(%d) from %s: %s\n"),
- db_api, error, msg, db_strerror(error));
+ rpmlog(RPMLOG_ERR, _("%s error(%d) from %s: %s\n"),
+ rdb->db_descr, error, msg, db_strerror(error));
else
- rpmlog(RPMLOG_ERR, _("db%d error(%d): %s\n"),
- db_api, error, db_strerror(error));
+ rpmlog(RPMLOG_ERR, _("%s error(%d): %s\n"),
+ rdb->db_descr, error, db_strerror(error));
}
return error;
}
@@ -49,6 +113,11 @@ static void errlog(const DB_ENV * env, const char *errpfx, const char *msg)
rpmlog(RPMLOG_ERR, "%s: %s\n", errpfx, msg);
}
+static void warnlog(const DB_ENV *env, const char *msg)
+{
+ rpmlog(RPMLOG_WARNING, "%s: %s\n", _errpfx, msg);
+}
+
static uint32_t db_envflags(DB * db)
{
DB_ENV * env = db->get_env(db);
@@ -57,10 +126,42 @@ static uint32_t db_envflags(DB * db)
return eflags;
}
+/*
+ * Try to acquire db environment open/close serialization lock.
+ * Return the open, locked fd on success, -1 on failure.
+ */
+static int serialize_env(const char *dbhome)
+{
+ char *lock_path = rstrscat(NULL, dbhome, "/.dbenv.lock", NULL);
+ mode_t oldmask = umask(022);
+ int fd = open(lock_path, (O_RDWR|O_CREAT), 0644);
+ umask(oldmask);
+
+ if (fd >= 0) {
+ int rc;
+ struct flock info;
+ memset(&info, 0, sizeof(info));
+ info.l_type = F_WRLCK;
+ info.l_whence = SEEK_SET;
+ do {
+ rc = fcntl(fd, F_SETLKW, &info);
+ } while (rc == -1 && errno == EINTR);
+
+ if (rc == -1) {
+ close(fd);
+ fd = -1;
+ }
+ }
+
+ free(lock_path);
+ return fd;
+}
+
static int db_fini(rpmdb rdb, const char * dbhome)
{
DB_ENV * dbenv = rdb->db_dbenv;
int rc;
+ int lockfd = -1;
uint32_t eflags = 0;
if (dbenv == NULL)
@@ -72,6 +173,9 @@ static int db_fini(rpmdb rdb, const char * dbhome)
}
(void) dbenv->get_open_flags(dbenv, &eflags);
+ if (!(eflags & DB_PRIVATE))
+ lockfd = serialize_env(dbhome);
+
rc = dbenv->close(dbenv, 0);
rc = dbapi_err(rdb, "dbenv->close", rc, _debug);
@@ -89,6 +193,10 @@ static int db_fini(rpmdb rdb, const char * dbhome)
rpmlog(RPMLOG_DEBUG, "removed db environment %s\n", dbhome);
}
+
+ if (lockfd >= 0)
+ close(lockfd);
+
return rc;
}
@@ -117,11 +225,189 @@ static int isalive(DB_ENV *dbenv, pid_t pid, db_threadid_t tid, uint32_t flags)
return alive;
}
+
+static void dbConfigure(rpmDbiTagVal rpmtag, struct dbConfig_s *cfg, struct dbiConfig_s *dbicfg)
+{
+ char *dbOpts;
+
+ dbOpts = rpmExpand("%{_dbi_config_", rpmTagGetName(rpmtag), "}", NULL);
+
+ if (!(dbOpts && *dbOpts && *dbOpts != '%')) {
+ dbOpts = _free(dbOpts);
+ dbOpts = rpmExpand("%{_dbi_config}", NULL);
+ if (!(dbOpts && *dbOpts && *dbOpts != '%')) {
+ dbOpts = _free(dbOpts);
+ }
+ }
+
+ /* Parse the options for the database element(s). */
+ if (dbOpts && *dbOpts && *dbOpts != '%') {
+ char *o, *oe;
+ char *p, *pe;
+
+ memset(&staticdbicfg, 0, sizeof(staticdbicfg));
+/*=========*/
+ for (o = dbOpts; o && *o; o = oe) {
+ const struct poptOption *opt;
+ const char * tok;
+ unsigned int argInfo;
+
+ /* Skip leading white space. */
+ while (*o && risspace(*o))
+ o++;
+
+ /* Find and terminate next key=value pair. Save next start point. */
+ for (oe = o; oe && *oe; oe++) {
+ if (risspace(*oe))
+ break;
+ if (oe[0] == ':' && !(oe[1] == '/' && oe[2] == '/'))
+ break;
+ }
+ if (oe && *oe)
+ *oe++ = '\0';
+ if (*o == '\0')
+ continue;
+
+ /* Separate key from value, save value start (if any). */
+ for (pe = o; pe && *pe && *pe != '='; pe++)
+ {};
+ p = (pe ? *pe++ = '\0', pe : NULL);
+
+ /* Skip over negation at start of token. */
+ for (tok = o; *tok == '!'; tok++)
+ {};
+
+ /* Find key in option table. */
+ for (opt = rdbOptions; opt->longName != NULL; opt++) {
+ if (!rstreq(tok, opt->longName))
+ continue;
+ break;
+ }
+ if (opt->longName == NULL) {
+ rpmlog(RPMLOG_ERR,
+ _("unrecognized db option: \"%s\" ignored.\n"), o);
+ continue;
+ }
+
+ /* Toggle the flags for negated tokens, if necessary. */
+ argInfo = opt->argInfo;
+ if (argInfo == POPT_BIT_SET && *o == '!' && ((tok - o) % 2))
+ argInfo = POPT_BIT_CLR;
+
+ /* Save value in template as appropriate. */
+ switch (argInfo & POPT_ARG_MASK) {
+
+ case POPT_ARG_NONE:
+ (void) poptSaveInt((int *)opt->arg, argInfo, 1L);
+ break;
+ case POPT_ARG_VAL:
+ (void) poptSaveInt((int *)opt->arg, argInfo, (long)opt->val);
+ break;
+ case POPT_ARG_STRING:
+ { char ** t = opt->arg;
+ if (t) {
+/* FIX: opt->arg annotation in popt.h */
+ *t = _free(*t);
+ *t = xstrdup( (p ? p : "") );
+ }
+ } break;
+
+ case POPT_ARG_INT:
+ case POPT_ARG_LONG:
+ { long aLong = strtol(p, &pe, 0);
+ if (pe) {
+ if (!rstrncasecmp(pe, "Mb", 2))
+ aLong *= 1024 * 1024;
+ else if (!rstrncasecmp(pe, "Kb", 2))
+ aLong *= 1024;
+ else if (*pe != '\0') {
+ rpmlog(RPMLOG_ERR,
+ _("%s has invalid numeric value, skipped\n"),
+ opt->longName);
+ continue;
+ }
+ }
+
+ if ((argInfo & POPT_ARG_MASK) == POPT_ARG_LONG) {
+ if (aLong == LONG_MIN || aLong == LONG_MAX) {
+ rpmlog(RPMLOG_ERR,
+ _("%s has too large or too small long value, skipped\n"),
+ opt->longName);
+ continue;
+ }
+ (void) poptSaveLong((long *)opt->arg, argInfo, aLong);
+ break;
+ } else {
+ if (aLong > INT_MAX || aLong < INT_MIN) {
+ rpmlog(RPMLOG_ERR,
+ _("%s has too large or too small integer value, skipped\n"),
+ opt->longName);
+ continue;
+ }
+ (void) poptSaveInt((int *)opt->arg, argInfo, aLong);
+ }
+ } break;
+ default:
+ break;
+ }
+ }
+/*=========*/
+ }
+
+ dbOpts = _free(dbOpts);
+ if (cfg) {
+ *cfg = staticcfg; /* structure assignment */
+ /* Throw in some defaults if configuration didn't set any */
+ if (!cfg->db_mmapsize)
+ cfg->db_mmapsize = 16 * 1024 * 1024;
+ if (!cfg->db_cachesize)
+ cfg->db_cachesize = 8 * 1024 * 1024;
+ }
+ if (dbicfg) {
+ *dbicfg = staticdbicfg;
+ }
+}
+
+static char * prDbiOpenFlags(int dbflags, int print_dbenv_flags)
+{
+ ARGV_t flags = NULL;
+ const struct poptOption *opt;
+ char *buf;
+
+ for (opt = rdbOptions; opt->longName != NULL; opt++) {
+ if (opt->argInfo != POPT_BIT_SET)
+ continue;
+ if (print_dbenv_flags) {
+ if (!(opt->arg == &staticcfg.db_eflags))
+ continue;
+ } else {
+ if (!(opt->arg == &staticdbicfg.dbi_oflags))
+ continue;
+ }
+ if ((dbflags & opt->val) != opt->val)
+ continue;
+ argvAdd(&flags, opt->longName);
+ dbflags &= ~opt->val;
+ }
+ if (dbflags) {
+ char *df = NULL;
+ rasprintf(&df, "0x%x", (unsigned)dbflags);
+ argvAdd(&flags, df);
+ free(df);
+ }
+ buf = argvJoin(flags, ":");
+ argvFree(flags);
+
+ return buf ? buf : xstrdup("(none)");
+}
+
static int db_init(rpmdb rdb, const char * dbhome)
{
DB_ENV *dbenv = NULL;
int rc, xx;
int retry_open = 2;
+ int lockfd = -1;
+ int rdonly = ((rdb->db_mode & O_ACCMODE) == O_RDONLY);
struct dbConfig_s * cfg = &rdb->cfg;
/* This is our setup, thou shall not have other setups before us */
uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB);
@@ -129,6 +415,10 @@ static int db_init(rpmdb rdb, const char * dbhome)
if (rdb->db_dbenv != NULL) {
rdb->db_opens++;
return 0;
+ } else {
+ /* On first call, set backend description to something... */
+ free(rdb->db_descr);
+ rasprintf(&rdb->db_descr, "db%u", DB_VERSION_MAJOR);
}
/*
@@ -150,6 +440,7 @@ static int db_init(rpmdb rdb, const char * dbhome)
dbenv->set_alloc(dbenv, rmalloc, rrealloc, NULL);
dbenv->set_errcall(dbenv, NULL);
dbenv->set_errpfx(dbenv, _errpfx);
+ dbenv->set_msgcall(dbenv, warnlog);
/*
* These enable automatic stale lock removal.
@@ -176,6 +467,24 @@ static int db_init(rpmdb rdb, const char * dbhome)
}
/*
+ * Serialize shared environment open (and clock) via fcntl() lock.
+ * Otherwise we can end up calling dbenv->failchk() while another
+ * process is joining the environment, leading to transient
+ * DB_RUNRECOVER errors. Also prevents races wrt removing the
+ * environment (eg chrooted operation). Silently fall back to
+ * private environment on failure to allow non-privileged queries
+ * to "work", broken as it might be.
+ */
+ if (!(eflags & DB_PRIVATE)) {
+ lockfd = serialize_env(dbhome);
+ if (lockfd < 0 && rdonly) {
+ eflags |= DB_PRIVATE;
+ retry_open--;
+ rpmlog(RPMLOG_DEBUG, "serialize failed, using private dbenv\n");
+ }
+ }
+
+ /*
* Actually open the environment. Fall back to private environment
* if we dont have permission to join/create shared environment or
* system doesn't support it..
@@ -186,7 +495,10 @@ static int db_init(rpmdb rdb, const char * dbhome)
free(fstr);
rc = (dbenv->open)(dbenv, dbhome, eflags, rdb->db_perms);
- if ((rc == EACCES || rc == EROFS || rc == EINVAL) && errno == rc) {
+ if (rc == EINVAL && errno == rc) {
+ eflags |= DB_PRIVATE;
+ retry_open--;
+ } else if (rdonly && (rc == EACCES || rc == EROFS || rc == DB_VERSION_MISMATCH)) {
eflags |= DB_PRIVATE;
retry_open--;
} else {
@@ -208,6 +520,8 @@ static int db_init(rpmdb rdb, const char * dbhome)
rdb->db_dbenv = dbenv;
rdb->db_opens = 1;
+ if (lockfd >= 0)
+ close(lockfd);
return 0;
errxit:
@@ -216,10 +530,12 @@ errxit:
xx = dbenv->close(dbenv, 0);
xx = dbapi_err(rdb, "dbenv->close", xx, _debug);
}
+ if (lockfd >= 0)
+ close(lockfd);
return rc;
}
-void dbSetFSync(void *dbenv, int enable)
+static void db3_dbSetFSync(rpmdb rdb, int enable)
{
#ifdef HAVE_FDATASYNC
db_env_set_func_fsync(enable ? fdatasync : fsync_disable);
@@ -228,19 +544,24 @@ void dbSetFSync(void *dbenv, int enable)
#endif
}
-int dbiSync(dbiIndex dbi, unsigned int flags)
+static int db3_Ctrl(rpmdb rdb, dbCtrlOp ctrl)
+{
+ return 0;
+}
+
+static int dbiSync(dbiIndex dbi, unsigned int flags)
{
DB * db = dbi->dbi_db;
int rc = 0;
- if (db != NULL && !dbi->dbi_no_dbsync) {
+ if (db != NULL && !dbi->cfg.dbi_no_dbsync) {
rc = db->sync(db, flags);
rc = cvtdberr(dbi, "db->sync", rc, _debug);
}
return rc;
}
-dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags)
+static dbiCursor db3_dbiCursorInit(dbiIndex dbi, unsigned int flags)
{
dbiCursor dbc = NULL;
@@ -248,33 +569,52 @@ dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags)
DB * db = dbi->dbi_db;
DBC * cursor;
int cflags;
- int rc;
+ int rc = 0;
uint32_t eflags = db_envflags(db);
/* DB_WRITECURSOR requires CDB and writable db */
- if ((flags & DB_WRITECURSOR) &&
- (eflags & DB_INIT_CDB) && !(dbi->dbi_oflags & DB_RDONLY))
+ if ((flags & DBC_WRITE) &&
+ (eflags & DB_INIT_CDB) && !(dbi->dbi_flags & DBI_RDONLY))
{
cflags = DB_WRITECURSOR;
} else
cflags = 0;
- rc = db->cursor(db, NULL, &cursor, cflags);
- rc = cvtdberr(dbi, "db->cursor", rc, _debug);
+ /*
+ * Check for stale locks which could block writes "forever".
+ * XXX: Should we also do this on reads? Reads are less likely
+ * to get blocked so it seems excessive...
+ * XXX: On DB_RUNRECOVER, we should abort everything. Now
+ * we'll just fail to open a cursor again and again and again.
+ */
+ if (cflags & DB_WRITECURSOR) {
+ DB_ENV *dbenv = db->get_env(db);
+ rc = dbenv->failchk(dbenv, 0);
+ rc = cvtdberr(dbi, "dbenv->failchk", rc, _debug);
+ }
+
+ if (rc == 0) {
+ rc = db->cursor(db, NULL, &cursor, cflags);
+ rc = cvtdberr(dbi, "db->cursor", rc, _debug);
+ }
if (rc == 0) {
dbc = xcalloc(1, sizeof(*dbc));
dbc->cursor = cursor;
dbc->dbi = dbi;
+ dbc->flags = flags;
}
}
return dbc;
}
-dbiCursor dbiCursorFree(dbiCursor dbc)
+static dbiCursor db3_dbiCursorFree(dbiIndex dbi, dbiCursor dbc)
{
if (dbc) {
+ /* Automatically sync on write-cursor close */
+ if (dbc->flags & DBC_WRITE)
+ dbiSync(dbc->dbi, 0);
DBC * cursor = dbc->cursor;
int rc = cursor->c_close(cursor);
cvtdberr(dbc->dbi, "dbcursor->c_close", rc, _debug);
@@ -283,7 +623,7 @@ dbiCursor dbiCursorFree(dbiCursor dbc)
return NULL;
}
-int dbiCursorPut(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
+static int dbiCursorPut(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
{
int rc = EINVAL;
int sane = (key->data != NULL && key->size > 0 &&
@@ -302,7 +642,7 @@ int dbiCursorPut(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
return rc;
}
-int dbiCursorGet(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
+static int dbiCursorGet(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
{
int rc = EINVAL;
int sane = ((flags == DB_NEXT) || (key->data != NULL && key->size > 0));
@@ -319,12 +659,21 @@ int dbiCursorGet(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
_printit = (rc == DB_NOTFOUND ? 0 : _debug);
rc = cvtdberr(dbc->dbi, "dbcursor->c_get", rc, _printit);
+ /* Remember the last key fetched */
+ if (rc == 0) {
+ dbc->key = key->data;
+ dbc->keylen = key->size;
+ } else {
+ dbc->key = NULL;
+ dbc->keylen = 0;
+ }
+
rpmswExit(&rdb->db_getops, data->size);
}
return rc;
}
-int dbiCursorDel(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
+static int dbiCursorDel(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
{
int rc = EINVAL;
int sane = (key->data != NULL && key->size > 0);
@@ -350,23 +699,7 @@ int dbiCursorDel(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags)
return rc;
}
-unsigned int dbiCursorCount(dbiCursor dbc)
-{
- db_recno_t count = 0;
- if (dbc) {
- DBC * cursor = dbc->cursor;
- int rc = cursor->c_count(cursor, &count, 0);
- cvtdberr(dbc->dbi, "dbcursor->c_count", rc, _debug);
- }
- return count;
-}
-
-dbiIndex dbiCursorIndex(dbiCursor dbc)
-{
- return (dbc != NULL) ? dbc->dbi : NULL;
-}
-
-int dbiByteSwapped(dbiIndex dbi)
+static int dbiByteSwapped(dbiIndex dbi)
{
DB * db = dbi->dbi_db;
int rc = 0;
@@ -383,32 +716,7 @@ int dbiByteSwapped(dbiIndex dbi)
return rc;
}
-dbiIndexType dbiType(dbiIndex dbi)
-{
- return dbi->dbi_type;
-}
-
-int dbiFlags(dbiIndex dbi)
-{
- DB *db = dbi->dbi_db;
- int flags = DBI_NONE;
- uint32_t oflags = 0;
-
- if (db && db->get_open_flags(db, &oflags) == 0) {
- if (oflags & DB_CREATE)
- flags |= DBI_CREATED;
- if (oflags & DB_RDONLY)
- flags |= DBI_RDONLY;
- }
- return flags;
-}
-
-const char * dbiName(dbiIndex dbi)
-{
- return dbi->dbi_file;
-}
-
-int dbiVerify(dbiIndex dbi, unsigned int flags)
+static int db3_dbiVerify(dbiIndex dbi, unsigned int flags)
{
int rc = 0;
@@ -428,7 +736,7 @@ int dbiVerify(dbiIndex dbi, unsigned int flags)
static int _lockdbfd = 0;
-int dbiClose(dbiIndex dbi, unsigned int flags)
+static int db3_dbiClose(dbiIndex dbi, unsigned int flags)
{
rpmdb rdb = dbi->dbi_rpmdb;
const char * dbhome = rpmdbHome(rdb);
@@ -445,7 +753,7 @@ int dbiClose(dbiIndex dbi, unsigned int flags)
rpmlog(RPMLOG_DEBUG, "closed db index %s/%s\n",
dbhome, dbi->dbi_file);
- if (dbi->dbi_lockdbfd && _lockdbfd)
+ if (dbi->cfg.dbi_lockdbfd && _lockdbfd)
_lockdbfd--;
}
@@ -533,7 +841,7 @@ static int dbiFlock(dbiIndex dbi, int mode)
return rc;
}
-int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
+static int db3_dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
{
const char *dbhome = rpmdbHome(rdb);
dbiIndex dbi = NULL;
@@ -548,18 +856,20 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
if (dbip)
*dbip = NULL;
- /*
- * Parse db configuration parameters.
- */
if ((dbi = dbiNew(rdb, rpmtag)) == NULL)
return 1;
- oflags = dbi->dbi_oflags;
+ /*
+ * Parse db configuration parameters.
+ */
+ dbConfigure(rpmtag, rdb->db_dbenv == NULL ? &rdb->cfg : NULL, &dbi->cfg);
/*
* Map open mode flags onto configured database/environment flags.
*/
- if ((rdb->db_mode & O_ACCMODE) == O_RDONLY) oflags |= DB_RDONLY;
+ oflags = dbi->cfg.dbi_oflags;
+ if ((rdb->db_mode & O_ACCMODE) == O_RDONLY)
+ oflags |= DB_RDONLY;
rc = db_init(rdb, dbhome);
@@ -587,7 +897,7 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
if (rc == ENOENT) {
oflags |= DB_CREATE;
oflags &= ~DB_RDONLY;
- dbtype = (dbiType(dbi) == DBI_PRIMARY) ? DB_HASH : DB_BTREE;
+ dbtype = (rpmtag == RPMDBI_PACKAGES) ? DB_HASH : DB_BTREE;
retry_open--;
} else {
retry_open = 0;
@@ -615,12 +925,14 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
}
dbi->dbi_db = db;
- dbi->dbi_oflags = oflags;
- if (verifyonly)
- dbi->dbi_lockdbfd = 0; /* disable locking in verify mode */
+ dbi->dbi_flags = 0;
+ if (oflags & DB_CREATE)
+ dbi->dbi_flags |= DBI_CREATED;
+ if (oflags & DB_RDONLY)
+ dbi->dbi_flags |= DBI_RDONLY;
- if (rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) {
+ if (!verifyonly && rc == 0 && dbi->cfg.dbi_lockdbfd && _lockdbfd++ == 0) {
rc = dbiFlock(dbi, rdb->db_mode);
}
@@ -632,59 +944,456 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
return rc;
}
-
-int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags)
+/**
+ * Convert retrieved data to index set.
+ * @param dbi index database handle
+ * @param data retrieved data
+ * @retval setp (malloc'ed) index set
+ * @return 0 on success
+ */
+static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp)
{
- struct flock l;
- int rc = 0;
- int fdno = -1;
+ int _dbbyteswapped = dbiByteSwapped(dbi);
+ const char * sdbir;
+ dbiIndexSet set;
+ unsigned int i;
- if (!dbi->dbi_lockdbfd)
- return 0;
- if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY)))
+ if (dbi == NULL || data == NULL || setp == NULL)
+ return -1;
+
+ if ((sdbir = data->data) == NULL) {
+ *setp = NULL;
return 0;
- if (_lockdbfd == 0)
+ }
+
+ set = dbiIndexSetNew(data->size / (2 * sizeof(int32_t)));
+ set->count = data->size / (2 * sizeof(int32_t));
+
+ for (i = 0; i < set->count; i++) {
+ union _dbswap hdrNum, tagNum;
+
+ memcpy(&hdrNum.ui, sdbir, sizeof(hdrNum.ui));
+ sdbir += sizeof(hdrNum.ui);
+ memcpy(&tagNum.ui, sdbir, sizeof(tagNum.ui));
+ sdbir += sizeof(tagNum.ui);
+ if (_dbbyteswapped) {
+ _DBSWAP(hdrNum);
+ _DBSWAP(tagNum);
+ }
+ set->recs[i].hdrNum = hdrNum.ui;
+ set->recs[i].tagNum = tagNum.ui;
+ }
+ *setp = set;
+ return 0;
+}
+
+/**
+ * Convert index set to database representation.
+ * @param dbi index database handle
+ * @param data retrieved data
+ * @param set index set
+ * @return 0 on success
+ */
+static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set)
+{
+ int _dbbyteswapped = dbiByteSwapped(dbi);
+ char * tdbir;
+ unsigned int i;
+
+ if (dbi == NULL || data == NULL || set == NULL)
+ return -1;
+
+ data->size = set->count * (2 * sizeof(int32_t));
+ if (data->size == 0) {
+ data->data = NULL;
return 0;
- if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
- return 1;
- memset(&l, 0, sizeof(l));
- l.l_whence = 0;
- l.l_start = 0;
- l.l_len = 0;
- l.l_type = F_RDLCK;
- rc = fcntl(fdno, F_SETLK, (void *)&l);
+ }
+ tdbir = data->data = xmalloc(data->size);
+
+ for (i = 0; i < set->count; i++) {
+ union _dbswap hdrNum, tagNum;
+
+ memset(&hdrNum, 0, sizeof(hdrNum));
+ memset(&tagNum, 0, sizeof(tagNum));
+ hdrNum.ui = set->recs[i].hdrNum;
+ tagNum.ui = set->recs[i].tagNum;
+ if (_dbbyteswapped) {
+ _DBSWAP(hdrNum);
+ _DBSWAP(tagNum);
+ }
+ memcpy(tdbir, &hdrNum.ui, sizeof(hdrNum.ui));
+ tdbir += sizeof(hdrNum.ui);
+ memcpy(tdbir, &tagNum.ui, sizeof(tagNum.ui));
+ tdbir += sizeof(tagNum.ui);
+ }
+ return 0;
+}
+
+static rpmRC db3_idxdbGet(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexSet *set, int searchType)
+{
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ if (dbi != NULL && dbc != NULL && set != NULL) {
+ int cflags = DB_NEXT;
+ int dbrc;
+ DBT data, key;
+ memset(&data, 0, sizeof(data));
+ memset(&key, 0, sizeof(key));
+
+ if (keyp) {
+ if (keylen == 0) { /* XXX "/" fixup */
+ keyp = "";
+ keylen = 1;
+ }
+ key.data = (void *) keyp; /* discards const */
+ key.size = keylen;
+ cflags = searchType == DBC_PREFIX_SEARCH ? DB_SET_RANGE : DB_SET;
+ }
+
+ for (;;) {
+ dbiIndexSet newset = NULL;
+ dbrc = dbiCursorGet(dbc, &key, &data, cflags);
+ if (dbrc != 0)
+ break;
+ if (searchType == DBC_PREFIX_SEARCH &&
+ (key.size < keylen || memcmp(key.data, keyp, keylen) != 0))
+ break;
+ dbt2set(dbi, &data, &newset);
+ if (*set == NULL) {
+ *set = newset;
+ } else {
+ dbiIndexSetAppendSet(*set, newset, 0);
+ dbiIndexSetFree(newset);
+ }
+ if (searchType != DBC_PREFIX_SEARCH)
+ break;
+ key.data = NULL;
+ key.size = 0;
+ cflags = DB_NEXT;
+ }
+
+ /* fixup result status for prefix search */
+ if (searchType == DBC_PREFIX_SEARCH) {
+ if (dbrc == DB_NOTFOUND && *set != NULL && (*set)->count > 0)
+ dbrc = 0;
+ else if (dbrc == 0 && (*set == NULL || (*set)->count == 0))
+ dbrc = DB_NOTFOUND;
+ }
+
+ if (dbrc == 0) {
+ rc = RPMRC_OK;
+ } else if (dbrc == DB_NOTFOUND) {
+ rc = RPMRC_NOTFOUND;
+ } else {
+ rpmlog(RPMLOG_ERR,
+ _("error(%d) getting \"%s\" records from %s index: %s\n"),
+ dbrc, keyp ? keyp : "???", dbiName(dbi), db_strerror(dbrc));
+ }
+ }
+ return rc;
+}
+
+/* Update secondary index. NULL set deletes the key */
+static rpmRC updateIndex(dbiCursor dbc, const char *keyp, unsigned int keylen,
+ dbiIndexSet set)
+{
+ rpmRC rc = RPMRC_FAIL;
+
+ if (dbc && keyp) {
+ dbiIndex dbi = dbc->dbi;
+ int dbrc;
+ DBT data, key;
+ memset(&key, 0, sizeof(data));
+ memset(&data, 0, sizeof(data));
+
+ key.data = (void *) keyp; /* discards const */
+ key.size = keylen;
+
+ if (set)
+ set2dbt(dbi, &data, set);
+
+ if (dbiIndexSetCount(set) > 0) {
+ dbrc = dbiCursorPut(dbc, &key, &data, DB_KEYLAST);
+ if (dbrc) {
+ rpmlog(RPMLOG_ERR,
+ _("error(%d) storing record \"%s\" into %s\n"),
+ dbrc, (char*)key.data, dbiName(dbi));
+ }
+ free(data.data);
+ } else {
+ dbrc = dbiCursorDel(dbc, &key, &data, 0);
+ if (dbrc) {
+ rpmlog(RPMLOG_ERR,
+ _("error(%d) removing record \"%s\" from %s\n"),
+ dbrc, (char*)key.data, dbiName(dbi));
+ }
+ }
+
+ if (dbrc == 0)
+ rc = RPMRC_OK;
+ }
+
+ return rc;
+}
+
+static rpmRC db3_idxdbPut(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec)
+{
+ dbiIndexSet set = NULL;
+ rpmRC rc;
+
+ if (keyp && keylen == 0) { /* XXX "/" fixup */
+ keyp = "";
+ keylen++;
+ }
+ rc = idxdbGet(dbi, dbc, keyp, keylen, &set, DBC_NORMAL_SEARCH);
+
+ /* Not found means a new key and is not an error. */
+ if (rc && rc != RPMRC_NOTFOUND)
+ return rc;
+
+ if (set == NULL)
+ set = dbiIndexSetNew(1);
+ dbiIndexSetAppend(set, rec, 1, 0);
+
+ rc = updateIndex(dbc, keyp, keylen, set);
+
+ dbiIndexSetFree(set);
+ return rc;
+}
+
+static rpmRC db3_idxdbDel(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec)
+{
+ dbiIndexSet set = NULL;
+ rpmRC rc;
+
+ if (keyp && keylen == 0) { /* XXX "/" fixup */
+ keyp = "";
+ keylen++;
+ }
+ rc = idxdbGet(dbi, dbc, keyp, keylen, &set, DBC_NORMAL_SEARCH);
if (rc)
- rpmlog(RPMLOG_WARNING, _("could not suspend database lock\n"));
+ return rc;
+
+ if (dbiIndexSetPrune(set, rec, 1, 1)) {
+ /* Nothing was pruned. XXX: Can this actually happen? */
+ rc = RPMRC_OK;
+ } else {
+ /* If there's data left, update data. Otherwise delete the key. */
+ if (dbiIndexSetCount(set) > 0) {
+ rc = updateIndex(dbc, keyp, keylen, set);
+ } else {
+ rc = updateIndex(dbc, keyp, keylen, NULL);
+ }
+ };
+ dbiIndexSetFree(set);
+
return rc;
}
-int dbiResumeDBLock(dbiIndex dbi, unsigned int flags)
+static const void * db3_idxdbKey(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen)
{
- struct flock l;
+ const void *key = NULL;
+ if (dbc) {
+ key = dbc->key;
+ if (key && keylen)
+ *keylen = dbc->keylen;
+ }
+ return key;
+}
+
+
+/* Update primary Packages index. NULL hdr means remove */
+static rpmRC updatePackages(dbiCursor dbc, unsigned int hdrNum, DBT *hdr)
+{
+ union _dbswap mi_offset;
int rc = 0;
- int tries;
- int fdno = -1;
+ DBT key;
- if (!dbi->dbi_lockdbfd)
- return 0;
- if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY)))
- return 0;
- if (_lockdbfd == 0)
- return 0;
- if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
- return 1;
- for (tries = 0; tries < 2; tries++) {
- memset(&l, 0, sizeof(l));
- l.l_whence = 0;
- l.l_start = 0;
- l.l_len = 0;
- l.l_type = F_WRLCK;
- rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *)&l);
- if (!rc)
- break;
- if (tries == 0)
- rpmlog(RPMLOG_WARNING, _("waiting to reestablish exclusive database lock\n"));
+ if (dbc == NULL || hdrNum == 0)
+ return RPMRC_FAIL;
+
+ memset(&key, 0, sizeof(key));
+
+ mi_offset.ui = hdrNum;
+ if (dbiByteSwapped(dbc->dbi) == 1)
+ _DBSWAP(mi_offset);
+ key.data = (void *) &mi_offset;
+ key.size = sizeof(mi_offset.ui);
+
+ if (hdr) {
+ rc = dbiCursorPut(dbc, &key, hdr, DB_KEYLAST);
+ if (rc) {
+ rpmlog(RPMLOG_ERR,
+ _("error(%d) adding header #%d record\n"), rc, hdrNum);
+ }
+ } else {
+ DBT data;
+
+ memset(&data, 0, sizeof(data));
+ rc = dbiCursorGet(dbc, &key, &data, DB_SET);
+ if (rc) {
+ rpmlog(RPMLOG_ERR,
+ _("error(%d) removing header #%d record\n"), rc, hdrNum);
+ } else
+ rc = dbiCursorDel(dbc, &key, &data, 0);
}
- return rc;
+
+ return rc == 0 ? RPMRC_OK : RPMRC_FAIL;
+}
+
+/* Get current header instance number or try to allocate a new one */
+static unsigned int pkgInstance(dbiIndex dbi, int alloc)
+{
+ unsigned int hdrNum = 0;
+
+ if (dbi != NULL && dbi->dbi_type == DBI_PRIMARY) {
+ dbiCursor dbc;
+ DBT key, data;
+ unsigned int firstkey = 0;
+ union _dbswap mi_offset;
+ int ret;
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+
+ dbc = dbiCursorInit(dbi, alloc ? DBC_WRITE : 0);
+
+ /* Key 0 holds the current largest instance, fetch it */
+ key.data = &firstkey;
+ key.size = sizeof(firstkey);
+ ret = dbiCursorGet(dbc, &key, &data, DB_SET);
+
+ if (ret == 0 && data.data) {
+ memcpy(&mi_offset, data.data, sizeof(mi_offset.ui));
+ if (dbiByteSwapped(dbi) == 1)
+ _DBSWAP(mi_offset);
+ hdrNum = mi_offset.ui;
+ }
+
+ if (alloc) {
+ /* Rather complicated "increment by one", bswapping as needed */
+ ++hdrNum;
+ mi_offset.ui = hdrNum;
+ if (dbiByteSwapped(dbi) == 1)
+ _DBSWAP(mi_offset);
+ if (ret == 0 && data.data) {
+ memcpy(data.data, &mi_offset, sizeof(mi_offset.ui));
+ } else {
+ data.data = &mi_offset;
+ data.size = sizeof(mi_offset.ui);
+ }
+
+ /* Unless we manage to insert the new instance number, we failed */
+ ret = dbiCursorPut(dbc, &key, &data, DB_KEYLAST);
+ if (ret) {
+ hdrNum = 0;
+ rpmlog(RPMLOG_ERR,
+ _("error(%d) allocating new package instance\n"), ret);
+ }
+ }
+ dbiCursorFree(dbi, dbc);
+ }
+
+ return hdrNum;
}
+static rpmRC db3_pkgdbPut(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum,
+ unsigned char *hdrBlob, unsigned int hdrLen)
+{
+ DBT hdr;
+ memset(&hdr, 0, sizeof(hdr));
+ hdr.data = hdrBlob;
+ hdr.size = hdrLen;
+ return updatePackages(dbc, hdrNum, &hdr);
+}
+
+static rpmRC db3_pkgdbDel(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum)
+{
+ return updatePackages(dbc, hdrNum, NULL);
+}
+
+static rpmRC db3_pkgdbGet(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum,
+ unsigned char **hdrBlob, unsigned int *hdrLen)
+{
+ DBT key, data;
+ union _dbswap mi_offset;
+ int rc;
+
+ if (dbc == NULL)
+ return RPMRC_FAIL;
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+
+ if (hdrNum) {
+ mi_offset.ui = hdrNum;
+ if (dbiByteSwapped(dbc->dbi) == 1)
+ _DBSWAP(mi_offset);
+ key.data = (void *) &mi_offset;
+ key.size = sizeof(mi_offset.ui);
+ }
+
+#if !defined(_USE_COPY_LOAD)
+ data.flags |= DB_DBT_MALLOC;
+#endif
+ rc = dbiCursorGet(dbc, &key, &data, hdrNum ? DB_SET : DB_NEXT);
+ if (rc == 0) {
+ if (hdrBlob)
+ *hdrBlob = data.data;
+ if (hdrLen)
+ *hdrLen = data.size;
+ return RPMRC_OK;
+ } else if (rc == DB_NOTFOUND)
+ return RPMRC_NOTFOUND;
+ else
+ return RPMRC_FAIL;
+}
+
+static unsigned int db3_pkgdbKey(dbiIndex dbi, dbiCursor dbc)
+{
+ union _dbswap mi_offset;
+
+ if (dbc == NULL || dbc->key == NULL)
+ return 0;
+ memcpy(&mi_offset, dbc->key, sizeof(mi_offset.ui));
+ if (dbiByteSwapped(dbc->dbi) == 1)
+ _DBSWAP(mi_offset);
+ return mi_offset.ui;
+}
+
+static rpmRC db3_pkgdbNew(dbiIndex dbi, dbiCursor dbc, unsigned int *hdrNum)
+{
+ unsigned int num;
+ if (dbc == NULL)
+ return RPMRC_FAIL;
+ num = pkgInstance(dbc->dbi, 1);
+ if (!num)
+ return RPMRC_FAIL;
+ *hdrNum = num;
+ return RPMRC_OK;
+}
+
+struct rpmdbOps_s db3_dbops = {
+ .open = db3_dbiOpen,
+ .close = db3_dbiClose,
+ .verify = db3_dbiVerify,
+
+ .setFSync = db3_dbSetFSync,
+ .ctrl = db3_Ctrl,
+
+ .cursorInit = db3_dbiCursorInit,
+ .cursorFree = db3_dbiCursorFree,
+
+ .pkgdbGet = db3_pkgdbGet,
+ .pkgdbPut = db3_pkgdbPut,
+ .pkgdbDel = db3_pkgdbDel,
+ .pkgdbNew = db3_pkgdbNew,
+ .pkgdbKey = db3_pkgdbKey,
+
+ .idxdbGet = db3_idxdbGet,
+ .idxdbPut = db3_idxdbPut,
+ .idxdbDel = db3_idxdbDel,
+ .idxdbKey = db3_idxdbKey
+};
diff --git a/lib/backend/dbi.c b/lib/backend/dbi.c
new file mode 100644
index 000000000..e99a5f2b2
--- /dev/null
+++ b/lib/backend/dbi.c
@@ -0,0 +1,184 @@
+/** \ingroup rpmdb
+ * \file lib/dbi.c
+ */
+
+#include "system.h"
+
+#include <stdlib.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmstring.h>
+#include <rpm/rpmmacro.h>
+#include <rpm/rpmlog.h>
+#include "lib/rpmdb_internal.h"
+#include "debug.h"
+
+
+dbiIndex dbiFree(dbiIndex dbi)
+{
+ if (dbi) {
+ free(dbi);
+ }
+ return NULL;
+}
+
+dbiIndex dbiNew(rpmdb rdb, rpmDbiTagVal rpmtag)
+{
+ dbiIndex dbi = xcalloc(1, sizeof(*dbi));
+ /* FIX: figger lib/dbi refcounts */
+ dbi->dbi_rpmdb = rdb;
+ dbi->dbi_file = rpmTagGetName(rpmtag);
+ dbi->dbi_type = (rpmtag == RPMDBI_PACKAGES) ? DBI_PRIMARY : DBI_SECONDARY;
+ dbi->dbi_byteswapped = -1; /* -1 unknown, 0 native order, 1 alien order */
+ return dbi;
+}
+
+static void
+dbDetectBackend(rpmdb rdb)
+{
+ const char *dbhome = rpmdbHome(rdb);
+ char *db_backend = rpmExpand("%{?_db_backend}", NULL);
+ char *path = NULL;
+
+#if defined(WITH_LMDB)
+ if (!strcmp(db_backend, "lmdb")) {
+ rdb->db_ops = &lmdb_dbops;
+ } else
+#endif
+#ifdef ENABLE_NDB
+ if (!strcmp(db_backend, "ndb")) {
+ rdb->db_ops = &ndb_dbops;
+ } else
+#endif
+ {
+ rdb->db_ops = &db3_dbops;
+ if (*db_backend == '\0') {
+ free(db_backend);
+ db_backend = xstrdup("bdb");
+ }
+ }
+
+#if defined(WITH_LMDB)
+ path = rstrscat(NULL, dbhome, "/data.mdb", NULL);
+ if (access(path, F_OK) == 0 && rdb->db_ops != &lmdb_dbops) {
+ rdb->db_ops = &lmdb_dbops;
+ rpmlog(RPMLOG_WARNING, _("Found LMDB data.mdb database while attempting %s backend: using lmdb backend.\n"), db_backend);
+ }
+ free(path);
+#endif
+
+#ifdef ENABLE_NDB
+ path = rstrscat(NULL, dbhome, "/Packages.db", NULL);
+ if (access(path, F_OK) == 0 && rdb->db_ops != &ndb_dbops) {
+ rdb->db_ops = &ndb_dbops;
+ rpmlog(RPMLOG_WARNING, _("Found NDB Packages.db database while attempting %s backend: using ndb backend.\n"), db_backend);
+ }
+ free(path);
+#endif
+
+ path = rstrscat(NULL, dbhome, "/Packages", NULL);
+ if (access(path, F_OK) == 0 && rdb->db_ops != &db3_dbops) {
+ rdb->db_ops = &db3_dbops;
+ rpmlog(RPMLOG_WARNING, _("Found BDB Packages database while attempting %s backend: using bdb backend.\n"), db_backend);
+ }
+ free(path);
+
+ if (db_backend)
+ free(db_backend);
+}
+
+const char * dbiName(dbiIndex dbi)
+{
+ return dbi->dbi_file;
+}
+
+int dbiFlags(dbiIndex dbi)
+{
+ return dbi->dbi_flags;
+}
+
+void dbSetFSync(rpmdb rdb, int enable)
+{
+ if (!rdb->db_ops)
+ dbDetectBackend(rdb);
+ rdb->db_ops->setFSync(rdb, enable);
+}
+
+int dbCtrl(rpmdb rdb, dbCtrlOp ctrl)
+{
+ if (!rdb->db_ops)
+ dbDetectBackend(rdb);
+ return rdb->db_ops->ctrl(rdb, ctrl);
+}
+
+int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
+{
+ if (!rdb->db_ops)
+ dbDetectBackend(rdb);
+ return rdb->db_ops->open(rdb, rpmtag, dbip, flags);
+}
+
+int dbiClose(dbiIndex dbi, unsigned int flags)
+{
+ return dbi ? dbi->dbi_rpmdb->db_ops->close(dbi, flags) : 0;
+}
+
+int dbiVerify(dbiIndex dbi, unsigned int flags)
+{
+ return dbi->dbi_rpmdb->db_ops->verify(dbi, flags);
+}
+
+dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags)
+{
+ return dbi->dbi_rpmdb->db_ops->cursorInit(dbi, flags);
+}
+
+dbiCursor dbiCursorFree(dbiIndex dbi, dbiCursor dbc)
+{
+ return dbi->dbi_rpmdb->db_ops->cursorFree(dbi, dbc);
+}
+
+rpmRC pkgdbPut(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum, unsigned char *hdrBlob, unsigned int hdrLen)
+{
+ return dbi->dbi_rpmdb->db_ops->pkgdbPut(dbi, dbc, hdrNum, hdrBlob, hdrLen);
+}
+
+rpmRC pkgdbDel(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum)
+{
+ return dbi->dbi_rpmdb->db_ops->pkgdbDel(dbi, dbc, hdrNum);
+}
+
+rpmRC pkgdbGet(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum, unsigned char **hdrBlob, unsigned int *hdrLen)
+{
+ return dbi->dbi_rpmdb->db_ops->pkgdbGet(dbi, dbc, hdrNum, hdrBlob, hdrLen);
+}
+
+rpmRC pkgdbNew(dbiIndex dbi, dbiCursor dbc, unsigned int *hdrNum)
+{
+ return dbi->dbi_rpmdb->db_ops->pkgdbNew(dbi, dbc, hdrNum);
+}
+
+unsigned int pkgdbKey(dbiIndex dbi, dbiCursor dbc)
+{
+ return dbi->dbi_rpmdb->db_ops->pkgdbKey(dbi, dbc);
+}
+
+rpmRC idxdbGet(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexSet *set, int curFlags)
+{
+ return dbi->dbi_rpmdb->db_ops->idxdbGet(dbi, dbc, keyp, keylen, set, curFlags);
+}
+
+rpmRC idxdbPut(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexItem rec)
+{
+ return dbi->dbi_rpmdb->db_ops->idxdbPut(dbi, dbc, keyp, keylen, rec);
+}
+
+rpmRC idxdbDel(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexItem rec)
+{
+ return dbi->dbi_rpmdb->db_ops->idxdbDel(dbi, dbc, keyp, keylen, rec);
+}
+
+const void * idxdbKey(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen)
+{
+ return dbi->dbi_rpmdb->db_ops->idxdbKey(dbi, dbc, keylen);
+}
+
diff --git a/lib/backend/dbi.h b/lib/backend/dbi.h
index 3d848a8a0..1833da263 100644
--- a/lib/backend/dbi.h
+++ b/lib/backend/dbi.h
@@ -1,12 +1,25 @@
#ifndef _DBI_H
#define _DBI_H
+#include "dbiset.h"
+
+/* XXX: make this backend-specific, eliminate or something... */
+#define _USE_COPY_LOAD
+
enum rpmdbFlags {
RPMDB_FLAG_JUSTCHECK = (1 << 0),
RPMDB_FLAG_REBUILD = (1 << 1),
RPMDB_FLAG_VERIFYONLY = (1 << 2),
};
+typedef enum dbCtrlOp_e {
+ DB_CTRL_LOCK_RO = 1,
+ DB_CTRL_UNLOCK_RO = 2,
+ DB_CTRL_LOCK_RW = 3,
+ DB_CTRL_UNLOCK_RW = 4,
+ DB_CTRL_INDEXSYNC = 5
+} dbCtrlOp;
+
typedef struct dbiIndex_s * dbiIndex;
typedef struct dbiCursor_s * dbiCursor;
@@ -15,8 +28,17 @@ struct dbConfig_s {
int db_cachesize; /*!< (128Kb) */
int db_verbose;
int db_no_fsync; /*!< no-op fsync for db */
+ int db_eflags; /*!< obsolete */
+};
+
+struct dbiConfig_s {
+ int dbi_oflags; /*!< open flags */
+ int dbi_no_dbsync; /*!< don't call dbiSync */
+ int dbi_lockdbfd; /*!< do fcntl lock on db fd */
};
+struct rpmdbOps_s;
+
/** \ingroup rpmdb
* Describes the collection of index databases used by rpm.
*/
@@ -27,16 +49,20 @@ struct rpmdb_s {
int db_flags;
int db_mode; /*!< open mode */
int db_perms; /*!< open permissions */
- int db_ver; /*!< Berkeley DB version */
+ char * db_descr; /*!< db backend description (for error msgs) */
struct dbChk_s * db_checked;/*!< headerCheck()'ed package instances */
rpmdb db_next;
int db_opens;
+ dbiIndex db_pkgs; /*!< Package db */
+ const rpmDbiTag * db_tags;
int db_ndbi; /*!< No. of tag indices. */
- dbiIndex * _dbi; /*!< Tag indices. */
+ dbiIndex * db_indexes; /*!< Tag indices. */
int db_buildindex; /*!< Index rebuild indicator */
+ struct rpmdbOps_s * db_ops; /*!< backend ops */
+
/* dbenv and related parameters */
- void * db_dbenv; /*!< Berkeley DB_ENV handle. */
+ void * db_dbenv; /*!< Backend private handle */
struct dbConfig_s cfg;
int db_remove_env;
@@ -59,24 +85,44 @@ enum dbiFlags_e {
DBI_RDONLY = (1 << 1),
};
+enum dbcFlags_e {
+ DBC_READ = 0,
+ DBC_WRITE = (1 << 0),
+};
+
+enum dbcSearchType_e {
+ DBC_NORMAL_SEARCH = 0,
+ DBC_PREFIX_SEARCH = (1 << 0),
+};
+
/** \ingroup dbi
* Describes an index database (implemented on Berkeley db functionality).
*/
struct dbiIndex_s {
+ rpmdb dbi_rpmdb; /*!< the parent rpm database */
+ dbiIndexType dbi_type; /*! Type of dbi (primary / index) */
const char * dbi_file; /*!< file component of path */
-
- int dbi_oflags; /*!< db->open flags */
- int dbi_permit_dups; /*!< permit duplicate entries? */
- int dbi_no_dbsync; /*!< don't call dbiSync */
- int dbi_lockdbfd; /*!< do fcntl lock on db fd */
+ int dbi_flags;
int dbi_byteswapped;
- rpmdb dbi_rpmdb; /*!< the parent rpm database */
- dbiIndexType dbi_type; /*! Type of dbi (primary / index) */
+ struct dbiConfig_s cfg;
+
+ void * dbi_db; /*!< Backend private handle */
+};
- DB * dbi_db; /*!< Berkeley DB * handle */
+union _dbswap {
+ unsigned int ui;
+ unsigned char uc[4];
};
+#define _DBSWAP(_a) \
+\
+ { unsigned char _b, *_c = (_a).uc; \
+ _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \
+ _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \
+\
+ }
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -102,7 +148,10 @@ int dbiResumeDBLock(dbiIndex dbi, unsigned int flags);
RPM_GNUC_INTERNAL
/* Globally enable/disable fsync in the backend */
-void dbSetFSync(void *dbenv, int enable);
+void dbSetFSync(rpmdb rdb, int enable);
+
+RPM_GNUC_INTERNAL
+int dbCtrl(rpmdb rdb, dbCtrlOp ctrl);
/** \ingroup dbi
* Return new configured index database handle instance.
@@ -122,15 +171,6 @@ RPM_GNUC_INTERNAL
dbiIndex dbiFree( dbiIndex dbi);
/** \ingroup dbi
- * Format dbi open flags for debugging print.
- * @param dbflags db open flags
- * @param print_dbenv_flags format db env flags instead?
- * @return formatted flags (malloced)
- */
-RPM_GNUC_INTERNAL
-char * prDbiOpenFlags(int dbflags, int print_dbenv_flags);
-
-/** \ingroup dbi
* Actually open the database of the index.
* @param db rpm database
* @param rpmtag database index tag
@@ -151,15 +191,6 @@ RPM_GNUC_INTERNAL
int dbiClose(dbiIndex dbi, unsigned int flags);
/** \ingroup dbi
- * Flush pending operations to disk.
- * @param dbi index database handle
- * @param flags (unused)
- * @return 0 on success
- */
-RPM_GNUC_INTERNAL
-int dbiSync (dbiIndex dbi, unsigned int flags);
-
-/** \ingroup dbi
* Verify (and close) index database.
* @param dbi index database handle
* @param flags (unused)
@@ -169,22 +200,6 @@ RPM_GNUC_INTERNAL
int dbiVerify(dbiIndex dbi, unsigned int flags);
/** \ingroup dbi
- * Is database byte swapped?
- * @param dbi index database handle
- * @return 0 same order, 1 swapped order
- */
-RPM_GNUC_INTERNAL
-int dbiByteSwapped(dbiIndex dbi);
-
-/** \ingroup dbi
- * Type of dbi (primary data / index)
- * @param dbi index database handle
- * @return type of dbi
- */
-RPM_GNUC_INTERNAL
-dbiIndexType dbiType(dbiIndex dbi);
-
-/** \ingroup dbi
* Retrieve index control flags (new/existing, read-only etc)
* @param dbi index database handle
* @return dbi control flags
@@ -203,7 +218,7 @@ const char * dbiName(dbiIndex dbi);
/** \ingroup dbi
* Open a database cursor.
* @param dbi index database handle
- * @param flags DB_WRITECURSOR if writing, or 0
+ * @param flags DBC_WRITE if writing, or 0 (DBC_READ) for reading
* @return database cursor handle
*/
RPM_GNUC_INTERNAL
@@ -215,56 +230,69 @@ dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags);
* @return NULL always
*/
RPM_GNUC_INTERNAL
-dbiCursor dbiCursorFree(dbiCursor dbc);
+dbiCursor dbiCursorFree(dbiIndex dbi, dbiCursor dbc);
-/** \ingroup dbi
- * Store (key,data) pair in index database.
- * @param dbcursor database cursor handle
- * @param key store key value/length/flags
- * @param data store data value/length/flags
- * @param flags flags
- * @return 0 on success
- */
+
+RPM_GNUC_INTERNAL
+rpmRC pkgdbPut(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum,
+ unsigned char *hdrBlob, unsigned int hdrLen);
+RPM_GNUC_INTERNAL
+rpmRC pkgdbDel(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum);
RPM_GNUC_INTERNAL
-int dbiCursorPut(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags);
+rpmRC pkgdbGet(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum,
+ unsigned char **hdrBlob, unsigned int *hdrLen);
+RPM_GNUC_INTERNAL
+rpmRC pkgdbNew(dbiIndex dbi, dbiCursor dbc, unsigned int *hdrNum);
+RPM_GNUC_INTERNAL
+unsigned int pkgdbKey(dbiIndex dbi, dbiCursor dbc);
-/** \ingroup dbi
- * Retrieve (key,data) pair from index database.
- * @param dbc database cursor handle
- * @param key retrieve key value/length/flags
- * @param data retrieve data value/length/flags
- * @param flags flags
- * @return 0 on success
- */
RPM_GNUC_INTERNAL
-int dbiCursorGet(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags);
+rpmRC idxdbGet(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexSet *set, int curFlags);
+RPM_GNUC_INTERNAL
+rpmRC idxdbPut(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec);
+RPM_GNUC_INTERNAL
+rpmRC idxdbDel(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec);
+RPM_GNUC_INTERNAL
+const void * idxdbKey(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen);
+
+struct rpmdbOps_s {
+ int (*open)(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags);
+ int (*close)(dbiIndex dbi, unsigned int flags);
+ int (*verify)(dbiIndex dbi, unsigned int flags);
+ void (*setFSync)(rpmdb rdb, int enable);
+ int (*ctrl)(rpmdb rdb, dbCtrlOp ctrl);
+
+ dbiCursor (*cursorInit)(dbiIndex dbi, unsigned int flags);
+ dbiCursor (*cursorFree)(dbiIndex dbi, dbiCursor dbc);
+
+ rpmRC (*pkgdbGet)(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum, unsigned char **hdrBlob, unsigned int *hdrLen);
+ rpmRC (*pkgdbPut)(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum, unsigned char *hdrBlob, unsigned int hdrLen);
+ rpmRC (*pkgdbDel)(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum);
+ rpmRC (*pkgdbNew)(dbiIndex dbi, dbiCursor dbc, unsigned int *hdrNum);
+ unsigned int (*pkgdbKey)(dbiIndex dbi, dbiCursor dbc);
+
+ rpmRC (*idxdbGet)(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexSet *set, int curFlags);
+ rpmRC (*idxdbPut)(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexItem rec);
+ rpmRC (*idxdbDel)(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexItem rec);
+ const void * (*idxdbKey)(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen);
+};
-/** \ingroup dbi
- * Delete (key,data) pair(s) from index database.
- * @param dbc database cursor handle
- * @param key delete key value/length/flags
- * @param data delete data value/length/flags
- * @param flags flags
- * @return 0 on success
- */
RPM_GNUC_INTERNAL
-int dbiCursorDel(dbiCursor dbc, DBT * key, DBT * data, unsigned int flags);
+extern struct rpmdbOps_s db3_dbops;
-/** \ingroup dbi
- * Retrieve count of (possible) duplicate items.
- * @param dbcursor database cursor
- * @return number of duplicates
- */
+#ifdef ENABLE_NDB
RPM_GNUC_INTERNAL
-unsigned int dbiCursorCount(dbiCursor dbc);
+extern struct rpmdbOps_s ndb_dbops;
+#endif
-/** \ingroup dbi
- * Retrieve underlying index database handle.
- * @param dbcursor database cursor
- * @return index database handle
- */
+#if defined(WITH_LMDB)
RPM_GNUC_INTERNAL
-dbiIndex dbiCursorIndex(dbiCursor dbc);
+extern struct rpmdbOps_s lmdb_dbops;
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/backend/dbiset.c b/lib/backend/dbiset.c
new file mode 100644
index 000000000..8fb922ef7
--- /dev/null
+++ b/lib/backend/dbiset.c
@@ -0,0 +1,214 @@
+#include "system.h"
+#include <string.h>
+#include <stdlib.h>
+#include "dbiset.h"
+#include "debug.h"
+
+dbiIndexSet dbiIndexSetNew(unsigned int sizehint)
+{
+ dbiIndexSet set = xcalloc(1, sizeof(*set));
+ if (sizehint > 0)
+ dbiIndexSetGrow(set, sizehint);
+ return set;
+}
+
+/*
+ * Ensure sufficient memory for nrecs of new records in dbiIndexSet.
+ * Allocate in power of two sizes to avoid memory fragmentation, so
+ * realloc is not always needed.
+ */
+void dbiIndexSetGrow(dbiIndexSet set, unsigned int nrecs)
+{
+ size_t need = (set->count + nrecs) * sizeof(*(set->recs));
+ size_t alloced = set->alloced ? set->alloced : 1 << 4;
+
+ while (alloced < need)
+ alloced <<= 1;
+
+ if (alloced != set->alloced) {
+ set->recs = xrealloc(set->recs, alloced);
+ set->alloced = alloced;
+ }
+}
+
+static int hdrNumCmp(const void * one, const void * two)
+{
+ const struct dbiIndexItem_s *a = one, *b = two;
+ if (a->hdrNum - b->hdrNum != 0)
+ return a->hdrNum - b->hdrNum;
+ return a->tagNum - b->tagNum;
+}
+
+void dbiIndexSetSort(dbiIndexSet set)
+{
+ /*
+ * mergesort is much (~10x with lots of identical basenames) faster
+ * than pure quicksort, but glibc uses msort_with_tmp() on stack.
+ */
+ if (set && set->recs && set->count > 1) {
+#if HAVE_MERGESORT
+ mergesort(set->recs, set->count, sizeof(*set->recs), hdrNumCmp);
+#else
+ qsort(set->recs, set->count, sizeof(*set->recs), hdrNumCmp);
+#endif
+ }
+}
+
+void dbiIndexSetUniq(dbiIndexSet set, int sorted)
+{
+ unsigned int from;
+ unsigned int to = 0;
+ unsigned int num = set->count;
+
+ if (set->count < 2)
+ return;
+
+ if (!sorted)
+ dbiIndexSetSort(set);
+
+ for (from = 0; from < num; from++) {
+ if (from > 0 && set->recs[from - 1].hdrNum == set->recs[from].hdrNum) {
+ set->count--;
+ continue;
+ }
+ if (from != to)
+ set->recs[to] = set->recs[from]; /* structure assignment */
+ to++;
+ }
+}
+
+int dbiIndexSetAppend(dbiIndexSet set, dbiIndexItem recs,
+ unsigned int nrecs, int sortset)
+{
+ if (set == NULL || recs == NULL)
+ return 1;
+
+ if (nrecs) {
+ dbiIndexSetGrow(set, nrecs);
+ memcpy(set->recs + set->count, recs, nrecs * sizeof(*(set->recs)));
+ set->count += nrecs;
+ }
+
+ if (sortset && set->count > 1)
+ qsort(set->recs, set->count, sizeof(*(set->recs)), hdrNumCmp);
+
+ return 0;
+}
+
+int dbiIndexSetAppendSet(dbiIndexSet set, dbiIndexSet oset, int sortset)
+{
+ if (oset == NULL)
+ return 1;
+ return dbiIndexSetAppend(set, oset->recs, oset->count, sortset);
+}
+
+int dbiIndexSetAppendOne(dbiIndexSet set, unsigned int hdrNum,
+ unsigned int tagNum, int sortset)
+{
+ if (set == NULL)
+ return 1;
+ dbiIndexSetGrow(set, 1);
+
+ set->recs[set->count].hdrNum = hdrNum;
+ set->recs[set->count].tagNum = tagNum;
+ set->count += 1;
+
+ if (sortset && set->count > 1)
+ qsort(set->recs, set->count, sizeof(*(set->recs)), hdrNumCmp);
+
+ return 0;
+}
+
+int dbiIndexSetPrune(dbiIndexSet set, dbiIndexItem recs,
+ unsigned int nrecs, int sorted)
+{
+ unsigned int from;
+ unsigned int to = 0;
+ unsigned int num = set->count;
+ unsigned int numCopied = 0;
+ size_t recsize = sizeof(*recs);
+
+ if (num == 0 || nrecs == 0)
+ return 1;
+
+ if (nrecs > 1 && !sorted)
+ qsort(recs, nrecs, recsize, hdrNumCmp);
+
+ for (from = 0; from < num; from++) {
+ if (bsearch(&set->recs[from], recs, nrecs, recsize, hdrNumCmp)) {
+ set->count--;
+ continue;
+ }
+ if (from != to)
+ set->recs[to] = set->recs[from]; /* structure assignment */
+ to++;
+ numCopied++;
+ }
+ return (numCopied == num);
+}
+
+int dbiIndexSetPruneSet(dbiIndexSet set, dbiIndexSet oset, int sortset)
+{
+ if (oset == NULL)
+ return 1;
+ return dbiIndexSetPrune(set, oset->recs, oset->count, sortset);
+}
+
+int dbiIndexSetFilter(dbiIndexSet set, dbiIndexItem recs,
+ unsigned int nrecs, int sorted)
+{
+ unsigned int from;
+ unsigned int to = 0;
+ unsigned int num = set->count;
+ unsigned int numCopied = 0;
+ size_t recsize = sizeof(*recs);
+
+ if (num == 0 || nrecs == 0) {
+ set->count = 0;
+ return num ? 0 : 1;
+ }
+ if (nrecs > 1 && !sorted)
+ qsort(recs, nrecs, recsize, hdrNumCmp);
+ for (from = 0; from < num; from++) {
+ if (!bsearch(&set->recs[from], recs, nrecs, recsize, hdrNumCmp)) {
+ set->count--;
+ continue;
+ }
+ if (from != to)
+ set->recs[to] = set->recs[from]; /* structure assignment */
+ to++;
+ numCopied++;
+ }
+ return (numCopied == num);
+}
+
+int dbiIndexSetFilterSet(dbiIndexSet set, dbiIndexSet oset, int sorted)
+{
+ return dbiIndexSetFilter(set, oset->recs, oset->count, sorted);
+}
+
+unsigned int dbiIndexSetCount(dbiIndexSet set)
+{
+ return (set != NULL) ? set->count : 0;
+}
+
+unsigned int dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno)
+{
+ return set->recs[recno].hdrNum;
+}
+
+unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno)
+{
+ return set->recs[recno].tagNum;
+}
+
+dbiIndexSet dbiIndexSetFree(dbiIndexSet set)
+{
+ if (set) {
+ free(set->recs);
+ memset(set, 0, sizeof(*set)); /* trash and burn */
+ free(set);
+ }
+ return NULL;
+}
+
diff --git a/lib/backend/dbiset.h b/lib/backend/dbiset.h
new file mode 100644
index 000000000..da196c865
--- /dev/null
+++ b/lib/backend/dbiset.h
@@ -0,0 +1,130 @@
+#ifndef _DBISET_H
+#define _DBISET_H
+
+#include <rpm/rpmutil.h>
+
+/* A single item from an index database (i.e. the "data returned"). */
+typedef struct dbiIndexItem_s {
+ unsigned int hdrNum; /*!< header instance in db */
+ unsigned int tagNum; /*!< tag index in header */
+} * dbiIndexItem;
+
+/* Items retrieved from the index database.*/
+typedef struct dbiIndexSet_s {
+ dbiIndexItem recs; /*!< array of records */
+ unsigned int count; /*!< number of records */
+ size_t alloced; /*!< alloced size */
+} * dbiIndexSet;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Create an empty index set, optionally with sizehint reservation for recs */
+RPM_GNUC_INTERNAL
+dbiIndexSet dbiIndexSetNew(unsigned int sizehint);
+
+/* Reserve space for at least nrecs new records */
+RPM_GNUC_INTERNAL
+void dbiIndexSetGrow(dbiIndexSet set, unsigned int nrecs);
+
+/* Sort an index set */
+RPM_GNUC_INTERNAL
+void dbiIndexSetSort(dbiIndexSet set);
+
+/* Uniq an index set */
+RPM_GNUC_INTERNAL
+void dbiIndexSetUniq(dbiIndexSet set, int sorted);
+
+/* Append an index set to another */
+RPM_GNUC_INTERNAL
+int dbiIndexSetAppendSet(dbiIndexSet set, dbiIndexSet oset, int sortset);
+
+/**
+ * Append element(s) to set of index database items.
+ * @param set set of index database items
+ * @param recs array of items to append to set
+ * @param nrecs number of items
+ * @param sortset should resulting set be sorted?
+ * @return 0 success, 1 failure (bad args)
+ */
+RPM_GNUC_INTERNAL
+int dbiIndexSetAppend(dbiIndexSet set, dbiIndexItem recs,
+ unsigned int nrecs, int sortset);
+
+/**
+ * Append a single element to a set of index database items.
+ * @param set set of index database items
+ * @param hdrNum header instance in db
+ * @param tagNum tag index in header
+ * @param sortset should resulting set be sorted?
+ * @return 0 success, 1 failure (bad args)
+ */
+RPM_GNUC_INTERNAL
+int dbiIndexSetAppendOne(dbiIndexSet set, unsigned int hdrNum,
+ unsigned int tagNum, int sortset);
+
+/**
+ * Remove element(s) from set of index database items.
+ * @param set set of index database items
+ * @param recs array of items to remove from set
+ * @param nrecs number of items
+ * @param sorted array is already sorted?
+ * @return 0 success, 1 failure (no items found)
+ */
+RPM_GNUC_INTERNAL
+int dbiIndexSetPrune(dbiIndexSet set, dbiIndexItem recs,
+ unsigned int nrecs, int sorted);
+
+/**
+ * Remove an index set from another.
+ * @param set set of index database items
+ * @param oset set of entries that should be removed
+ * @param sorted oset is already sorted?
+ * @return 0 success, 1 failure (no items found)
+ */
+RPM_GNUC_INTERNAL
+int dbiIndexSetPruneSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
+
+/**
+ * Filter element(s) from set of index database items.
+ * @param set set of index database items
+ * @param recs array of items to remove from set
+ * @param nrecs number of items
+ * @param sorted recs array is already sorted?
+ * @return 0 success, 1 failure (no items removed)
+ */
+RPM_GNUC_INTERNAL
+int dbiIndexSetFilter(dbiIndexSet set, dbiIndexItem recs,
+ unsigned int nrecs, int sorted);
+
+/**
+ * Filter (intersect) an index set with another.
+ * @param set set of index database items
+ * @param oset set of entries that should be intersected
+ * @param sorted oset is already sorted?
+ * @return 0 success, 1 failure (no items removed)
+ */
+RPM_GNUC_INTERNAL
+int dbiIndexSetFilterSet(dbiIndexSet set, dbiIndexSet oset, int sorted);
+
+/* Count items in index database set. */
+RPM_GNUC_INTERNAL
+unsigned int dbiIndexSetCount(dbiIndexSet set);
+
+/* Return record offset of header from element in index database set. */
+RPM_GNUC_INTERNAL
+unsigned int dbiIndexRecordOffset(dbiIndexSet set, unsigned int recno);
+
+/* Return file index from element in index database set. */
+RPM_GNUC_INTERNAL
+unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, unsigned int recno);
+
+/* Destroy set of index database items */
+RPM_GNUC_INTERNAL
+dbiIndexSet dbiIndexSetFree(dbiIndexSet set);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/lib/backend/lmdb.c b/lib/backend/lmdb.c
new file mode 100644
index 000000000..db1270ebc
--- /dev/null
+++ b/lib/backend/lmdb.c
@@ -0,0 +1,939 @@
+/** \ingroup rpmdb
+ * \file lib/lmdb.c
+ */
+
+#include "system.h"
+
+#include <ctype.h>
+#include <errno.h>
+#include <sys/wait.h>
+#include <popt.h>
+#include <lmdb.h>
+#include <signal.h>
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmmacro.h>
+#include <rpm/rpmfileutil.h>
+#include <rpm/rpmlog.h>
+
+#include "lib/rpmdb_internal.h"
+
+#include "debug.h"
+
+static int _debug = 1; /* XXX if < 0 debugging, > 0 unusual error returns */
+
+struct dbiCursor_s {
+ dbiIndex dbi;
+ const void *key;
+ unsigned int keylen;
+ int flags;
+ MDB_cursor * cursor;
+ MDB_txn * txn;
+};
+
+static const char * _EnvF(unsigned eflags)
+{
+ static char t[256];
+ char *te = t;
+
+ *te = '\0';
+#define _EF(_v) if (eflags & MDB_##_v) te = stpcpy(stpcpy(te,"|"),#_v)
+ _EF(FIXEDMAP);
+ _EF(NOSUBDIR);
+ _EF(NOSYNC);
+ _EF(RDONLY);
+ _EF(NOMETASYNC);
+ _EF(WRITEMAP);
+ _EF(MAPASYNC);
+ _EF(NOTLS);
+ _EF(NOLOCK);
+ _EF(NORDAHEAD);
+ _EF(NOMEMINIT);
+#undef _EF
+ if (t[0] == '\0') te += sprintf(te, "|0x%x", eflags);
+ *te = '\0';
+ return t+1;
+}
+
+static const char * _OpenF(unsigned oflags)
+{
+ static char t[256];
+ char *te = t;
+
+ *te = '\0';
+#define _OF(_v) if (oflags & MDB_##_v) te = stpcpy(stpcpy(te,"|"),#_v)
+ _OF(REVERSEKEY);
+ _OF(DUPSORT);
+ _OF(INTEGERKEY);
+ _OF(DUPFIXED);
+ _OF(INTEGERDUP);
+ _OF(REVERSEDUP);
+ _OF(CREATE);
+#undef _OF
+ if (t[0] == '\0') te += sprintf(te, "|0x%x", oflags);
+ *te = '\0';
+ return t+1;
+}
+
+static int dbapi_err(rpmdb rdb, const char * msg, int rc, int printit)
+{
+ if (printit && rc) {
+ int lvl = RPMLOG_ERR;
+ if (msg)
+ rpmlog(lvl, _("%s:\trc(%d) = %s(): %s\n"),
+ rdb->db_descr, rc, msg, (rc ? mdb_strerror(rc) : ""));
+ else
+ rpmlog(lvl, _("%s:\trc(%d) = %s()\n"),
+ rdb->db_descr, rc, (rc ? mdb_strerror(rc) : ""));
+ }
+ return rc;
+}
+
+static int cvtdberr(dbiIndex dbi, const char * msg, int rc, int printit)
+{
+ return dbapi_err(dbi->dbi_rpmdb, msg, rc, printit);
+}
+
+static void lmdb_assert(MDB_env *env, const char *msg)
+{
+ rpmlog(RPMLOG_ERR, "%s: %s\n", __FUNCTION__, msg);
+}
+
+static void lmdb_dbSetFSync(rpmdb rdb, int enable)
+{
+}
+
+static int lmdb_Ctrl(rpmdb rdb, dbCtrlOp ctrl)
+{
+ return 0;
+}
+
+static int db_fini(rpmdb rdb, const char * dbhome)
+{
+ int rc = 0;
+ MDB_env * env = rdb->db_dbenv;
+
+ if (env == NULL)
+ goto exit;
+ if (--rdb->db_opens > 0)
+ goto exit;
+
+ mdb_env_close(env);
+ rdb->db_dbenv = env = NULL;
+
+ rpmlog(RPMLOG_DEBUG, "closed db environment %s\n", dbhome);
+
+exit:
+ return rc;
+}
+
+static int db_init(rpmdb rdb, const char * dbhome)
+{
+ int rc = EINVAL;
+ MDB_env * env = NULL;
+ int retry_open = 2;
+ uint32_t eflags = 0;
+
+ if (rdb->db_dbenv != NULL) {
+ rdb->db_opens++;
+ return 0;
+ } else {
+ /* On first call, set backend description to something... */
+ free(rdb->db_descr);
+ rdb->db_descr = xstrdup("lmdb");
+ }
+
+ MDB_dbi maxdbs = 32;
+ unsigned int maxreaders = 16;
+ size_t mapsize = 256 * 1024 * 1024;
+
+ if ((rc = mdb_env_create(&env))
+ || (rc = mdb_env_set_maxreaders(env, maxreaders))
+ || (rc = mdb_env_set_mapsize(env, mapsize))
+ || (rc = mdb_env_set_maxdbs(env, maxdbs))
+ || (rc = mdb_env_set_assert(env, lmdb_assert))
+ || (rc = mdb_env_set_userctx(env, rdb))
+ ) {
+ rc = dbapi_err(rdb, "mdb_env_create", rc, _debug);
+ goto exit;
+ }
+
+ /*
+ * Actually open the environment. Fall back to private environment
+ * if we dont have permission to join/create shared environment or
+ * system doesn't support it..
+ */
+ while (retry_open) {
+ rpmlog(RPMLOG_DEBUG, "opening db environment %s eflags=%s perms=0%o\n", dbhome, _EnvF(eflags), rdb->db_perms);
+
+ eflags = 0;
+ eflags |= MDB_WRITEMAP;
+ eflags |= MDB_MAPASYNC;
+ eflags |= MDB_NOTLS;
+
+ if (access(dbhome, W_OK) && (rdb->db_mode & O_ACCMODE) == O_RDONLY)
+ eflags |= MDB_RDONLY;
+
+ rc = mdb_env_open(env, dbhome, eflags, rdb->db_perms);
+ if (rc) {
+ rc = dbapi_err(rdb, "mdb_env_open", rc, _debug);
+ if (rc == EPERM)
+ rpmlog(RPMLOG_ERR, "lmdb: %s(%s/lock.mdb): %s\n", __FUNCTION__, dbhome, mdb_strerror(rc));
+ }
+ retry_open = 0; /* XXX EAGAIN might need a retry */
+ }
+ if (rc)
+ goto exit;
+
+ rdb->db_dbenv = env;
+ rdb->db_opens = 1;
+
+exit:
+ if (rc && env) {
+ mdb_env_close(env);
+ rdb->db_dbenv = env = NULL;
+ }
+ return rc;
+}
+
+static int dbiSync(dbiIndex dbi, unsigned int flags)
+{
+ int rc = 0;
+ MDB_dbi db = (unsigned long) dbi->dbi_db;
+
+ if (db != 0xdeadbeef && !dbi->cfg.dbi_no_dbsync) {
+ MDB_env * env = dbi->dbi_rpmdb->db_dbenv;
+ unsigned eflags = 0;
+ rc = mdb_env_get_flags(env, &eflags);
+ if (rc) {
+ rc = cvtdberr(dbi, "mdb_env_get_flags", rc, _debug);
+ eflags |= MDB_RDONLY;
+ }
+ if (!(eflags & MDB_RDONLY)) {
+ int force = 0;
+ rc = mdb_env_sync(env, force);
+ if (rc)
+ rc = cvtdberr(dbi, "mdb_env_sync", rc, _debug);
+ }
+ }
+ return rc;
+}
+
+static dbiCursor lmdb_dbiCursorInit(dbiIndex dbi, unsigned int flags)
+{
+ dbiCursor dbc = NULL;
+
+ if (dbi && dbi->dbi_db != (void *)0xdeadbeefUL) {
+ MDB_env * env = dbi->dbi_rpmdb->db_dbenv;
+ MDB_txn * parent = NULL;
+ unsigned tflags = !(flags & DBC_WRITE) ? MDB_RDONLY : 0;
+ MDB_txn * txn = NULL;
+ MDB_cursor * cursor = NULL;
+ int rc = EINVAL;
+
+ rc = mdb_txn_begin(env, parent, tflags, &txn);
+ if (rc)
+ rc = cvtdberr(dbi, "mdb_txn_begin", rc, _debug);
+
+ if (rc == 0) {
+ MDB_dbi db = (unsigned long) dbi->dbi_db;
+ rc = mdb_cursor_open(txn, db, &cursor);
+ if (rc)
+ rc = cvtdberr(dbi, "mdb_cursor_open", rc, _debug);
+ }
+
+ if (rc == 0) {
+ dbc = xcalloc(1, sizeof(*dbc));
+ dbc->dbi = dbi;
+ dbc->flags = flags;
+ dbc->cursor = cursor;
+ dbc->txn = txn;
+ }
+ }
+
+ return dbc;
+}
+
+static dbiCursor lmdb_dbiCursorFree(dbiIndex dbi, dbiCursor dbc)
+{
+ if (dbc) {
+ int rc = 0;
+ MDB_cursor * cursor = dbc->cursor;
+ MDB_txn * txn = dbc->txn;
+ dbiIndex dbi = dbc->dbi;
+ unsigned flags = dbc->flags;
+
+ mdb_cursor_close(cursor);
+ dbc->cursor = cursor = NULL;
+ if (rc)
+ cvtdberr(dbc->dbi, "mdb_cursor_close", rc, _debug);
+
+ /* Automatically commit close */
+ if (txn) {
+ rc = mdb_txn_commit(txn);
+ dbc->txn = txn = NULL;
+ if (rc)
+ rc = cvtdberr(dbc->dbi, "mdb_txn_commit", rc, _debug);
+ }
+
+ /* Automatically sync on write-cursor close */
+ if (flags & DBC_WRITE)
+ dbiSync(dbi, 0);
+
+ free(dbc);
+ rc = 0;
+ }
+ return NULL;
+}
+
+static int dbiCursorPut(dbiCursor dbc, MDB_val * key, MDB_val * data, unsigned flags)
+{
+ int rc = EINVAL;
+ int sane = (key->mv_data != NULL && key->mv_size > 0 &&
+ data->mv_data != NULL && data->mv_size > 0);
+
+ if (dbc && sane) {
+ MDB_cursor * cursor = dbc->cursor;
+ rpmdb rdb = dbc->dbi->dbi_rpmdb;
+ rpmswEnter(&rdb->db_putops, (ssize_t) 0);
+
+ rc = mdb_cursor_put(cursor, key, data, flags);
+ if (rc) {
+ rc = cvtdberr(dbc->dbi, "mdb_cursor_put", rc, _debug);
+ if (dbc->txn) {
+ mdb_txn_abort(dbc->txn);
+ dbc->txn = NULL;
+ }
+ }
+
+ rpmswExit(&rdb->db_putops, (ssize_t) data->mv_size);
+ }
+ return rc;
+}
+
+static int dbiCursorGet(dbiCursor dbc, MDB_val *key, MDB_val *data, unsigned op)
+{
+ int rc = EINVAL;
+ int sane = ((op == MDB_NEXT) || (key->mv_data != NULL && key->mv_size > 0));
+
+ if (dbc && sane) {
+ MDB_cursor * cursor = dbc->cursor;
+ rpmdb rdb = dbc->dbi->dbi_rpmdb;
+
+ rpmswEnter(&rdb->db_getops, 0);
+
+ /* XXX db4 does DB_FIRST on uninitialized cursor */
+ rc = mdb_cursor_get(cursor, key, data, op);
+ if (rc && rc != MDB_NOTFOUND) {
+ rc = cvtdberr(dbc->dbi, "mdb_cursor_get", rc, _debug);
+ if (dbc->txn) {
+ mdb_txn_abort(dbc->txn);
+ dbc->txn = NULL;
+ }
+ }
+
+ /* Remember the last key fetched */
+ if (rc == 0) {
+ dbc->key = key->mv_data;
+ dbc->keylen = key->mv_size;
+ } else {
+ dbc->key = NULL;
+ dbc->keylen = 0;
+ }
+
+ rpmswExit(&rdb->db_getops, data->mv_size);
+ }
+ return rc;
+}
+
+static int dbiCursorDel(dbiCursor dbc, MDB_val *key, MDB_val *data, unsigned int flags)
+{
+ int rc = EINVAL;
+ int sane = (key->mv_data != NULL && key->mv_size > 0);
+
+ if (dbc && sane) {
+ MDB_cursor * cursor = dbc->cursor;
+ rpmdb rdb = dbc->dbi->dbi_rpmdb;
+ rpmswEnter(&rdb->db_delops, 0);
+
+ /* XXX TODO: ensure that cursor is positioned with duplicates */
+ rc = mdb_cursor_get(cursor, key, data, MDB_SET);
+ if (rc && rc != MDB_NOTFOUND) {
+ rc = cvtdberr(dbc->dbi, "mdb_cursor_get", rc, _debug);
+ if (dbc->txn)
+ dbc->txn = NULL;
+ }
+
+ if (rc == 0) {
+ rc = mdb_cursor_del(cursor, flags);
+ if (rc)
+ rc = cvtdberr(dbc->dbi, "mdb_cursor_del", rc, _debug);
+ }
+ rpmswExit(&rdb->db_delops, data->mv_size);
+ }
+ return rc;
+}
+
+static int lmdb_dbiVerify(dbiIndex dbi, unsigned int flags)
+{
+ return 0;
+}
+
+static int lmdb_dbiClose(dbiIndex dbi, unsigned int flags)
+{
+ int rc = 0;
+ rpmdb rdb = dbi->dbi_rpmdb;
+ const char * dbhome = rpmdbHome(rdb);
+ MDB_dbi db = (unsigned long) dbi->dbi_db;
+
+ if (db != 0xdeadbeef) {
+ MDB_env * env = dbi->dbi_rpmdb->db_dbenv;
+ mdb_dbi_close(env, db);
+ dbi->dbi_db = (void *) 0xdeadbeefUL;
+
+ rpmlog(RPMLOG_DEBUG, "closed db index %s/%s\n",
+ dbhome, dbi->dbi_file);
+ }
+
+ db_fini(rdb, dbhome ? dbhome : "");
+
+ dbi = dbiFree(dbi);
+
+ return rc;
+}
+
+static int lmdb_dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
+{
+ int rc = 1;
+ const char *dbhome = rpmdbHome(rdb);
+ dbiIndex dbi = NULL;
+ int retry_open;
+
+ MDB_dbi db = 0;
+ uint32_t oflags;
+
+ if (dbip)
+ *dbip = NULL;
+
+ if ((dbi = dbiNew(rdb, rpmtag)) == NULL)
+ goto exit;
+ dbi->dbi_flags = 0;
+ dbi->dbi_db = (void *) 0xdeadbeefUL;
+
+ rc = db_init(rdb, dbhome);
+
+ retry_open = (rc == 0) ? 2 : 0;
+
+ do {
+ MDB_env * env = rdb->db_dbenv;
+ MDB_txn * parent = NULL;
+ unsigned tflags = access(dbhome, W_OK) ? MDB_RDONLY : 0;
+ MDB_txn * txn = NULL;
+
+ if (tflags & MDB_RDONLY)
+ dbi->dbi_flags |= DBI_RDONLY;
+
+ rc = mdb_txn_begin(env, parent, tflags, &txn);
+ if (rc)
+ rc = cvtdberr(dbi, "mdb_txn_begin", rc, _debug);
+
+ const char * name = dbi->dbi_file;
+ oflags = 0;
+ if (!(tflags & MDB_RDONLY))
+ oflags |= MDB_CREATE;
+ if (!strcmp(dbi->dbi_file, "Packages"))
+ oflags |= MDB_INTEGERKEY;
+
+ rpmlog(RPMLOG_DEBUG, "opening db index %s/%s oflags=%s\n",
+ dbhome, dbi->dbi_file, _OpenF(oflags));
+
+ db = 0xdeadbeef;
+ rc = mdb_dbi_open(txn, name, oflags, &db);
+ if (rc && rc != MDB_NOTFOUND) {
+ rc = cvtdberr(dbi, "mdb_dbi_open", rc, _debug);
+ if (txn) {
+ mdb_txn_abort(txn);
+ txn = NULL;
+ db = 0xdeadbeef;
+ }
+ }
+
+ if (txn) {
+ rc = mdb_txn_commit(txn);
+ if (rc)
+ rc = cvtdberr(dbi, "mdb_txn_commit", rc, _debug);
+ }
+ retry_open = 0;
+ } while (--retry_open > 0);
+
+ dbi->dbi_db = (void *) ((unsigned long)db);
+
+ if (!rc && dbip)
+ *dbip = dbi;
+ else
+ (void) dbiClose(dbi, 0);
+
+exit:
+ return rc;
+}
+
+/* The LMDB btree implementation needs BIGENDIAN primary keys. */
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+static int _dbibyteswapped = 1;
+#else
+static int _dbibyteswapped = 0;
+#endif
+
+/**
+ * Convert retrieved data to index set.
+ * @param dbi index database handle
+ * @param data retrieved data
+ * @retval setp (malloc'ed) index set
+ * @return 0 on success
+ */
+static rpmRC dbt2set(dbiIndex dbi, MDB_val * data, dbiIndexSet * setp)
+{
+ rpmRC rc = RPMRC_FAIL;
+ const char * sdbir;
+ dbiIndexSet set = NULL;
+ unsigned int i;
+
+ if (dbi == NULL || data == NULL || setp == NULL)
+ goto exit;
+
+ rc = RPMRC_OK;
+ if ((sdbir = data->mv_data) == NULL) {
+ *setp = NULL;
+ goto exit;
+ }
+
+ set = dbiIndexSetNew(data->mv_size / (2 * sizeof(int32_t)));
+ set->count = data->mv_size / (2 * sizeof(int32_t));
+
+ for (i = 0; i < set->count; i++) {
+ union _dbswap hdrNum, tagNum;
+
+ memcpy(&hdrNum.ui, sdbir, sizeof(hdrNum.ui));
+ sdbir += sizeof(hdrNum.ui);
+ memcpy(&tagNum.ui, sdbir, sizeof(tagNum.ui));
+ sdbir += sizeof(tagNum.ui);
+ if (_dbibyteswapped) {
+ _DBSWAP(hdrNum);
+ _DBSWAP(tagNum);
+ }
+ set->recs[i].hdrNum = hdrNum.ui;
+ set->recs[i].tagNum = tagNum.ui;
+ }
+ *setp = set;
+
+exit:
+ return rc;
+}
+
+/**
+ * Convert index set to database representation.
+ * @param dbi index database handle
+ * @param data retrieved data
+ * @param set index set
+ * @return 0 on success
+ */
+static rpmRC set2dbt(dbiIndex dbi, MDB_val * data, dbiIndexSet set)
+{
+ rpmRC rc = RPMRC_FAIL;
+ char * tdbir;
+ unsigned int i;
+
+ if (dbi == NULL || data == NULL || set == NULL)
+ goto exit;
+
+ rc = RPMRC_OK;
+ data->mv_size = set->count * (2 * sizeof(int32_t));
+ if (data->mv_size == 0) {
+ data->mv_data = NULL;
+ goto exit;
+ }
+ tdbir = data->mv_data = xmalloc(data->mv_size);
+
+ for (i = 0; i < set->count; i++) {
+ union _dbswap hdrNum, tagNum;
+
+ memset(&hdrNum, 0, sizeof(hdrNum));
+ memset(&tagNum, 0, sizeof(tagNum));
+ hdrNum.ui = set->recs[i].hdrNum;
+ tagNum.ui = set->recs[i].tagNum;
+ if (_dbibyteswapped) {
+ _DBSWAP(hdrNum);
+ _DBSWAP(tagNum);
+ }
+ memcpy(tdbir, &hdrNum.ui, sizeof(hdrNum.ui));
+ tdbir += sizeof(hdrNum.ui);
+ memcpy(tdbir, &tagNum.ui, sizeof(tagNum.ui));
+ tdbir += sizeof(tagNum.ui);
+ }
+exit:
+ return rc;
+}
+
+static rpmRC lmdb_idxdbGet(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexSet *set, int searchType)
+{
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ if (dbi != NULL && dbc != NULL && set != NULL) {
+ int cflags = MDB_NEXT;
+ int dbrc;
+ MDB_val key = { 0, NULL };
+ MDB_val data = { 0, NULL };
+
+ if (keyp) {
+ if (keylen == 0) { /* XXX "/" fixup */
+ keyp = "";
+ keylen = 1;
+ }
+ key.mv_data = (void *) keyp; /* discards const */
+ key.mv_size = keylen;
+ cflags = searchType == DBC_PREFIX_SEARCH ? MDB_SET_RANGE : MDB_SET;
+ }
+
+ for (;;) {
+ dbiIndexSet newset = NULL;
+ dbrc = dbiCursorGet(dbc, &key, &data, cflags);
+ if (dbrc != 0)
+ break;
+ if (searchType == DBC_PREFIX_SEARCH &&
+ (key.mv_size < keylen || memcmp(key.mv_data, keyp, keylen) != 0))
+ break;
+ dbt2set(dbi, &data, &newset);
+ if (*set == NULL) {
+ *set = newset;
+ } else {
+ dbiIndexSetAppendSet(*set, newset, 0);
+ dbiIndexSetFree(newset);
+ }
+ if (searchType != DBC_PREFIX_SEARCH)
+ break;
+ key.mv_data = NULL;
+ key.mv_size = 0;
+ cflags = MDB_NEXT;
+ }
+
+ /* fixup result status for prefix search */
+ if (searchType == DBC_PREFIX_SEARCH) {
+ if (dbrc == MDB_NOTFOUND && *set != NULL && (*set)->count > 0)
+ dbrc = 0;
+ else if (dbrc == 0 && (*set == NULL || (*set)->count == 0))
+ dbrc = MDB_NOTFOUND;
+ }
+
+ if (dbrc == 0) {
+ rc = RPMRC_OK;
+ } else if (dbrc == MDB_NOTFOUND) {
+ rc = RPMRC_NOTFOUND;
+ } else {
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) getting \"%s\" records from %s index: %s\n"),
+ dbrc, keyp ? keyp : "???", dbiName(dbi), mdb_strerror(dbrc));
+ }
+ }
+ return rc;
+}
+
+/* Update secondary index. NULL set deletes the key */
+static rpmRC updateIndex(dbiCursor dbc, const char *keyp, unsigned int keylen,
+ dbiIndexSet set)
+{
+ rpmRC rc = RPMRC_FAIL;
+
+ if (dbc && keyp) {
+ dbiIndex dbi = dbc->dbi;
+ int dbrc;
+ MDB_val key = { 0, NULL };
+ MDB_val data = { 0, NULL };
+
+ key.mv_data = (void *) keyp; /* discards const */
+ key.mv_size = keylen;
+
+ if (set)
+ set2dbt(dbi, &data, set);
+
+ if (dbiIndexSetCount(set) > 0) {
+ dbrc = dbiCursorPut(dbc, &key, &data, 0);
+ if (dbrc) {
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) storing record \"%s\" into %s index: %s\n"),
+ dbrc, (char*)key.mv_data, dbiName(dbi), mdb_strerror(dbrc));
+ }
+ free(data.mv_data);
+ } else {
+ dbrc = dbiCursorDel(dbc, &key, &data, 0);
+ if (dbrc) {
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) removing record \"%s\" from %s index: %s\n"),
+ dbrc, (char*)key.mv_data, dbiName(dbi), mdb_strerror(dbrc));
+ }
+ }
+
+ if (dbrc == 0)
+ rc = RPMRC_OK;
+ }
+
+ return rc;
+}
+
+static rpmRC lmdb_idxdbPut(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec)
+{
+ dbiIndexSet set = NULL;
+ rpmRC rc;
+
+ if (keyp && keylen == 0) { /* XXX "/" fixup */
+ keyp = "";
+ keylen++;
+ }
+ rc = idxdbGet(dbi, dbc, keyp, keylen, &set, DBC_NORMAL_SEARCH);
+
+ /* Not found means a new key and is not an error. */
+ if (rc && rc != RPMRC_NOTFOUND)
+ goto exit;
+
+ if (set == NULL)
+ set = dbiIndexSetNew(1);
+ dbiIndexSetAppend(set, rec, 1, 0);
+
+ rc = updateIndex(dbc, keyp, keylen, set);
+
+ dbiIndexSetFree(set);
+
+exit:
+ return rc;
+}
+
+static rpmRC lmdb_idxdbDel(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec)
+{
+ rpmRC rc = RPMRC_FAIL;
+ dbiIndexSet set = NULL;
+
+ if (keyp && keylen == 0) { /* XXX "/" fixup */
+ keyp = "";
+ keylen++;
+ }
+ rc = idxdbGet(dbi, dbc, keyp, keylen, &set, DBC_NORMAL_SEARCH);
+ if (rc)
+ goto exit;
+
+ if (dbiIndexSetPrune(set, rec, 1, 1)) {
+ /* Nothing was pruned. XXX: Can this actually happen? */
+ rc = RPMRC_OK;
+ } else {
+ /* If there's data left, update data. Otherwise delete the key. */
+ if (dbiIndexSetCount(set) > 0) {
+ rc = updateIndex(dbc, keyp, keylen, set);
+ } else {
+ rc = updateIndex(dbc, keyp, keylen, NULL);
+ }
+ };
+ dbiIndexSetFree(set);
+
+exit:
+ return rc;
+}
+
+static const void * lmdb_idxdbKey(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen)
+{
+ const void *key = NULL;
+ if (dbc) {
+ key = dbc->key;
+ if (key && keylen)
+ *keylen = dbc->keylen;
+ }
+ return key;
+}
+
+/* Update primary Packages index. NULL hdr means remove */
+static rpmRC updatePackages(dbiCursor dbc, unsigned int hdrNum, MDB_val *hdr)
+{
+ int rc = RPMRC_FAIL;
+ int dbrc = EINVAL;
+
+ if (dbc == NULL || hdrNum == 0)
+ goto exit;
+
+ union _dbswap mi_offset;
+ mi_offset.ui = hdrNum;
+ if (_dbibyteswapped)
+ _DBSWAP(mi_offset);
+
+ MDB_val key = { 0, NULL };
+ key.mv_data = (void *) &mi_offset;
+ key.mv_size = sizeof(mi_offset.ui);
+
+ MDB_val data = { 0, NULL };
+
+ dbrc = dbiCursorGet(dbc, &key, &data, MDB_SET);
+ if (dbrc && dbrc != MDB_NOTFOUND) {
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) positioning header #%d record: %s\n"), dbrc, hdrNum, mdb_strerror(dbrc));
+ goto exit;
+ }
+
+ if (hdr) {
+ dbrc = dbiCursorPut(dbc, &key, hdr, 0);
+ if (dbrc) {
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) adding header #%d record: %s\n"), dbrc, hdrNum, mdb_strerror(dbrc));
+ }
+ } else {
+ dbrc = dbiCursorDel(dbc, &key, &data, 0);
+ if (dbrc) {
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) deleting header #%d record: %s\n"), dbrc, hdrNum, mdb_strerror(dbrc));
+ }
+ }
+
+exit:
+ rc = dbrc == 0 ? RPMRC_OK : RPMRC_FAIL;
+ return rc;
+}
+
+/* Get current header instance number or try to allocate a new one */
+static unsigned int pkgInstance(dbiCursor dbc, int alloc)
+{
+ unsigned int hdrNum = 0;
+
+ MDB_val key = { 0, NULL };
+ MDB_val data = { 0, NULL };
+ unsigned int firstkey = 0;
+ union _dbswap mi_offset;
+ int rc;
+
+ /* Key 0 holds the current largest instance, fetch it */
+ key.mv_data = &firstkey;
+ key.mv_size = sizeof(firstkey);
+ rc = dbiCursorGet(dbc, &key, &data, MDB_SET);
+
+ if (!rc && data.mv_data) {
+ memcpy(&mi_offset, data.mv_data, sizeof(mi_offset.ui));
+ if (_dbibyteswapped)
+ _DBSWAP(mi_offset);
+ hdrNum = mi_offset.ui;
+ }
+
+ if (alloc) {
+ /* Rather complicated "increment by one", bswapping as needed */
+ ++hdrNum;
+ mi_offset.ui = hdrNum;
+ if (_dbibyteswapped)
+ _DBSWAP(mi_offset);
+ data.mv_data = &mi_offset;
+ data.mv_size = sizeof(mi_offset.ui);
+
+ /* Unless we manage to insert the new instance number, we failed */
+ rc = dbiCursorPut(dbc, &key, &data, 0);
+ if (rc) {
+ hdrNum = 0;
+ rpmlog(RPMLOG_ERR,
+ _("rc(%d) allocating new package instance: %s\n"), rc, mdb_strerror(rc));
+ }
+ }
+
+ return hdrNum;
+}
+
+static rpmRC lmdb_pkgdbPut(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum,
+ unsigned char *hdrBlob, unsigned int hdrLen)
+{
+ MDB_val hdr;
+ hdr.mv_data = hdrBlob;
+ hdr.mv_size = hdrLen;
+ return updatePackages(dbc, hdrNum, &hdr);
+}
+
+static rpmRC lmdb_pkgdbDel(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum)
+{
+ return updatePackages(dbc, hdrNum, NULL);
+}
+
+static rpmRC lmdb_pkgdbGet(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum,
+ unsigned char **hdrBlob, unsigned int *hdrLen)
+{
+ union _dbswap mi_offset;
+ MDB_val key = { 0, NULL };
+ MDB_val data = { 0, NULL };
+ rpmRC rc = RPMRC_FAIL;
+
+ if (dbc == NULL)
+ goto exit;
+
+ if (hdrNum) {
+ mi_offset.ui = hdrNum;
+ if (_dbibyteswapped)
+ _DBSWAP(mi_offset);
+ key.mv_data = (void *) &mi_offset;
+ key.mv_size = sizeof(mi_offset.ui);
+ }
+
+ rc = dbiCursorGet(dbc, &key, &data, hdrNum ? MDB_SET : MDB_NEXT);
+ if (rc == 0) {
+ if (hdrBlob)
+ *hdrBlob = data.mv_data;
+ if (hdrLen)
+ *hdrLen = data.mv_size;
+ rc = RPMRC_OK;
+ } else if (rc == MDB_NOTFOUND)
+ rc = RPMRC_NOTFOUND;
+ else
+ rc = RPMRC_FAIL;
+exit:
+ return rc;
+}
+
+static unsigned int lmdb_pkgdbKey(dbiIndex dbi, dbiCursor dbc)
+{
+ union _dbswap mi_offset;
+
+ if (dbc == NULL || dbc->key == NULL)
+ return 0;
+ memcpy(&mi_offset, dbc->key, sizeof(mi_offset.ui));
+ if (_dbibyteswapped)
+ _DBSWAP(mi_offset);
+ return mi_offset.ui;
+}
+
+static rpmRC lmdb_pkgdbNew(dbiIndex dbi, dbiCursor dbc, unsigned int *hdrNum)
+{
+ unsigned int num;
+ rpmRC rc = RPMRC_FAIL;
+
+ if (dbc == NULL)
+ goto exit;
+ num = pkgInstance(dbc, 1);
+ if (num) {
+ *hdrNum = num;
+ rc = RPMRC_OK;
+ }
+exit:
+ return rc;
+}
+
+struct rpmdbOps_s lmdb_dbops = {
+ .open = lmdb_dbiOpen,
+ .close = lmdb_dbiClose,
+ .verify = lmdb_dbiVerify,
+
+ .setFSync = lmdb_dbSetFSync,
+ .ctrl = lmdb_Ctrl,
+
+ .cursorInit = lmdb_dbiCursorInit,
+ .cursorFree = lmdb_dbiCursorFree,
+
+ .pkgdbGet = lmdb_pkgdbGet,
+ .pkgdbPut = lmdb_pkgdbPut,
+ .pkgdbDel = lmdb_pkgdbDel,
+ .pkgdbNew = lmdb_pkgdbNew,
+ .pkgdbKey = lmdb_pkgdbKey,
+
+ .idxdbGet = lmdb_idxdbGet,
+ .idxdbPut = lmdb_idxdbPut,
+ .idxdbDel = lmdb_idxdbDel,
+ .idxdbKey = lmdb_idxdbKey
+};
diff --git a/lib/backend/ndb/glue.c b/lib/backend/ndb/glue.c
new file mode 100644
index 000000000..144ada0e4
--- /dev/null
+++ b/lib/backend/ndb/glue.c
@@ -0,0 +1,492 @@
+#include "system.h"
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include "lib/rpmdb_internal.h"
+#include <rpm/rpmstring.h>
+#include <rpm/rpmlog.h>
+
+#include "lib/backend/ndb/rpmpkg.h"
+#include "lib/backend/ndb/rpmxdb.h"
+#include "lib/backend/ndb/rpmidx.h"
+
+#include "debug.h"
+
+struct dbiCursor_s {
+ dbiIndex dbi;
+ const void *key;
+ unsigned int keylen;
+ unsigned int hdrNum;
+ int flags;
+
+ unsigned int *list;
+ unsigned int nlist;
+ unsigned int ilist;
+ unsigned char *listdata;
+};
+
+struct ndbEnv_s {
+ rpmpkgdb pkgdb;
+ rpmxdb xdb;
+ int refs;
+
+ unsigned int hdrNum;
+ void *data;
+ unsigned int datalen;
+};
+
+static void closeEnv(rpmdb rdb)
+{
+ struct ndbEnv_s *ndbenv = rdb->db_dbenv;
+ if (--ndbenv->refs == 0) {
+ if (ndbenv->xdb) {
+ rpmxdbClose(ndbenv->xdb);
+ rpmlog(RPMLOG_DEBUG, "closed db index %s/Index.db\n", rpmdbHome(rdb));
+ }
+ if (ndbenv->pkgdb) {
+ rpmpkgClose(ndbenv->pkgdb);
+ rpmlog(RPMLOG_DEBUG, "closed db index %s/Packages.db\n", rpmdbHome(rdb));
+ }
+ if (ndbenv->data)
+ free(ndbenv->data);
+ free(ndbenv);
+ rdb->db_dbenv = 0;
+ }
+}
+
+static struct ndbEnv_s *openEnv(rpmdb rdb)
+{
+ struct ndbEnv_s *ndbenv = rdb->db_dbenv;
+ if (!ndbenv)
+ rdb->db_dbenv = ndbenv = xcalloc(1, sizeof(struct ndbEnv_s));
+ ndbenv->refs++;
+ return ndbenv;
+}
+
+static int ndb_Close(dbiIndex dbi, unsigned int flags)
+{
+ rpmdb rdb = dbi->dbi_rpmdb;
+ if (dbi->dbi_type != DBI_PRIMARY && dbi->dbi_db) {
+ rpmidxClose(dbi->dbi_db);
+ rpmlog(RPMLOG_DEBUG, "closed db index %s\n", dbi->dbi_file);
+ }
+ if (rdb->db_dbenv)
+ closeEnv(rdb);
+ dbi->dbi_db = 0;
+ return 0;
+}
+
+static int ndb_Open(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags)
+{
+ const char *dbhome = rpmdbHome(rdb);
+ struct ndbEnv_s *ndbenv;
+ dbiIndex dbi;
+ int rc, oflags, ioflags;
+
+ if (dbip)
+ *dbip = NULL;
+
+ if ((dbi = dbiNew(rdb, rpmtag)) == NULL)
+ return 1;
+
+ ndbenv = openEnv(rdb);
+
+ oflags = O_RDWR;
+ if ((rdb->db_mode & O_ACCMODE) == O_RDONLY)
+ oflags = O_RDONLY;
+
+ if (dbi->dbi_type == DBI_PRIMARY) {
+ rpmpkgdb pkgdb = 0;
+ char *path = rstrscat(NULL, dbhome, "/Packages.db", NULL);
+ rpmlog(RPMLOG_DEBUG, "opening db index %s mode=0x%x\n", path, rdb->db_mode);
+ rc = rpmpkgOpen(&pkgdb, path, oflags, 0666);
+ if (rc && errno == ENOENT) {
+ oflags = O_RDWR|O_CREAT;
+ dbi->dbi_flags |= DBI_CREATED;
+ rc = rpmpkgOpen(&pkgdb, path, oflags, 0666);
+ }
+ if (rc) {
+ perror("rpmpkgOpen");
+ free(path);
+ ndb_Close(dbi, 0);
+ return 1;
+ }
+ free(path);
+ dbi->dbi_db = ndbenv->pkgdb = pkgdb;
+
+ if ((oflags & (O_RDWR | O_RDONLY)) == O_RDONLY)
+ dbi->dbi_flags |= DBI_RDONLY;
+ } else {
+ unsigned int id;
+ rpmidxdb idxdb = 0;
+ if (!ndbenv->pkgdb) {
+ ndb_Close(dbi, 0);
+ return 1; /* please open primary first */
+ }
+ if (!ndbenv->xdb) {
+ char *path = rstrscat(NULL, dbhome, "/Index.db", NULL);
+ rpmlog(RPMLOG_DEBUG, "opening db index %s mode=0x%x\n", path, rdb->db_mode);
+
+ /* Open indexes readwrite if possible */
+ ioflags = O_RDWR;
+ rc = rpmxdbOpen(&ndbenv->xdb, rdb->db_pkgs->dbi_db, path, ioflags, 0666);
+ if (rc && errno == EACCES) {
+ /* If it is not asked for rw explicitly, try to open ro */
+ if (!(oflags & O_RDWR)) {
+ ioflags = O_RDONLY;
+ rc = rpmxdbOpen(&ndbenv->xdb, rdb->db_pkgs->dbi_db, path, ioflags, 0666);
+ }
+ } else if (rc && errno == ENOENT) {
+ ioflags = O_CREAT|O_RDWR;
+ rc = rpmxdbOpen(&ndbenv->xdb, rdb->db_pkgs->dbi_db, path, ioflags, 0666);
+ }
+ if (rc) {
+ perror("rpmxdbOpen");
+ free(path);
+ ndb_Close(dbi, 0);
+ return 1;
+ }
+ free(path);
+ }
+ if (rpmxdbLookupBlob(ndbenv->xdb, &id, rpmtag, 0, 0) == RPMRC_NOTFOUND) {
+ dbi->dbi_flags |= DBI_CREATED;
+ }
+ rpmlog(RPMLOG_DEBUG, "opening db index %s tag=%d\n", dbiName(dbi), rpmtag);
+ if (rpmidxOpenXdb(&idxdb, rdb->db_pkgs->dbi_db, ndbenv->xdb, rpmtag)) {
+ perror("rpmidxOpenXdb");
+ ndb_Close(dbi, 0);
+ return 1;
+ }
+ dbi->dbi_db = idxdb;
+
+ if (rpmxdbIsRdonly(ndbenv->xdb))
+ dbi->dbi_flags |= DBI_RDONLY;
+ }
+
+
+ if (dbip != NULL)
+ *dbip = dbi;
+ else
+ ndb_Close(dbi, 0);
+ return 0;
+}
+
+static int ndb_Verify(dbiIndex dbi, unsigned int flags)
+{
+ return 1;
+}
+
+static void ndb_SetFSync(rpmdb rdb, int enable)
+{
+}
+
+static int indexSync(rpmpkgdb pkgdb, rpmxdb xdb)
+{
+ unsigned int generation;
+ int rc;
+ if (!pkgdb || !xdb)
+ return 1;
+ if (rpmpkgLock(pkgdb, 1))
+ return 1;
+ if (rpmpkgGeneration(pkgdb, &generation)) {
+ rpmpkgUnlock(pkgdb, 1);
+ return 1;
+ }
+ rc = rpmxdbSetUserGeneration(xdb, generation);
+ rpmpkgUnlock(pkgdb, 1);
+ return rc;
+}
+
+static int ndb_Ctrl(rpmdb rdb, dbCtrlOp ctrl)
+{
+ struct ndbEnv_s *ndbenv = rdb->db_dbenv;
+
+ switch (ctrl) {
+ case DB_CTRL_LOCK_RO:
+ if (!rdb->db_pkgs)
+ return 1;
+ return rpmpkgLock(rdb->db_pkgs->dbi_db, 0);
+ case DB_CTRL_LOCK_RW:
+ if (!rdb->db_pkgs)
+ return 1;
+ return rpmpkgLock(rdb->db_pkgs->dbi_db, 1);
+ case DB_CTRL_UNLOCK_RO:
+ if (!rdb->db_pkgs)
+ return 1;
+ return rpmpkgUnlock(rdb->db_pkgs->dbi_db, 0);
+ case DB_CTRL_UNLOCK_RW:
+ if (!rdb->db_pkgs)
+ return 1;
+ return rpmpkgUnlock(rdb->db_pkgs->dbi_db, 1);
+ case DB_CTRL_INDEXSYNC:
+ if (!ndbenv)
+ return 1;
+ return indexSync(ndbenv->pkgdb, ndbenv->xdb);
+ default:
+ break;
+ }
+ return 0;
+}
+
+static dbiCursor ndb_CursorInit(dbiIndex dbi, unsigned int flags)
+{
+ dbiCursor dbc = xcalloc(1, sizeof(*dbc));
+ dbc->dbi = dbi;
+ dbc->flags = flags;
+ return dbc;
+}
+
+static dbiCursor ndb_CursorFree(dbiIndex dbi, dbiCursor dbc)
+{
+ if (dbc) {
+ if (dbc->list)
+ free(dbc->list);
+ if (dbc->listdata)
+ free(dbc->listdata);
+ free(dbc);
+ }
+ return NULL;
+}
+
+
+static void setdata(dbiCursor dbc, unsigned int hdrNum, unsigned char *hdrBlob, unsigned int hdrLen)
+{
+ struct ndbEnv_s *ndbenv = dbc->dbi->dbi_rpmdb->db_dbenv;
+ if (ndbenv->data)
+ free(ndbenv->data);
+ ndbenv->hdrNum = hdrNum;
+ ndbenv->data = hdrBlob;
+ ndbenv->datalen = hdrLen;
+}
+
+static rpmRC ndb_pkgdbNew(dbiIndex dbi, dbiCursor dbc, unsigned int *hdrNum)
+{
+ int rc = rpmpkgNextPkgIdx(dbc->dbi->dbi_db, hdrNum);
+ if (!rc)
+ setdata(dbc, *hdrNum, 0, 0);
+ return rc;
+}
+
+static rpmRC ndb_pkgdbPut(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum, unsigned char *hdrBlob, unsigned int hdrLen)
+{
+ int rc = rpmpkgPut(dbc->dbi->dbi_db, hdrNum, hdrBlob, hdrLen);
+ if (!rc) {
+ dbc->hdrNum = hdrNum;
+ setdata(dbc, hdrNum, 0, 0);
+ }
+ return rc;
+}
+
+static rpmRC ndb_pkgdbDel(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum)
+{
+ dbc->hdrNum = 0;
+ setdata(dbc, 0, 0, 0);
+ return rpmpkgDel(dbc->dbi->dbi_db, hdrNum);
+}
+
+/* iterate over all packages */
+static rpmRC ndb_pkgdbIter(dbiIndex dbi, dbiCursor dbc, unsigned char **hdrBlob, unsigned int *hdrLen)
+{
+ int rc;
+ unsigned int hdrNum;
+
+ if (!dbc->list) {
+ rc = rpmpkgList(dbc->dbi->dbi_db, &dbc->list, &dbc->nlist);
+ if (rc)
+ return rc;
+ dbc->ilist = 0;
+ }
+ for (;;) {
+ if (dbc->ilist >= dbc->nlist) {
+ rc = RPMRC_NOTFOUND;
+ break;
+ }
+ *hdrBlob = 0;
+ hdrNum = dbc->list[dbc->ilist];
+ rc = rpmpkgGet(dbc->dbi->dbi_db, hdrNum, hdrBlob, hdrLen);
+ if (rc && rc != RPMRC_NOTFOUND)
+ break;
+ dbc->ilist++;
+ if (!rc) {
+ dbc->hdrNum = hdrNum;
+ setdata(dbc, hdrNum, *hdrBlob, *hdrLen);
+ break;
+ }
+ }
+ return rc;
+}
+
+static rpmRC ndb_pkgdbGet(dbiIndex dbi, dbiCursor dbc, unsigned int hdrNum, unsigned char **hdrBlob, unsigned int *hdrLen)
+{
+ int rc;
+ struct ndbEnv_s *ndbenv = dbc->dbi->dbi_rpmdb->db_dbenv;
+
+ if (!hdrNum)
+ return ndb_pkgdbIter(dbi, dbc, hdrBlob, hdrLen);
+ if (hdrNum == ndbenv->hdrNum && ndbenv->data) {
+ *hdrBlob = ndbenv->data;
+ *hdrLen = ndbenv->datalen;
+ return RPMRC_OK;
+ }
+ rc = rpmpkgGet(dbc->dbi->dbi_db, hdrNum, hdrBlob, hdrLen);
+ if (!rc) {
+ dbc->hdrNum = hdrNum;
+ setdata(dbc, hdrNum, *hdrBlob, *hdrLen);
+ }
+ return rc;
+}
+
+static unsigned int ndb_pkgdbKey(dbiIndex dbi, dbiCursor dbc)
+{
+ return dbc->hdrNum;
+}
+
+
+static void addtoset(dbiIndexSet *set, unsigned int *pkglist, unsigned int pkglistn)
+{
+ unsigned int i, j;
+ dbiIndexSet newset = dbiIndexSetNew(pkglistn / 2);
+ for (i = j = 0; i < pkglistn; i += 2) {
+ newset->recs[j].hdrNum = pkglist[i];
+ newset->recs[j].tagNum = pkglist[i + 1];
+ j++;
+ }
+ newset->count = j;
+ if (pkglist)
+ free(pkglist);
+ if (*set) {
+ dbiIndexSetAppendSet(*set, newset, 0);
+ dbiIndexSetFree(newset);
+ } else
+ *set = newset;
+}
+
+/* Iterate over all index entries */
+static rpmRC ndb_idxdbIter(dbiIndex dbi, dbiCursor dbc, dbiIndexSet *set)
+{
+ int rc;
+ if (!dbc->list) {
+ /* setup iteration list on first call */
+ rc = rpmidxList(dbc->dbi->dbi_db, &dbc->list, &dbc->nlist, &dbc->listdata);
+ if (rc)
+ return rc;
+ dbc->ilist = 0;
+ }
+ for (;;) {
+ unsigned char *k;
+ unsigned int kl;
+ unsigned int *pkglist, pkglistn;
+ if (dbc->ilist >= dbc->nlist) {
+ rc = RPMRC_NOTFOUND;
+ break;
+ }
+ k = dbc->listdata + dbc->list[dbc->ilist];
+ kl = dbc->list[dbc->ilist + 1];
+#if 0
+ if (searchType == DBC_KEY_SEARCH) {
+ dbc->ilist += 2;
+ dbc->key = k;
+ dbc->keylen = kl;
+ rc = RPMRC_OK;
+ break;
+ }
+#endif
+ pkglist = 0;
+ pkglistn = 0;
+ rc = rpmidxGet(dbc->dbi->dbi_db, k, kl, &pkglist, &pkglistn);
+ if (rc && rc != RPMRC_NOTFOUND)
+ break;
+ dbc->ilist += 2;
+ if (!rc && pkglistn) {
+ addtoset(set, pkglist, pkglistn);
+ dbc->key = k;
+ dbc->keylen = kl;
+ break;
+ }
+ if (pkglist)
+ free(pkglist);
+ }
+ return rc;
+}
+
+static rpmRC ndb_idxdbGet(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexSet *set, int searchType)
+{
+ int rc;
+ unsigned int *pkglist = 0, pkglistn = 0;
+
+ if (!keyp)
+ return ndb_idxdbIter(dbi, dbc, set);
+
+ if (searchType == DBC_PREFIX_SEARCH) {
+ unsigned int *list = 0, nlist = 0, i = 0;
+ unsigned char *listdata = 0;
+ int rrc = RPMRC_NOTFOUND;
+ rc = rpmidxList(dbc->dbi->dbi_db, &list, &nlist, &listdata);
+ if (rc)
+ return rc;
+ for (i = 0; i < nlist && !rc; i += 2) {
+ unsigned char *k = listdata + list[i];
+ unsigned int kl = list[i + 1];
+ if (kl < keylen || memcmp(k, keyp, keylen) != 0)
+ continue;
+ rc = ndb_idxdbGet(dbi, dbc, (char *)k, kl, set, DBC_NORMAL_SEARCH);
+ if (rc == RPMRC_NOTFOUND)
+ rc = 0;
+ else
+ rrc = rc;
+ }
+ if (list)
+ free(list);
+ if (listdata)
+ free(listdata);
+ return rc ? rc : rrc;
+ }
+
+ rc = rpmidxGet(dbc->dbi->dbi_db, (const unsigned char *)keyp, keylen, &pkglist, &pkglistn);
+ if (!rc)
+ addtoset(set, pkglist, pkglistn);
+ return rc;
+}
+
+static rpmRC ndb_idxdbPut(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexItem rec)
+{
+ return rpmidxPut(dbc->dbi->dbi_db, (const unsigned char *)keyp, keylen, rec->hdrNum, rec->tagNum);
+}
+
+static rpmRC ndb_idxdbDel(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen, dbiIndexItem rec)
+{
+ return rpmidxDel(dbc->dbi->dbi_db, (const unsigned char *)keyp, keylen, rec->hdrNum, rec->tagNum);
+}
+
+static const void * ndb_idxdbKey(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen)
+{
+ if (dbc->key && keylen)
+ *keylen = dbc->keylen;
+ return dbc->key;
+}
+
+
+
+struct rpmdbOps_s ndb_dbops = {
+ .open = ndb_Open,
+ .close = ndb_Close,
+ .verify = ndb_Verify,
+ .setFSync = ndb_SetFSync,
+ .ctrl = ndb_Ctrl,
+
+ .cursorInit = ndb_CursorInit,
+ .cursorFree = ndb_CursorFree,
+
+ .pkgdbNew = ndb_pkgdbNew,
+ .pkgdbPut = ndb_pkgdbPut,
+ .pkgdbDel = ndb_pkgdbDel,
+ .pkgdbGet = ndb_pkgdbGet,
+ .pkgdbKey = ndb_pkgdbKey,
+
+ .idxdbGet = ndb_idxdbGet,
+ .idxdbPut = ndb_idxdbPut,
+ .idxdbDel = ndb_idxdbDel,
+ .idxdbKey = ndb_idxdbKey
+};
+
diff --git a/lib/backend/ndb/rpmidx.c b/lib/backend/ndb/rpmidx.c
new file mode 100644
index 000000000..313d2e0fb
--- /dev/null
+++ b/lib/backend/ndb/rpmidx.c
@@ -0,0 +1,1280 @@
+#define _GNU_SOURCE
+
+#include "system.h"
+
+#include <rpm/rpmlog.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/file.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <errno.h>
+
+#include <endian.h>
+
+#include "rpmidx.h"
+#include "rpmxdb.h"
+
+#define RPMRC_OK 0
+#define RPMRC_NOTFOUND 1
+#define RPMRC_FAIL 2
+
+/* Index database
+ *
+ *
+ * Layout:
+ * Header
+ * Slots
+ * Keys
+ *
+ * Each slot contains 12 bytes, they are split into a 8 byte
+ * and a 4 byte part:
+ * 4 bytes key offset + extra tag bits
+ * 4 bytes data
+ * 4 bytes data overflow
+ * The slot space first contains all 8 byte parts followed by all of
+ * the 4 byte overflow parts. This is done because most of the time we
+ * do not need the latter.
+ *
+ * If a new (key, pkgidx, datidx) tupel is added, the key is hashed with
+ * the popular murmur hash. The lower bits of the hash determine the start
+ * slot, parts of the higher bits are used as extra key equality check.
+ * The (pkgidx, datidx) pair is encoded in a (data, dataovl) pair, so that
+ * most of the time dataovl is zero.
+ *
+ * The code then checks the current entry at the start slot. If the key
+ * does not match, it advances to the next slot. If it matches, it also
+ * checks the data part for a match but it remembers the key offset.
+ * If the code found a (key, data, dataovl) match, nothing needs to be done.
+ *
+ * Otherwise, the code arrived at an empty slot. It then adds the key
+ * to the key space if it did not find a matching key, and then puts
+ * the encoded (key, data, dataovl) pair into the slot.
+ *
+ * Deleting a (key, data) pair is done by replacing the slot with a
+ * (-1, -1, 0) dummy entry.
+ *
+ */
+
+
+typedef struct rpmidxdb_s {
+ rpmpkgdb pkgdb; /* master database */
+
+ char *filename;
+ int fd; /* our file descriptor */
+ int flags;
+ int mode;
+
+ int rdonly;
+
+ /* xdb support */
+ rpmxdb xdb;
+ unsigned int xdbtag;
+ unsigned int xdbid;
+
+ unsigned char *head_mapped;
+ unsigned char *slot_mapped;
+ unsigned char *key_mapped;
+ unsigned int key_size;
+ unsigned int file_size;
+
+ unsigned int generation;
+ unsigned int nslots;
+ unsigned int usedslots;
+ unsigned int dummyslots;
+
+ unsigned int keyend;
+ unsigned int keyexcess;
+
+ unsigned int hmask;
+ unsigned int xmask;
+
+ unsigned int pagesize;
+} * rpmidxdb;
+
+static inline unsigned int le2h(unsigned char *p)
+{
+ return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24;
+}
+
+static inline void h2le(unsigned int x, unsigned char *p)
+{
+ p[0] = x;
+ p[1] = x >> 8;
+ p[2] = x >> 16;
+ p[3] = x >> 24;
+}
+
+/* aligned versions */
+static inline unsigned int le2ha(unsigned char *p)
+{
+ unsigned int x = *(unsigned int *)p;
+ return le32toh(x);
+}
+
+static inline void h2lea(unsigned int x, unsigned char *p)
+{
+ *(unsigned int *)p = htole32(x);
+}
+
+/*** Header management ***/
+
+#define IDXDB_MAGIC ('R' | 'p' << 8 | 'm' << 16 | 'I' << 24)
+#define IDXDB_VERSION 0
+
+#define IDXDB_OFFSET_MAGIC 0
+#define IDXDB_OFFSET_VERSION 4
+#define IDXDB_OFFSET_GENERATION 8
+#define IDXDB_OFFSET_NSLOTS 12
+#define IDXDB_OFFSET_USEDSLOTS 16
+#define IDXDB_OFFSET_DUMMYSLOTS 20
+#define IDXDB_OFFSET_XMASK 24
+#define IDXDB_OFFSET_KEYEND 28
+#define IDXDB_OFFSET_KEYEXCESS 32
+#define IDXDB_OFFSET_OBSOLETE 36
+
+#define IDXDB_SLOT_OFFSET 64
+#define IDXDB_KEY_CHUNKSIZE 4096
+
+/* XDB subids */
+
+#define IDXDB_XDB_SUBTAG 0
+#define IDXDB_XDB_SUBTAG_REBUILD 1
+
+static void set_mapped(rpmidxdb idxdb, unsigned char *addr, unsigned int size)
+{
+ if (addr) {
+ idxdb->head_mapped = addr;
+ idxdb->slot_mapped = addr + IDXDB_SLOT_OFFSET;
+ idxdb->key_mapped = addr + IDXDB_SLOT_OFFSET + idxdb->nslots * 12;
+ idxdb->key_size = size - (IDXDB_SLOT_OFFSET + idxdb->nslots * 12);
+ idxdb->file_size = size;
+ } else {
+ idxdb->head_mapped = idxdb->slot_mapped = idxdb->key_mapped = 0;
+ idxdb->file_size = idxdb->key_size = 0;
+ }
+}
+
+/* XDB callbacks */
+static void mapcb(rpmxdb xdb, void *data, void *newaddr, size_t newsize) {
+ set_mapped((rpmidxdb)data, newaddr, (unsigned int)newsize);
+}
+
+static int rpmidxReadHeader(rpmidxdb idxdb);
+
+static int rpmidxMap(rpmidxdb idxdb)
+{
+ if (idxdb->xdb) {
+ if (rpmxdbMapBlob(idxdb->xdb, idxdb->xdbid, idxdb->rdonly ? O_RDONLY : O_RDWR, mapcb, idxdb))
+ return RPMRC_FAIL;
+ if (idxdb->file_size < 4096) {
+ rpmxdbUnmapBlob(idxdb->xdb, idxdb->xdbid);
+ return RPMRC_FAIL;
+ }
+ } else {
+#ifdef IDXDB_FILESUPPORT
+ struct stat stb;
+ size_t size;
+ void *mapped;
+ if (fstat(idxdb->fd, &stb))
+ return RPMRC_FAIL;
+ size = stb.st_size;
+ if (size < 4096)
+ return RPMRC_FAIL;
+ /* round up for mmap */
+ size = (size + idxdb->pagesize - 1) & ~(idxdb->pagesize - 1);
+ mapped = mmap(0, size, idxdb->rdonly ? PROT_READ : PROT_READ | PROT_WRITE, MAP_SHARED, idxdb->fd, 0);
+ if (mapped == MAP_FAILED)
+ return RPMRC_FAIL;
+ set_mapped(idxdb, mapped, (unsigned int)stb.st_size);
+#else
+ return RPMRC_FAIL;
+#endif
+ }
+ return RPMRC_OK;
+}
+
+static void rpmidxUnmap(rpmidxdb idxdb)
+{
+ if (!idxdb->head_mapped)
+ return;
+ if (idxdb->xdb) {
+ rpmxdbUnmapBlob(idxdb->xdb, idxdb->xdbid);
+ } else {
+#ifdef IDXDB_FILESUPPORT
+ size_t size = idxdb->file_size;
+ /* round up for munmap */
+ size = (size + idxdb->pagesize - 1) & ~(idxdb->pagesize - 1);
+ munmap(idxdb->head_mapped, size);
+ set_mapped(idxdb, 0, 0);
+#else
+ return;
+#endif
+ }
+}
+
+#ifdef IDXDB_FILESUPPORT
+static int rpmidxReadHeader(rpmidxdb idxdb);
+
+/* re-open file to get the new version */
+static int rpmidxHandleObsolete(rpmidxdb idxdb)
+{
+ int nfd;
+ struct stat stb1, stb2;
+
+ if (fstat(idxdb->fd, &stb1))
+ return RPMRC_FAIL;
+ nfd = open(idxdb->filename, idxdb->rdonly ? O_RDONLY : O_RDWR, 0);
+ if (nfd == -1)
+ return RPMRC_FAIL;
+ if (fstat(nfd, &stb2)) {
+ close(nfd);
+ return RPMRC_FAIL;
+ }
+ if (stb1.st_dev == stb2.st_dev && stb1.st_ino == stb2.st_ino)
+ return RPMRC_FAIL; /* openend the same obsolete file */
+ rpmidxUnmap(idxdb);
+ close(idxdb->fd);
+ idxdb->fd = nfd;
+ return rpmidxReadHeader(idxdb); /* re-try with new file */
+}
+#endif
+
+static int rpmidxReadHeader(rpmidxdb idxdb)
+{
+ unsigned int version;
+
+ if (idxdb->head_mapped) {
+ if (le2ha(idxdb->head_mapped + IDXDB_OFFSET_GENERATION) == idxdb->generation)
+ return RPMRC_OK;
+ rpmidxUnmap(idxdb);
+ }
+ idxdb->nslots = 0;
+ if (rpmidxMap(idxdb))
+ return RPMRC_FAIL;
+
+ if (le2ha(idxdb->head_mapped + IDXDB_OFFSET_MAGIC) != IDXDB_MAGIC) {
+ rpmidxUnmap(idxdb);
+ return RPMRC_FAIL;
+ }
+ version = le2ha(idxdb->head_mapped + IDXDB_OFFSET_VERSION);
+ if (version != IDXDB_VERSION) {
+ rpmlog(RPMLOG_ERR, _("rpmidx: Version mismatch. Expected version: %u. "
+ "Found version: %u\n"), IDXDB_VERSION, version);
+ rpmidxUnmap(idxdb);
+ return RPMRC_FAIL;
+ }
+#ifdef IDXDB_FILESUPPORT
+ if (!idxdb->xdb && le2ha(idxdb->head_mapped + IDXDB_OFFSET_OBSOLETE))
+ return rpmidxHandleObsolete(idxdb);
+#endif
+ idxdb->generation = le2ha(idxdb->head_mapped + IDXDB_OFFSET_GENERATION);
+ idxdb->nslots = le2ha(idxdb->head_mapped + IDXDB_OFFSET_NSLOTS);
+ idxdb->usedslots = le2ha(idxdb->head_mapped + IDXDB_OFFSET_USEDSLOTS);
+ idxdb->dummyslots = le2ha(idxdb->head_mapped + IDXDB_OFFSET_DUMMYSLOTS);
+ idxdb->xmask = le2ha(idxdb->head_mapped + IDXDB_OFFSET_XMASK);
+ idxdb->keyend = le2ha(idxdb->head_mapped + IDXDB_OFFSET_KEYEND);
+ idxdb->keyexcess = le2ha(idxdb->head_mapped + IDXDB_OFFSET_KEYEXCESS);
+
+ idxdb->hmask = idxdb->nslots - 1;
+
+ /* now that we know nslots we can split between slots and keys */
+ if (idxdb->file_size <= IDXDB_SLOT_OFFSET + idxdb->nslots * 12) {
+ rpmidxUnmap(idxdb); /* too small, somthing is wrong */
+ return RPMRC_FAIL;
+ }
+ idxdb->key_mapped = idxdb->slot_mapped + idxdb->nslots * 12;
+ idxdb->key_size = idxdb->file_size - (IDXDB_SLOT_OFFSET + idxdb->nslots * 12);
+ return RPMRC_OK;
+}
+
+static int rpmidxWriteHeader(rpmidxdb idxdb)
+{
+ if (!idxdb->head_mapped)
+ return RPMRC_FAIL;
+ h2lea(IDXDB_MAGIC, idxdb->head_mapped + IDXDB_OFFSET_MAGIC);
+ h2lea(IDXDB_VERSION, idxdb->head_mapped + IDXDB_OFFSET_VERSION);
+ h2lea(idxdb->generation, idxdb->head_mapped + IDXDB_OFFSET_GENERATION);
+ h2lea(idxdb->nslots, idxdb->head_mapped + IDXDB_OFFSET_NSLOTS);
+ h2lea(idxdb->usedslots, idxdb->head_mapped + IDXDB_OFFSET_USEDSLOTS);
+ h2lea(idxdb->dummyslots, idxdb->head_mapped + IDXDB_OFFSET_DUMMYSLOTS);
+ h2lea(idxdb->xmask, idxdb->head_mapped + IDXDB_OFFSET_XMASK);
+ h2lea(idxdb->keyend, idxdb->head_mapped + IDXDB_OFFSET_KEYEND);
+ h2lea(idxdb->keyexcess, idxdb->head_mapped + IDXDB_OFFSET_KEYEXCESS);
+ return RPMRC_OK;
+}
+
+static inline void updateUsedslots(rpmidxdb idxdb)
+{
+ h2lea(idxdb->usedslots, idxdb->head_mapped + IDXDB_OFFSET_USEDSLOTS);
+}
+
+static inline void updateDummyslots(rpmidxdb idxdb)
+{
+ h2lea(idxdb->dummyslots, idxdb->head_mapped + IDXDB_OFFSET_DUMMYSLOTS);
+}
+
+static inline void updateKeyend(rpmidxdb idxdb)
+{
+ h2lea(idxdb->keyend, idxdb->head_mapped + IDXDB_OFFSET_KEYEND);
+}
+
+static inline void updateKeyexcess(rpmidxdb idxdb)
+{
+ h2lea(idxdb->keyexcess, idxdb->head_mapped + IDXDB_OFFSET_KEYEXCESS);
+}
+
+static inline void bumpGeneration(rpmidxdb idxdb)
+{
+ idxdb->generation++;
+ h2lea(idxdb->generation, idxdb->head_mapped + IDXDB_OFFSET_GENERATION);
+}
+
+#ifdef IDXDB_FILESUPPORT
+static int createempty(rpmidxdb idxdb, off_t off, size_t size)
+{
+ char buf[4096];
+ memset(buf, 0, sizeof(buf));
+ while (size >= 4096) {
+ if (pwrite(idxdb->fd, buf, 4096, off) != 4096)
+ return RPMRC_FAIL;
+ off += 4096;
+ size -= 4096;
+ }
+ if (size > 0 && pwrite(idxdb->fd, buf, size , off) != size)
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+}
+#endif
+
+/*** Key management ***/
+
+#define MURMUR_M 0x5bd1e995
+
+static unsigned int murmurhash(const unsigned char *s, unsigned int l)
+{
+ unsigned int h = l * MURMUR_M;
+
+ while (l >= 4) {
+ h += s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24;
+ h *= MURMUR_M;
+ h ^= h >> 16;
+ s += 4;
+ l -= 4;
+ }
+ switch (l) {
+ case 3:
+ h += s[2] << 16;
+ case 2:
+ h += s[1] << 8;
+ case 1:
+ h += s[0];
+ h *= MURMUR_M;
+ h ^= h >> 16;
+ default:
+ break;
+ }
+ h *= MURMUR_M;
+ h ^= h >> 10;
+ h *= MURMUR_M;
+ h ^= h >> 17;
+ return h;
+}
+
+static inline unsigned int decodekeyl(unsigned char *p, unsigned int *hl)
+{
+ if (*p != 255) {
+ *hl = 1;
+ return *p;
+ } else if (p[1] != 255 || p[2] != 255) {
+ *hl = 3;
+ return p[1] | p[2] << 8;
+ } else {
+ *hl = 7;
+ return p[3] | p[4] << 8 | p[5] << 16 | p[6] << 24;
+ }
+}
+
+static inline void encodekeyl(unsigned char *p, unsigned int keyl)
+{
+ if (keyl && keyl < 255) {
+ p[0] = keyl;
+ } else if (keyl < 65535) {
+ p[0] = 255;
+ p[1] = keyl;
+ p[2] = keyl >> 8;
+ } else {
+ p[0] = 255;
+ p[1] = 255;
+ p[2] = 255;
+ p[3] = keyl;
+ p[4] = keyl >> 8;
+ p[5] = keyl >> 16;
+ p[6] = keyl >> 24;
+ }
+}
+
+static inline unsigned int keylsize(unsigned int keyl)
+{
+ return keyl && keyl < 255 ? 1 : keyl < 65535 ? 3 : 7;
+}
+
+static inline int equalkey(rpmidxdb idxdb, unsigned int off, const unsigned char *key, unsigned int keyl)
+{
+ unsigned char *p;
+ if (off + keyl + 1 > idxdb->keyend)
+ return 0;
+ p = idxdb->key_mapped + off;
+ if (keyl && keyl < 255) {
+ if (*p != keyl)
+ return 0;
+ p += 1;
+ } else if (keyl < 65535) {
+ if (p[0] != 255 || (p[1] | p[2] << 8) != keyl)
+ return 0;
+ p += 3;
+ } else {
+ if (p[0] != 255 || p[1] != 255 || p[2] != 255 || (p[3] | p[4] << 8 | p[5] << 16 | p[6] << 24) != keyl)
+ return 0;
+ p += 7;
+ }
+ if (keyl && memcmp(key, p, keyl))
+ return 0;
+ return 1;
+}
+
+static int addkeypage(rpmidxdb idxdb) {
+ unsigned int addsize = idxdb->pagesize > IDXDB_KEY_CHUNKSIZE ? idxdb->pagesize : IDXDB_KEY_CHUNKSIZE;
+
+ if (idxdb->xdb) {
+ if (rpmxdbResizeBlob(idxdb->xdb, idxdb->xdbid, idxdb->file_size + addsize))
+ return RPMRC_FAIL;
+ } else {
+#ifdef IDXDB_FILESUPPORT
+ /* don't use ftruncate because we want to create a "backed" page */
+ void *newaddr;
+ size_t oldsize, newsize;
+ if (createempty(idxdb, idxdb->file_size, addsize))
+ return RPMRC_FAIL;
+ oldsize = idxdb->file_size;
+ newsize = idxdb->file_size + addsize;
+ /* round up for mremap */
+ oldsize = (oldsize + idxdb->pagesize - 1) & ~(idxdb->pagesize - 1);
+ newsize = (newsize + idxdb->pagesize - 1) & ~(idxdb->pagesize - 1);
+ newaddr = mremap(idxdb->head_mapped, oldsize, newsize, MREMAP_MAYMOVE);
+ if (newaddr == MAP_FAILED)
+ return RPMRC_FAIL;
+ set_mapped(idxdb, newaddr, idxdb->file_size + addsize);
+#else
+ return RPMRC_FAIL;
+#endif
+ }
+ return RPMRC_OK;
+}
+
+static int addnewkey(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int *keyoffp)
+{
+ int hl = keylsize(keyl);
+ while (idxdb->key_size - idxdb->keyend < hl + keyl) {
+ if (addkeypage(idxdb))
+ return RPMRC_FAIL;
+ }
+ encodekeyl(idxdb->key_mapped + idxdb->keyend, keyl);
+ if (keyl)
+ memcpy(idxdb->key_mapped + idxdb->keyend + hl, key, keyl);
+ *keyoffp = idxdb->keyend;
+ idxdb->keyend += hl + keyl;
+ updateKeyend(idxdb);
+ return RPMRC_OK;
+}
+
+
+/*** Data encoding/decoding ***/
+
+/* Encode a (pkgidx, datidx) tuple into a (data, ovldata) tuple in a way
+ * that most of the time ovldata will be zero. */
+static inline unsigned int encodedata(rpmidxdb idxdb, unsigned int pkgidx, unsigned int datidx, unsigned int *ovldatap)
+{
+ if (pkgidx < 0x100000 && datidx < 0x400) {
+ *ovldatap = 0;
+ return pkgidx | datidx << 20;
+ } else if (pkgidx < 0x1000000 && datidx < 0x40) {
+ *ovldatap = 0;
+ return pkgidx | datidx << 24 | 0x40000000;
+ } else {
+ *ovldatap = pkgidx;
+ return datidx | 0x80000000;
+ }
+}
+
+/* Decode (data, ovldata) back into (pkgidx, datidx) */
+static inline unsigned int decodedata(rpmidxdb idxdb, unsigned int data, unsigned int ovldata, unsigned int *datidxp)
+{
+ if (data & 0x80000000) {
+ *datidxp = data ^ 0x80000000;
+ return ovldata;
+ } else if (data & 0x40000000) {
+ *datidxp = (data ^ 0x40000000) >> 24;
+ return data & 0xffffff;
+ } else {
+ *datidxp = data >> 20;
+ return data & 0xfffff;
+ }
+}
+
+
+/*** Rebuild helpers ***/
+
+/* copy a single data entry into the new database */
+static inline void copyentry(rpmidxdb idxdb, unsigned int keyh, unsigned int newkeyoff, unsigned int data, unsigned int ovldata)
+{
+ unsigned int h, hh = 7;
+ unsigned char *ent;
+ unsigned int hmask = idxdb->hmask;
+ unsigned int x;
+
+ /* find an empty slot */
+ for (h = keyh & hmask;; h = (h + hh++) & hmask) {
+ ent = idxdb->slot_mapped + 8 * h;
+ x = le2ha(ent);
+ if (x == 0)
+ break;
+ }
+ /* write data */
+ h2lea(newkeyoff, ent);
+ h2lea(data, ent + 4);
+ if (ovldata)
+ h2lea(ovldata, idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h);
+ idxdb->usedslots++;
+}
+
+/* copy all entries belonging to a single key from the old database into the new database */
+static inline void copykeyentries(const unsigned char *key, unsigned int keyl, rpmidxdb idxdb, unsigned int oldkeyoff, rpmidxdb nidxdb, unsigned int newkeyoff, unsigned char *done)
+{
+ unsigned int h, hh;
+ unsigned int keyh = murmurhash(key, keyl);
+ unsigned int hmask = idxdb->hmask;
+
+ oldkeyoff |= keyh & idxdb->xmask;
+ newkeyoff |= keyh & nidxdb->xmask;
+ for (h = keyh & hmask, hh = 7; ; h = (h + hh++) & hmask) {
+ unsigned char *ent = idxdb->slot_mapped + 8 * h;
+ unsigned int data, ovldata;
+ unsigned int x = le2ha(ent);
+ if (x == 0)
+ break;
+ if (x != oldkeyoff)
+ continue;
+ data = le2ha(ent + 4);
+ ovldata = (data & 0x80000000) ? le2ha(idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h) : 0;
+ copyentry(nidxdb, keyh, newkeyoff, data, ovldata);
+ done[h >> 3] |= 1 << (h & 7);
+ }
+}
+
+static int rpmidxRebuildInternal(rpmidxdb idxdb)
+{
+ struct rpmidxdb_s nidxdb_s, *nidxdb;
+ unsigned int i, nslots;
+ unsigned int keyend, keyoff, xmask;
+ unsigned char *done;
+ unsigned char *ent;
+ unsigned int file_size, key_size, xfile_size;
+
+ nidxdb = &nidxdb_s;
+ memset(nidxdb, 0, sizeof(*nidxdb));
+ nidxdb->pagesize = sysconf(_SC_PAGE_SIZE);
+
+ /* calculate nslots the hard way, don't trust usedslots */
+ nslots = 0;
+ for (i = 0, ent = idxdb->slot_mapped; i < idxdb->nslots; i++, ent += 8) {
+ unsigned int x = le2ha(ent);
+ if (x != 0 && x != -1)
+ nslots++;
+ }
+ if (nslots < 256)
+ nslots = 256;
+ while (nslots & (nslots - 1))
+ nslots = nslots & (nslots - 1);
+ nslots *= 4;
+
+ nidxdb->nslots = nslots;
+ nidxdb->hmask = nslots - 1;
+
+ /* calculate the new key space size */
+ key_size = idxdb->keyend;
+ if (key_size < IDXDB_KEY_CHUNKSIZE)
+ key_size = IDXDB_KEY_CHUNKSIZE;
+ file_size = IDXDB_SLOT_OFFSET + nslots * 12 + key_size;
+
+ /* round file size to multiple of the page size */
+ if (file_size & (nidxdb->pagesize - 1)) {
+ unsigned int add = nidxdb->pagesize - (file_size & (nidxdb->pagesize - 1));
+ file_size += add;
+ key_size += add;
+ }
+
+ /* calculate xmask, leave at least 8192 bytes headroom for key space */
+ for (xmask = 0x00010000; xmask && xmask < key_size + 8192; xmask <<= 1)
+ ;
+ xmask = xmask ? ~(xmask - 1) : 0;
+ nidxdb->xmask = xmask;
+
+ /* create new database */
+ if (idxdb->xdb) {
+ nidxdb->xdb = idxdb->xdb;
+ nidxdb->xdbtag = idxdb->xdbtag;
+ if (rpmxdbLookupBlob(nidxdb->xdb, &nidxdb->xdbid, idxdb->xdbtag, IDXDB_XDB_SUBTAG_REBUILD, O_CREAT|O_TRUNC)) {
+ return RPMRC_FAIL;
+ }
+ if (rpmxdbResizeBlob(nidxdb->xdb, nidxdb->xdbid, file_size)) {
+ return RPMRC_FAIL;
+ }
+ if (rpmidxMap(nidxdb)) {
+ return RPMRC_FAIL;
+ }
+ } else {
+#ifdef IDXDB_FILESUPPORT
+ void *mapped;
+ nidxdb->filename = malloc(strlen(idxdb->filename) + 8);
+ if (!nidxdb->filename)
+ return RPMRC_FAIL;
+ sprintf(nidxdb->filename, "%s-XXXXXX", idxdb->filename);
+ nidxdb->fd = mkstemp(nidxdb->filename);
+ if (nidxdb->fd == -1) {
+ free(nidxdb->filename);
+ return RPMRC_FAIL;
+ }
+ if (createempty(nidxdb, 0, file_size)) {
+ close(nidxdb->fd);
+ unlink(nidxdb->filename);
+ free(nidxdb->filename);
+ return RPMRC_FAIL;
+ }
+ mapped = mmap(0, file_size, idxdb->rdonly ? PROT_READ : PROT_READ | PROT_WRITE, MAP_SHARED, nidxdb->fd, 0);
+ if (mapped == MAP_FAILED) {
+ close(nidxdb->fd);
+ unlink(nidxdb->filename);
+ free(nidxdb->filename);
+ return RPMRC_FAIL;
+ }
+ set_mapped(nidxdb, mapped, file_size);
+#else
+ return RPMRC_FAIL;
+#endif
+ }
+
+ /* copy all entries */
+ done = calloc(idxdb->nslots / 8 + 1, 1);
+ if (!done) {
+ rpmidxUnmap(nidxdb);
+ if (!idxdb->xdb) {
+ close(nidxdb->fd);
+ unlink(nidxdb->filename);
+ free(nidxdb->filename);
+ }
+ return RPMRC_FAIL;
+ }
+ keyend = 1;
+ for (i = 0, ent = idxdb->slot_mapped; i < idxdb->nslots; i++, ent += 8) {
+ unsigned int x = le2ha(ent);
+ unsigned char *key;
+ unsigned int keyl, hl;
+
+ if (x == 0 || x == -1)
+ continue;
+ if (done[i >> 3] & (1 << (i & 7))) {
+ continue; /* we already did that one */
+ }
+ x &= ~idxdb->xmask;
+ key = idxdb->key_mapped + x;
+ keyl = decodekeyl(key, &hl);
+ keyoff = keyend;
+ keyend += hl + keyl;
+ memcpy(nidxdb->key_mapped + keyoff, key, hl + keyl);
+ copykeyentries(key + hl, keyl, idxdb, x, nidxdb, keyoff, done);
+ }
+ free(done);
+ nidxdb->keyend = keyend;
+ nidxdb->generation = idxdb->generation + 1;
+ rpmidxWriteHeader(nidxdb);
+ rpmidxUnmap(nidxdb);
+
+ /* shrink if we have allocated excessive key space */
+ xfile_size = file_size - key_size + keyend + IDXDB_KEY_CHUNKSIZE;
+ xfile_size = (xfile_size + nidxdb->pagesize - 1) & ~(nidxdb->pagesize - 1);
+ if (xfile_size < file_size) {
+ if (nidxdb->xdb) {
+ rpmxdbResizeBlob(nidxdb->xdb, nidxdb->xdbid, xfile_size);
+ } else {
+ if (ftruncate(nidxdb->fd, xfile_size)) {
+ rpmlog(RPMLOG_WARNING, _("truncate failed: %s\n"), strerror(errno));
+ }
+ }
+ }
+
+ /* now switch over to new database */
+ if (idxdb->xdb) {
+ rpmidxUnmap(idxdb);
+ if (rpmxdbRenameBlob(nidxdb->xdb, &nidxdb->xdbid, idxdb->xdbtag, IDXDB_XDB_SUBTAG))
+ return RPMRC_FAIL;
+ idxdb->xdbid = nidxdb->xdbid;
+ } else {
+#ifdef IDXDB_FILESUPPORT
+ if (rename(nidxdb->filename, idxdb->filename)) {
+ close(nidxdb->fd);
+ unlink(nidxdb->filename);
+ free(nidxdb->filename);
+ return RPMRC_FAIL;
+ }
+ if (idxdb->head_mapped) {
+ h2lea(1, idxdb->head_mapped + IDXDB_OFFSET_OBSOLETE);
+ bumpGeneration(idxdb);
+ rpmidxUnmap(idxdb);
+ }
+ free(nidxdb->filename);
+ close(idxdb->fd);
+ idxdb->fd = nidxdb->fd;
+#else
+ return RPMRC_FAIL;
+#endif
+ }
+ if (rpmidxReadHeader(idxdb))
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+}
+
+/* check if we need to rebuild the index. We need to do this if
+ * - there are too many used slot, so hashing is inefficient
+ * - there is too much key excess (i.e. holes in the keys)
+ * - our keys grew so much that they need more bits
+ */
+static int rpmidxCheck(rpmidxdb idxdb)
+{
+ if (idxdb->usedslots * 2 > idxdb->nslots ||
+ (idxdb->keyexcess > 4096 && idxdb->keyexcess * 4 > idxdb->keyend) ||
+ idxdb->keyend >= ~idxdb->xmask) {
+ if (rpmidxRebuildInternal(idxdb))
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmidxPutInternal(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int pkgidx, unsigned int datidx)
+{
+ unsigned int keyh = murmurhash(key, keyl);
+ unsigned int keyoff = 0;
+ unsigned int freeh = -1;
+ unsigned int x, h, hh = 7;
+ unsigned int hmask;
+ unsigned int xmask;
+ unsigned char *ent;
+ unsigned int data, ovldata;
+
+ if (datidx >= 0x80000000)
+ return RPMRC_FAIL;
+ if (rpmidxCheck(idxdb))
+ return RPMRC_FAIL;
+ data = encodedata(idxdb, pkgidx, datidx, &ovldata);
+ hmask = idxdb->hmask;
+ xmask = idxdb->xmask;
+ for (h = keyh & hmask; ; h = (h + hh++) & hmask) {
+ ent = idxdb->slot_mapped + 8 * h;
+ x = le2ha(ent);
+ if (x == 0) /* reached an empty slot */
+ break;
+ if (x == -1) {
+ freeh = h; /* found a dummy slot, remember the position */
+ continue;
+ }
+ if (!keyoff) {
+ if (((x ^ keyh) & xmask) != 0)
+ continue;
+ if (!equalkey(idxdb, x & ~xmask, key, keyl))
+ continue;
+ keyoff = x;
+ }
+ if (keyoff != x)
+ continue;
+ /* string matches, check data/ovldata */
+ if (le2ha(ent + 4) == data) {
+ if (!ovldata || le2ha(idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h) == ovldata)
+ return RPMRC_OK; /* already in database */
+ }
+ /* continue searching */
+ }
+ if (!keyoff) {
+ /* we did not find this key. add it */
+ if (addnewkey(idxdb, key, keyl, &keyoff))
+ return RPMRC_FAIL;
+ keyoff |= keyh & xmask; /* tag it with the extra bits */
+ /* re-calculate ent, addnewkey may have changed the mapping! */
+ ent = idxdb->slot_mapped + 8 * h;
+ }
+ if (freeh == -1) {
+ /* did not find a dummy slot, so use the current empty slot */
+ idxdb->usedslots++;
+ updateUsedslots(idxdb);
+ } else {
+ /* re-use dummy slot */
+ h = freeh;
+ ent = idxdb->slot_mapped + 8 * h;
+ if (idxdb->dummyslots) {
+ idxdb->dummyslots--;
+ updateDummyslots(idxdb);
+ }
+ }
+ h2lea(keyoff, ent);
+ h2lea(data, ent + 4);
+ if (ovldata)
+ h2lea(ovldata, idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h);
+ bumpGeneration(idxdb);
+ return RPMRC_OK;
+}
+
+static int rpmidxDelInternal(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int pkgidx, unsigned int datidx)
+{
+ unsigned int keyoff = 0;
+ unsigned int keyh = murmurhash(key, keyl);
+ unsigned int hmask;
+ unsigned int xmask;
+ unsigned int x, h, hh = 7;
+ int otherusers = 0;
+ unsigned int data, ovldata;
+
+ if (datidx >= 0x80000000)
+ return RPMRC_FAIL;
+ if (rpmidxCheck(idxdb))
+ return RPMRC_FAIL;
+ data = encodedata(idxdb, pkgidx, datidx, &ovldata);
+ hmask = idxdb->hmask;
+ xmask = idxdb->xmask;
+ for (h = keyh & hmask; ; h = (h + hh++) & hmask) {
+ unsigned char *ent = idxdb->slot_mapped + 8 * h;
+ x = le2ha(ent);
+ if (x == 0)
+ break;
+ if (x == -1)
+ continue;
+ if (!keyoff) {
+ if (((x ^ keyh) & xmask) != 0)
+ continue;
+ if (!equalkey(idxdb, x & ~xmask, key, keyl))
+ continue;
+ keyoff = x;
+ }
+ if (keyoff != x)
+ continue;
+ /* key matches, check data/ovldata */
+ if (le2ha(ent + 4) != data) {
+ otherusers = 1;
+ continue;
+ }
+ if (ovldata && le2ha(idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h) != ovldata) {
+ otherusers = 1;
+ continue;
+ }
+ /* found a match. convert entry to a dummy slot */
+ h2lea(-1, ent);
+ h2lea(-1, ent + 4);
+ if (ovldata)
+ h2lea(0, idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h);
+ idxdb->dummyslots++;
+ updateDummyslots(idxdb);
+ /* continue searching (so that we find other users of the key...) */
+ }
+ if (keyoff && !otherusers) {
+ /* key is no longer in use. free it */
+ int hl = keylsize(keyl);
+ memset(idxdb->key_mapped + (keyoff & ~xmask), 0, hl + keyl);
+ idxdb->keyexcess += hl + keyl;
+ updateKeyexcess(idxdb);
+ }
+ if (keyoff)
+ bumpGeneration(idxdb);
+ return RPMRC_OK;
+}
+
+static int rpmidxGetInternal(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int **pkgidxlistp, unsigned int *pkgidxnump)
+{
+ unsigned int keyoff = 0;
+ unsigned int keyh = murmurhash(key, keyl);
+ unsigned int hmask = idxdb->hmask;
+ unsigned int xmask = idxdb->xmask;
+ unsigned int x, h, hh = 7;
+ unsigned int data, ovldata, datidx;
+ unsigned int nhits = 0;
+ unsigned int *hits = 0;
+ for (h = keyh & hmask; ; h = (h + hh++) & hmask) {
+ unsigned char *ent = idxdb->slot_mapped + 8 * h;
+ x = le2ha(ent);
+ if (x == 0)
+ break;
+ if (x == -1)
+ continue;
+ if (!keyoff) {
+ if (((x ^ keyh) & xmask) != 0)
+ continue;
+ if (!equalkey(idxdb, x & ~xmask, key, keyl))
+ continue;
+ keyoff = x;
+ }
+ if (keyoff != x)
+ continue;
+ if ((nhits & 15) == 0) {
+ if (!hits) {
+ hits = malloc(16 * sizeof(unsigned int));
+ } else {
+ hits = realloc(hits, (nhits + 16) * sizeof(unsigned int));
+ }
+ if (!hits)
+ return RPMRC_FAIL;
+ }
+ data = le2ha(ent + 4);
+ ovldata = (data & 0x80000000) ? le2ha(idxdb->slot_mapped + idxdb->nslots * 8 + 4 * h) : 0;
+ hits[nhits++] = decodedata(idxdb, data, ovldata, &datidx);
+ hits[nhits++] = datidx;
+ }
+ *pkgidxlistp = hits;
+ *pkgidxnump = nhits;
+ return nhits ? RPMRC_OK : RPMRC_NOTFOUND;
+}
+
+static int rpmidxListSort_cmp(const void *a, const void *b)
+{
+ return ((unsigned int *)a)[1] - ((unsigned int *)b)[1];
+}
+
+/* sort in hash offset order, so that we get sequential acceess */
+static void rpmidxListSort(rpmidxdb idxdb, unsigned int *keylist, unsigned int nkeylist, unsigned char *data)
+{
+ unsigned int i, *arr;
+ if (nkeylist < 2 * 2)
+ return;
+ arr = malloc(nkeylist * sizeof(unsigned int));
+ if (!arr)
+ return;
+ for (i = 0; i < nkeylist; i += 2) {
+ arr[i] = i;
+ arr[i + 1] = murmurhash(data + keylist[i], keylist[i + 1]) & idxdb->hmask;
+ }
+ qsort(arr, nkeylist / 2, 2 * sizeof(unsigned int), rpmidxListSort_cmp);
+ for (i = 0; i < nkeylist; i += 2) {
+ unsigned int ai = arr[i];
+ arr[i] = keylist[ai];
+ arr[i + 1] = keylist[ai + 1];
+ }
+ memcpy(keylist, arr, nkeylist * sizeof(unsigned int));
+ free(arr);
+}
+
+static int rpmidxListInternal(rpmidxdb idxdb, unsigned int **keylistp, unsigned int *nkeylistp, unsigned char **datap)
+{
+ unsigned int *keylist = 0;
+ unsigned int nkeylist = 0;
+ unsigned char *data, *terminate, *key, *keyendp;
+
+ data = malloc(idxdb->keyend + 1); /* +1 so we can terminate the last key */
+ if (!data)
+ return RPMRC_FAIL;
+ memcpy(data, idxdb->key_mapped, idxdb->keyend);
+ keylist = malloc(16 * sizeof(*keylist));
+ if (!keylist) {
+ free(data);
+ return RPMRC_FAIL;
+ }
+ terminate = 0;
+ for (key = data + 1, keyendp = data + idxdb->keyend; key < keyendp; ) {
+ unsigned int hl, keyl;
+ if (!*key) {
+ key++;
+ continue;
+ }
+ if ((nkeylist & 15) == 0) {
+ unsigned int *kl = realloc(keylist, (nkeylist + 16) * sizeof(*keylist));
+ if (!kl) {
+ free(keylist);
+ free(data);
+ return RPMRC_FAIL;
+ }
+ keylist = kl;
+ }
+ keyl = decodekeyl(key, &hl);
+ keylist[nkeylist++] = key + hl - data;
+ keylist[nkeylist++] = keyl;
+ key += hl + keyl;
+ if (terminate)
+ *terminate = 0;
+ terminate = key;
+ }
+ if (terminate)
+ *terminate = 0;
+ rpmidxListSort(idxdb, keylist, nkeylist, data);
+ *keylistp = keylist;
+ *nkeylistp = nkeylist;
+ *datap = data;
+ return RPMRC_OK;
+}
+
+
+static int rpmidxInitInternal(rpmidxdb idxdb)
+{
+ if (idxdb->xdb) {
+ unsigned int id;
+ int rc = rpmxdbLookupBlob(idxdb->xdb, &id, idxdb->xdbtag, IDXDB_XDB_SUBTAG, 0);
+ if (rc == RPMRC_OK && id) {
+ idxdb->xdbid = id;
+ return RPMRC_OK; /* somebody else was faster */
+ }
+ if (rc && rc != RPMRC_NOTFOUND)
+ return rc;
+ } else {
+#ifdef IDXDB_FILESUPPORT
+ struct stat stb;
+ if (stat(idxdb->filename, &stb))
+ return RPMRC_FAIL;
+ if (stb.st_size) /* somebody else was faster */
+ return rpmidxHandleObsolete(idxdb);
+#else
+ return RPMRC_FAIL;
+#endif
+ }
+ return rpmidxRebuildInternal(idxdb);
+}
+
+static int rpmidxLock(rpmidxdb idxdb, int excl)
+{
+ if (excl && idxdb->rdonly)
+ return RPMRC_FAIL;
+ if (idxdb->xdb)
+ return rpmxdbLock(idxdb->xdb, excl);
+ else
+ return rpmpkgLock(idxdb->pkgdb, excl);
+}
+
+static int rpmidxUnlock(rpmidxdb idxdb, int excl)
+{
+ if (idxdb->xdb)
+ return rpmxdbUnlock(idxdb->xdb, excl);
+ else
+ return rpmpkgUnlock(idxdb->pkgdb, excl);
+}
+
+static int rpmidxLockReadHeader(rpmidxdb idxdb, int excl)
+{
+ if (rpmidxLock(idxdb, excl))
+ return RPMRC_FAIL;
+ if (rpmidxReadHeader(idxdb)) {
+ rpmidxUnlock(idxdb, excl);
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmidxInit(rpmidxdb idxdb)
+{
+ int rc;
+ if (rpmidxLock(idxdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmidxInitInternal(idxdb);
+ rpmidxUnlock(idxdb, 1);
+ return rc;
+}
+
+int rpmidxOpen(rpmidxdb *idxdbp, rpmpkgdb pkgdb, const char *filename, int flags, int mode)
+{
+#ifdef IDXDB_FILESUPPORT
+ struct stat stb;
+ rpmidxdb idxdb;
+
+ *idxdbp = 0;
+ idxdb = calloc(1, sizeof(*idxdb));
+ if (!idxdb)
+ return RPMRC_FAIL;
+ idxdb->filename = strdup(filename);
+ if (!idxdb->filename) {
+ free(idxdb);
+ return RPMRC_FAIL;
+ }
+ if ((flags & (O_RDONLY|O_RDWR)) == O_RDONLY)
+ idxdb->rdonly = 1;
+ if ((idxdb->fd = open(filename, flags, mode)) == -1) {
+ free(idxdb->filename);
+ free(idxdb);
+ return RPMRC_FAIL;
+ }
+ if (fstat(idxdb->fd, &stb)) {
+ close(idxdb->fd);
+ free(idxdb->filename);
+ free(idxdb);
+ return RPMRC_FAIL;
+ }
+ idxdb->pkgdb = pkgdb;
+ idxdb->flags = flags;
+ idxdb->mode = mode;
+ idxdb->pagesize = sysconf(_SC_PAGE_SIZE);
+ if (stb.st_size == 0) {
+ if (rpmidxInit(idxdb)) {
+ close(idxdb->fd);
+ free(idxdb->filename);
+ free(idxdb);
+ return RPMRC_FAIL;
+ }
+ }
+ *idxdbp = idxdb;
+ return RPMRC_OK;
+#else
+ return RPMRC_FAIL;
+#endif
+}
+
+int rpmidxOpenXdb(rpmidxdb *idxdbp, rpmpkgdb pkgdb, rpmxdb xdb, unsigned int xdbtag)
+{
+ rpmidxdb idxdb;
+ unsigned int id;
+ *idxdbp = 0;
+ int rc;
+
+ if (rpmxdbLock(xdb, 0))
+ return RPMRC_FAIL;
+ rc = rpmxdbLookupBlob(xdb, &id, xdbtag, IDXDB_XDB_SUBTAG, 0);
+ if (rc == RPMRC_NOTFOUND)
+ id = 0;
+ else if (rc) {
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ idxdb = calloc(1, sizeof(*idxdb));
+ if (!idxdb) {
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ idxdb->fd = -1;
+ idxdb->xdb = xdb;
+ idxdb->xdbtag = xdbtag;
+ idxdb->xdbid = id;
+ idxdb->pkgdb = pkgdb;
+ idxdb->pagesize = sysconf(_SC_PAGE_SIZE);
+ if (rpmxdbIsRdonly(xdb))
+ idxdb->rdonly = 1;
+ if (!id) {
+ if (rpmidxInit(idxdb)) {
+ free(idxdb);
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ }
+ *idxdbp = idxdb;
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_OK;
+}
+
+int rpmidxDelXdb(rpmpkgdb pkgdb, rpmxdb xdb, unsigned int xdbtag)
+{
+ unsigned int id;
+ int rc;
+ if (rpmxdbLock(xdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmxdbLookupBlob(xdb, &id, xdbtag, IDXDB_XDB_SUBTAG, 0);
+ if (rc == RPMRC_NOTFOUND)
+ id = 0;
+ else if (rc) {
+ rpmxdbUnlock(xdb, 1);
+ return rc;
+ }
+ if (id && rpmxdbDelBlob(xdb, id)) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+}
+
+void rpmidxClose(rpmidxdb idxdb)
+{
+ rpmidxUnmap(idxdb);
+ if (idxdb->fd >= 0) {
+ close(idxdb->fd);
+ idxdb->fd = -1;
+ }
+ if (idxdb->filename)
+ free(idxdb->filename);
+ free(idxdb);
+}
+
+int rpmidxPut(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int pkgidx, unsigned int datidx)
+{
+ int rc;
+ if (!pkgidx || datidx >= 0x80000000) {
+ return RPMRC_FAIL;
+ }
+ if (rpmidxLockReadHeader(idxdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmidxPutInternal(idxdb, key, keyl, pkgidx, datidx);
+ rpmidxUnlock(idxdb, 1);
+ return rc;
+}
+
+int rpmidxDel(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int pkgidx, unsigned int datidx)
+{
+ int rc;
+ if (!pkgidx || datidx >= 0x80000000) {
+ return RPMRC_FAIL;
+ }
+ if (rpmidxLockReadHeader(idxdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmidxDelInternal(idxdb, key, keyl, pkgidx, datidx);
+ rpmidxUnlock(idxdb, 1);
+ return rc;
+}
+
+int rpmidxGet(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int **pkgidxlistp, unsigned int *pkgidxnump)
+{
+ int rc;
+ *pkgidxlistp = 0;
+ *pkgidxnump = 0;
+ if (rpmidxLockReadHeader(idxdb, 0))
+ return RPMRC_FAIL;
+ rc = rpmidxGetInternal(idxdb, key, keyl, pkgidxlistp, pkgidxnump);
+ rpmidxUnlock(idxdb, 0);
+ return rc;
+}
+
+int rpmidxList(rpmidxdb idxdb, unsigned int **keylistp, unsigned int *nkeylistp, unsigned char **datap)
+{
+ int rc;
+ *keylistp = 0;
+ *nkeylistp = 0;
+ if (rpmidxLockReadHeader(idxdb, 0))
+ return RPMRC_FAIL;
+ rc = rpmidxListInternal(idxdb, keylistp, nkeylistp, datap);
+ rpmidxUnlock(idxdb, 0);
+ return rc;
+}
+
+int rpmidxStats(rpmidxdb idxdb)
+{
+ if (rpmidxLockReadHeader(idxdb, 0))
+ return RPMRC_FAIL;
+ printf("--- IndexDB Stats\n");
+ if (idxdb->xdb) {
+ printf("Xdb tag: %d, id: %d\n", idxdb->xdbtag, idxdb->xdbid);
+ } else {
+ printf("Filename: %s\n", idxdb->filename);
+ }
+ printf("Generation: %u\n", idxdb->generation);
+ printf("Slots: %u\n", idxdb->nslots);
+ printf("Used slots: %u\n", idxdb->usedslots);
+ printf("Dummy slots: %u\n", idxdb->dummyslots);
+ printf("Key data size: %u, left %u\n", idxdb->keyend, idxdb->key_size - idxdb->keyend);
+ printf("Key excess: %u\n", idxdb->keyexcess);
+ printf("XMask: 0x%08x\n", idxdb->xmask);
+ rpmidxUnlock(idxdb, 0);
+ return RPMRC_OK;
+}
diff --git a/lib/backend/ndb/rpmidx.h b/lib/backend/ndb/rpmidx.h
new file mode 100644
index 000000000..e89bd82f1
--- /dev/null
+++ b/lib/backend/ndb/rpmidx.h
@@ -0,0 +1,18 @@
+#include "rpmpkg.h"
+#include "rpmxdb.h"
+
+struct rpmidxdb_s;
+typedef struct rpmidxdb_s *rpmidxdb;
+
+int rpmidxOpen(rpmidxdb *idxdbp, rpmpkgdb pkgdb, const char *filename, int flags, int mode);
+int rpmidxOpenXdb(rpmidxdb *idxdbp, rpmpkgdb pkgdb, rpmxdb xdb, unsigned int xdbtag);
+int rpmidxDelXdb(rpmpkgdb pkgdb, rpmxdb xdb, unsigned int xdbtag);
+void rpmidxClose(rpmidxdb idxdbp);
+
+int rpmidxGet(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int **pkgidxlist, unsigned int *pkgidxnum);
+int rpmidxPut(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int pkgidx, unsigned int datidx);
+int rpmidxDel(rpmidxdb idxdb, const unsigned char *key, unsigned int keyl, unsigned int pkgidx, unsigned int datidx);
+int rpmidxList(rpmidxdb idxdb, unsigned int **keylistp, unsigned int *nkeylistp, unsigned char **datap);
+
+int rpmidxStats(rpmidxdb idxdb);
+
diff --git a/lib/backend/ndb/rpmpkg.c b/lib/backend/ndb/rpmpkg.c
new file mode 100644
index 000000000..68b03eeb7
--- /dev/null
+++ b/lib/backend/ndb/rpmpkg.c
@@ -0,0 +1,1312 @@
+#include "system.h"
+
+#include <rpm/rpmlog.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/file.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <libgen.h>
+
+#include "rpmpkg.h"
+
+#define RPMRC_FAIL 2
+#define RPMRC_NOTFOUND 1
+#define RPMRC_OK 0
+
+#ifdef RPMPKG_LZO
+static int rpmpkgLZOCompress(unsigned char **blobp, unsigned int *bloblp);
+static int rpmpkgLZODecompress(unsigned char **blobp, unsigned int *bloblp);
+#endif
+
+static int rpmpkgVerifyblob(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned int blkoff, unsigned int blkcnt);
+
+typedef struct pkgslot_s {
+ unsigned int pkgidx;
+ unsigned int blkoff;
+ unsigned int blkcnt;
+ unsigned int slotno;
+} pkgslot;
+
+typedef struct rpmpkgdb_s {
+ int fd; /* our file descriptor */
+ int flags;
+ int mode;
+
+ int rdonly;
+
+ unsigned int locked_shared;
+ unsigned int locked_excl;
+
+ int header_ok; /* header data (e.g. generation) is valid */
+ unsigned int generation;
+ unsigned int slotnpages;
+ unsigned int nextpkgidx;
+
+ struct pkgslot_s *slots;
+ unsigned int aslots; /* allocated slots */
+ unsigned int nslots; /* used slots */
+
+ unsigned int *slothash;
+ unsigned int nslothash;
+
+ unsigned int freeslot; /* first free slot */
+ int slotorder;
+
+ char *filename;
+ unsigned int fileblks; /* file size in blks */
+ int dofsync;
+} * rpmpkgdb;
+
+#define SLOTORDER_UNORDERED 0
+#define SLOTORDER_BLKOFF 1
+
+
+static inline unsigned int le2h(unsigned char *p)
+{
+ return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24;
+}
+
+static inline void h2le(unsigned int x, unsigned char *p)
+{
+ p[0] = x;
+ p[1] = x >> 8;
+ p[2] = x >> 16;
+ p[3] = x >> 24;
+}
+
+/* adler 32 algorithm taken from RFC 1950 */
+#define ADLER32_INIT 1
+static unsigned int update_adler32(unsigned int adler, unsigned char *buf, unsigned int len)
+{
+ unsigned int s1 = adler & 0xffff;
+ unsigned int s2 = (adler >> 16) & 0xffff;
+ int n;
+
+ for (; len >= 5552; len -= 5552) {
+ for (n = 0; n < 5552; n++) {
+ s1 += *buf++;
+ s2 += s1;
+ }
+ s1 %= 65521;
+ s2 %= 65521;
+ }
+ for (n = 0; n < len; n++) {
+ s1 += *buf++;
+ s2 += s1;
+ }
+ return ((s2 % 65521) << 16) + (s1 % 65521);
+}
+
+/*** Header management ***/
+
+#define PKGDB_MAGIC ('R' | 'p' << 8 | 'm' << 16 | 'P' << 24)
+#define PKGDB_VERSION 0
+
+/* must be a multiple of SLOT_SIZE! */
+#define PKGDB_HEADER_SIZE 32
+
+#define PKGDB_OFFSET_MAGIC 0
+#define PKGDB_OFFSET_VERSION 4
+#define PKGDB_OFFSET_GENERATION 8
+#define PKGDB_OFFSET_SLOTNPAGES 12
+#define PKGDB_OFFSET_NEXTPKGIDX 16
+
+static int rpmpkgReadHeader(rpmpkgdb pkgdb)
+{
+ unsigned int generation, slotnpages, nextpkgidx, version;
+ unsigned char header[PKGDB_HEADER_SIZE];
+
+ /* if we always head the write lock then our data matches */
+ if (pkgdb->header_ok)
+ return RPMRC_OK;
+ if (pread(pkgdb->fd, header, PKGDB_HEADER_SIZE, 0) != PKGDB_HEADER_SIZE) {
+ return RPMRC_FAIL;
+ }
+ if (le2h(header + PKGDB_OFFSET_MAGIC) != PKGDB_MAGIC) {
+ return RPMRC_FAIL;
+ }
+ version = le2h(header + PKGDB_OFFSET_VERSION);
+ if (version != PKGDB_VERSION) {
+ rpmlog(RPMLOG_ERR, _("rpmpkg: Version mismatch. Expected version: %u. "
+ "Found version: %u\n"), PKGDB_VERSION, version);
+ return RPMRC_FAIL;
+ }
+ generation = le2h(header + PKGDB_OFFSET_GENERATION);
+ slotnpages = le2h(header + PKGDB_OFFSET_SLOTNPAGES);
+ nextpkgidx = le2h(header + PKGDB_OFFSET_NEXTPKGIDX);
+ /* free slots if our internal data no longer matches */
+ if (pkgdb->slots && (pkgdb->generation != generation || pkgdb->slotnpages != slotnpages)) {
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ if (pkgdb->slothash) {
+ free(pkgdb->slothash);
+ pkgdb->slothash = 0;
+ }
+ }
+ pkgdb->generation = generation;
+ pkgdb->slotnpages = slotnpages;
+ pkgdb->nextpkgidx = nextpkgidx;
+ pkgdb->header_ok = 1;
+ return RPMRC_OK;
+}
+
+static int rpmpkgWriteHeader(rpmpkgdb pkgdb)
+{
+ unsigned char header[PKGDB_HEADER_SIZE];
+ memset(header, 0, sizeof(header));
+ h2le(PKGDB_MAGIC, header + PKGDB_OFFSET_MAGIC);
+ h2le(PKGDB_VERSION, header + PKGDB_OFFSET_VERSION);
+ h2le(pkgdb->generation, header + PKGDB_OFFSET_GENERATION);
+ h2le(pkgdb->slotnpages, header + PKGDB_OFFSET_SLOTNPAGES);
+ h2le(pkgdb->nextpkgidx, header + PKGDB_OFFSET_NEXTPKGIDX);
+ if (pwrite(pkgdb->fd, header, sizeof(header), 0) != sizeof(header)) {
+ return RPMRC_FAIL;
+ }
+ if (pkgdb->dofsync && fsync(pkgdb->fd))
+ return RPMRC_FAIL; /* write error */
+ return RPMRC_OK;
+}
+
+/*** Slot management ***/
+
+#define SLOT_MAGIC ('S' | 'l' << 8 | 'o' << 16 | 't' << 24)
+
+#define SLOT_SIZE 16
+#define BLK_SIZE 16
+#define PAGE_SIZE 4096
+
+/* the first slots (i.e. 32 bytes) are used for the header */
+#define SLOT_START (PKGDB_HEADER_SIZE / SLOT_SIZE)
+
+static inline unsigned int hashpkgidx(unsigned int h)
+{
+ h *= 0x5bd1e995;
+ h ^= h >> 16;
+ return h;
+}
+
+static int rpmpkgHashSlots(rpmpkgdb pkgdb)
+{
+ unsigned int nslots, num;
+ unsigned int *hash;
+ unsigned int h, hh, hmask;
+ int i;
+ pkgslot *slot;
+
+ pkgdb->nslothash = 0;
+ num = pkgdb->nslots;
+ while (num & (num - 1))
+ num = num & (num - 1);
+ num *= 4;
+ hash = pkgdb->slothash;
+ if (!hash || pkgdb->nslothash != num) {
+ free(pkgdb->slothash);
+ hash = pkgdb->slothash = calloc(num, sizeof(unsigned int));
+ if (!hash)
+ return RPMRC_FAIL;
+ pkgdb->nslothash = num;
+ } else {
+ memset(hash, 0, num * sizeof(unsigned int));
+ }
+ hmask = num - 1;
+ nslots = pkgdb->nslots;
+ for (i = 0, slot = pkgdb->slots; i < nslots; i++, slot++) {
+ for (h = hashpkgidx(slot->pkgidx) & hmask, hh = 7; hash[h] != 0; h = (h + hh++) & hmask)
+ ;
+ hash[h] = i + 1;
+ }
+ pkgdb->slothash = hash;
+ pkgdb->nslothash = num;
+ return RPMRC_OK;
+}
+
+static int rpmpkgReadSlots(rpmpkgdb pkgdb)
+{
+ unsigned int slotnpages = pkgdb->slotnpages;
+ struct stat stb;
+ unsigned char pagebuf[PAGE_SIZE];
+ unsigned int page;
+ unsigned int i, minblkoff, fileblks, slotno, freeslot, o;
+ pkgslot *slot;
+
+ /* free old slot data */
+ if (pkgdb->slots) {
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ }
+ if (pkgdb->slothash) {
+ free(pkgdb->slothash);
+ pkgdb->slothash = 0;
+ }
+ pkgdb->nslots = 0;
+ pkgdb->freeslot = 0;
+
+ /* calculate current database size in blks */
+ if (fstat(pkgdb->fd, &stb))
+ return RPMRC_FAIL;
+ if (stb.st_size % BLK_SIZE)
+ return RPMRC_FAIL; /* hmm */
+ fileblks = stb.st_size / BLK_SIZE;
+
+ /* read (and somewhat verify) all slots */
+ pkgdb->aslots = slotnpages * (PAGE_SIZE / SLOT_SIZE);
+ pkgdb->slots = calloc(pkgdb->aslots, sizeof(*pkgdb->slots));
+ if (!pkgdb->slots) {
+ return RPMRC_FAIL;
+ }
+ i = 0;
+ slot = pkgdb->slots;
+ minblkoff = slotnpages * (PAGE_SIZE / BLK_SIZE);
+ slotno = SLOT_START;
+ freeslot = 0;
+ for (page = 0; page < slotnpages; page++) {
+ if (pread(pkgdb->fd, pagebuf, PAGE_SIZE, page * PAGE_SIZE) != PAGE_SIZE)
+ return RPMRC_FAIL;
+ for (o = page ? 0 : SLOT_START * SLOT_SIZE; o < PAGE_SIZE; o += SLOT_SIZE, slotno++) {
+ unsigned char *pp = pagebuf + o;
+ unsigned int blkoff, blkcnt, pkgidx;
+ if (le2h(pp) != SLOT_MAGIC) {
+ return RPMRC_FAIL;
+ }
+ blkoff = le2h(pp + 8);
+ if (!blkoff) {
+ if (!freeslot)
+ freeslot = slotno;
+ continue;
+ }
+ pkgidx = le2h(pp + 4);
+ blkcnt = le2h(pp + 12);
+ slot->pkgidx = pkgidx;
+ slot->blkoff = blkoff;
+ slot->blkcnt = blkcnt;
+ slot->slotno = slotno;
+ if (slot->blkoff + slot->blkcnt > fileblks)
+ return RPMRC_FAIL; /* truncated database */
+ if (!slot->pkgidx || !slot->blkcnt || slot->blkoff < minblkoff)
+ return RPMRC_FAIL; /* bad entry */
+ i++;
+ slot++;
+ }
+ }
+ pkgdb->nslots = i;
+ pkgdb->slotorder = SLOTORDER_UNORDERED; /* XXX: always order? */
+ pkgdb->fileblks = fileblks;
+ pkgdb->freeslot = freeslot;
+ if (rpmpkgHashSlots(pkgdb)) {
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int orderslots_blkoff_cmp(const void *a, const void *b)
+{
+ unsigned int blkoffa = ((const pkgslot *)a)->blkoff;
+ unsigned int blkoffb = ((const pkgslot *)b)->blkoff;
+ return blkoffa > blkoffb ? 1 : blkoffa < blkoffb ? -1 : 0;
+}
+
+static void rpmpkgOrderSlots(rpmpkgdb pkgdb, int slotorder)
+{
+ if (pkgdb->slotorder == slotorder)
+ return;
+ if (slotorder == SLOTORDER_BLKOFF) {
+ if (pkgdb->nslots > 1)
+ qsort(pkgdb->slots, pkgdb->nslots, sizeof(*pkgdb->slots), orderslots_blkoff_cmp);
+ }
+ pkgdb->slotorder = slotorder;
+ rpmpkgHashSlots(pkgdb);
+}
+
+static inline pkgslot *rpmpkgFindSlot(rpmpkgdb pkgdb, unsigned int pkgidx)
+{
+ unsigned int i, h, hh, hmask = pkgdb->nslothash - 1;
+ unsigned int *hash = pkgdb->slothash;
+
+ for (h = hashpkgidx(pkgidx) & hmask, hh = 7; (i = hash[h]) != 0; h = (h + hh++) & hmask)
+ if (pkgdb->slots[i - 1].pkgidx == pkgidx)
+ return pkgdb->slots + (i - 1);
+ return 0;
+}
+
+static int rpmpkgFindEmptyOffset(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned int blkcnt, unsigned *blkoffp, pkgslot **oldslotp, int dontprepend)
+{
+ unsigned int i, nslots = pkgdb->nslots;
+ unsigned int bestblkoff = 0;
+ unsigned int freecnt, bestfreecnt = 0;
+ unsigned int lastblkend = pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE);
+ pkgslot *slot, *oldslot = 0;
+
+ if (pkgdb->slotorder != SLOTORDER_BLKOFF)
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+
+ if (dontprepend && nslots) {
+ lastblkend = pkgdb->slots[0].blkoff;
+ }
+ /* best fit strategy */
+ for (i = 0, slot = pkgdb->slots; i < nslots; i++, slot++) {
+ if (slot->blkoff < lastblkend) {
+ return RPMRC_FAIL; /* eek, slots overlap! */
+ }
+ if (slot->pkgidx == pkgidx) {
+ if (oldslot) {
+ return RPMRC_FAIL; /* eek, two slots with our pkgid ! */
+ }
+ oldslot = slot;
+ }
+ freecnt = slot->blkoff - lastblkend;
+ if (freecnt >= blkcnt) {
+ if (!bestblkoff || bestfreecnt > freecnt) {
+ bestblkoff = lastblkend;
+ bestfreecnt = freecnt;
+ }
+ }
+ lastblkend = slot->blkoff + slot->blkcnt;
+ }
+ if (!bestblkoff) {
+ bestblkoff = lastblkend; /* append to end */
+ }
+ *oldslotp = oldslot;
+ *blkoffp = bestblkoff;
+ return RPMRC_OK;
+}
+
+static int rpmpkgNeighbourCheck(rpmpkgdb pkgdb, unsigned int blkoff, unsigned int blkcnt, unsigned int *newblkcnt)
+{
+ unsigned int i, nslots = pkgdb->nslots;
+ unsigned int lastblkend = pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE);
+ pkgslot *slot, *left = 0, *right = 0;
+
+ if (pkgdb->slotorder != SLOTORDER_BLKOFF)
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+ if (blkoff < lastblkend)
+ return RPMRC_FAIL;
+ for (i = 0, slot = pkgdb->slots; i < nslots; i++, slot++) {
+ if (slot->blkoff < lastblkend)
+ return RPMRC_FAIL; /* eek, slots overlap! */
+ if (slot->blkoff < blkoff)
+ left = slot;
+ if (!right && slot->blkoff >= blkoff)
+ right = slot;
+ lastblkend = slot->blkoff + slot->blkcnt;
+ }
+ if (left && left->blkoff + left->blkcnt != blkoff)
+ return RPMRC_FAIL; /* must always start right after the block */
+ if (!left && blkoff != pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE))
+ return RPMRC_FAIL;
+ if (right && right->blkoff < blkoff + blkcnt)
+ return RPMRC_FAIL;
+ /* check if neighbour blobs are in good shape */
+ if (left && rpmpkgVerifyblob(pkgdb, left->pkgidx, left->blkoff, left->blkcnt) != RPMRC_OK)
+ return RPMRC_FAIL;
+ if (right && rpmpkgVerifyblob(pkgdb, right->pkgidx, right->blkoff, right->blkcnt) != RPMRC_OK)
+ return RPMRC_FAIL;
+ *newblkcnt = right ? right->blkoff - blkoff : blkcnt;
+ /* bounds are intect. free area. */
+ return RPMRC_OK;
+}
+
+static int rpmpkgWriteslot(rpmpkgdb pkgdb, unsigned int slotno, unsigned int pkgidx, unsigned int blkoff, unsigned int blkcnt)
+{
+ unsigned char buf[SLOT_SIZE];
+ /* sanity */
+ if (slotno < SLOT_START)
+ return RPMRC_FAIL;
+ if (blkoff && slotno == pkgdb->freeslot)
+ pkgdb->freeslot = 0;
+ h2le(SLOT_MAGIC, buf);
+ h2le(pkgidx, buf + 4);
+ h2le(blkoff, buf + 8);
+ h2le(blkcnt, buf + 12);
+ if (pwrite(pkgdb->fd, buf, sizeof(buf), slotno * SLOT_SIZE) != sizeof(buf)) {
+ return RPMRC_FAIL;
+ }
+ pkgdb->generation++;
+ if (rpmpkgWriteHeader(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgWriteEmptySlotpage(rpmpkgdb pkgdb, int pageno)
+{
+ unsigned char page[PAGE_SIZE];
+ int i, off = pageno ? 0 : SLOT_START * SLOT_SIZE;
+ memset(page, 0, sizeof(page));
+ for (i = 0; i < PAGE_SIZE / SLOT_SIZE; i++)
+ h2le(SLOT_MAGIC, page + i * SLOT_SIZE);
+ if (pwrite(pkgdb->fd, page, PAGE_SIZE - off, pageno * PAGE_SIZE + off) != PAGE_SIZE - off) {
+ return RPMRC_FAIL;
+ }
+ if (pkgdb->dofsync && fsync(pkgdb->fd)) {
+ return RPMRC_FAIL; /* write error */
+ }
+ return RPMRC_OK;
+}
+
+/*** Blk primitives ***/
+
+static int rpmpkgZeroBlks(rpmpkgdb pkgdb, unsigned int blkoff, unsigned int blkcnt)
+{
+ unsigned char buf[65536];
+ unsigned int towrite;
+ off_t fileoff;
+
+ memset(buf, 0, sizeof(buf));
+ fileoff = (off_t)blkoff * BLK_SIZE;
+ for (towrite = blkcnt * BLK_SIZE; towrite; ) {
+ unsigned int chunk = towrite > 65536 ? 65536 : towrite;
+ if (pwrite(pkgdb->fd, buf, chunk, fileoff) != chunk) {
+ return RPMRC_FAIL; /* write error */
+ }
+ fileoff += chunk;
+ towrite -= chunk;
+ }
+ if (blkoff + blkcnt > pkgdb->fileblks)
+ pkgdb->fileblks = blkoff + blkcnt;
+ return RPMRC_OK;
+}
+
+static int rpmpkgValidateZeroCheck(rpmpkgdb pkgdb, unsigned int blkoff, unsigned int blkcnt)
+{
+ unsigned long long buf[(65536 / sizeof(unsigned long long)) + 1];
+ off_t fileoff;
+ off_t tocheck;
+ int i;
+
+ if (blkoff > pkgdb->fileblks)
+ return RPMRC_FAIL; /* huh? */
+ fileoff = (off_t)blkoff * BLK_SIZE;
+ tocheck = blkoff + blkcnt > pkgdb->fileblks ? pkgdb->fileblks - blkoff : blkcnt;
+ tocheck *= BLK_SIZE;
+ while (tocheck >= 65536) {
+ if (pread(pkgdb->fd, (void *)buf, 65536, fileoff) != 65536)
+ return RPMRC_FAIL; /* read error */
+ for (i = 0; i < 65536 / sizeof(unsigned long long); i++)
+ if (buf[i])
+ return RPMRC_FAIL; /* not empty */
+ fileoff += 65536;
+ tocheck -= 65536;
+ }
+ if (tocheck) {
+ int cnt = (int)tocheck / sizeof(unsigned long long);
+ buf[cnt++] = 0;
+ if (pread(pkgdb->fd, (void *)buf, tocheck, fileoff) != tocheck)
+ return RPMRC_FAIL; /* read error */
+ for (i = 0; i < cnt; i++)
+ if (buf[i])
+ return RPMRC_FAIL; /* not empty */
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgValidateZero(rpmpkgdb pkgdb, unsigned int blkoff, unsigned int blkcnt)
+{
+ if (rpmpkgValidateZeroCheck(pkgdb, blkoff, blkcnt) == RPMRC_OK)
+ return RPMRC_OK;
+ rpmlog(RPMLOG_WARNING, _("rpmpkg: detected non-zero blob, trying auto repair\n"));
+ /* auto-repair interrupted transactions */
+ if (rpmpkgNeighbourCheck(pkgdb, blkoff, blkcnt, &blkcnt) != RPMRC_OK)
+ return RPMRC_FAIL;
+ if (rpmpkgZeroBlks(pkgdb, blkoff, blkcnt) != RPMRC_OK)
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+}
+
+
+/*** Blob primitives ***/
+
+/* head: magic + pkgidx + timestamp + bloblen */
+/* tail: adler32 + bloblen + magic */
+
+#define BLOBHEAD_MAGIC ('B' | 'l' << 8 | 'b' << 16 | 'S' << 24)
+#define BLOBTAIL_MAGIC ('B' | 'l' << 8 | 'b' << 16 | 'E' << 24)
+
+#define BLOBHEAD_SIZE (4 + 4 + 4 + 4)
+#define BLOBTAIL_SIZE (4 + 4 + 4)
+
+static int rpmpkgReadBlob(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned int blkoff, unsigned int blkcnt, unsigned char *blob, unsigned int *bloblp, unsigned int *tstampp)
+{
+ unsigned char buf[BLOBHEAD_SIZE > BLOBTAIL_SIZE ? BLOBHEAD_SIZE : BLOBTAIL_SIZE];
+ unsigned int bloblen, toread, tstamp;
+ off_t fileoff;
+ unsigned int adl;
+ int verifyadler = bloblp ? 0 : 1;
+
+ /* sanity */
+ if (blkcnt < (BLOBHEAD_SIZE + BLOBTAIL_SIZE + BLK_SIZE - 1) / BLK_SIZE)
+ return RPMRC_FAIL; /* blkcnt too small */
+ /* read header */
+ fileoff = (off_t)blkoff * BLK_SIZE;
+ if (pread(pkgdb->fd, buf, BLOBHEAD_SIZE, fileoff) != BLOBHEAD_SIZE)
+ return RPMRC_FAIL; /* read error */
+ if (le2h(buf) != BLOBHEAD_MAGIC)
+ return RPMRC_FAIL; /* bad blob */
+ if (le2h(buf + 4) != pkgidx)
+ return RPMRC_FAIL; /* bad blob */
+ tstamp = le2h(buf + 8);
+ bloblen = le2h(buf + 12);
+ if (blkcnt != (BLOBHEAD_SIZE + bloblen + BLOBTAIL_SIZE + BLK_SIZE - 1) / BLK_SIZE)
+ return RPMRC_FAIL; /* bad blob */
+ adl = ADLER32_INIT;
+ if (verifyadler)
+ adl = update_adler32(adl, buf, BLOBHEAD_SIZE);
+ /* read in 64K chunks */
+ fileoff += BLOBHEAD_SIZE;
+ toread = blkcnt * BLK_SIZE - BLOBHEAD_SIZE;
+ if (!bloblp)
+ toread -= BLOBTAIL_SIZE;
+ while (toread) {
+ unsigned int chunk = toread > 65536 ? 65536 : toread;
+ if (pread(pkgdb->fd, blob, chunk, fileoff) != chunk) {
+ return RPMRC_FAIL; /* read error */
+ }
+ if (verifyadler) {
+ if (!bloblp)
+ adl = update_adler32(adl, blob, chunk);
+ else if (toread > BLOBTAIL_SIZE)
+ adl = update_adler32(adl, blob, toread - BLOBTAIL_SIZE > chunk ? chunk : toread - BLOBTAIL_SIZE);
+ }
+ if (bloblp)
+ blob += chunk;
+ toread -= chunk;
+ fileoff += chunk;
+ }
+ /* read trailer */
+ if (bloblp) {
+ memcpy(buf, blob - BLOBTAIL_SIZE, BLOBTAIL_SIZE);
+ } else if (pread(pkgdb->fd, buf, BLOBTAIL_SIZE, fileoff) != BLOBTAIL_SIZE) {
+ return RPMRC_FAIL; /* read error */
+ }
+ if (verifyadler && le2h(buf) != adl) {
+ return RPMRC_FAIL; /* bad blob, adler32 mismatch */
+ }
+ if (le2h(buf + 4) != bloblen) {
+ return RPMRC_FAIL; /* bad blob, bloblen mismatch */
+ }
+ if (le2h(buf + 8) != BLOBTAIL_MAGIC) {
+ return RPMRC_FAIL; /* bad blob */
+ }
+ if (bloblp)
+ *bloblp = bloblen;
+ if (tstampp)
+ *tstampp = tstamp;
+ return RPMRC_OK;
+}
+
+static int rpmpkgVerifyblob(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned int blkoff, unsigned int blkcnt)
+{
+ unsigned char buf[65536];
+ return rpmpkgReadBlob(pkgdb, pkgidx, blkoff, blkcnt, buf, 0, 0);
+}
+
+static int rpmpkgWriteBlob(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned int blkoff, unsigned int blkcnt, unsigned char *blob, unsigned int blobl, unsigned int now)
+{
+ unsigned char buf[(BLOBHEAD_SIZE > BLOBTAIL_SIZE ? BLOBHEAD_SIZE : BLOBTAIL_SIZE) + BLK_SIZE];
+ unsigned int towrite, pad;
+ unsigned int adl;
+ off_t fileoff;
+
+ /* sanity */
+ if (blkcnt < (BLOBHEAD_SIZE + BLOBTAIL_SIZE + BLK_SIZE - 1) / BLK_SIZE)
+ return RPMRC_FAIL; /* blkcnt too small */
+ if (blkcnt != (BLOBHEAD_SIZE + blobl + BLOBTAIL_SIZE + BLK_SIZE - 1) / BLK_SIZE)
+ return RPMRC_FAIL; /* blkcnt mismatch */
+ fileoff = (off_t)blkoff * BLK_SIZE;
+ h2le(BLOBHEAD_MAGIC, buf);
+ h2le(pkgidx, buf + 4);
+ h2le(now, buf + 8);
+ h2le(blobl, buf + 12);
+ if (pwrite(pkgdb->fd, buf, BLOBHEAD_SIZE, fileoff) != BLOBHEAD_SIZE) {
+ return RPMRC_FAIL; /* write error */
+ }
+ adl = ADLER32_INIT;
+ adl = update_adler32(adl, buf, BLOBHEAD_SIZE);
+ /* write in 64K chunks */
+ fileoff += BLOBHEAD_SIZE;
+ for (towrite = blobl; towrite;) {
+ unsigned int chunk = towrite > 65536 ? 65536 : towrite;
+ if (pwrite(pkgdb->fd, blob, chunk, fileoff) != chunk) {
+ return RPMRC_FAIL; /* write error */
+ }
+ adl = update_adler32(adl, blob, chunk);
+ blob += chunk;
+ towrite -= chunk;
+ fileoff += chunk;
+ }
+ /* pad if needed */
+ pad = blkcnt * BLK_SIZE - (BLOBHEAD_SIZE + blobl + BLOBTAIL_SIZE);
+ if (pad) {
+ memset(buf + (sizeof(buf) - BLOBTAIL_SIZE) - pad, 0, pad);
+ adl = update_adler32(adl, buf + (sizeof(buf) - BLOBTAIL_SIZE) - pad, pad);
+ }
+ h2le(adl, buf + (sizeof(buf) - BLOBTAIL_SIZE));
+ h2le(blobl, buf + (sizeof(buf) - BLOBTAIL_SIZE) + 4);
+ h2le(BLOBTAIL_MAGIC, buf + (sizeof(buf) - BLOBTAIL_SIZE) + 8);
+ if (pwrite(pkgdb->fd, buf + (sizeof(buf) - BLOBTAIL_SIZE) - pad, pad + BLOBTAIL_SIZE, fileoff) != pad + BLOBTAIL_SIZE) {
+ return RPMRC_FAIL; /* write error */
+ }
+ /* update file length */
+ if (blkoff + blkcnt > pkgdb->fileblks)
+ pkgdb->fileblks = blkoff + blkcnt;
+ if (pkgdb->dofsync && fsync(pkgdb->fd)) {
+ return RPMRC_FAIL; /* write error */
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgDelBlob(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned int blkoff, unsigned int blkcnt)
+{
+ if (rpmpkgVerifyblob(pkgdb, pkgidx, blkoff, blkcnt))
+ return RPMRC_FAIL;
+ if (rpmpkgZeroBlks(pkgdb, blkoff, blkcnt))
+ return RPMRC_FAIL;
+ if (pkgdb->dofsync && fsync(pkgdb->fd))
+ return RPMRC_FAIL; /* write error */
+ return RPMRC_OK;
+}
+
+
+static int rpmpkgMoveBlob(rpmpkgdb pkgdb, pkgslot *slot, unsigned int newblkoff)
+{
+ unsigned int pkgidx = slot->pkgidx;
+ unsigned int blkoff = slot->blkoff;
+ unsigned int blkcnt = slot->blkcnt;
+ unsigned char *blob;
+ unsigned int tstamp, blobl;
+
+ blob = malloc((size_t)blkcnt * BLK_SIZE);
+ if (rpmpkgReadBlob(pkgdb, pkgidx, blkoff, blkcnt, blob, &blobl, &tstamp)) {
+ free(blob);
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgWriteBlob(pkgdb, pkgidx, newblkoff, blkcnt, blob, blobl, tstamp)) {
+ free(blob);
+ return RPMRC_FAIL;
+ }
+ free(blob);
+ if (rpmpkgWriteslot(pkgdb, slot->slotno, pkgidx, newblkoff, blkcnt)) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgDelBlob(pkgdb, pkgidx, blkoff, blkcnt)) {
+ return RPMRC_FAIL;
+ }
+ slot->blkoff = newblkoff;
+ pkgdb->slotorder = SLOTORDER_UNORDERED;
+ return RPMRC_OK;
+}
+
+static int rpmpkgAddSlotPage(rpmpkgdb pkgdb)
+{
+ unsigned int cutoff;
+ if (pkgdb->slotorder != SLOTORDER_BLKOFF)
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+ cutoff = (pkgdb->slotnpages + 1) * (PAGE_SIZE / BLK_SIZE);
+
+ /* now move every blob before cutoff */
+ while (pkgdb->nslots && pkgdb->slots[0].blkoff < cutoff) {
+ unsigned int newblkoff;
+ pkgslot *slot = pkgdb->slots, *oldslot;
+
+ oldslot = 0;
+ if (rpmpkgFindEmptyOffset(pkgdb, slot->pkgidx, slot->blkcnt, &newblkoff, &oldslot, 1)) {
+ return RPMRC_FAIL;
+ }
+ if (!oldslot || oldslot != slot) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgMoveBlob(pkgdb, slot, newblkoff)) {
+ return RPMRC_FAIL;
+ }
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+ }
+
+ /* make sure our new page is empty */
+ if (rpmpkgValidateZero(pkgdb, pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE), PAGE_SIZE / BLK_SIZE)) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgWriteEmptySlotpage(pkgdb, pkgdb->slotnpages)) {
+ return RPMRC_FAIL;
+ }
+
+ /* announce free page */
+ pkgdb->freeslot = pkgdb->slotnpages * (PAGE_SIZE / SLOT_SIZE);
+ pkgdb->slotnpages++;
+ pkgdb->generation++;
+ if (rpmpkgWriteHeader(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgGetLock(rpmpkgdb pkgdb, int type)
+{
+ if (!pkgdb->fd)
+ return RPMRC_FAIL;
+ if (flock(pkgdb->fd, type))
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+}
+
+int rpmpkgLock(rpmpkgdb pkgdb, int excl)
+{
+ unsigned int *lockcntp = excl ? &pkgdb->locked_excl : &pkgdb->locked_shared;
+ if (*lockcntp > 0 || (!excl && pkgdb->locked_excl)) {
+ (*lockcntp)++;
+ return RPMRC_OK;
+ }
+ pkgdb->header_ok = 0;
+ if (rpmpkgGetLock(pkgdb, excl ? LOCK_EX : LOCK_SH)) {
+ return RPMRC_FAIL;
+ }
+ (*lockcntp)++;
+ return RPMRC_OK;
+}
+
+static int rpmpkgLockInternal(rpmpkgdb pkgdb, int excl)
+{
+ if (excl && pkgdb->rdonly)
+ return RPMRC_FAIL;
+
+ return rpmpkgLock(pkgdb, excl);
+}
+
+int rpmpkgUnlock(rpmpkgdb pkgdb, int excl)
+{
+ unsigned int *lockcntp = excl ? &pkgdb->locked_excl : &pkgdb->locked_shared;
+ if (*lockcntp == 0) {
+ return RPMRC_FAIL;
+ }
+ if (*lockcntp > 1 || (!excl && pkgdb->locked_excl)) {
+ (*lockcntp)--;
+ return RPMRC_OK;
+ }
+ if (excl && pkgdb->locked_shared) {
+ /* excl -> shared switch */
+ if (rpmpkgGetLock(pkgdb, LOCK_SH)) {
+ return RPMRC_FAIL;
+ }
+ (*lockcntp)--;
+ return RPMRC_OK;
+ }
+ flock(pkgdb->fd, LOCK_UN);
+ (*lockcntp)--;
+ pkgdb->header_ok = 0;
+ return RPMRC_OK;
+}
+
+static int rpmpkgLockReadHeader(rpmpkgdb pkgdb, int excl)
+{
+ if (rpmpkgLockInternal(pkgdb, excl))
+ return RPMRC_FAIL;
+ if (rpmpkgReadHeader(pkgdb)) {
+ rpmpkgUnlock(pkgdb, excl);
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgInitInternal(rpmpkgdb pkgdb)
+{
+ struct stat stb;
+ if (fstat(pkgdb->fd, &stb)) {
+ return RPMRC_FAIL;
+ }
+ if (stb.st_size == 0) {
+ if (rpmpkgWriteEmptySlotpage(pkgdb, 0)) {
+ return RPMRC_FAIL;
+ }
+ pkgdb->slotnpages = 1;
+ if (!pkgdb->nextpkgidx)
+ pkgdb->nextpkgidx = 1;
+ pkgdb->generation++;
+ if (rpmpkgWriteHeader(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgInit(rpmpkgdb pkgdb)
+{
+ int rc;
+
+ if (rpmpkgLockInternal(pkgdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmpkgInitInternal(pkgdb);
+ rpmpkgUnlock(pkgdb, 1);
+ return rc;
+}
+
+int rpmpkgOpen(rpmpkgdb *pkgdbp, const char *filename, int flags, int mode)
+{
+ struct stat stb;
+ rpmpkgdb pkgdb;
+
+ *pkgdbp = 0;
+ pkgdb = calloc(1, sizeof(*pkgdb));
+ pkgdb->filename = strdup(filename);
+ if (!pkgdb->filename) {
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+ if ((flags & (O_RDONLY|O_RDWR)) == O_RDONLY)
+ pkgdb->rdonly = 1;
+ if ((pkgdb->fd = open(filename, flags, mode)) == -1) {
+ free(pkgdb->filename);
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+ if (flags & O_CREAT) {
+ char *filenameCopy;
+ DIR *pdir;
+
+ if ((filenameCopy = strdup(pkgdb->filename)) == NULL) {
+ close(pkgdb->fd);
+ free(pkgdb->filename);
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+
+ if ((pdir = opendir(dirname(filenameCopy))) == NULL) {
+ free(filenameCopy);
+ close(pkgdb->fd);
+ free(pkgdb->filename);
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+
+ if (fsync(dirfd(pdir)) == -1) {
+ closedir(pdir);
+ free(filenameCopy);
+ close(pkgdb->fd);
+ free(pkgdb->filename);
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+ closedir(pdir);
+ free(filenameCopy);
+
+ }
+ if (fstat(pkgdb->fd, &stb)) {
+ close(pkgdb->fd);
+ free(pkgdb->filename);
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+ if (stb.st_size == 0) {
+ if (rpmpkgInit(pkgdb)) {
+ close(pkgdb->fd);
+ free(pkgdb->filename);
+ free(pkgdb);
+ return RPMRC_FAIL;
+ }
+ }
+ pkgdb->flags = flags;
+ pkgdb->mode = mode;
+ pkgdb->dofsync = 1;
+ *pkgdbp = pkgdb;
+ return RPMRC_OK;
+}
+
+void rpmpkgClose(rpmpkgdb pkgdb)
+{
+ if (pkgdb->fd >= 0) {
+ close(pkgdb->fd);
+ pkgdb->fd = -1;
+ }
+ if (pkgdb->slots)
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ if (pkgdb->slothash)
+ free(pkgdb->slothash);
+ pkgdb->slothash = 0;
+ free(pkgdb->filename);
+ free(pkgdb);
+}
+
+void rpmpkgSetFsync(rpmpkgdb pkgdb, int dofsync)
+{
+ pkgdb->dofsync = dofsync;
+}
+
+
+static int rpmpkgGetInternal(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned char **blobp, unsigned int *bloblp)
+{
+ pkgslot *slot;
+ unsigned char *blob;
+
+ if (!pkgdb->slots && rpmpkgReadSlots(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ slot = rpmpkgFindSlot(pkgdb, pkgidx);
+ if (!slot) {
+ return RPMRC_NOTFOUND;
+ }
+ blob = malloc((size_t)slot->blkcnt * BLK_SIZE);
+ if (rpmpkgReadBlob(pkgdb, pkgidx, slot->blkoff, slot->blkcnt, blob, bloblp, (unsigned int *)0)) {
+ free(blob);
+ return RPMRC_FAIL;
+ }
+ *blobp = blob;
+ return RPMRC_OK;
+}
+
+static int rpmpkgPutInternal(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned char *blob, unsigned int blobl)
+{
+ unsigned int blkcnt, blkoff, slotno;
+ pkgslot *oldslot;
+
+ /* we always read all slots when writing, just in case */
+ if (rpmpkgReadSlots(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ blkcnt = (BLOBHEAD_SIZE + blobl + BLOBTAIL_SIZE + BLK_SIZE - 1) / BLK_SIZE;
+ /* find a nice place for the blob */
+ if (rpmpkgFindEmptyOffset(pkgdb, pkgidx, blkcnt, &blkoff, &oldslot, 0)) {
+ return RPMRC_FAIL;
+ }
+ /* create new slot page if we don't have a free slot and can't reuse an old one */
+ if (!oldslot && !pkgdb->freeslot) {
+ if (rpmpkgAddSlotPage(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ /* redo rpmpkgFindEmptyOffset to get another free area */
+ if (rpmpkgFindEmptyOffset(pkgdb, pkgidx, blkcnt, &blkoff, &oldslot, 0)) {
+ return RPMRC_FAIL;
+ }
+ }
+ /* make sure that we don't overwrite data */
+ if (rpmpkgValidateZero(pkgdb, blkoff, blkcnt)) {
+ return RPMRC_FAIL;
+ }
+ /* write new blob */
+ if (rpmpkgWriteBlob(pkgdb, pkgidx, blkoff, blkcnt, blob, blobl, (unsigned int)time(0))) {
+ return RPMRC_FAIL;
+ }
+ /* write slot */
+ slotno = oldslot ? oldslot->slotno : pkgdb->freeslot;
+ if (!slotno) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgWriteslot(pkgdb, slotno, pkgidx, blkoff, blkcnt)) {
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ return RPMRC_FAIL;
+ }
+ /* erase old blob */
+ if (oldslot && oldslot->blkoff) {
+ if (rpmpkgDelBlob(pkgdb, pkgidx, oldslot->blkoff, oldslot->blkcnt)) {
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ return RPMRC_FAIL;
+ }
+ }
+ if (oldslot) {
+ /* just update the slot, no need to free the slot data */
+ oldslot->blkoff = blkoff;
+ oldslot->blkcnt = blkcnt;
+ pkgdb->slotorder = SLOTORDER_UNORDERED;
+ } else {
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmpkgDelInternal(rpmpkgdb pkgdb, unsigned int pkgidx)
+{
+ pkgslot *slot;
+ unsigned int blkoff, blkcnt;
+
+ /* we always read all slots when writing, just in case */
+ if (rpmpkgReadSlots(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+ slot = rpmpkgFindSlot(pkgdb, pkgidx);
+ if (!slot) {
+ return RPMRC_OK;
+ }
+ if (rpmpkgWriteslot(pkgdb, slot->slotno, 0, 0, 0)) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgDelBlob(pkgdb, pkgidx, slot->blkoff, slot->blkcnt)) {
+ return RPMRC_FAIL;
+ }
+ if (pkgdb->nslots > 1 && slot->blkoff < pkgdb->fileblks / 2) {
+ /* we freed a blob in the first half of our data. do some extra work */
+ int i;
+ if (slot == pkgdb->slots) {
+ blkoff = pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE);
+ } else {
+ blkoff = slot[-1].blkoff + slot[-1].blkcnt;
+ }
+ if (slot < pkgdb->slots + pkgdb->nslots - 1) {
+ blkcnt = slot[1].blkoff - blkoff;
+ } else {
+ blkcnt = slot->blkoff + slot->blkcnt - blkoff;
+ }
+ slot->blkoff = 0;
+ slot->blkcnt = 0;
+ slot = pkgdb->slots + pkgdb->nslots - 2;
+ if (slot->blkcnt < slot[1].blkcnt)
+ slot++; /* bigger slot first */
+ for (i = 0; i < 2; i++, slot++) {
+ if (slot == pkgdb->slots + pkgdb->nslots)
+ slot -= 2;
+ if (!slot->blkoff || slot->blkoff < blkoff)
+ continue;
+ if (slot->blkoff < pkgdb->fileblks / 2)
+ continue;
+ if (slot->blkcnt > blkcnt)
+ continue;
+ rpmpkgMoveBlob(pkgdb, slot, blkoff);
+ blkoff += slot->blkcnt;
+ blkcnt -= slot->blkcnt;
+ }
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+ } else {
+ slot->blkoff = 0;
+ slot->blkcnt = 0;
+ }
+ /* check if we can truncate the file */
+ slot = pkgdb->slots + pkgdb->nslots - 1;
+ if (!slot->blkoff && pkgdb->nslots > 1) {
+ slot--;
+ }
+ if (slot->blkoff)
+ blkoff = slot->blkoff + slot->blkcnt;
+ else
+ blkoff = pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE);
+ if (blkoff < pkgdb->fileblks / 4 * 3) {
+ /* truncate the file */
+ if (!rpmpkgValidateZero(pkgdb, blkoff, pkgdb->fileblks - blkoff)) {
+ if (!ftruncate(pkgdb->fd, blkoff * BLK_SIZE)) {
+ pkgdb->fileblks = blkoff;
+ }
+ }
+ }
+ free(pkgdb->slots);
+ pkgdb->slots = 0;
+ return RPMRC_OK;
+}
+
+static int rpmpkgListInternal(rpmpkgdb pkgdb, unsigned int **pkgidxlistp, unsigned int *npkgidxlistp)
+{
+ unsigned int i, nslots, *pkgidxlist;
+ pkgslot *slot;
+
+ if (!pkgdb->slots && rpmpkgReadSlots(pkgdb)) {
+ return RPMRC_FAIL;
+ }
+ if (!pkgidxlistp) {
+ *npkgidxlistp = pkgdb->nslots;
+ return RPMRC_OK;
+ }
+ rpmpkgOrderSlots(pkgdb, SLOTORDER_BLKOFF);
+ nslots = pkgdb->nslots;
+ pkgidxlist = calloc(nslots + 1, sizeof(unsigned int));
+ for (i = 0, slot = pkgdb->slots; i < nslots; i++, slot++) {
+ pkgidxlist[i] = slot->pkgidx;
+ }
+ *pkgidxlistp = pkgidxlist;
+ *npkgidxlistp = nslots;
+ return RPMRC_OK;
+}
+
+int rpmpkgGet(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned char **blobp, unsigned int *bloblp)
+{
+ int rc;
+
+ *blobp = 0;
+ *bloblp = 0;
+ if (!pkgidx)
+ return RPMRC_FAIL;
+ if (rpmpkgLockReadHeader(pkgdb, 0))
+ return RPMRC_FAIL;
+ rc = rpmpkgGetInternal(pkgdb, pkgidx, blobp, bloblp);
+ rpmpkgUnlock(pkgdb, 0);
+#ifdef RPMPKG_LZO
+ if (!rc)
+ rc = rpmpkgLZODecompress(blobp, bloblp);
+#endif
+ return rc;
+}
+
+int rpmpkgPut(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned char *blob, unsigned int blobl)
+{
+ int rc;
+
+ if (!pkgidx) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgLockReadHeader(pkgdb, 1))
+ return RPMRC_FAIL;
+#ifdef RPMPKG_LZO
+ if (rpmpkgLZOCompress(&blob, &blobl)) {
+ rpmpkgUnlock(pkgdb, 1);
+ return RPMRC_FAIL;
+ }
+#endif
+ rc = rpmpkgPutInternal(pkgdb, pkgidx, blob, blobl);
+#ifdef RPMPKG_LZO
+ free(blob);
+#endif
+ rpmpkgUnlock(pkgdb, 1);
+ return rc;
+}
+
+int rpmpkgDel(rpmpkgdb pkgdb, unsigned int pkgidx)
+{
+ int rc;
+
+ if (!pkgidx) {
+ return RPMRC_FAIL;
+ }
+ if (rpmpkgLockReadHeader(pkgdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmpkgDelInternal(pkgdb, pkgidx);
+ rpmpkgUnlock(pkgdb, 1);
+ return rc;
+}
+
+int rpmpkgList(rpmpkgdb pkgdb, unsigned int **pkgidxlistp, unsigned int *npkgidxlistp)
+{
+ int rc;
+ if (pkgidxlistp)
+ *pkgidxlistp = 0;
+ *npkgidxlistp = 0;
+ if (rpmpkgLockReadHeader(pkgdb, 0))
+ return RPMRC_FAIL;
+ rc = rpmpkgListInternal(pkgdb, pkgidxlistp, npkgidxlistp);
+ rpmpkgUnlock(pkgdb, 0);
+ return rc;
+}
+
+int rpmpkgNextPkgIdx(rpmpkgdb pkgdb, unsigned int *pkgidxp)
+{
+ if (rpmpkgLockReadHeader(pkgdb, 1))
+ return RPMRC_FAIL;
+ *pkgidxp = pkgdb->nextpkgidx++;
+ if (rpmpkgWriteHeader(pkgdb)) {
+ rpmpkgUnlock(pkgdb, 1);
+ return RPMRC_FAIL;
+ }
+ /* no fsync needed. also no need to increase the generation count,
+ * as the header is always read in */
+ rpmpkgUnlock(pkgdb, 1);
+ return RPMRC_OK;
+}
+
+int rpmpkgGeneration(rpmpkgdb pkgdb, unsigned int *generationp)
+{
+ if (rpmpkgLockReadHeader(pkgdb, 0))
+ return RPMRC_FAIL;
+ *generationp = pkgdb->generation;
+ rpmpkgUnlock(pkgdb, 0);
+ return RPMRC_OK;
+}
+
+int rpmpkgStats(rpmpkgdb pkgdb)
+{
+ unsigned int usedblks = 0;
+ int i;
+
+ if (rpmpkgLockReadHeader(pkgdb, 0))
+ return RPMRC_FAIL;
+ if (rpmpkgReadSlots(pkgdb)) {
+ rpmpkgUnlock(pkgdb, 0);
+ return RPMRC_FAIL;
+ }
+ for (i = 0; i < pkgdb->nslots; i++)
+ usedblks += pkgdb->slots[i].blkcnt;
+ printf("--- Package DB Stats\n");
+ printf("Filename: %s\n", pkgdb->filename);
+ printf("Generation: %d\n", pkgdb->generation);
+ printf("Slot pages: %d\n", pkgdb->slotnpages);
+ printf("Used slots: %d\n", pkgdb->nslots);
+ printf("Free slots: %d\n", pkgdb->slotnpages * (PAGE_SIZE / SLOT_SIZE) - pkgdb->nslots);
+ printf("Blob area size: %d\n", (pkgdb->fileblks - pkgdb->slotnpages * (PAGE_SIZE / BLK_SIZE)) * BLK_SIZE);
+ printf("Blob area used: %d\n", usedblks * BLK_SIZE);
+ rpmpkgUnlock(pkgdb, 0);
+ return RPMRC_OK;
+}
+
+#ifdef RPMPKG_LZO
+
+#include "lzo/lzoconf.h"
+#include "lzo/lzo1x.h"
+
+#define BLOBLZO_MAGIC ('L' | 'Z' << 8 | 'O' << 16 | 'B' << 24)
+
+static int rpmpkgLZOCompress(unsigned char **blobp, unsigned int *bloblp)
+{
+ unsigned char *blob = *blobp;
+ unsigned int blobl = *bloblp;
+ unsigned char *lzoblob, *workmem;
+ unsigned int lzoblobl;
+ lzo_uint blobl2;
+
+ if (lzo_init() != LZO_E_OK) {
+ return RPMRC_FAIL;
+ }
+ workmem = malloc(LZO1X_1_MEM_COMPRESS);
+ if (!workmem) {
+ return RPMRC_FAIL;
+ }
+ lzoblobl = 4 + 4 + blobl + blobl / 16 + 64 + 3;
+ lzoblob = malloc(lzoblobl);
+ if (!lzoblob) {
+ free(workmem);
+ return RPMRC_FAIL;
+ }
+ h2le(BLOBLZO_MAGIC, lzoblob);
+ h2le(blobl, lzoblob + 4);
+ if (lzo1x_1_compress(blob, blobl, lzoblob + 8, &blobl2, workmem) != LZO_E_OK) {
+ free(workmem);
+ free(lzoblob);
+ return RPMRC_FAIL;
+ }
+ free(workmem);
+ *blobp = lzoblob;
+ *bloblp = 8 + blobl2;
+ return RPMRC_OK;
+}
+
+static int rpmpkgLZODecompress(unsigned char **blobp, unsigned int *bloblp)
+{
+ unsigned char *lzoblob = *blobp;
+ unsigned int lzoblobl = *bloblp;
+ unsigned char *blob;
+ unsigned int blobl;
+ lzo_uint blobl2;
+
+ if (!lzoblob || lzoblobl < 8)
+ return RPMRC_FAIL;
+ if (le2h(lzoblob) != BLOBLZO_MAGIC)
+ return RPMRC_FAIL;
+ if (lzo_init() != LZO_E_OK)
+ return RPMRC_FAIL;
+ blobl = le2h(lzoblob + 4);
+ blob = malloc(blobl ? blobl : 1);
+ if (!blob)
+ return RPMRC_FAIL;
+ if (lzo1x_decompress(lzoblob + 8, lzoblobl - 8, blob, &blobl2, 0) != LZO_E_OK || blobl2 != blobl) {
+ free(blob);
+ return RPMRC_FAIL;
+ }
+ free(lzoblob);
+ *blobp = blob;
+ *bloblp = blobl;
+ return RPMRC_OK;
+}
+
+#endif
diff --git a/lib/backend/ndb/rpmpkg.h b/lib/backend/ndb/rpmpkg.h
new file mode 100644
index 000000000..7e5d0c67e
--- /dev/null
+++ b/lib/backend/ndb/rpmpkg.h
@@ -0,0 +1,20 @@
+struct rpmpkgdb_s;
+typedef struct rpmpkgdb_s *rpmpkgdb;
+
+int rpmpkgOpen(rpmpkgdb *pkgdbp, const char *filename, int flags, int mode);
+void rpmpkgClose(rpmpkgdb pkgdbp);
+void rpmpkgSetFsync(rpmpkgdb pkgdbp, int dofsync);
+
+int rpmpkgLock(rpmpkgdb pkgdb, int excl);
+int rpmpkgUnlock(rpmpkgdb pkgdb, int excl);
+
+int rpmpkgGet(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned char **blobp, unsigned int *bloblp);
+int rpmpkgPut(rpmpkgdb pkgdb, unsigned int pkgidx, unsigned char *blob, unsigned int blobl);
+int rpmpkgDel(rpmpkgdb pkgdb, unsigned int pkgidx);
+int rpmpkgList(rpmpkgdb pkgdb, unsigned int **pkgidxlistp, unsigned int *npkgidxlistp);
+
+int rpmpkgNextPkgIdx(rpmpkgdb pkgdb, unsigned int *pkgidxp);
+int rpmpkgGeneration(rpmpkgdb pkgdb, unsigned int *generationp);
+
+int rpmpkgStats(rpmpkgdb pkgdb);
+
diff --git a/lib/backend/ndb/rpmxdb.c b/lib/backend/ndb/rpmxdb.c
new file mode 100644
index 000000000..55cc197b3
--- /dev/null
+++ b/lib/backend/ndb/rpmxdb.c
@@ -0,0 +1,1221 @@
+#define _GNU_SOURCE
+
+#include "system.h"
+
+#include <rpm/rpmlog.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/file.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <endian.h>
+#include <libgen.h>
+
+#include "rpmxdb.h"
+
+#define RPMRC_OK 0
+#define RPMRC_NOTFOUND 1
+#define RPMRC_FAIL 2
+
+typedef struct rpmxdb_s {
+ rpmpkgdb pkgdb; /* master database */
+ char *filename;
+ int fd;
+ int flags;
+ int mode;
+ int rdonly;
+ unsigned int pagesize;
+ unsigned int generation;
+ unsigned int slotnpages;
+ unsigned int usergeneration;
+
+ unsigned char *mapped;
+ unsigned int mappedlen;
+
+ struct xdb_slot {
+ unsigned int slotno;
+ unsigned int blobtag;
+ unsigned int subtag;
+ unsigned char *mapped;
+ int mapflags;
+ unsigned int startpage;
+ unsigned int pagecnt;
+ void (*mapcallback)(rpmxdb xdb, void *data, void *newaddr, size_t newsize);
+ void *mapcallbackdata;
+ unsigned int next;
+ unsigned int prev;
+ } *slots;
+ unsigned int nslots;
+ unsigned int firstfree;
+ unsigned int usedblobpages;
+ unsigned int systempagesize;
+ int dofsync;
+} *rpmxdb;
+
+
+static inline void h2le(unsigned int x, unsigned char *p)
+{
+ p[0] = x;
+ p[1] = x >> 8;
+ p[2] = x >> 16;
+ p[3] = x >> 24;
+}
+
+/* aligned versions */
+static inline unsigned int le2ha(unsigned char *p)
+{
+ unsigned int x = *(unsigned int *)p;
+ return le32toh(x);
+}
+
+static inline void h2lea(unsigned int x, unsigned char *p)
+{
+ *(unsigned int *)p = htole32(x);
+}
+
+
+#define XDB_MAGIC ('R' | 'p' << 8 | 'm' << 16 | 'X' << 24)
+#define XDB_VERSION 0
+
+#define XDB_OFFSET_MAGIC 0
+#define XDB_OFFSET_VERSION 4
+#define XDB_OFFSET_GENERATION 8
+#define XDB_OFFSET_SLOTNPAGES 12
+#define XDB_OFFSET_PAGESIZE 16
+#define XDB_OFFSET_USERGENERATION 20
+
+/* must be multiple of SLOT_SIZE */
+#define XDB_HEADER_SIZE 32
+
+#define SLOT_MAGIC ('S' | 'l' << 8 | 'o' << 16)
+
+#define SLOT_SIZE 16
+#define SLOT_START (XDB_HEADER_SIZE / SLOT_SIZE)
+
+static void rpmxdbUnmap(rpmxdb xdb)
+{
+ munmap(xdb->mapped, xdb->mappedlen);
+ xdb->mapped = 0;
+ xdb->mappedlen = 0;
+}
+
+/* slot mapping functions */
+static int mapslot(rpmxdb xdb, struct xdb_slot *slot)
+{
+ void *mapped;
+ size_t off, size, shift;
+
+ if (slot->mapped)
+ return RPMRC_FAIL;
+ size = slot->pagecnt * xdb->pagesize;
+ off = slot->startpage * xdb->pagesize;
+ shift = 0;
+ if (xdb->pagesize != xdb->systempagesize) {
+ shift = off & (xdb->systempagesize - 1);
+ off -= shift;
+ size += shift;
+ size = (size + xdb->systempagesize - 1) & ~(xdb->systempagesize - 1);
+ }
+ mapped = mmap(0, size, slot->mapflags, MAP_SHARED, xdb->fd, off);
+ if (mapped == MAP_FAILED)
+ return RPMRC_FAIL;
+ slot->mapped = (unsigned char *)mapped + shift;
+ return RPMRC_OK;
+}
+
+static void unmapslot(rpmxdb xdb, struct xdb_slot *slot)
+{
+ size_t size;
+ unsigned char *mapped = slot->mapped;
+ if (!mapped)
+ return;
+ size = slot->pagecnt * xdb->pagesize;
+ if (xdb->pagesize != xdb->systempagesize) {
+ size_t off = slot->startpage * xdb->pagesize;
+ size_t shift = off & (xdb->systempagesize - 1);
+ mapped -= shift;
+ size += shift;
+ size = (size + xdb->systempagesize - 1) & ~(xdb->systempagesize - 1);
+ }
+ munmap(mapped, size);
+ slot->mapped = 0;
+}
+
+static int remapslot(rpmxdb xdb, struct xdb_slot *slot, unsigned int newpagecnt)
+{
+ void *mapped;
+ size_t off, oldsize, newsize, shift;
+ oldsize = slot->pagecnt * xdb->pagesize;
+ newsize = newpagecnt * xdb->pagesize;
+ off = slot->startpage * xdb->pagesize;
+ shift = 0;
+ if (xdb->pagesize != xdb->systempagesize) {
+ off = slot->startpage * xdb->pagesize;
+ shift = off & (xdb->systempagesize - 1);
+ off -= shift;
+ oldsize += shift;
+ oldsize = (oldsize + xdb->systempagesize - 1) & ~(xdb->systempagesize - 1);
+ newsize += shift;
+ newsize = (newsize + xdb->systempagesize - 1) & ~(xdb->systempagesize - 1);
+ }
+ if (slot->mapped)
+ mapped = mremap(slot->mapped - shift, oldsize, newsize, MREMAP_MAYMOVE);
+ else
+ mapped = mmap(0, newsize, slot->mapflags, MAP_SHARED, xdb->fd, off);
+ if (mapped == MAP_FAILED)
+ return RPMRC_FAIL;
+ slot->mapped = (unsigned char *)mapped + shift;
+ slot->pagecnt = newpagecnt;
+ return RPMRC_OK;
+}
+
+
+static int usedslots_cmp(const void *a, const void *b)
+{
+ struct xdb_slot *sa = *(struct xdb_slot **)a;
+ struct xdb_slot *sb = *(struct xdb_slot **)b;
+ if (sa->startpage == sb->startpage) {
+ return sa->pagecnt > sb->pagecnt ? 1 : sa->pagecnt < sb->pagecnt ? -1 : 0;
+ }
+ return sa->startpage > sb->startpage ? 1 : -1;
+}
+
+static int rpmxdbReadHeader(rpmxdb xdb)
+{
+ struct xdb_slot *slot;
+ unsigned int header[XDB_HEADER_SIZE / sizeof(unsigned int)];
+ unsigned int slotnpages, pagesize, generation, usergeneration, version;
+ unsigned int page, *lastfreep;
+ unsigned char *pageptr;
+ struct xdb_slot *slots, **usedslots, *lastslot;
+ unsigned int nslots;
+ unsigned int usedblobpages;
+ int i, nused, slotno;
+ struct stat stb;
+ size_t mapsize;
+
+ if (xdb->mapped) {
+ if (le2ha(xdb->mapped + XDB_OFFSET_GENERATION) == xdb->generation) {
+ return RPMRC_OK;
+ }
+ rpmxdbUnmap(xdb);
+ }
+ if (fstat(xdb->fd, &stb)) {
+ return RPMRC_FAIL;
+ }
+ if (pread(xdb->fd, header, sizeof(header), 0) != sizeof(header)) {
+ return RPMRC_FAIL;
+ }
+ if (le2ha((unsigned char *)header + XDB_OFFSET_MAGIC) != XDB_MAGIC)
+ return RPMRC_FAIL;
+ version = le2ha((unsigned char *)header + XDB_OFFSET_VERSION);
+ if (version != XDB_VERSION) {
+ rpmlog(RPMLOG_ERR, _("rpmxdb: Version mismatch. Expected version: %u. "
+ "Found version: %u\n"), XDB_VERSION, version);
+ return RPMRC_FAIL;
+ }
+
+ generation = le2ha((unsigned char *)header + XDB_OFFSET_GENERATION);
+ slotnpages = le2ha((unsigned char *)header + XDB_OFFSET_SLOTNPAGES);
+ pagesize = le2ha((unsigned char *)header + XDB_OFFSET_PAGESIZE);
+ usergeneration = le2ha((unsigned char *)header + XDB_OFFSET_USERGENERATION);
+ if (!slotnpages || !pagesize || stb.st_size % pagesize != 0)
+ return RPMRC_FAIL;
+ xdb->pagesize = pagesize;
+
+ /* round up */
+ mapsize = slotnpages * pagesize;
+ mapsize = (mapsize + xdb->systempagesize - 1) & ~(xdb->systempagesize - 1);
+ xdb->mapped = mmap(0, mapsize, xdb->rdonly ? PROT_READ : PROT_READ | PROT_WRITE, MAP_SHARED, xdb->fd, 0);
+ if ((void *)xdb->mapped == MAP_FAILED) {
+ xdb->mapped = 0;
+ return RPMRC_FAIL;
+ }
+ xdb->mappedlen = mapsize;
+
+ /* read in all slots */
+ xdb->firstfree = 0;
+ nslots = slotnpages * (pagesize / SLOT_SIZE) - SLOT_START + 1;
+ slots = calloc(nslots + 1, sizeof(struct xdb_slot));
+ if (!slots) {
+ rpmxdbUnmap(xdb);
+ return RPMRC_FAIL;
+ }
+ usedslots = calloc(nslots + 1, sizeof(int));
+ if (!usedslots) {
+ rpmxdbUnmap(xdb);
+ free(slots);
+ return RPMRC_FAIL;
+ }
+ nused = 0;
+ slotno = 1;
+ slot = slots + 1;
+ usedblobpages = 0;
+ lastfreep = &xdb->firstfree;
+ for (page = 0, pageptr = xdb->mapped; page < slotnpages; page++, pageptr += pagesize) {
+ unsigned int o;
+ for (o = page ? 0 : SLOT_START * SLOT_SIZE; o < pagesize; o += SLOT_SIZE, slotno++, slot++) {
+ unsigned char *pp = pageptr + o;
+ slot->slotno = slotno;
+ slot->subtag = le2ha(pp);
+ if ((slot->subtag & 0x00ffffff) != SLOT_MAGIC) {
+ free(slots);
+ free(usedslots);
+ rpmxdbUnmap(xdb);
+ return RPMRC_FAIL;
+ }
+ slot->subtag = (slot->subtag >> 24) & 255;
+ slot->blobtag = le2ha(pp + 4);
+ slot->startpage = le2ha(pp + 8);
+ slot->pagecnt = le2ha(pp + 12);
+ if (slot->pagecnt == 0 && slot->startpage) /* empty but used slot? */
+ slot->startpage = slotnpages;
+ if (!slot->startpage) {
+ *lastfreep = slotno;
+ lastfreep = &slot->next;
+ } else {
+ usedslots[nused++] = slot;
+ usedblobpages += slot->pagecnt;
+ }
+ }
+ }
+ if (nused > 1) {
+ qsort(usedslots, nused, sizeof(*usedslots), usedslots_cmp);
+ }
+ /* now chain em */
+ slots[0].pagecnt = slotnpages;
+ lastslot = slots;
+ for (i = 0; i < nused; i++, lastslot = slot) {
+ slot = usedslots[i];
+ if (lastslot->startpage + lastslot->pagecnt > slot->startpage) {
+ free(slots);
+ free(usedslots);
+ rpmxdbUnmap(xdb);
+ return RPMRC_FAIL;
+ }
+ lastslot->next = slot->slotno;
+ slot->prev = lastslot->slotno;
+ }
+ lastslot->next = nslots;
+ slots[nslots].slotno = nslots;
+ slots[nslots].prev = lastslot->slotno;
+ slots[nslots].startpage = stb.st_size / pagesize;
+ free(usedslots);
+ /* now sync with the old slot data */
+ if (xdb->slots) {
+ for (i = 1, slot = xdb->slots + i; i < xdb->nslots; i++, slot++) {
+ if (slot->startpage && (slot->mapped || slot->mapcallback)) {
+ struct xdb_slot *nslot;
+ if (i >= nslots || !slots[i].startpage || slots[i].blobtag != slot->blobtag || slots[i].subtag != slot->subtag) {
+ /* slot is gone */
+ if (slot->mapped) {
+ unmapslot(xdb, slot);
+ slot->mapcallback(xdb, slot->mapcallbackdata, 0, 0);
+ }
+ continue;
+ }
+ nslot = slots + i;
+ if (slot->mapcallback) {
+ nslot->mapflags = slot->mapflags;
+ nslot->mapcallback = slot->mapcallback;
+ nslot->mapcallbackdata = slot->mapcallbackdata;
+ }
+ if (slot->startpage != nslot->startpage || slot->pagecnt != nslot->pagecnt) {
+ /* slot moved or was resized */
+ if (slot->mapped)
+ unmapslot(xdb, slot);
+ if (nslot->mapcallback) {
+ if (nslot->pagecnt) {
+ mapslot(xdb, nslot);
+ nslot->mapcallback(xdb, nslot->mapcallbackdata, nslot->mapped, nslot->mapped ? nslot->pagecnt * xdb->pagesize : 0);
+ } else {
+ nslot->mapcallback(xdb, nslot->mapcallbackdata, 0, 0);
+ }
+ }
+ }
+ }
+ }
+ free(xdb->slots);
+ }
+ xdb->slots = slots;
+ xdb->nslots = nslots;
+ xdb->generation = generation;
+ xdb->slotnpages = slotnpages;
+ xdb->usergeneration = usergeneration;
+ xdb->usedblobpages = usedblobpages;
+ return RPMRC_OK;
+}
+
+static int rpmxdbWriteHeader(rpmxdb xdb)
+{
+ if (!xdb->mapped)
+ return RPMRC_FAIL;
+ h2lea(XDB_MAGIC, xdb->mapped + XDB_OFFSET_MAGIC);
+ h2lea(XDB_VERSION, xdb->mapped + XDB_OFFSET_VERSION);
+ h2lea(xdb->generation, xdb->mapped + XDB_OFFSET_GENERATION);
+ h2lea(xdb->slotnpages, xdb->mapped + XDB_OFFSET_SLOTNPAGES);
+ h2lea(xdb->pagesize, xdb->mapped + XDB_OFFSET_PAGESIZE);
+ h2lea(xdb->usergeneration, xdb->mapped + XDB_OFFSET_USERGENERATION);
+ return RPMRC_OK;
+}
+
+static void rpmxdbUpdateSlot(rpmxdb xdb, struct xdb_slot *slot)
+{
+ unsigned char *pp = xdb->mapped + (SLOT_START - 1 + slot->slotno) * SLOT_SIZE;
+ h2lea(SLOT_MAGIC | (slot->subtag << 24), pp);
+ h2lea(slot->blobtag, pp + 4);
+ if (slot->pagecnt || !slot->startpage)
+ h2lea(slot->startpage, pp + 8);
+ else
+ h2lea(1, pp + 8); /* "empty but used" blobs always start at 1 */
+ h2lea(slot->pagecnt, pp + 12);
+ xdb->generation++;
+ h2lea(xdb->generation, xdb->mapped + XDB_OFFSET_GENERATION);
+}
+
+static int rpmxdbWriteEmptyPages(rpmxdb xdb, unsigned int pageno, unsigned int count)
+{
+ unsigned char *page;
+ if (!count)
+ return RPMRC_OK;
+ page = malloc(xdb->pagesize);
+ if (!page)
+ return RPMRC_FAIL;
+ memset(page, 0, xdb->pagesize);
+ for (; count; count--, pageno++) {
+ if (pwrite(xdb->fd, page, xdb->pagesize, pageno * xdb->pagesize) != xdb->pagesize) {
+ free(page);
+ return RPMRC_FAIL;
+ }
+ }
+ free(page);
+ return RPMRC_OK;
+}
+
+static int rpmxdbWriteEmptySlotpage(rpmxdb xdb, int pageno)
+{
+ unsigned char *page;
+ int i, spp;
+ page = malloc(xdb->pagesize);
+ if (!page)
+ return RPMRC_FAIL;
+ memset(page, 0, xdb->pagesize);
+ spp = xdb->pagesize / SLOT_SIZE; /* slots per page */
+ for (i = pageno ? 0 : SLOT_START; i < spp; i++)
+ h2le(SLOT_MAGIC, page + i * SLOT_SIZE);
+ if (!pageno) {
+ /* only used when called from InitInternal */
+ if (xdb->mapped) {
+ free(page);
+ return RPMRC_FAIL;
+ }
+ xdb->mapped = page;
+ rpmxdbWriteHeader(xdb);
+ xdb->mapped = 0;
+ }
+ if (pwrite(xdb->fd, page, xdb->pagesize, pageno * xdb->pagesize) != xdb->pagesize) {
+ free(page);
+ return RPMRC_FAIL;
+ }
+ free(page);
+ return RPMRC_OK;
+}
+
+static int rpmxdbInitInternal(rpmxdb xdb)
+{
+ struct stat stb;
+ if (fstat(xdb->fd, &stb)) {
+ return RPMRC_FAIL;
+ }
+ if (stb.st_size == 0) {
+ xdb->slotnpages = 1;
+ xdb->generation++;
+ xdb->pagesize = sysconf(_SC_PAGE_SIZE);
+ if (rpmxdbWriteEmptySlotpage(xdb, 0)) {
+ return RPMRC_FAIL;
+ }
+ }
+ return RPMRC_OK;
+}
+
+/* we use the master pdb for locking */
+static int rpmxdbLockOnly(rpmxdb xdb, int excl)
+{
+ if (excl && xdb->rdonly)
+ return RPMRC_FAIL;
+ return rpmpkgLock(xdb->pkgdb, excl);
+}
+
+/* this is the same as rpmxdbLockReadHeader. It does the
+ * ReadHeader to sync the mappings if xdb moved some blobs.
+ */
+int rpmxdbLock(rpmxdb xdb, int excl)
+{
+ if (rpmxdbLockOnly(xdb, excl))
+ return RPMRC_FAIL;
+ if (rpmxdbReadHeader(xdb)) {
+ rpmxdbUnlock(xdb, excl);
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+int rpmxdbUnlock(rpmxdb xdb, int excl)
+{
+ return rpmpkgUnlock(xdb->pkgdb, excl);
+}
+
+static int rpmxdbLockReadHeader(rpmxdb xdb, int excl)
+{
+ if (rpmxdbLockOnly(xdb, excl))
+ return RPMRC_FAIL;
+ if (rpmxdbReadHeader(xdb)) {
+ rpmxdbUnlock(xdb, excl);
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int rpmxdbInit(rpmxdb xdb)
+{
+ int rc;
+
+ if (rpmxdbLockOnly(xdb, 1))
+ return RPMRC_FAIL;
+ rc = rpmxdbInitInternal(xdb);
+ rpmxdbUnlock(xdb, 1);
+ return rc;
+}
+
+int rpmxdbOpen(rpmxdb *xdbp, rpmpkgdb pkgdb, const char *filename, int flags, int mode)
+{
+ struct stat stb;
+ rpmxdb xdb;
+
+ *xdbp = 0;
+ xdb = calloc(1, sizeof(*xdb));
+ xdb->pkgdb = pkgdb;
+ xdb->filename = strdup(filename);
+ xdb->systempagesize = sysconf(_SC_PAGE_SIZE);
+ if (!xdb->filename) {
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+ if ((flags & (O_RDONLY|O_RDWR)) == O_RDONLY)
+ xdb->rdonly = 1;
+ if ((xdb->fd = open(filename, flags, mode)) == -1) {
+ free(xdb->filename);
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+ if (flags & O_CREAT) {
+ char *filenameCopy;
+ DIR *pdir;
+
+ if ((filenameCopy = strdup(xdb->filename)) == NULL) {
+ close(xdb->fd);
+ free(xdb->filename);
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+
+ if ((pdir = opendir(dirname(filenameCopy))) == NULL) {
+ free(filenameCopy);
+ close(xdb->fd);
+ free(xdb->filename);
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+
+ if (fsync(dirfd(pdir)) == -1) {
+ closedir(pdir);
+ free(filenameCopy);
+ close(xdb->fd);
+ free(xdb->filename);
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+ closedir(pdir);
+ free(filenameCopy);
+ }
+ if (fstat(xdb->fd, &stb)) {
+ close(xdb->fd);
+ free(xdb->filename);
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+ if (stb.st_size == 0) {
+ if (rpmxdbInit(xdb)) {
+ close(xdb->fd);
+ free(xdb->filename);
+ free(xdb);
+ return RPMRC_FAIL;
+ }
+ }
+ xdb->flags = flags;
+ xdb->mode = mode;
+ xdb->dofsync = 1;
+ *xdbp = xdb;
+ return RPMRC_OK;
+}
+
+void rpmxdbClose(rpmxdb xdb)
+{
+ struct xdb_slot *slot;
+ int i;
+
+ for (i = 1, slot = xdb->slots + 1; i < xdb->nslots; i++, slot++) {
+ if (slot->mapped) {
+ unmapslot(xdb, slot);
+ slot->mapcallback(xdb, slot->mapcallbackdata, 0, 0);
+ }
+ }
+ if (xdb->slots)
+ free(xdb->slots);
+ if (xdb->fd >= 0)
+ close(xdb->fd);
+ if (xdb->filename)
+ free(xdb->filename);
+ free(xdb);
+}
+
+/* moves the blob to a given new location (possibly resizeing) */
+static int moveblobto(rpmxdb xdb, struct xdb_slot *oldslot, struct xdb_slot *afterslot, unsigned int newpagecnt)
+{
+ struct xdb_slot *nextslot;
+ unsigned int newstartpage, oldpagecnt;
+ unsigned int tocopy;
+ int didmap;
+
+ newstartpage = afterslot->startpage + afterslot->pagecnt;
+ nextslot = xdb->slots + afterslot->next;
+
+ /* make sure there's enough room */
+ if (newpagecnt > nextslot->startpage - newstartpage)
+ return RPMRC_FAIL;
+
+#if 0
+ printf("moveblobto %d %d %d %d, afterslot %d\n", oldslot->startpage, oldslot->pagecnt, newstartpage, newpagecnt, afterslot->slotno);
+#endif
+ /* map old content */
+ didmap = 0;
+ oldpagecnt = oldslot->pagecnt;
+ if (!oldslot->mapped && oldpagecnt) {
+ if (mapslot(xdb, oldslot))
+ return RPMRC_FAIL;
+ didmap = 1;
+ }
+
+ /* copy content */
+ tocopy = newpagecnt > oldpagecnt ? oldpagecnt : newpagecnt;
+ if (tocopy && pwrite(xdb->fd, oldslot->mapped, tocopy * xdb->pagesize, newstartpage * xdb->pagesize) != tocopy * xdb->pagesize) {
+ if (didmap)
+ unmapslot(xdb, oldslot);
+ return RPMRC_FAIL;
+ }
+ /* zero out new pages */
+ if (newpagecnt > oldpagecnt) {
+ if (rpmxdbWriteEmptyPages(xdb, newstartpage + oldpagecnt, newpagecnt - oldpagecnt)) {
+ if (didmap)
+ unmapslot(xdb, oldslot);
+ return RPMRC_FAIL;
+ }
+ }
+
+ if (oldslot->mapped)
+ unmapslot(xdb, oldslot);
+
+ /* set new offset and position */
+ oldslot->startpage = newstartpage;
+ oldslot->pagecnt = newpagecnt;
+ rpmxdbUpdateSlot(xdb, oldslot);
+ xdb->usedblobpages -= oldpagecnt;
+ xdb->usedblobpages += newpagecnt;
+
+ if (afterslot != oldslot && nextslot != oldslot) {
+ /* remove from old chain */
+ xdb->slots[oldslot->prev].next = oldslot->next;
+ xdb->slots[oldslot->next].prev = oldslot->prev;
+
+ /* chain into new position, between lastslot and nextslot */
+ oldslot->prev = afterslot->slotno;
+ afterslot->next = oldslot->slotno;
+
+ oldslot->next = nextslot->slotno;
+ nextslot->prev = oldslot->slotno;
+ }
+
+ /* map again (if needed) */
+ if (oldslot->mapcallback) {
+ if (newpagecnt) {
+ if (mapslot(xdb, oldslot))
+ oldslot->mapped = 0; /* XXX: HELP, what can we do here? */
+ }
+ oldslot->mapcallback(xdb, oldslot->mapcallbackdata, oldslot->mapped, oldslot->mapped ? oldslot->pagecnt * xdb->pagesize : 0);
+ }
+ return RPMRC_OK;
+}
+
+/* moves the blob to a new location (possibly resizeing) */
+static int moveblob(rpmxdb xdb, struct xdb_slot *oldslot, unsigned int newpagecnt)
+{
+ struct xdb_slot *slot, *lastslot;
+ unsigned int nslots;
+ unsigned int freecnt;
+ int i;
+
+ nslots = xdb->nslots;
+ freecnt = 0;
+ lastslot = xdb->slots;
+ for (i = xdb->slots[0].next; ; lastslot = slot, i = slot->next) {
+ slot = xdb->slots + i;
+ freecnt = slot->startpage - (lastslot->startpage + lastslot->pagecnt);
+ if (freecnt >= newpagecnt)
+ break;
+ if (i == nslots)
+ break;
+ }
+ if (i == nslots && newpagecnt > freecnt) {
+ /* need to grow the file */
+ if (rpmxdbWriteEmptyPages(xdb, slot->startpage, newpagecnt - freecnt)) {
+ return RPMRC_FAIL;
+ }
+ slot->startpage += newpagecnt - freecnt;
+ }
+ return moveblobto(xdb, oldslot, lastslot, newpagecnt);
+}
+
+/* move the two blobs at the end of our file to the free area after the provided slot */
+static int moveblobstofront(rpmxdb xdb, struct xdb_slot *afterslot)
+{
+ struct xdb_slot *slot1, *slot2;
+ unsigned int freestart = afterslot->startpage + afterslot->pagecnt;
+ unsigned int freecount = xdb->slots[afterslot->next].startpage - freestart;
+
+ slot1 = xdb->slots + xdb->slots[xdb->nslots].prev;
+ if (slot1 == xdb->slots)
+ slot1 = slot2 = 0;
+ else {
+ slot2 = xdb->slots + slot1->prev;
+ if (slot2 == xdb->slots)
+ slot2 = 0;
+ }
+ if (slot1->pagecnt < slot2->pagecnt) {
+ struct xdb_slot *tmp = slot1;
+ slot1 = slot2;
+ slot2 = tmp;
+ }
+ if (slot1 && slot1->pagecnt && slot1->pagecnt <= freecount && slot1->startpage > freestart) {
+ if (moveblobto(xdb, slot1, afterslot, slot1->pagecnt))
+ return RPMRC_FAIL;
+ freestart += slot1->pagecnt;
+ freecount -= slot1->pagecnt;
+ afterslot = slot1;
+ }
+ if (slot2 && slot2->pagecnt && slot2->pagecnt <= freecount && slot2->startpage > freestart) {
+ if (moveblobto(xdb, slot2, afterslot, slot2->pagecnt))
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+/* add a single page containing empty slots */
+static int addslotpage(rpmxdb xdb)
+{
+ unsigned char *newaddr;
+ struct xdb_slot *slot;
+ int i, spp, nslots;
+ size_t newmappedlen;
+
+ if (xdb->firstfree)
+ return RPMRC_FAIL;
+
+ /* move first blob if needed */
+ nslots = xdb->nslots;
+ for (i = xdb->slots[0].next; i != nslots; i = slot->next) {
+ slot = xdb->slots + i;
+ if (slot->pagecnt)
+ break;
+ }
+ if (i != nslots && slot->pagecnt && slot->startpage == xdb->slotnpages) {
+ /* the blob at this slot is in the way. move it. */
+ if (moveblob(xdb, slot, slot->pagecnt))
+ return RPMRC_FAIL;
+ }
+
+ spp = xdb->pagesize / SLOT_SIZE; /* slots per page */
+ slot = realloc(xdb->slots, (nslots + 1 + spp) * sizeof(*slot));
+ if (!slot)
+ return RPMRC_FAIL;
+ xdb->slots = slot;
+
+ if (rpmxdbWriteEmptySlotpage(xdb, xdb->slotnpages)) {
+ return RPMRC_FAIL;
+ }
+ /* remap slots */
+ newmappedlen = xdb->slotnpages * xdb->pagesize + xdb->pagesize;
+ newmappedlen = (newmappedlen + xdb->systempagesize - 1) & ~(xdb->systempagesize - 1);
+ newaddr = mremap(xdb->mapped, xdb->mappedlen, newmappedlen, MREMAP_MAYMOVE);
+ if (newaddr == MAP_FAILED)
+ return RPMRC_FAIL;
+ xdb->mapped = newaddr;
+ xdb->mappedlen = newmappedlen;
+
+ /* update the header */
+ xdb->slotnpages++;
+ xdb->generation++;
+ rpmxdbWriteHeader(xdb);
+
+ /* fixup empty but used slots */
+ for (i = xdb->slots[0].next; i != nslots; i = slot->next) {
+ slot = xdb->slots + i;
+ if (slot->startpage >= xdb->slotnpages)
+ break;
+ slot->startpage = xdb->slotnpages;
+ if (slot->pagecnt)
+ abort();
+ }
+
+ /* move tail element to the new end */
+ slot = xdb->slots + nslots + spp;
+ *slot = xdb->slots[nslots];
+ slot->slotno = nslots + spp;
+ xdb->slots[slot->prev].next = slot->slotno;
+ xdb->nslots += spp;
+
+ /* add new free slots to the firstfree chain */
+ memset(xdb->slots + nslots, 0, sizeof(*slot) * spp);
+ for (i = 0; i < spp - 1; i++) {
+ xdb->slots[nslots + i].slotno = nslots + i;
+ xdb->slots[nslots + i].next = i + 1;
+ }
+ xdb->slots[nslots + i].slotno = nslots + i;
+ xdb->firstfree = nslots;
+ return RPMRC_OK;
+}
+
+static int createblob(rpmxdb xdb, unsigned int *idp, unsigned int blobtag, unsigned int subtag)
+{
+ struct xdb_slot *slot;
+ unsigned int id;
+
+ if (subtag > 255)
+ return RPMRC_FAIL;
+ if (!xdb->firstfree) {
+ if (addslotpage(xdb))
+ return RPMRC_FAIL;
+ }
+ id = xdb->firstfree;
+ slot = xdb->slots + xdb->firstfree;
+ xdb->firstfree = slot->next;
+
+ slot->mapped = 0;
+ slot->blobtag = blobtag;
+ slot->subtag = subtag;
+ slot->startpage = xdb->slotnpages;
+ slot->pagecnt = 0;
+ rpmxdbUpdateSlot(xdb, slot);
+ /* enqueue */
+ slot->prev = 0;
+ slot->next = xdb->slots[0].next;
+ xdb->slots[slot->next].prev = id;
+ xdb->slots[0].next = id;
+#if 0
+ printf("createblob #%d %d/%d\n", id, blobtag, subtag);
+#endif
+ if (slot->slotno != id)
+ abort();
+ if (slot->mapped)
+ abort();
+ *idp = id;
+ return RPMRC_OK;
+}
+
+int rpmxdbLookupBlob(rpmxdb xdb, unsigned int *idp, unsigned int blobtag, unsigned int subtag, int flags)
+{
+ struct xdb_slot *slot;
+ unsigned int i, nslots;
+ if (rpmxdbLockReadHeader(xdb, flags ? 1 : 0))
+ return RPMRC_FAIL;
+ nslots = xdb->nslots;
+ slot = 0;
+ for (i = xdb->slots[0].next; i != nslots; i = slot->next) {
+ slot = xdb->slots + i;
+ if (slot->blobtag == blobtag && slot->subtag == subtag)
+ break;
+ }
+ if (i == nslots)
+ i = 0;
+ if (i && (flags & O_TRUNC) != 0) {
+ if (rpmxdbResizeBlob(xdb, i, 0)) {
+ rpmxdbUnlock(xdb, flags ? 1 : 0);
+ return RPMRC_FAIL;
+ }
+ }
+ if (!i && (flags & O_CREAT) != 0) {
+ if (createblob(xdb, &i, blobtag, subtag)) {
+ rpmxdbUnlock(xdb, flags ? 1 : 0);
+ return RPMRC_FAIL;
+ }
+ }
+ *idp = i;
+ rpmxdbUnlock(xdb, flags ? 1 : 0);
+ return i ? RPMRC_OK : RPMRC_NOTFOUND;
+}
+
+int rpmxdbDelBlob(rpmxdb xdb, unsigned int id)
+{
+ struct xdb_slot *slot;
+ if (!id)
+ return RPMRC_FAIL;
+ if (rpmxdbLockReadHeader(xdb, 1))
+ return RPMRC_FAIL;
+ if (id >= xdb->nslots) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ slot = xdb->slots + id;
+ if (!slot->startpage) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+ }
+ if (slot->mapped) {
+ unmapslot(xdb, slot);
+ slot->mapcallback(xdb, slot->mapcallbackdata, 0, 0);
+ }
+ /* remove from old chain */
+ xdb->slots[slot->prev].next = slot->next;
+ xdb->slots[slot->next].prev = slot->prev;
+ xdb->usedblobpages -= slot->pagecnt;
+
+ if (xdb->usedblobpages * 2 < xdb->slots[xdb->nslots].startpage && (slot->startpage + slot->pagecnt) * 2 < xdb->slots[xdb->nslots].startpage) {
+ /* freed in first half of pages, move last two blobs if we can */
+ moveblobstofront(xdb, xdb->slots + slot->prev);
+ }
+
+ /* zero slot */
+ memset(slot, 0, sizeof(*slot));
+ slot->slotno = id;
+ rpmxdbUpdateSlot(xdb, slot);
+
+ /* enqueue into free chain */
+ slot->next = xdb->firstfree;
+ xdb->firstfree = slot->slotno;
+
+ /* check if we should truncate the file */
+ slot = xdb->slots + xdb->slots[xdb->nslots].prev;
+ if (slot->startpage + slot->pagecnt < xdb->slots[xdb->nslots].startpage / 4 * 3) {
+ unsigned int newend = slot->startpage + slot->pagecnt;
+ if (!ftruncate(xdb->fd, newend * xdb->pagesize))
+ xdb->slots[xdb->nslots].startpage = newend;
+ }
+
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+}
+
+int rpmxdbResizeBlob(rpmxdb xdb, unsigned int id, size_t newsize)
+{
+ struct xdb_slot *slot;
+ unsigned int oldpagecnt, newpagecnt;
+ if (!id)
+ return RPMRC_FAIL;
+ if (rpmxdbLockReadHeader(xdb, 1))
+ return RPMRC_FAIL;
+ if (id >= xdb->nslots) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ slot = xdb->slots + id;
+ if (!slot->startpage) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ oldpagecnt = slot->pagecnt;
+ newpagecnt = (newsize + xdb->pagesize - 1) / xdb->pagesize;
+ if (oldpagecnt && newpagecnt && newpagecnt <= oldpagecnt) {
+ /* reducing size. zero to end of page */
+ unsigned int pg = newsize & (xdb->pagesize - 1);
+ if (pg) {
+ if (slot->mapped) {
+ memset(slot->mapped + pg, 0, xdb->pagesize - pg);
+ } else {
+ char *empty = calloc(1, xdb->pagesize - pg);
+ if (!empty) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ if (pwrite(xdb->fd, empty, xdb->pagesize - pg, (slot->startpage + newpagecnt - 1) * xdb->pagesize + pg ) != xdb->pagesize - pg) {
+ free(empty);
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ free(empty);
+ }
+ }
+ }
+ if (newpagecnt == oldpagecnt) {
+ /* no size change */
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+ }
+ if (!newpagecnt) {
+ /* special case: zero size blob, no longer mapped */
+ if (slot->mapped)
+ unmapslot(xdb, slot);
+ slot->pagecnt = 0;
+ slot->startpage = xdb->slotnpages;
+ /* remove from old chain */
+ xdb->slots[slot->prev].next = slot->next;
+ xdb->slots[slot->next].prev = slot->prev;
+ /* enqueue into head */
+ slot->prev = 0;
+ slot->next = xdb->slots[0].next;
+ xdb->slots[slot->next].prev = slot->slotno;
+ xdb->slots[0].next = slot->slotno;
+ rpmxdbUpdateSlot(xdb, slot);
+ xdb->usedblobpages -= oldpagecnt;
+ if (slot->mapcallback)
+ slot->mapcallback(xdb, slot->mapcallbackdata, 0, 0);
+ } else if (newpagecnt <= xdb->slots[slot->next].startpage - slot->startpage) {
+ /* can do it inplace */
+ if (newpagecnt > oldpagecnt) {
+ /* zero new pages */
+ if (rpmxdbWriteEmptyPages(xdb, slot->startpage + oldpagecnt, newpagecnt - oldpagecnt)) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ }
+ if (slot->mapcallback) {
+ if (remapslot(xdb, slot, newpagecnt)) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ } else {
+ if (slot->mapped)
+ unmapslot(xdb, slot);
+ slot->pagecnt = newpagecnt;
+ }
+ rpmxdbUpdateSlot(xdb, slot);
+ xdb->usedblobpages -= oldpagecnt;
+ xdb->usedblobpages += newpagecnt;
+ if (slot->mapcallback)
+ slot->mapcallback(xdb, slot->mapcallbackdata, slot->mapped, slot->pagecnt * xdb->pagesize);
+ } else {
+ /* need to relocate to a new page area */
+ if (moveblob(xdb, slot, newpagecnt)) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ }
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+}
+
+int rpmxdbMapBlob(rpmxdb xdb, unsigned int id, int flags, void (*mapcallback)(rpmxdb xdb, void *data, void *newaddr, size_t newsize), void *mapcallbackdata)
+{
+ struct xdb_slot *slot;
+ if (!id || !mapcallback)
+ return RPMRC_FAIL;
+ if ((flags & (O_RDONLY|O_RDWR)) == O_RDWR && xdb->rdonly)
+ return RPMRC_FAIL;
+ if (rpmxdbLockReadHeader(xdb, 0))
+ return RPMRC_FAIL;
+ if (id >= xdb->nslots) {
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ slot = xdb->slots + id;
+ if (!slot->startpage || slot->mapped) {
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ slot->mapflags = (flags & (O_RDONLY|O_RDWR)) == O_RDWR ? PROT_READ | PROT_WRITE : PROT_READ;
+ if (slot->pagecnt) {
+ if (mapslot(xdb, slot)) {
+ slot->mapflags = 0;
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ }
+ slot->mapcallback = mapcallback;
+ slot->mapcallbackdata = mapcallbackdata;
+ mapcallback(xdb, mapcallbackdata, slot->mapped, slot->mapped ? slot->pagecnt * xdb->pagesize : 0);
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_OK;
+}
+
+int rpmxdbUnmapBlob(rpmxdb xdb, unsigned int id)
+{
+ struct xdb_slot *slot;
+ if (!id)
+ return RPMRC_OK;
+ if (rpmxdbLockReadHeader(xdb, 0))
+ return RPMRC_FAIL;
+ if (id >= xdb->nslots) {
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_FAIL;
+ }
+ slot = xdb->slots + id;
+ if (slot->mapped) {
+ unmapslot(xdb, slot);
+ slot->mapcallback(xdb, slot->mapcallbackdata, 0, 0);
+ }
+ slot->mapcallback = 0;
+ slot->mapcallbackdata = 0;
+ slot->mapflags = 0;
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_OK;
+}
+
+int rpmxdbRenameBlob(rpmxdb xdb, unsigned int *idp, unsigned int blobtag, unsigned int subtag)
+{
+ struct xdb_slot *slot;
+ unsigned int otherid;
+ unsigned int id = *idp;
+ int rc;
+
+ if (!id || subtag > 255)
+ return RPMRC_FAIL;
+ if (rpmxdbLockReadHeader(xdb, 1))
+ return RPMRC_FAIL;
+ if (id >= xdb->nslots) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ slot = xdb->slots + id;
+#if 0
+ printf("rpmxdbRenameBlob #%d %d/%d -> %d/%d\n", id, slot->blobtag, slot->subtag, blobtag, subtag);
+#endif
+ if (!slot->startpage) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ if (slot->blobtag == blobtag && slot->subtag == subtag) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+ }
+ rc = rpmxdbLookupBlob(xdb, &otherid, blobtag, subtag, 0);
+ if (rc == RPMRC_NOTFOUND)
+ otherid = 0;
+ else if (rc) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ if (otherid) {
+#if 0
+ printf("(replacing #%d)\n", otherid);
+#endif
+ if (rpmxdbDelBlob(xdb, otherid)) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ /* get otherid back from free chain */
+ if (xdb->firstfree != otherid)
+ return RPMRC_FAIL;
+ xdb->firstfree = xdb->slots[otherid].next;
+
+ slot->blobtag = blobtag;
+ slot->subtag = subtag;
+ xdb->slots[otherid] = *slot;
+ /* fixup ids */
+ xdb->slots[otherid].slotno = otherid;
+ xdb->slots[slot->prev].next = otherid;
+ xdb->slots[slot->next].prev = otherid;
+ /* write */
+ rpmxdbUpdateSlot(xdb, xdb->slots + otherid);
+ memset(slot, 0, sizeof(*slot));
+ slot->slotno = id;
+ rpmxdbUpdateSlot(xdb, slot);
+ slot->next = xdb->firstfree;
+ xdb->firstfree = slot->slotno;
+ *idp = otherid;
+ } else {
+ slot = xdb->slots + id;
+ slot->blobtag = blobtag;
+ slot->subtag = subtag;
+ rpmxdbUpdateSlot(xdb, slot);
+ }
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+}
+
+void rpmxdbSetFsync(rpmxdb xdb, int dofsync)
+{
+ xdb->dofsync = dofsync;
+}
+
+int rpmxdbIsRdonly(rpmxdb xdb)
+{
+ return xdb->rdonly;
+}
+
+int rpmxdbSetUserGeneration(rpmxdb xdb, unsigned int usergeneration)
+{
+ if (rpmxdbLockReadHeader(xdb, 1))
+ return RPMRC_FAIL;
+ /* sync before the update */
+ if (xdb->dofsync && fsync(xdb->fd)) {
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_FAIL;
+ }
+ xdb->usergeneration = usergeneration;
+ xdb->generation++;
+ rpmxdbWriteHeader(xdb);
+ rpmxdbUnlock(xdb, 1);
+ return RPMRC_OK;
+}
+
+int rpmxdbGetUserGeneration(rpmxdb xdb, unsigned int *usergenerationp)
+{
+ if (rpmxdbLockReadHeader(xdb, 0))
+ return RPMRC_FAIL;
+ *usergenerationp = xdb->usergeneration;
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_OK;
+}
+
+int rpmxdbStats(rpmxdb xdb)
+{
+ struct xdb_slot *slot;
+ unsigned int i, nslots;
+
+ if (rpmxdbLockReadHeader(xdb, 0))
+ return RPMRC_FAIL;
+ nslots = xdb->nslots;
+ printf("--- XDB Stats\n");
+ printf("Filename: %s\n", xdb->filename);
+ printf("Generation: %d\n", xdb->generation);
+ printf("Slot pages: %d\n", xdb->slotnpages);
+ printf("Blob pages: %d\n", xdb->usedblobpages);
+ printf("Free pages: %d\n", xdb->slots[nslots].startpage - xdb->usedblobpages - xdb->slotnpages);
+ printf("Pagesize: %d / %d\n", xdb->pagesize, xdb->systempagesize);
+ for (i = 1, slot = xdb->slots + i; i < nslots; i++, slot++) {
+ if (!slot->startpage)
+ continue;
+ printf("%2d: tag %d/%d, startpage %d, pagecnt %d%s\n", i, slot->blobtag, slot->subtag, slot->startpage, slot->pagecnt, slot->mapcallbackdata ? ", mapped" : "");
+ }
+#if 0
+ printf("Again in offset order:\n");
+ for (i = xdb->slots[0].next; i != nslots; i = slot->next) {
+ slot = xdb->slots + i;
+ printf("%2d: tag %d/%d, startpage %d, pagecnt %d%s\n", i, slot->blobtag, slot->subtag, slot->startpage, slot->pagecnt, slot->mapcallbackdata ? ", mapped" : "");
+ }
+#endif
+#if 0
+ printf("Free chain:\n");
+ for (i = xdb->firstfree; i; i = slot->next) {
+ slot = xdb->slots + i;
+ printf("%2d [%2d]: tag %d/%d, startpage %d, pagecnt %d%s\n", i, slot->slotno, slot->blobtag, slot->subtag, slot->startpage, slot->pagecnt, slot->mapcallbackdata ? ", mapped" : "");
+ }
+#endif
+ rpmxdbUnlock(xdb, 0);
+ return RPMRC_OK;
+}
+
diff --git a/lib/backend/ndb/rpmxdb.h b/lib/backend/ndb/rpmxdb.h
new file mode 100644
index 000000000..4358536ef
--- /dev/null
+++ b/lib/backend/ndb/rpmxdb.h
@@ -0,0 +1,27 @@
+#include "rpmpkg.h"
+
+struct rpmxdb_s;
+typedef struct rpmxdb_s *rpmxdb;
+
+int rpmxdbOpen(rpmxdb *xdbp, rpmpkgdb pkgdb, const char *filename, int flags, int mode);
+void rpmxdbClose(rpmxdb xdb);
+void rpmxdbSetFsync(rpmxdb xdb, int dofsync);
+int rpmxdbIsRdonly(rpmxdb xdb);
+
+int rpmxdbLock(rpmxdb xdb, int excl);
+int rpmxdbUnlock(rpmxdb xdb, int excl);
+
+int rpmxdbLookupBlob(rpmxdb xdb, unsigned int *idp, unsigned int blobtag, unsigned int subtag, int flags);
+int rpmxdbDelBlob(rpmxdb xdb, unsigned int id) ;
+
+int rpmxdbMapBlob(rpmxdb xdb, unsigned int id, int flags, void (*mapcallback)(rpmxdb xdb, void *data, void *newaddr, size_t newsize), void *mapcallbackdata);
+int rpmxdbUnmapBlob(rpmxdb xdb, unsigned int id);
+
+int rpmxdbResizeBlob(rpmxdb xdb, unsigned int id, size_t newsize);
+int rpmxdbRenameBlob(rpmxdb xdb, unsigned int *idp, unsigned int blobtag, unsigned int subtag);
+
+int rpmxdbSetUserGeneration(rpmxdb xdb, unsigned int usergeneration);
+int rpmxdbGetUserGeneration(rpmxdb xdb, unsigned int *usergenerationp);
+
+int rpmxdbStats(rpmxdb xdb);
+
diff --git a/lib/cpio.c b/lib/cpio.c
index 382eeb65a..57c959258 100644
--- a/lib/cpio.c
+++ b/lib/cpio.c
@@ -16,7 +16,6 @@
#else
#include <sys/types.h> /* already included from system.h */
#endif
-#include <errno.h>
#include <string.h>
#include <rpm/rpmio.h>
@@ -24,6 +23,7 @@
#include <rpm/rpmstring.h>
#include "lib/cpio.h"
+#include "lib/rpmarchive.h"
#include "debug.h"
@@ -35,6 +35,47 @@ struct rpmcpio_s {
off_t fileend;
};
+/*
+ * Size limit for individual files in "new ascii format" cpio archives.
+ * The max size of the entire archive is unlimited from cpio POV,
+ * but subject to filesystem limitations.
+ */
+#define CPIO_FILESIZE_MAX UINT32_MAX
+
+#define CPIO_NEWC_MAGIC "070701"
+#define CPIO_CRC_MAGIC "070702"
+#define CPIO_STRIPPED_MAGIC "07070X"
+#define CPIO_TRAILER "TRAILER!!!"
+
+/** \ingroup payload
+ * Cpio archive header information.
+ */
+struct cpioCrcPhysicalHeader {
+ /* char magic[6]; handled separately */
+ char inode[8];
+ char mode[8];
+ char uid[8];
+ char gid[8];
+ char nlink[8];
+ char mtime[8];
+ char filesize[8];
+ char devMajor[8];
+ char devMinor[8];
+ char rdevMajor[8];
+ char rdevMinor[8];
+ char namesize[8];
+ char checksum[8]; /* ignored !! */
+};
+
+#define PHYS_HDR_SIZE 104 /* Don't depend on sizeof(struct) */
+
+struct cpioStrippedPhysicalHeader {
+ /* char magic[6]; handled separately */
+ char fx[8];
+};
+
+#define STRIPPED_PHYS_HDR_SIZE 8 /* Don't depend on sizeof(struct) */
+
rpmcpio_t rpmcpioOpen(FD_t fd, char mode)
{
if ((mode & O_ACCMODE) != O_RDONLY &&
@@ -83,16 +124,16 @@ static unsigned long strntoul(const char *str,char **endptr, int base, size_t nu
static int rpmcpioWritePad(rpmcpio_t cpio, ssize_t modulo)
{
char buf[modulo];
- ssize_t left, writen;
+ ssize_t left, written;
memset(buf, 0, modulo);
left = (modulo - ((cpio->offset) % modulo)) % modulo;
if (left <= 0)
return 0;
- writen = Fwrite(&buf, left, 1, cpio->fd);
- if (writen != left) {
- return CPIOERR_WRITE_FAILED;
+ written = Fwrite(&buf, left, 1, cpio->fd);
+ if (written != left) {
+ return RPMERR_WRITE_FAILED;
}
- cpio->offset += writen;
+ cpio->offset += written;
return 0;
}
@@ -107,7 +148,7 @@ static int rpmcpioReadPad(rpmcpio_t cpio)
read = Fread(&buf, left, 1, cpio->fd);
cpio->offset += read;
if (read != left) {
- return CPIOERR_READ_FAILED;
+ return RPMERR_READ_FAILED;
}
return 0;
}
@@ -116,7 +157,7 @@ static int rpmcpioReadPad(rpmcpio_t cpio)
\
log = strntoul(phys, &end, 16, sizeof(phys)); \
\
- if ( (end - phys) != sizeof(phys) ) return CPIOERR_BAD_HEADER;
+ if ( (end - phys) != sizeof(phys) ) return RPMERR_BAD_HEADER;
#define SET_NUM_FIELD(phys, val, space) \
sprintf(space, "%8.8lx", (unsigned long) (val)); \
\
@@ -126,10 +167,10 @@ static int rpmcpioTrailerWrite(rpmcpio_t cpio)
{
struct cpioCrcPhysicalHeader hdr;
int rc;
- size_t writen;
+ size_t written;
if (cpio->fileend != cpio->offset) {
- return CPIOERR_WRITE_FAILED;
+ return RPMERR_WRITE_FAILED;
}
rc = rpmcpioWritePad(cpio, 4);
@@ -137,18 +178,24 @@ static int rpmcpioTrailerWrite(rpmcpio_t cpio)
return rc;
memset(&hdr, '0', PHYS_HDR_SIZE);
- memcpy(&hdr.magic, CPIO_NEWC_MAGIC, sizeof(hdr.magic));
memcpy(&hdr.nlink, "00000001", 8);
memcpy(&hdr.namesize, "0000000b", 8);
- writen = Fwrite(&hdr, PHYS_HDR_SIZE, 1, cpio->fd);
- cpio->offset += writen;
- if (writen != PHYS_HDR_SIZE) {
- return CPIOERR_WRITE_FAILED;
+
+ written = Fwrite(CPIO_NEWC_MAGIC, 6, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != 6) {
+ return RPMERR_WRITE_FAILED;
}
- writen = Fwrite(&CPIO_TRAILER, sizeof(CPIO_TRAILER), 1, cpio->fd);
- cpio->offset += writen;
- if (writen != sizeof(CPIO_TRAILER)) {
- return CPIOERR_WRITE_FAILED;
+
+ written = Fwrite(&hdr, PHYS_HDR_SIZE, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != PHYS_HDR_SIZE) {
+ return RPMERR_WRITE_FAILED;
+ }
+ written = Fwrite(&CPIO_TRAILER, sizeof(CPIO_TRAILER), 1, cpio->fd);
+ cpio->offset += written;
+ if (written != sizeof(CPIO_TRAILER)) {
+ return RPMERR_WRITE_FAILED;
}
/*
@@ -166,20 +213,20 @@ int rpmcpioHeaderWrite(rpmcpio_t cpio, char * path, struct stat * st)
struct cpioCrcPhysicalHeader hdr_s;
struct cpioCrcPhysicalHeader * hdr = &hdr_s;
char field[64];
- size_t len, writen;
+ size_t len, written;
dev_t dev;
int rc = 0;
if ((cpio->mode & O_ACCMODE) != O_WRONLY) {
- return CPIOERR_WRITE_FAILED;
+ return RPMERR_WRITE_FAILED;
}
if (cpio->fileend != cpio->offset) {
- return CPIOERR_WRITE_FAILED;
+ return RPMERR_WRITE_FAILED;
}
if (st->st_size >= CPIO_FILESIZE_MAX) {
- return CPIOERR_FILE_SIZE;
+ return RPMERR_FILE_SIZE;
}
rc = rpmcpioWritePad(cpio, 4);
@@ -187,7 +234,6 @@ int rpmcpioHeaderWrite(rpmcpio_t cpio, char * path, struct stat * st)
return rc;
}
- memcpy(hdr->magic, CPIO_NEWC_MAGIC, sizeof(hdr->magic));
SET_NUM_FIELD(hdr->inode, st->st_ino, field);
SET_NUM_FIELD(hdr->mode, st->st_mode, field);
SET_NUM_FIELD(hdr->uid, st->st_uid, field);
@@ -206,16 +252,22 @@ int rpmcpioHeaderWrite(rpmcpio_t cpio, char * path, struct stat * st)
memcpy(hdr->checksum, "00000000", 8);
- writen = Fwrite(hdr, PHYS_HDR_SIZE, 1, cpio->fd);
- cpio->offset += writen;
- if (writen != PHYS_HDR_SIZE) {
- return CPIOERR_WRITE_FAILED;
+ written = Fwrite(CPIO_NEWC_MAGIC, 6, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != 6) {
+ return RPMERR_WRITE_FAILED;
+ }
+
+ written = Fwrite(hdr, PHYS_HDR_SIZE, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != PHYS_HDR_SIZE) {
+ return RPMERR_WRITE_FAILED;
}
- writen = Fwrite(path, len, 1, cpio->fd);
- cpio->offset += writen;
- if (writen != len) {
- return CPIOERR_WRITE_FAILED;
+ written = Fwrite(path, len, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != len) {
+ return RPMERR_WRITE_FAILED;
}
rc = rpmcpioWritePad(cpio, 4);
@@ -225,34 +277,77 @@ int rpmcpioHeaderWrite(rpmcpio_t cpio, char * path, struct stat * st)
return rc;
}
-ssize_t rpmcpioWrite(rpmcpio_t cpio, void * buf, size_t size)
+int rpmcpioStrippedHeaderWrite(rpmcpio_t cpio, int fx, off_t fsize)
+{
+ struct cpioStrippedPhysicalHeader hdr_s;
+ struct cpioStrippedPhysicalHeader * hdr = &hdr_s;
+ char field[64];
+ size_t written;
+ int rc = 0;
+
+ if ((cpio->mode & O_ACCMODE) != O_WRONLY) {
+ return RPMERR_WRITE_FAILED;
+ }
+
+ if (cpio->fileend != cpio->offset) {
+ return RPMERR_WRITE_FAILED;
+ }
+
+ rc = rpmcpioWritePad(cpio, 4);
+ if (rc) {
+ return rc;
+ }
+
+ SET_NUM_FIELD(hdr->fx, fx, field);
+
+ written = Fwrite(CPIO_STRIPPED_MAGIC, 6, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != 6) {
+ return RPMERR_WRITE_FAILED;
+ }
+
+ written = Fwrite(hdr, STRIPPED_PHYS_HDR_SIZE, 1, cpio->fd);
+ cpio->offset += written;
+ if (written != STRIPPED_PHYS_HDR_SIZE) {
+ return RPMERR_WRITE_FAILED;
+ }
+
+ rc = rpmcpioWritePad(cpio, 4);
+
+ cpio->fileend = cpio->offset + fsize;
+
+ return rc;
+}
+
+ssize_t rpmcpioWrite(rpmcpio_t cpio, const void * buf, size_t size)
{
- size_t writen, left;
+ size_t written, left;
if ((cpio->mode & O_ACCMODE) != O_WRONLY) {
- return CPIOERR_WRITE_FAILED;
+ return RPMERR_WRITE_FAILED;
}
// Do not write beyond file length
left = cpio->fileend - cpio->offset;
size = size > left ? left : size;
- writen = Fwrite(buf, size, 1, cpio->fd);
- cpio->offset += writen;
- return writen;
+ written = Fwrite(buf, size, 1, cpio->fd);
+ cpio->offset += written;
+ return written;
}
-int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, struct stat * st)
+int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, int * fx)
{
struct cpioCrcPhysicalHeader hdr;
int nameSize;
char * end;
- unsigned int major, minor;
int rc = 0;
ssize_t read;
+ char magic[6];
+ rpm_loff_t fsize;
if ((cpio->mode & O_ACCMODE) != O_RDONLY) {
- return CPIOERR_READ_FAILED;
+ return RPMERR_READ_FAILED;
}
/* Move to next file */
@@ -262,7 +357,7 @@ int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, struct stat * st)
while (cpio->fileend != cpio->offset) {
read = cpio->fileend - cpio->offset > 8*BUFSIZ ? 8*BUFSIZ : cpio->fileend - cpio->offset;
if (rpmcpioRead(cpio, &buf, read) != read) {
- return CPIOERR_READ_FAILED;
+ return RPMERR_READ_FAILED;
}
}
}
@@ -270,56 +365,75 @@ int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, struct stat * st)
rc = rpmcpioReadPad(cpio);
if (rc) return rc;
- read = Fread(&hdr, PHYS_HDR_SIZE, 1, cpio->fd);
+ read = Fread(&magic, 6, 1, cpio->fd);
cpio->offset += read;
- if (read != PHYS_HDR_SIZE)
- return CPIOERR_READ_FAILED;
+ if (read != 6)
+ return RPMERR_BAD_MAGIC;
+
+ /* read stripped header */
+ if (!strncmp(CPIO_STRIPPED_MAGIC, magic,
+ sizeof(CPIO_STRIPPED_MAGIC)-1)) {
+ struct cpioStrippedPhysicalHeader shdr;
+ read = Fread(&shdr, STRIPPED_PHYS_HDR_SIZE, 1, cpio->fd);
+ cpio->offset += read;
+ if (read != STRIPPED_PHYS_HDR_SIZE)
+ return RPMERR_BAD_HEADER;
+
+ GET_NUM_FIELD(shdr.fx, *fx);
+ rc = rpmcpioReadPad(cpio);
+
+ if (!rc && *fx == -1)
+ rc = RPMERR_ITER_END;
+ return rc;
+ }
- if (strncmp(CPIO_CRC_MAGIC, hdr.magic, sizeof(CPIO_CRC_MAGIC)-1) &&
- strncmp(CPIO_NEWC_MAGIC, hdr.magic, sizeof(CPIO_NEWC_MAGIC)-1)) {
- return CPIOERR_BAD_MAGIC;
+ if (strncmp(CPIO_CRC_MAGIC, magic, sizeof(CPIO_CRC_MAGIC)-1) &&
+ strncmp(CPIO_NEWC_MAGIC, magic, sizeof(CPIO_NEWC_MAGIC)-1)) {
+ return RPMERR_BAD_MAGIC;
}
- GET_NUM_FIELD(hdr.inode, st->st_ino);
- GET_NUM_FIELD(hdr.mode, st->st_mode);
- GET_NUM_FIELD(hdr.uid, st->st_uid);
- GET_NUM_FIELD(hdr.gid, st->st_gid);
- GET_NUM_FIELD(hdr.nlink, st->st_nlink);
- GET_NUM_FIELD(hdr.mtime, st->st_mtime);
- GET_NUM_FIELD(hdr.filesize, st->st_size);
-
- GET_NUM_FIELD(hdr.devMajor, major);
- GET_NUM_FIELD(hdr.devMinor, minor);
- st->st_dev = makedev(major, minor);
-
- GET_NUM_FIELD(hdr.rdevMajor, major);
- GET_NUM_FIELD(hdr.rdevMinor, minor);
- st->st_rdev = makedev(major, minor);
+ read = Fread(&hdr, PHYS_HDR_SIZE, 1, cpio->fd);
+ cpio->offset += read;
+ if (read != PHYS_HDR_SIZE)
+ return RPMERR_BAD_HEADER;
+
+ GET_NUM_FIELD(hdr.filesize, fsize);
GET_NUM_FIELD(hdr.namesize, nameSize);
+ if (nameSize <= 0 || nameSize > 4096) {
+ return RPMERR_BAD_HEADER;
+ }
- *path = xmalloc(nameSize + 1);
- read = Fread(*path, nameSize, 1, cpio->fd);
- (*path)[nameSize] = '\0';
+ char name[nameSize + 1];
+ read = Fread(name, nameSize, 1, cpio->fd);
+ name[nameSize] = '\0';
cpio->offset += read;
if (read != nameSize ) {
- return CPIOERR_BAD_HEADER;
+ return RPMERR_BAD_HEADER;
}
rc = rpmcpioReadPad(cpio);
- cpio->fileend = cpio->offset + st->st_size;
+ cpio->fileend = cpio->offset + fsize;
- if (!rc && rstreq(*path, CPIO_TRAILER))
- rc = CPIOERR_HDR_TRAILER;
+ if (!rc && rstreq(name, CPIO_TRAILER))
+ rc = RPMERR_ITER_END;
+
+ if (!rc && path)
+ *path = xstrdup(name);
return rc;
}
+void rpmcpioSetExpectedFileSize(rpmcpio_t cpio, off_t fsize)
+{
+ cpio->fileend = cpio->offset + fsize;
+}
+
ssize_t rpmcpioRead(rpmcpio_t cpio, void * buf, size_t size)
{
size_t read, left;
if ((cpio->mode & O_ACCMODE) != O_RDONLY) {
- return CPIOERR_READ_FAILED;
+ return RPMERR_READ_FAILED;
}
left = cpio->fileend - cpio->offset;
@@ -349,67 +463,3 @@ rpmcpio_t rpmcpioFree(rpmcpio_t cpio)
}
return NULL;
}
-
-const char * rpmcpioStrerror(int rc)
-{
- static char msg[256];
- const char *s;
- int myerrno = errno;
- size_t l;
-
- strcpy(msg, "cpio: ");
- switch (rc) {
- default: {
- char *t = msg + strlen(msg);
- sprintf(t, _("(error 0x%x)"), (unsigned)rc);
- s = NULL;
- break;
- }
- case CPIOERR_BAD_MAGIC: s = _("Bad magic"); break;
- case CPIOERR_BAD_HEADER: s = _("Bad/unreadable header");break;
-
- case CPIOERR_OPEN_FAILED: s = "open"; break;
- case CPIOERR_CHMOD_FAILED: s = "chmod"; break;
- case CPIOERR_CHOWN_FAILED: s = "chown"; break;
- case CPIOERR_WRITE_FAILED: s = "write"; break;
- case CPIOERR_UTIME_FAILED: s = "utime"; break;
- case CPIOERR_UNLINK_FAILED: s = "unlink"; break;
- case CPIOERR_RENAME_FAILED: s = "rename"; break;
- case CPIOERR_SYMLINK_FAILED: s = "symlink"; break;
- case CPIOERR_STAT_FAILED: s = "stat"; break;
- case CPIOERR_LSTAT_FAILED: s = "lstat"; break;
- case CPIOERR_MKDIR_FAILED: s = "mkdir"; break;
- case CPIOERR_RMDIR_FAILED: s = "rmdir"; break;
- case CPIOERR_MKNOD_FAILED: s = "mknod"; break;
- case CPIOERR_MKFIFO_FAILED: s = "mkfifo"; break;
- case CPIOERR_LINK_FAILED: s = "link"; break;
- case CPIOERR_READLINK_FAILED: s = "readlink"; break;
- case CPIOERR_READ_FAILED: s = "read"; break;
- case CPIOERR_COPY_FAILED: s = "copy"; break;
- case CPIOERR_LSETFCON_FAILED: s = "lsetfilecon"; break;
- case CPIOERR_SETCAP_FAILED: s = "cap_set_file"; break;
-
- case CPIOERR_HDR_SIZE: s = _("Header size too big"); break;
- case CPIOERR_FILE_SIZE: s = _("File too large for archive"); break;
- case CPIOERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break;
- case CPIOERR_MISSING_HARDLINK: s = _("Missing hard link(s)"); break;
- case CPIOERR_DIGEST_MISMATCH: s = _("Digest mismatch"); break;
- case CPIOERR_INTERNAL: s = _("Internal error"); break;
- case CPIOERR_UNMAPPED_FILE: s = _("Archive file not in header"); break;
- case CPIOERR_ENOENT: s = strerror(ENOENT); break;
- case CPIOERR_ENOTEMPTY: s = strerror(ENOTEMPTY); break;
- }
-
- l = sizeof(msg) - strlen(msg) - 1;
- if (s != NULL) {
- if (l > 0) strncat(msg, s, l);
- l -= strlen(s);
- }
- if ((rc & CPIOERR_CHECK_ERRNO) && myerrno) {
- s = _(" failed - ");
- if (l > 0) strncat(msg, s, l);
- l -= strlen(s);
- if (l > 0) strncat(msg, strerror(myerrno), l);
- }
- return msg;
-}
diff --git a/lib/cpio.h b/lib/cpio.h
index 7364caf27..b33b5fc13 100644
--- a/lib/cpio.h
+++ b/lib/cpio.h
@@ -12,81 +12,6 @@
*
*/
-/** \ingroup payload
- * @note CPIO_CHECK_ERRNO bit is set only if errno is valid.
- */
-#define CPIOERR_CHECK_ERRNO 0x00008000
-
-/** \ingroup payload
- */
-enum cpioErrorReturns {
- CPIOERR_BAD_MAGIC = 2,
- CPIOERR_BAD_HEADER = 3,
- CPIOERR_OPEN_FAILED = 4 | CPIOERR_CHECK_ERRNO,
- CPIOERR_CHMOD_FAILED = 5 | CPIOERR_CHECK_ERRNO,
- CPIOERR_CHOWN_FAILED = 6 | CPIOERR_CHECK_ERRNO,
- CPIOERR_WRITE_FAILED = 7 | CPIOERR_CHECK_ERRNO,
- CPIOERR_UTIME_FAILED = 8 | CPIOERR_CHECK_ERRNO,
- CPIOERR_UNLINK_FAILED = 9 | CPIOERR_CHECK_ERRNO,
- CPIOERR_RENAME_FAILED = 10 | CPIOERR_CHECK_ERRNO,
- CPIOERR_SYMLINK_FAILED = 11 | CPIOERR_CHECK_ERRNO,
- CPIOERR_STAT_FAILED = 12 | CPIOERR_CHECK_ERRNO,
- CPIOERR_LSTAT_FAILED = 13 | CPIOERR_CHECK_ERRNO,
- CPIOERR_MKDIR_FAILED = 14 | CPIOERR_CHECK_ERRNO,
- CPIOERR_RMDIR_FAILED = 15 | CPIOERR_CHECK_ERRNO,
- CPIOERR_MKNOD_FAILED = 16 | CPIOERR_CHECK_ERRNO,
- CPIOERR_MKFIFO_FAILED = 17 | CPIOERR_CHECK_ERRNO,
- CPIOERR_LINK_FAILED = 18 | CPIOERR_CHECK_ERRNO,
- CPIOERR_READLINK_FAILED = 19 | CPIOERR_CHECK_ERRNO,
- CPIOERR_READ_FAILED = 20 | CPIOERR_CHECK_ERRNO,
- CPIOERR_COPY_FAILED = 21 | CPIOERR_CHECK_ERRNO,
- CPIOERR_LSETFCON_FAILED = 22 | CPIOERR_CHECK_ERRNO,
- CPIOERR_HDR_SIZE = 23,
- CPIOERR_HDR_TRAILER = 24,
- CPIOERR_UNKNOWN_FILETYPE= 25,
- CPIOERR_MISSING_HARDLINK= 26,
- CPIOERR_DIGEST_MISMATCH = 27,
- CPIOERR_INTERNAL = 28,
- CPIOERR_UNMAPPED_FILE = 29,
- CPIOERR_ENOENT = 30,
- CPIOERR_ENOTEMPTY = 31,
- CPIOERR_SETCAP_FAILED = 32 | CPIOERR_CHECK_ERRNO,
- CPIOERR_FILE_SIZE = 33,
-};
-
-/*
- * Size limit for individual files in "new ascii format" cpio archives.
- * The max size of the entire archive is unlimited from cpio POV,
- * but subject to filesystem limitations.
- */
-#define CPIO_FILESIZE_MAX UINT32_MAX
-
-#define CPIO_NEWC_MAGIC "070701"
-#define CPIO_CRC_MAGIC "070702"
-#define CPIO_TRAILER "TRAILER!!!"
-
-/** \ingroup payload
- * Cpio archive header information.
- */
-struct cpioCrcPhysicalHeader {
- char magic[6];
- char inode[8];
- char mode[8];
- char uid[8];
- char gid[8];
- char nlink[8];
- char mtime[8];
- char filesize[8];
- char devMajor[8];
- char devMinor[8];
- char rdevMajor[8];
- char rdevMinor[8];
- char namesize[8];
- char checksum[8]; /* ignored !! */
-};
-
-#define PHYS_HDR_SIZE 110 /* Don't depend on sizeof(struct) */
-
typedef struct rpmcpio_s * rpmcpio_t;
#ifdef __cplusplus
@@ -109,33 +34,43 @@ rpmcpio_t rpmcpioFree(rpmcpio_t cpio);
/**
* Write cpio header.
- * @retval fsm file path and stat info
- * @param st
+ * @param cpio cpio archive
+ * @param path file name
+ * @param st stat struct with meta data
* @return 0 on success
*/
RPM_GNUC_INTERNAL
int rpmcpioHeaderWrite(rpmcpio_t cpio, char * path, struct stat * st);
+RPM_GNUC_INTERNAL
+int rpmcpioStrippedHeaderWrite(rpmcpio_t cpio, int fx, off_t fsize);
-ssize_t rpmcpioWrite(rpmcpio_t cpio, void * buf, size_t size);
+ssize_t rpmcpioWrite(rpmcpio_t cpio, const void * buf, size_t size);
/**
- * Read cpio header.
+ * Read cpio header. Iff fx is returned as -1 a cpio header was read
+ * and the file name is found in path. Otherwise a stripped header was read
+ * and the fx is the number of the file in the header/rpmfi. In this case
+ * rpmcpioSetExpectedFileSize() needs to be called with the file size of the
+ * payload content - with may be zero for hard links, directory or other
+ * special files.
* @retval fsm file path and stat info
- * @retval st
+ * @retval path path of the file
+ * @retval fx number in the header of the file read
* @return 0 on success
*/
RPM_GNUC_INTERNAL
-int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, struct stat * st);
-
-ssize_t rpmcpioRead(rpmcpio_t cpio, void * buf, size_t size);
+int rpmcpioHeaderRead(rpmcpio_t cpio, char ** path, int * fx);
-/** \ingroup payload
- * Return formatted error message on payload handling failure.
- * @param rc error code
- * @return formatted error string
+/**
+ * Tell the cpio object the expected file size in the payload.
+ * The size must be zero for all but the last of hard linked files,
+ * directories and special files.
+ * This is needed after reading a stripped cpio header! See above.
*/
-/* XXX should be RPM_GNUC_INTERNAL too but build/pack.c uses */
-const char * rpmcpioStrerror(int rc);
+RPM_GNUC_INTERNAL
+void rpmcpioSetExpectedFileSize(rpmcpio_t cpio, off_t fsize);
+
+ssize_t rpmcpioRead(rpmcpio_t cpio, void * buf, size_t size);
#ifdef __cplusplus
}
diff --git a/lib/depends.c b/lib/depends.c
index fa11725a8..4719b6738 100644
--- a/lib/depends.c
+++ b/lib/depends.c
@@ -14,8 +14,11 @@
#include "lib/rpmts_internal.h"
#include "lib/rpmte_internal.h"
#include "lib/rpmds_internal.h"
+#include "lib/rpmfi_internal.h" /* rpmfiles stuff for now */
#include "lib/misc.h"
+#include "lib/backend/dbiset.h"
+
#include "debug.h"
const char * const RPMVERSION = VERSION;
@@ -39,7 +42,7 @@ const int rpmFLAGS = RPMSENSE_EQUAL;
#undef HTKEYTYPE
#undef HTDATATYPE
-#define HASHTYPE removedHash
+#define HASHTYPE packageHash
#define HTKEYTYPE unsigned int
#define HTDATATYPE struct rpmte_s *
#include "rpmhash.C"
@@ -47,6 +50,28 @@ const int rpmFLAGS = RPMSENSE_EQUAL;
#undef HTKEYTYPE
#undef HTDATATYPE
+#define HASHTYPE filedepHash
+#define HTKEYTYPE const char *
+#define HTDATATYPE const char *
+#include "rpmhash.H"
+#include "rpmhash.C"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+
+#define HASHTYPE depexistsHash
+#define HTKEYTYPE const char *
+#include "lib/rpmhash.H"
+#include "lib/rpmhash.C"
+#undef HASHTYPE
+#undef HTKEYTYPE
+
+enum addOp_e {
+ RPMTE_INSTALL = 0,
+ RPMTE_UPGRADE = 1,
+ RPMTE_REINSTALL = 2,
+};
+
/**
* Check for supported payload format in header.
* @param h header to check
@@ -88,22 +113,23 @@ static rpmRC headerCheckPayloadFormat(Header h) {
static int removePackage(rpmts ts, Header h, rpmte depends)
{
tsMembers tsmem = rpmtsMembers(ts);
- rpmte p;
+ rpmte p, *pp;
unsigned int dboffset = headerGetInstance(h);
/* Can't remove what's not installed */
if (dboffset == 0) return 1;
/* Filter out duplicate erasures. */
- if (removedHashHasEntry(tsmem->removedPackages, dboffset)) {
- return 0;
+ if (packageHashGetEntry(tsmem->removedPackages, dboffset, &pp, NULL, NULL)) {
+ rpmteSetDependsOn(pp[0], depends);
+ return 0;
}
p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL);
if (p == NULL)
return 1;
- removedHashAddEntry(tsmem->removedPackages, dboffset, p);
+ packageHashAddEntry(tsmem->removedPackages, dboffset, p);
if (tsmem->orderCount >= tsmem->orderAlloced) {
tsmem->orderAlloced += (tsmem->orderCount - tsmem->orderAlloced) + tsmem->delta;
@@ -119,7 +145,7 @@ static int removePackage(rpmts ts, Header h, rpmte depends)
}
/* Return rpmdb iterator with removals optionally pruned out */
-static rpmdbMatchIterator rpmtsPrunedIterator(rpmts ts, rpmDbiTagVal tag,
+rpmdbMatchIterator rpmtsPrunedIterator(rpmts ts, rpmDbiTagVal tag,
const char * key, int prune)
{
rpmdbMatchIterator mi = rpmtsInitIterator(ts, tag, key, 0);
@@ -163,22 +189,29 @@ static int rpmNameVersionCompare(Header first, Header second)
}
/* Add erase elements for older packages of same color (if any). */
-static int addUpgradeErasures(rpmts ts, rpm_color_t tscolor,
+static int addSelfErasures(rpmts ts, rpm_color_t tscolor, int op,
rpmte p, rpm_color_t hcolor, Header h)
{
Header oh;
rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(p), 0);
int rc = 0;
+ int cmp;
- while((oh = rpmdbNextIterator(mi)) != NULL) {
+ while ((oh = rpmdbNextIterator(mi)) != NULL) {
/* Ignore colored packages not in our rainbow. */
if (skipColor(tscolor, hcolor, headerGetNumber(oh, RPMTAG_HEADERCOLOR)))
continue;
- /* Skip packages that contain identical NEVRA. */
- if (rpmNameVersionCompare(h, oh) == 0)
+ cmp = rpmNameVersionCompare(h, oh);
+
+ /* On upgrade, skip packages that contain identical NEVR. */
+ if ((op == RPMTE_UPGRADE) && (cmp == 0))
continue;
+ /* On reinstall, skip packages with differing NEVR. */
+ if ((op == RPMTE_REINSTALL) && (cmp != 0))
+ continue;
+
if (removePackage(ts, oh, p)) {
rc = 1;
break;
@@ -205,7 +238,7 @@ static int addObsoleteErasures(rpmts ts, rpm_color_t tscolor, rpmte p)
mi = rpmtsPrunedIterator(ts, RPMDBI_NAME, Name, 1);
- while((oh = rpmdbNextIterator(mi)) != NULL) {
+ while ((oh = rpmdbNextIterator(mi)) != NULL) {
const char *oarch = headerGetString(oh, RPMTAG_ARCH);
int match;
@@ -396,8 +429,8 @@ rpmal rpmtsCreateAl(rpmts ts, rpmElementTypes types)
return al;
}
-int rpmtsAddInstallElement(rpmts ts, Header h,
- fnpyKey key, int upgrade, rpmRelocation * relocs)
+static int addPackage(rpmts ts, Header h,
+ fnpyKey key, int op, rpmRelocation * relocs)
{
tsMembers tsmem = rpmtsMembers(ts);
rpm_color_t tscolor = rpmtsColor(ts);
@@ -414,10 +447,10 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
/* Source packages are never "upgraded" */
if (isSource)
- upgrade = 0;
+ op = RPMTE_INSTALL;
/* Do lazy (readonly?) open of rpm database for upgrades. */
- if (upgrade && rpmtsGetRdb(ts) == NULL && rpmtsGetDBMode(ts) != -1) {
+ if (op != RPMTE_INSTALL && rpmtsGetRdb(ts) == NULL && rpmtsGetDBMode(ts) != -1) {
if ((ec = rpmtsOpenDB(ts, rpmtsGetDBMode(ts))) != 0)
goto exit;
}
@@ -430,7 +463,7 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
/* Check binary packages for redundancies in the set */
if (!isSource) {
- oc = findPos(ts, tscolor, p, upgrade);
+ oc = findPos(ts, tscolor, p, (op == RPMTE_UPGRADE));
/* If we're replacing a previously added element, free the old one */
if (oc >= 0 && oc < tsmem->orderCount) {
rpmalDel(tsmem->addedPackages, tsmem->order[oc]);
@@ -462,22 +495,42 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
/* Add erasure elements for old versions and obsoletions on upgrades */
/* XXX TODO: If either of these fails, we'd need to undo all additions */
- if (upgrade) {
- addUpgradeErasures(ts, tscolor, p, rpmteColor(p), h);
+ if (op != RPMTE_INSTALL)
+ addSelfErasures(ts, tscolor, op, p, rpmteColor(p), h);
+ if (op == RPMTE_UPGRADE)
addObsoleteErasures(ts, tscolor, p);
- }
exit:
return ec;
}
+int rpmtsAddInstallElement(rpmts ts, Header h,
+ fnpyKey key, int upgrade, rpmRelocation * relocs)
+{
+ int op = (upgrade == 0) ? RPMTE_INSTALL : RPMTE_UPGRADE;
+ if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL)
+ return 1;
+ return addPackage(ts, h, key, op, relocs);
+}
+
+int rpmtsAddReinstallElement(rpmts ts, Header h, fnpyKey key)
+{
+ if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL)
+ return 1;
+ /* TODO: pull relocations from installed package */
+ /* TODO: should reinstall of non-installed package fail? */
+ return addPackage(ts, h, key, RPMTE_REINSTALL, NULL);
+}
+
int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
{
+ if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL)
+ return 1;
return removePackage(ts, h, NULL);
}
/* Cached rpmdb provide lookup, returns 0 if satisfied, 1 otherwise */
-static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
+static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep, dbiIndexSet *matches)
{
const char * Name = rpmdsN(dep);
const char * DNEVR = rpmdsDNEVR(dep);
@@ -491,7 +544,7 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
unsigned int keyhash = 0;
/* See if we already looked this up */
- if (prune) {
+ if (prune && !matches) {
keyhash = depCacheKeyHash(dcache, DNEVR);
if (depCacheGetHEntry(dcache, DNEVR, keyhash, &cachedrc, NULL, NULL)) {
rc = *cachedrc;
@@ -500,6 +553,8 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
}
}
+ if (matches)
+ *matches = dbiIndexSetNew(0);
/*
* See if a filename dependency is a real file in some package,
* taking file state into account: replaced, wrong colored and
@@ -508,6 +563,16 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
if (deptag != RPMTAG_OBSOLETENAME && Name[0] == '/') {
mi = rpmtsPrunedIterator(ts, RPMDBI_INSTFILENAMES, Name, prune);
while ((h = rpmdbNextIterator(mi)) != NULL) {
+ /* Ignore self-conflicts */
+ if (deptag == RPMTAG_CONFLICTNAME) {
+ unsigned int instance = headerGetInstance(h);
+ if (instance && instance == rpmdsInstance(dep))
+ continue;
+ }
+ if (matches) {
+ dbiIndexSetAppendOne(*matches, headerGetInstance(h), 0, 0);
+ continue;
+ }
rpmdsNotify(dep, "(db files)", rc);
break;
}
@@ -531,7 +596,17 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
int prix = (selfevr) ? -1 : rpmdbGetIteratorFileNum(mi);
int match = rpmdsMatches(tspool, h, prix, dep, selfevr,
_rpmds_nopromote);
+ /* Ignore self-obsoletes and self-conflicts */
+ if (match && (deptag == RPMTAG_OBSOLETENAME || deptag == RPMTAG_CONFLICTNAME)) {
+ unsigned int instance = headerGetInstance(h);
+ if (instance && instance == rpmdsInstance(dep))
+ match = 0;
+ }
if (match) {
+ if (matches) {
+ dbiIndexSetAppendOne(*matches, headerGetInstance(h), 0, 0);
+ continue;
+ }
rpmdsNotify(dep, "(db provides)", rc);
break;
}
@@ -540,16 +615,85 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
}
rc = (h != NULL) ? 0 : 1;
+ if (matches) {
+ dbiIndexSetUniq(*matches, 0);
+ rc = dbiIndexSetCount(*matches) ? 0 : 1;
+ }
+
/* Cache the relatively expensive rpmdb lookup results */
/* Caching the oddball non-pruned case would mess up other results */
- if (prune)
+ if (prune && !matches)
depCacheAddHEntry(dcache, xstrdup(DNEVR), keyhash, rc);
return rc;
}
+static dbiIndexSet unsatisfiedDependSet(rpmts ts, rpmds dep)
+{
+ dbiIndexSet set1 = NULL, set2 = NULL;
+ tsMembers tsmem = rpmtsMembers(ts);
+ rpmsenseFlags dsflags = rpmdsFlags(dep);
+
+ if (dsflags & RPMSENSE_RPMLIB)
+ goto exit;
+
+ if (rpmdsIsRich(dep)) {
+ rpmds ds1, ds2;
+ rpmrichOp op;
+ char *emsg = 0;
+
+ if (rpmdsParseRichDep(dep, &ds1, &ds2, &op, &emsg) != RPMRC_OK) {
+ rpmdsNotify(dep, emsg ? emsg : "(parse error)", 1);
+ _free(emsg);
+ goto exit;
+ }
+ /* only a subset of ops is supported in set mode */
+ if (op != RPMRICHOP_WITH && op != RPMRICHOP_WITHOUT
+ && op != RPMRICHOP_OR && op != RPMRICHOP_SINGLE) {
+ rpmdsNotify(dep, "(unsupported op in set mode)", 1);
+ goto exit_rich;
+ }
+
+ set1 = unsatisfiedDependSet(ts, ds1);
+ if (op == RPMRICHOP_SINGLE)
+ goto exit_rich;
+ if (op != RPMRICHOP_OR && dbiIndexSetCount(set1) == 0)
+ goto exit_rich;
+ set2 = unsatisfiedDependSet(ts, ds2);
+ if (op == RPMRICHOP_WITH) {
+ dbiIndexSetFilterSet(set1, set2, 0);
+ } else if (op == RPMRICHOP_WITHOUT) {
+ dbiIndexSetPruneSet(set1, set2, 0);
+ } else if (op == RPMRICHOP_OR) {
+ dbiIndexSetAppendSet(set1, set2, 0);
+ }
+exit_rich:
+ ds1 = rpmdsFree(ds1);
+ ds2 = rpmdsFree(ds2);
+ goto exit;
+ }
+
+ /* match database entries */
+ rpmdbProvides(ts, NULL, dep, &set1);
+
+ /* Pretrans dependencies can't be satisfied by added packages. */
+ if (!(dsflags & RPMSENSE_PRETRANS)) {
+ rpmte *matches = rpmalAllSatisfiesDepend(tsmem->addedPackages, dep);
+ if (matches) {
+ for (rpmte *p = matches; *p; p++)
+ dbiIndexSetAppendOne(set1, rpmalLookupTE(tsmem->addedPackages, *p), 1, 0);
+ }
+ _free(matches);
+ }
+
+exit:
+ set2 = dbiIndexSetFree(set2);
+ return set1 ? set1 : dbiIndexSetNew(0);
+}
+
/**
* Check dep for an unsatisfied dependency.
* @param ts transaction set
+ * @param dcache dependency cache
* @param dep dependency
* @return 0 if satisfied, 1 if not satisfied
*/
@@ -584,29 +728,78 @@ retry:
if (!adding && isInstallPreReq(dsflags) && !isErasePreReq(dsflags))
goto exit;
+ /* Handle rich dependencies */
+ if (rpmdsIsRich(dep)) {
+ rpmds ds1, ds2;
+ rpmrichOp op;
+ char *emsg = 0;
+ if (rpmdsParseRichDep(dep, &ds1, &ds2, &op, &emsg) != RPMRC_OK) {
+ rc = rpmdsTagN(dep) == RPMTAG_CONFLICTNAME ? 0 : 1;
+ if (rpmdsInstance(dep) != 0)
+ rc = !rc; /* ignore errors for installed packages */
+ rpmdsNotify(dep, emsg ? emsg : "(parse error)", rc);
+ _free(emsg);
+ goto exit;
+ }
+ if (op == RPMRICHOP_WITH || op == RPMRICHOP_WITHOUT) {
+ /* switch to set mode processing */
+ dbiIndexSet set = unsatisfiedDependSet(ts, dep);
+ rc = dbiIndexSetCount(set) ? 0 : 1;
+ dbiIndexSetFree(set);
+ ds1 = rpmdsFree(ds1);
+ ds2 = rpmdsFree(ds2);
+ rpmdsNotify(dep, "(rich)", rc);
+ goto exit;
+ }
+ if (op == RPMRICHOP_IF || op == RPMRICHOP_UNLESS) {
+ /* A IF B -> A OR NOT(B) */
+ /* A UNLESS B -> A AND NOT(B) */
+ if (rpmdsIsRich(ds2)) {
+ /* check if this has an ELSE clause */
+ rpmds ds21 = NULL, ds22 = NULL;
+ rpmrichOp op2;
+ if (rpmdsParseRichDep(ds2, &ds21, &ds22, &op2, NULL) == RPMRC_OK && op2 == RPMRICHOP_ELSE) {
+ /* A IF B ELSE C -> (A OR NOT(B)) AND (C OR B) */
+ /* A UNLESS B ELSE C -> (A AND NOT(B)) OR (C AND B) */
+ rc = !unsatisfiedDepend(ts, dcache, ds21); /* NOT(B) */
+ if ((rc && op == RPMRICHOP_IF) || (!rc && op == RPMRICHOP_UNLESS)) {
+ rc = unsatisfiedDepend(ts, dcache, ds1); /* A */
+ } else {
+ rc = unsatisfiedDepend(ts, dcache, ds22); /* C */
+ }
+ rpmdsFree(ds21);
+ rpmdsFree(ds22);
+ goto exitrich;
+ }
+ rpmdsFree(ds21);
+ rpmdsFree(ds22);
+ }
+ rc = !unsatisfiedDepend(ts, dcache, ds2); /* NOT(B) */
+ if ((rc && op == RPMRICHOP_IF) || (!rc && op == RPMRICHOP_UNLESS))
+ rc = unsatisfiedDepend(ts, dcache, ds1);
+ } else {
+ rc = unsatisfiedDepend(ts, dcache, ds1);
+ if ((rc && op == RPMRICHOP_OR) || (!rc && op == RPMRICHOP_AND))
+ rc = unsatisfiedDepend(ts, dcache, ds2);
+ }
+exitrich:
+ ds1 = rpmdsFree(ds1);
+ ds2 = rpmdsFree(ds2);
+ rpmdsNotify(dep, "(rich)", rc);
+ goto exit;
+ }
+
/* Pretrans dependencies can't be satisfied by added packages. */
if (!(dsflags & RPMSENSE_PRETRANS)) {
- rpmte match = rpmalSatisfiesDepend(tsmem->addedPackages, dep);
-
- /*
- * Handle definitive matches within the added package set.
- * Self-obsoletes and -conflicts fall through here as we need to
- * check for possible other matches in the rpmdb.
- */
- if (match) {
- rpmTagVal dtag = rpmdsTagN(dep);
- /* Requires match, look no further */
- if (dtag == RPMTAG_REQUIRENAME)
- goto exit;
-
- /* Conflicts/obsoletes match on another package, look no further */
- if (rpmteDS(match, dtag) != dep)
- goto exit;
- }
+ rpmte *matches = rpmalAllSatisfiesDepend(tsmem->addedPackages, dep);
+ int match = matches && *matches;
+ _free(matches);
+ if (match)
+ goto exit;
}
/* See if the rpmdb provides it */
- if (rpmdbProvides(ts, dcache, dep) == 0)
+ if (rpmdbProvides(ts, dcache, dep, NULL) == 0)
goto exit;
/* Search for an unsatisfied dependency. */
@@ -637,7 +830,7 @@ exit:
/* Check a dependency set for problems */
static void checkDS(rpmts ts, depCache dcache, rpmte te,
const char * pkgNEVRA, rpmds ds,
- const char * depName, rpm_color_t tscolor)
+ rpm_color_t tscolor)
{
rpm_color_t dscolor;
/* require-problems are unsatisfied, others appear "satisfied" */
@@ -645,10 +838,6 @@ static void checkDS(rpmts ts, depCache dcache, rpmte te,
ds = rpmdsInit(ds);
while (rpmdsNext(ds) >= 0) {
- /* Filter out dependencies that came along for the ride. */
- if (depName != NULL && !rstreq(depName, rpmdsN(ds)))
- continue;
-
/* Ignore colored dependencies not in our rainbow. */
dscolor = rpmdsColor(ds);
if (tscolor && dscolor && !(tscolor & dscolor))
@@ -659,19 +848,33 @@ static void checkDS(rpmts ts, depCache dcache, rpmte te,
}
}
-/* Check a given dependency type against installed packages */
+/* Check a given dependency against installed packages */
static void checkInstDeps(rpmts ts, depCache dcache, rpmte te,
rpmTag depTag, const char *dep)
{
Header h;
rpmdbMatchIterator mi = rpmtsPrunedIterator(ts, depTag, dep, 1);
rpmstrPool pool = rpmtsPool(ts);
+ /* require-problems are unsatisfied, others appear "satisfied" */
+ int is_problem = (depTag == RPMTAG_REQUIRENAME);
while ((h = rpmdbNextIterator(mi)) != NULL) {
- char * pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA);
- rpmds ds = rpmdsNewPool(pool, h, depTag, 0);
+ char * pkgNEVRA;
+ rpmds ds;
- checkDS(ts, dcache, te, pkgNEVRA, ds, dep, 0);
+ /* Ignore self-obsoletes and self-conflicts */
+ if (depTag == RPMTAG_OBSOLETENAME || depTag == RPMTAG_CONFLICTNAME) {
+ unsigned int instance = headerGetInstance(h);
+ if (instance && instance == rpmteDBInstance(te))
+ continue;
+ }
+
+ pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA);
+ ds = rpmdsNewPool(pool, h, depTag, 0);
+ rpmdsSetIx(ds, rpmdbGetIteratorFileNum(mi));
+
+ if (unsatisfiedDepend(ts, dcache, ds) == is_problem)
+ rpmteAddDepProblem(te, pkgNEVRA, ds, NULL);
rpmdsFree(ds);
free(pkgNEVRA);
@@ -679,6 +882,116 @@ static void checkInstDeps(rpmts ts, depCache dcache, rpmte te,
rpmdbFreeIterator(mi);
}
+static void checkNotInstDeps(rpmts ts, depCache dcache, rpmte te,
+ rpmTag depTag, const char *dep)
+{
+ char *ndep = rmalloc(strlen(dep) + 2);
+ ndep[0] = '!';
+ strcpy(ndep + 1, dep);
+ checkInstDeps(ts, dcache, te, depTag, ndep);
+ free(ndep);
+}
+
+static void checkInstFileDeps(rpmts ts, depCache dcache, rpmte te,
+ rpmTag depTag, rpmfi fi, int is_not,
+ filedepHash cache, fingerPrintCache *fpcp)
+{
+ fingerPrintCache fpc = *fpcp;
+ fingerPrint * fp = NULL;
+ const char *basename = rpmfiBN(fi);
+ const char *dirname;
+ const char **dirnames = 0;
+ int ndirnames = 0;
+ int i;
+
+ filedepHashGetEntry(cache, basename, &dirnames, &ndirnames, NULL);
+ if (!ndirnames)
+ return;
+ if (!fpc)
+ *fpcp = fpc = fpCacheCreate(1001, NULL);
+ dirname = rpmfiDN(fi);
+ fpLookup(fpc, dirname, basename, &fp);
+ for (i = 0; i < ndirnames; i++) {
+ char *fpdep = 0;
+ const char *dep;
+ if (!strcmp(dirnames[i], dirname)) {
+ dep = rpmfiFN(fi);
+ } else if (fpLookupEquals(fpc, fp, dirnames[i], basename)) {
+ fpdep = rmalloc(strlen(dirnames[i]) + strlen(basename) + 1);
+ strcpy(fpdep, dirnames[i]);
+ strcat(fpdep, basename);
+ dep = fpdep;
+ } else {
+ continue;
+ }
+ if (!is_not)
+ checkInstDeps(ts, dcache, te, depTag, dep);
+ else
+ checkNotInstDeps(ts, dcache, te, depTag, dep);
+ _free(fpdep);
+ }
+ _free(fp);
+}
+
+static void addFileDepToHash(filedepHash hash, char *key, size_t keylen)
+{
+ int i;
+ char *basename, *dirname;
+ if (!keylen || key[0] != '/')
+ return;
+ for (i = keylen - 1; key[i] != '/'; i--)
+ ;
+ dirname = rmalloc(i + 2);
+ memcpy(dirname, key, i + 1);
+ dirname[i + 1] = 0;
+ basename = rmalloc(keylen - i);
+ memcpy(basename, key + i + 1, keylen - i - 1);
+ basename[keylen - i - 1] = 0;
+ filedepHashAddEntry(hash, basename, dirname);
+}
+
+static void addDepToHash(depexistsHash hash, char *key, size_t keylen)
+{
+ char *keystr;
+ if (!keylen)
+ return;
+ keystr = rmalloc(keylen + 1);
+ strncpy(keystr, key, keylen);
+ keystr[keylen] = 0;
+ depexistsHashAddEntry(hash, keystr);
+}
+
+static void addIndexToDepHashes(rpmts ts, rpmDbiTag tag,
+ depexistsHash dephash, filedepHash filehash,
+ depexistsHash depnothash, filedepHash filenothash)
+{
+ char *key;
+ size_t keylen;
+ rpmdbIndexIterator ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), tag);
+
+ if (!ii)
+ return;
+ while ((rpmdbIndexIteratorNext(ii, (const void**)&key, &keylen)) == 0) {
+ if (!key || !keylen)
+ continue;
+ if (*key == '!' && keylen > 1) {
+ key++;
+ keylen--;
+ if (*key == '/' && filenothash)
+ addFileDepToHash(filenothash, key, keylen);
+ if (depnothash)
+ addDepToHash(depnothash, key, keylen);
+ } else {
+ if (*key == '/' && filehash)
+ addFileDepToHash(filehash, key, keylen);
+ if (dephash)
+ addDepToHash(dephash, key, keylen);
+ }
+ }
+ rpmdbIndexIteratorFree(ii);
+}
+
+
int rpmtsCheck(rpmts ts)
{
rpm_color_t tscolor = rpmtsColor(ts);
@@ -686,20 +999,67 @@ int rpmtsCheck(rpmts ts)
int closeatexit = 0;
int rc = 0;
depCache dcache = NULL;
+ filedepHash confilehash = NULL; /* file conflicts of installed packages */
+ filedepHash connotfilehash = NULL; /* file conflicts of installed packages */
+ depexistsHash connothash = NULL;
+ filedepHash reqfilehash = NULL; /* file requires of installed packages */
+ filedepHash reqnotfilehash = NULL; /* file requires of installed packages */
+ depexistsHash reqnothash = NULL;
+ fingerPrintCache fpc = NULL;
+ rpmdb rdb = NULL;
(void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_CHECK), 0);
/* Do lazy, readonly, open of rpm database. */
- if (rpmtsGetRdb(ts) == NULL && rpmtsGetDBMode(ts) != -1) {
+ rdb = rpmtsGetRdb(ts);
+ if (rdb == NULL && rpmtsGetDBMode(ts) != -1) {
if ((rc = rpmtsOpenDB(ts, rpmtsGetDBMode(ts))) != 0)
goto exit;
+ rdb = rpmtsGetRdb(ts);
closeatexit = 1;
}
+ if (rdb)
+ rpmdbCtrl(rdb, RPMDB_CTRL_LOCK_RO);
+
/* XXX FIXME: figure some kind of heuristic for the cache size */
dcache = depCacheCreate(5001, rstrhash, strcmp,
(depCacheFreeKey)rfree, NULL);
+ /* build hashes of all confilict sdependencies */
+ confilehash = filedepHashCreate(257, rstrhash, strcmp,
+ (filedepHashFreeKey)rfree,
+ (filedepHashFreeData)rfree);
+ connothash = depexistsHashCreate(257, rstrhash, strcmp,
+ (filedepHashFreeKey)rfree);
+ connotfilehash = filedepHashCreate(257, rstrhash, strcmp,
+ (filedepHashFreeKey)rfree,
+ (filedepHashFreeData)rfree);
+ addIndexToDepHashes(ts, RPMTAG_CONFLICTNAME, NULL, confilehash, connothash, connotfilehash);
+ if (!filedepHashNumKeys(confilehash))
+ confilehash = filedepHashFree(confilehash);
+ if (!depexistsHashNumKeys(connothash))
+ connothash= depexistsHashFree(connothash);
+ if (!filedepHashNumKeys(connotfilehash))
+ connotfilehash = filedepHashFree(connotfilehash);
+
+ /* build hashes of all requires dependencies */
+ reqfilehash = filedepHashCreate(8191, rstrhash, strcmp,
+ (filedepHashFreeKey)rfree,
+ (filedepHashFreeData)rfree);
+ reqnothash = depexistsHashCreate(257, rstrhash, strcmp,
+ (filedepHashFreeKey)rfree);
+ reqnotfilehash = filedepHashCreate(257, rstrhash, strcmp,
+ (filedepHashFreeKey)rfree,
+ (filedepHashFreeData)rfree);
+ addIndexToDepHashes(ts, RPMTAG_REQUIRENAME, NULL, reqfilehash, reqnothash, reqnotfilehash);
+ if (!filedepHashNumKeys(reqfilehash))
+ reqfilehash = filedepHashFree(reqfilehash);
+ if (!depexistsHashNumKeys(reqnothash))
+ reqnothash= depexistsHashFree(reqnothash);
+ if (!filedepHashNumKeys(reqnotfilehash))
+ reqnotfilehash = filedepHashFree(reqnotfilehash);
+
/*
* Look at all of the added packages and make sure their dependencies
* are satisfied.
@@ -712,15 +1072,18 @@ int rpmtsCheck(rpmts ts)
rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p));
checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_REQUIRENAME),
- NULL, tscolor);
+ tscolor);
checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_CONFLICTNAME),
- NULL, tscolor);
+ tscolor);
checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_OBSOLETENAME),
- NULL, tscolor);
+ tscolor);
/* Check provides against conflicts in installed packages. */
while (rpmdsNext(provides) >= 0) {
- checkInstDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, rpmdsN(provides));
+ const char *dep = rpmdsN(provides);
+ checkInstDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, dep);
+ if (reqnothash && depexistsHashHasEntry(reqnothash, dep))
+ checkNotInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, dep);
}
/* Skip obsoletion checks for source packages (ie build) */
@@ -729,6 +1092,20 @@ int rpmtsCheck(rpmts ts)
/* Check package name (not provides!) against installed obsoletes */
checkInstDeps(ts, dcache, p, RPMTAG_OBSOLETENAME, rpmteN(p));
+
+ /* Check filenames against installed conflicts */
+ if (confilehash || reqnotfilehash) {
+ rpmfiles files = rpmteFiles(p);
+ rpmfi fi = rpmfilesIter(files, RPMFI_ITER_FWD);
+ while (rpmfiNext(fi) >= 0) {
+ if (confilehash)
+ checkInstFileDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, fi, 0, confilehash, &fpc);
+ if (reqnotfilehash)
+ checkInstFileDeps(ts, dcache, p, RPMTAG_REQUIRENAME, fi, 1, reqnotfilehash, &fpc);
+ }
+ rpmfiFree(fi);
+ rpmfilesFree(files);
+ }
}
rpmtsiFree(pi);
@@ -738,25 +1115,47 @@ int rpmtsCheck(rpmts ts)
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, TR_REMOVED)) != NULL) {
rpmds provides = rpmdsInit(rpmteDS(p, RPMTAG_PROVIDENAME));
- rpmfi fi = rpmfiInit(rpmteFI(p), 0);
rpmlog(RPMLOG_DEBUG, "========== --- %s %s/%s 0x%x\n",
rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p));
/* Check provides and filenames against installed dependencies. */
while (rpmdsNext(provides) >= 0) {
- checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, rpmdsN(provides));
+ const char *dep = rpmdsN(provides);
+ checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, dep);
+ if (connothash && depexistsHashHasEntry(connothash, dep))
+ checkNotInstDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, dep);
}
- while (rpmfiNext(fi) >= 0) {
- if (RPMFILE_IS_INSTALLED(rpmfiFState(fi)))
- checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, rpmfiFN(fi));
+ if (reqfilehash || connotfilehash) {
+ rpmfiles files = rpmteFiles(p);
+ rpmfi fi = rpmfilesIter(files, RPMFI_ITER_FWD);;
+ while (rpmfiNext(fi) >= 0) {
+ if (RPMFILE_IS_INSTALLED(rpmfiFState(fi))) {
+ if (reqfilehash)
+ checkInstFileDeps(ts, dcache, p, RPMTAG_REQUIRENAME, fi, 0, reqfilehash, &fpc);
+ if (connotfilehash)
+ checkInstFileDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, fi, 1, connotfilehash, &fpc);
+ }
+ }
+ rpmfiFree(fi);
+ rpmfilesFree(files);
}
}
rpmtsiFree(pi);
+ if (rdb)
+ rpmdbCtrl(rdb, RPMDB_CTRL_UNLOCK_RO);
+
exit:
depCacheFree(dcache);
+ filedepHashFree(confilehash);
+ filedepHashFree(connotfilehash);
+ depexistsHashFree(connothash);
+ filedepHashFree(reqfilehash);
+ filedepHashFree(reqnotfilehash);
+ depexistsHashFree(reqnothash);
+ fpCacheFree(fpc);
(void) rpmswExit(rpmtsOp(ts, RPMTS_OP_CHECK), 0);
diff --git a/lib/formats.c b/lib/formats.c
index 23f40277f..cd69073ea 100644
--- a/lib/formats.c
+++ b/lib/formats.c
@@ -21,22 +21,34 @@
#include "debug.h"
+#define RPM_ANY_CLASS 255
+
+typedef char * (*headerTagFormatFunction) (rpmtd td, char **emsg);
+
/** \ingroup header
* Define header tag output formats.
*/
-struct headerFormatFunc_s {
+struct headerFmt_s {
rpmtdFormats fmt; /*!< Value of extension */
const char *name; /*!< Name of extension. */
+ rpmTagClass class; /*!< Class of source data (RPM_ANY_CLASS for any) */
headerTagFormatFunction func; /*!< Pointer to formatter function. */
};
-/**
- * barebones string representation with no extra formatting
- * @param td tag data container
- * @return formatted string
- */
-static char * stringFormat(rpmtd td)
+static const char *classEr(rpmTagClass class)
+{
+ switch (class) {
+ case RPM_BINARY_CLASS: return _("(not a blob)");
+ case RPM_NUMERIC_CLASS: return _("(not a number)");
+ case RPM_STRING_CLASS: return _("(not a string)");
+ default: break;
+ }
+ return _("(invalid type)");
+}
+
+/* barebones string representation with no extra formatting */
+static char * stringFormat(rpmtd td, char **emsg)
{
char *val = NULL;
@@ -44,109 +56,80 @@ static char * stringFormat(rpmtd td)
case RPM_NUMERIC_CLASS:
rasprintf(&val, "%" PRIu64, rpmtdGetNumber(td));
break;
- case RPM_STRING_CLASS:
- val = xstrdup(rpmtdGetString(td));
+ case RPM_STRING_CLASS: {
+ const char *str = rpmtdGetString(td);
+ if (str)
+ val = xstrdup(str);
break;
+ }
case RPM_BINARY_CLASS:
val = pgpHexStr(td->data, td->count);
break;
default:
- val = xstrdup("(unknown type)");
+ *emsg = xstrdup("(unknown type)");
break;
}
return val;
}
+/* arbitrary number format as per format arg */
static char * numFormat(rpmtd td, const char *format)
{
char * val = NULL;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- rasprintf(&val, format, rpmtdGetNumber(td));
- }
-
+ rasprintf(&val, format, rpmtdGetNumber(td));
return val;
}
-/**
- * octalFormat.
- * @param td tag data container
- * @return formatted string
- */
-static char * octalFormat(rpmtd td)
+
+/* octal number formatting */
+static char * octalFormat(rpmtd td, char **emsg)
{
return numFormat(td, "%o");
}
-/**
- * hexFormat.
- * @param td tag data container
- * @return formatted string
- */
-static char * hexFormat(rpmtd td)
+/* hexadecimal format */
+static char * hexFormat(rpmtd td, char **emsg)
{
return numFormat(td, "%x");
}
-/**
- * @param td tag data container
- * @return formatted string
- */
-static char * realDateFormat(rpmtd td, const char * strftimeFormat)
+/* arbitrary date formatting as per strftimeFormat arg */
+static char * realDateFormat(rpmtd td, const char * strftimeFormat, char **emsg)
{
char * val = NULL;
+ struct tm * tstruct;
+ char buf[1024];
+ time_t dateint = rpmtdGetNumber(td);
+ tstruct = localtime(&dateint);
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- struct tm * tstruct;
- char buf[50];
- time_t dateint = rpmtdGetNumber(td);
- tstruct = localtime(&dateint);
-
- /* XXX TODO: deal with non-fitting date string correctly */
- buf[0] = '\0';
- if (tstruct)
- (void) strftime(buf, sizeof(buf) - 1, strftimeFormat, tstruct);
- val = xstrdup(buf);
- }
+ buf[0] = '\0';
+ if (tstruct)
+ if (strftime(buf, sizeof(buf) - 1, strftimeFormat, tstruct) == 0)
+ *emsg = xstrdup("date output too long");
+ val = xstrdup(buf);
return val;
}
-/**
- * Format a date.
- * @param td tag data container
- * @return formatted string
- */
-static char * dateFormat(rpmtd td)
+/* date formatting */
+static char * dateFormat(rpmtd td, char **emsg)
{
- return realDateFormat(td, _("%c"));
+ return realDateFormat(td, _("%c"), emsg);
}
-/**
- * Format a day.
- * @param td tag data container
- * @return formatted string
- */
-static char * dayFormat(rpmtd td)
+/* day formatting */
+static char * dayFormat(rpmtd td, char **emsg)
{
- return realDateFormat(td, _("%a %b %d %Y"));
+ return realDateFormat(td, _("%a %b %d %Y"), emsg);
}
-/**
- * Return shell escape formatted data.
- * @param td tag data container
- * @return formatted string
- */
-static char * shescapeFormat(rpmtd td)
+/* shell escape formatting */
+static char * shescapeFormat(rpmtd td, char **emsg)
{
char * result = NULL, * dst, * src;
if (rpmtdClass(td) == RPM_NUMERIC_CLASS) {
rasprintf(&result, "%" PRIu64, rpmtdGetNumber(td));
- } else {
+ } else if (rpmtdClass(td) == RPM_STRING_CLASS) {
char *buf = xstrdup(rpmtdGetString(td));;
result = dst = xmalloc(strlen(buf) * 4 + 3);
@@ -164,139 +147,95 @@ static char * shescapeFormat(rpmtd td)
*dst++ = '\'';
*dst = '\0';
free(buf);
+ } else {
+ *emsg = xstrdup(_("(invalid type)"));
}
return result;
}
-/**
- * Identify type of trigger.
- * @param td tag data container
- * @return formatted string
- */
-static char * triggertypeFormat(rpmtd td)
+/* trigger type formatting (from rpmsense flags) */
+static char * triggertypeFormat(rpmtd td, char **emsg)
{
char * val;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- uint64_t item = rpmtdGetNumber(td);
- if (item & RPMSENSE_TRIGGERPREIN)
- val = xstrdup("prein");
- else if (item & RPMSENSE_TRIGGERIN)
- val = xstrdup("in");
- else if (item & RPMSENSE_TRIGGERUN)
- val = xstrdup("un");
- else if (item & RPMSENSE_TRIGGERPOSTUN)
- val = xstrdup("postun");
- else
- val = xstrdup("");
- }
+ uint64_t item = rpmtdGetNumber(td);
+ if (item & RPMSENSE_TRIGGERPREIN)
+ val = xstrdup("prein");
+ else if (item & RPMSENSE_TRIGGERIN)
+ val = xstrdup("in");
+ else if (item & RPMSENSE_TRIGGERUN)
+ val = xstrdup("un");
+ else if (item & RPMSENSE_TRIGGERPOSTUN)
+ val = xstrdup("postun");
+ else
+ val = xstrdup("");
return val;
}
-/**
- * Identify type of dependency.
- * @param td tag data container
- * @return formatted string
- */
-static char * deptypeFormat(rpmtd td)
+/* dependency type formatting (from rpmsense flags) */
+static char * deptypeFormat(rpmtd td, char **emsg)
{
char *val = NULL;
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
+ ARGV_t sdeps = NULL;
+ uint64_t item = rpmtdGetNumber(td);
+
+ if (item & RPMSENSE_SCRIPT_PRE)
+ argvAdd(&sdeps, "pre");
+ if (item & RPMSENSE_SCRIPT_POST)
+ argvAdd(&sdeps, "post");
+ if (item & RPMSENSE_SCRIPT_PREUN)
+ argvAdd(&sdeps, "preun");
+ if (item & RPMSENSE_SCRIPT_POSTUN)
+ argvAdd(&sdeps, "postun");
+ if (item & RPMSENSE_SCRIPT_VERIFY)
+ argvAdd(&sdeps, "verify");
+ if (item & RPMSENSE_INTERP)
+ argvAdd(&sdeps, "interp");
+ if (item & RPMSENSE_RPMLIB)
+ argvAdd(&sdeps, "rpmlib");
+ if ((item & RPMSENSE_FIND_REQUIRES) || (item & RPMSENSE_FIND_PROVIDES))
+ argvAdd(&sdeps, "auto");
+ if (item & RPMSENSE_PREREQ)
+ argvAdd(&sdeps, "prereq");
+ if (item & RPMSENSE_PRETRANS)
+ argvAdd(&sdeps, "pretrans");
+ if (item & RPMSENSE_POSTTRANS)
+ argvAdd(&sdeps, "posttrans");
+ if (item & RPMSENSE_CONFIG)
+ argvAdd(&sdeps, "config");
+ if (item & RPMSENSE_MISSINGOK)
+ argvAdd(&sdeps, "missingok");
+
+ if (sdeps) {
+ val = argvJoin(sdeps, ",");
} else {
- ARGV_t sdeps = NULL;
- uint64_t item = rpmtdGetNumber(td);
-
- if (item & RPMSENSE_SCRIPT_PRE)
- argvAdd(&sdeps, "pre");
- if (item & RPMSENSE_SCRIPT_POST)
- argvAdd(&sdeps, "post");
- if (item & RPMSENSE_SCRIPT_PREUN)
- argvAdd(&sdeps, "preun");
- if (item & RPMSENSE_SCRIPT_POSTUN)
- argvAdd(&sdeps, "postun");
- if (item & RPMSENSE_SCRIPT_VERIFY)
- argvAdd(&sdeps, "verify");
- if (item & RPMSENSE_INTERP)
- argvAdd(&sdeps, "interp");
- if (item & RPMSENSE_RPMLIB)
- argvAdd(&sdeps, "rpmlib");
- if ((item & RPMSENSE_FIND_REQUIRES) || (item & RPMSENSE_FIND_PROVIDES))
- argvAdd(&sdeps, "auto");
- if (item & RPMSENSE_PREREQ)
- argvAdd(&sdeps, "prereq");
- if (item & RPMSENSE_PRETRANS)
- argvAdd(&sdeps, "pretrans");
- if (item & RPMSENSE_POSTTRANS)
- argvAdd(&sdeps, "posttrans");
- if (item & RPMSENSE_CONFIG)
- argvAdd(&sdeps, "config");
- if (item & RPMSENSE_MISSINGOK)
- argvAdd(&sdeps, "missingok");
-
- if (sdeps) {
- val = argvJoin(sdeps, ",");
- } else {
- val = xstrdup("manual");
- }
-
- argvFree(sdeps);
+ val = xstrdup("manual");
}
+
+ argvFree(sdeps);
return val;
}
-/**
- * Format file permissions for display.
- * @param td tag data container
- * @return formatted string
- */
-static char * permsFormat(rpmtd td)
+/* file permissions formatting */
+static char * permsFormat(rpmtd td, char **emsg)
{
- char * val = NULL;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- val = rpmPermsString(rpmtdGetNumber(td));
- }
-
- return val;
+ return rpmPermsString(rpmtdGetNumber(td));
}
-/**
- * Format file flags for display.
- * @param td tag data container
- * @return formatted string
- */
-static char * fflagsFormat(rpmtd td)
+/* file flags formatting */
+static char * fflagsFormat(rpmtd td, char **emsg)
{
- char * val = NULL;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- val = rpmFFlagsString(rpmtdGetNumber(td), "");
- }
-
- return val;
+ return rpmFFlagsString(rpmtdGetNumber(td), "");
}
-/**
- * Wrap a pubkey in ascii armor for display.
- * @todo Permit selectable display formats (i.e. binary).
- * @param td tag data container
- * @return formatted string
- */
-static char * armorFormat(rpmtd td)
+/* pubkey ascii armor formatting */
+static char * armorFormat(rpmtd td, char **emsg)
{
const char * enc;
const unsigned char * s;
unsigned char * bs = NULL;
- char *val;
+ char *val = NULL;
size_t ns;
int atype;
@@ -310,8 +249,10 @@ static char * armorFormat(rpmtd td)
case RPM_STRING_TYPE:
case RPM_STRING_ARRAY_TYPE:
enc = rpmtdGetString(td);
- if (rpmBase64Decode(enc, (void **)&bs, &ns))
- return xstrdup(_("(not base64)"));
+ if (rpmBase64Decode(enc, (void **)&bs, &ns)) {
+ *emsg = xstrdup(_("(not base64)"));
+ goto exit;
+ }
s = bs;
atype = PGPARMOR_PUBKEY; /* XXX check pkt for pubkey */
break;
@@ -323,7 +264,8 @@ static char * armorFormat(rpmtd td)
case RPM_INT64_TYPE:
case RPM_I18NSTRING_TYPE:
default:
- return xstrdup(_("(invalid type)"));
+ *emsg = xstrdup(_("(invalid type)"));
+ goto exit;
break;
}
@@ -332,48 +274,35 @@ static char * armorFormat(rpmtd td)
if (atype == PGPARMOR_PUBKEY) {
free(bs);
}
+
+exit:
return val;
}
-/**
- * Encode binary data in base64 for display.
- * @todo Permit selectable display formats (i.e. binary).
- * @param td tag data container
- * @return formatted string
- */
-static char * base64Format(rpmtd td)
+/* base64 encoding formatting */
+static char * base64Format(rpmtd td, char **emsg)
{
- char * val = NULL;
-
- if (rpmtdType(td) != RPM_BIN_TYPE) {
- val = xstrdup(_("(not a blob)"));
- } else {
- val = rpmBase64Encode(td->data, td->count, -1);
- if (val == NULL)
- val = xstrdup("");
- }
+ char * val = rpmBase64Encode(td->data, td->count, -1);
+ if (val == NULL)
+ val = xstrdup("");
return val;
}
-/**
- * Wrap tag data in simple header xml markup.
- * @param td tag data container
- * @return formatted string
- */
-static char * xmlFormat(rpmtd td)
+/* xml formatting */
+static char * xmlFormat(rpmtd td, char **emsg)
{
const char *xtag = NULL;
char *val = NULL;
char *s = NULL;
- rpmtdFormats fmt = RPMTD_FORMAT_STRING;
+ headerTagFormatFunction fmt = stringFormat;
switch (rpmtdClass(td)) {
case RPM_STRING_CLASS:
xtag = "string";
break;
case RPM_BINARY_CLASS:
- fmt = RPMTD_FORMAT_BASE64;
+ fmt = base64Format;
xtag = "base64";
break;
case RPM_NUMERIC_CLASS:
@@ -381,12 +310,14 @@ static char * xmlFormat(rpmtd td)
break;
case RPM_NULL_TYPE:
default:
- return xstrdup(_("(invalid xml type)"));
+ *emsg = xstrdup(_("(invalid xml type)"));
+ goto exit;
break;
}
- /* XXX TODO: handle errors */
- s = rpmtdFormat(td, fmt, NULL);
+ s = fmt(td, emsg);
+ if (s == NULL)
+ goto exit;
if (s[0] == '\0') {
val = rstrscat(NULL, "\t<", xtag, "/>", NULL);
@@ -413,226 +344,204 @@ static char * xmlFormat(rpmtd td)
}
free(s);
+exit:
return val;
}
-/**
- * Display signature fingerprint and time.
- * @param td tag data container
- * @return formatted string
- */
-static char * pgpsigFormat(rpmtd td)
+/* signature fingerprint and time formatting */
+static char * pgpsigFormat(rpmtd td, char **emsg)
{
char * val = NULL;
+ pgpDigParams sigp = NULL;
- if (rpmtdType(td) != RPM_BIN_TYPE) {
- val = xstrdup(_("(not a blob)"));
+ if (pgpPrtParams(td->data, td->count, PGPTAG_SIGNATURE, &sigp)) {
+ *emsg = xstrdup(_("(not an OpenPGP signature)"));
} else {
- pgpDigParams sigp = NULL;
-
- if (pgpPrtParams(td->data, td->count, PGPTAG_SIGNATURE, &sigp)) {
- val = xstrdup(_("(not an OpenPGP signature)"));
+ char dbuf[BUFSIZ];
+ char *keyid = pgpHexStr(sigp->signid, sizeof(sigp->signid));
+ unsigned int dateint = sigp->time;
+ time_t date = dateint;
+ struct tm * tms = localtime(&date);
+ unsigned int key_algo = pgpDigParamsAlgo(sigp, PGPVAL_PUBKEYALGO);
+ unsigned int hash_algo = pgpDigParamsAlgo(sigp, PGPVAL_HASHALGO);
+
+ if (!(tms && strftime(dbuf, sizeof(dbuf), "%c", tms) > 0)) {
+ rasprintf(emsg, _("Invalid date %u"), dateint);
} else {
- char dbuf[BUFSIZ];
- char *keyid = pgpHexStr(sigp->signid, sizeof(sigp->signid));
- unsigned int dateint = pgpGrab(sigp->time, sizeof(sigp->time));
- time_t date = dateint;
- struct tm * tms = localtime(&date);
- unsigned int key_algo = pgpDigParamsAlgo(sigp, PGPVAL_PUBKEYALGO);
- unsigned int hash_algo = pgpDigParamsAlgo(sigp, PGPVAL_HASHALGO);
-
- if (!(tms && strftime(dbuf, sizeof(dbuf), "%c", tms) > 0)) {
- snprintf(dbuf, sizeof(dbuf),
- _("Invalid date %u"), dateint);
- dbuf[sizeof(dbuf)-1] = '\0';
- }
-
rasprintf(&val, "%s/%s, %s, Key ID %s",
- pgpValString(PGPVAL_PUBKEYALGO, key_algo),
- pgpValString(PGPVAL_HASHALGO, hash_algo),
- dbuf, keyid);
-
- free(keyid);
- pgpDigParamsFree(sigp);
+ pgpValString(PGPVAL_PUBKEYALGO, key_algo),
+ pgpValString(PGPVAL_HASHALGO, hash_algo),
+ dbuf, keyid);
}
- }
-
- return val;
-}
-/**
- * Format dependency flags for display.
- * @param td tag data container
- * @return formatted string
- */
-static char * depflagsFormat(rpmtd td)
-{
- char * val = NULL;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- uint64_t anint = rpmtdGetNumber(td);
- val = xcalloc(4, 1);
-
- if (anint & RPMSENSE_LESS)
- strcat(val, "<");
- if (anint & RPMSENSE_GREATER)
- strcat(val, ">");
- if (anint & RPMSENSE_EQUAL)
- strcat(val, "=");
+ free(keyid);
+ pgpDigParamsFree(sigp);
}
return val;
}
-static char * depflag_strongFormat(rpmtd td)
+/* dependency flags formatting */
+static char * depflagsFormat(rpmtd td, char **emsg)
{
char * val = NULL;
+ uint64_t anint = rpmtdGetNumber(td);
+ val = xcalloc(4, 1);
+
+ if (anint & RPMSENSE_LESS)
+ strcat(val, "<");
+ if (anint & RPMSENSE_GREATER)
+ strcat(val, ">");
+ if (anint & RPMSENSE_EQUAL)
+ strcat(val, "=");
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- uint64_t anint = rpmtdGetNumber(td);
- val = xstrdup(anint & RPMSENSE_STRONG ? "strong" : "");
- }
return val;
}
-
-/**
- * Return tag container array size.
- * @param td tag data container
- * @return formatted string
- */
-static char * arraysizeFormat(rpmtd td)
+/* tag container array size */
+static char * arraysizeFormat(rpmtd td, char **emsg)
{
char *val = NULL;
rasprintf(&val, "%u", rpmtdCount(td));
return val;
}
-static char * fstateFormat(rpmtd td)
+/* file state formatting */
+static char * fstateFormat(rpmtd td, char **emsg)
{
char * val = NULL;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- const char * str;
- rpmfileState fstate = rpmtdGetNumber(td);
- switch (fstate) {
- case RPMFILE_STATE_NORMAL:
- str = _("normal");
- break;
- case RPMFILE_STATE_REPLACED:
- str = _("replaced");
- break;
- case RPMFILE_STATE_NOTINSTALLED:
- str = _("not installed");
- break;
- case RPMFILE_STATE_NETSHARED:
- str = _("net shared");
- break;
- case RPMFILE_STATE_WRONGCOLOR:
- str = _("wrong color");
- break;
- case RPMFILE_STATE_MISSING:
- str = _("missing");
- break;
- default:
- str = _("(unknown)");
- break;
- }
-
- val = xstrdup(str);
+ const char * str;
+ rpmfileState fstate = rpmtdGetNumber(td);
+ switch (fstate) {
+ case RPMFILE_STATE_NORMAL:
+ str = _("normal");
+ break;
+ case RPMFILE_STATE_REPLACED:
+ str = _("replaced");
+ break;
+ case RPMFILE_STATE_NOTINSTALLED:
+ str = _("not installed");
+ break;
+ case RPMFILE_STATE_NETSHARED:
+ str = _("net shared");
+ break;
+ case RPMFILE_STATE_WRONGCOLOR:
+ str = _("wrong color");
+ break;
+ case RPMFILE_STATE_MISSING:
+ str = _("missing");
+ break;
+ default:
+ str = _("(unknown)");
+ break;
}
+
+ val = xstrdup(str);
return val;
}
+/* file verification flags formatting with optional padding */
static char * verifyFlags(rpmtd td, const char *pad)
{
- char * val = NULL;
-
- if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
- val = xstrdup(_("(not a number)"));
- } else {
- val = rpmVerifyString(rpmtdGetNumber(td), pad);
- }
- return val;
+ return rpmVerifyString(rpmtdGetNumber(td), pad);
}
-static char * vflagsFormat(rpmtd td)
+static char * vflagsFormat(rpmtd td, char **emsg)
{
return verifyFlags(td, "");
}
-static char * fstatusFormat(rpmtd td)
+static char * fstatusFormat(rpmtd td, char **emsg)
{
return verifyFlags(td, ".");
}
-static char * expandFormat(rpmtd td)
+/* macro expansion formatting */
+static char * expandFormat(rpmtd td, char **emsg)
{
- char *val = NULL;
- if (rpmtdClass(td) != RPM_STRING_CLASS) {
- val = xstrdup(_("(not a string)"));
- } else {
- val = rpmExpand(td->data, NULL);
- }
- return val;
+ return rpmExpand(rpmtdGetString(td), NULL);
}
-static const struct headerFormatFunc_s rpmHeaderFormats[] = {
- { RPMTD_FORMAT_STRING, "string", stringFormat },
- { RPMTD_FORMAT_ARMOR, "armor", armorFormat },
- { RPMTD_FORMAT_BASE64, "base64", base64Format },
- { RPMTD_FORMAT_PGPSIG, "pgpsig", pgpsigFormat },
- { RPMTD_FORMAT_DEPFLAGS, "depflags", depflagsFormat },
- { RPMTD_FORMAT_DEPTYPE, "deptype", deptypeFormat },
- { RPMTD_FORMAT_FFLAGS, "fflags", fflagsFormat },
- { RPMTD_FORMAT_PERMS, "perms", permsFormat },
- { RPMTD_FORMAT_PERMS, "permissions", permsFormat },
- { RPMTD_FORMAT_TRIGGERTYPE, "triggertype", triggertypeFormat },
- { RPMTD_FORMAT_XML, "xml", xmlFormat },
- { RPMTD_FORMAT_OCTAL, "octal", octalFormat },
- { RPMTD_FORMAT_HEX, "hex", hexFormat },
- { RPMTD_FORMAT_DATE, "date", dateFormat },
- { RPMTD_FORMAT_DAY, "day", dayFormat },
- { RPMTD_FORMAT_SHESCAPE, "shescape", shescapeFormat },
- { RPMTD_FORMAT_ARRAYSIZE, "arraysize", arraysizeFormat },
- { RPMTD_FORMAT_FSTATE, "fstate", fstateFormat },
- { RPMTD_FORMAT_VFLAGS, "vflags", vflagsFormat },
- { RPMTD_FORMAT_EXPAND, "expand", expandFormat },
- { RPMTD_FORMAT_FSTATUS, "fstatus", fstatusFormat },
- { RPMTD_FORMAT_DEPFLAG_STRONG, "depflag_strong", depflag_strongFormat },
- { -1, NULL, NULL }
+static const struct headerFmt_s rpmHeaderFormats[] = {
+ { RPMTD_FORMAT_STRING, "string",
+ RPM_ANY_CLASS, stringFormat },
+ { RPMTD_FORMAT_ARMOR, "armor",
+ RPM_ANY_CLASS, armorFormat },
+ { RPMTD_FORMAT_BASE64, "base64",
+ RPM_BINARY_CLASS, base64Format },
+ { RPMTD_FORMAT_PGPSIG, "pgpsig",
+ RPM_BINARY_CLASS, pgpsigFormat },
+ { RPMTD_FORMAT_DEPFLAGS, "depflags",
+ RPM_NUMERIC_CLASS, depflagsFormat },
+ { RPMTD_FORMAT_DEPTYPE, "deptype",
+ RPM_NUMERIC_CLASS, deptypeFormat },
+ { RPMTD_FORMAT_FFLAGS, "fflags",
+ RPM_NUMERIC_CLASS, fflagsFormat },
+ { RPMTD_FORMAT_PERMS, "perms",
+ RPM_NUMERIC_CLASS, permsFormat },
+ { RPMTD_FORMAT_PERMS, "permissions",
+ RPM_NUMERIC_CLASS, permsFormat },
+ { RPMTD_FORMAT_TRIGGERTYPE, "triggertype",
+ RPM_NUMERIC_CLASS, triggertypeFormat },
+ { RPMTD_FORMAT_XML, "xml",
+ RPM_ANY_CLASS, xmlFormat },
+ { RPMTD_FORMAT_OCTAL, "octal",
+ RPM_NUMERIC_CLASS, octalFormat },
+ { RPMTD_FORMAT_HEX, "hex",
+ RPM_NUMERIC_CLASS, hexFormat },
+ { RPMTD_FORMAT_DATE, "date",
+ RPM_NUMERIC_CLASS, dateFormat },
+ { RPMTD_FORMAT_DAY, "day",
+ RPM_NUMERIC_CLASS, dayFormat },
+ { RPMTD_FORMAT_SHESCAPE, "shescape",
+ RPM_ANY_CLASS, shescapeFormat },
+ { RPMTD_FORMAT_ARRAYSIZE, "arraysize",
+ RPM_ANY_CLASS, arraysizeFormat },
+ { RPMTD_FORMAT_FSTATE, "fstate",
+ RPM_NUMERIC_CLASS, fstateFormat },
+ { RPMTD_FORMAT_VFLAGS, "vflags",
+ RPM_NUMERIC_CLASS, vflagsFormat },
+ { RPMTD_FORMAT_EXPAND, "expand",
+ RPM_STRING_CLASS, expandFormat },
+ { RPMTD_FORMAT_FSTATUS, "fstatus",
+ RPM_NUMERIC_CLASS, fstatusFormat },
+ { -1, NULL, 0, NULL }
};
-headerTagFormatFunction rpmHeaderFormatFuncByName(const char *fmt)
+headerFmt rpmHeaderFormatByName(const char *fmt)
{
- const struct headerFormatFunc_s * ext;
- headerTagFormatFunction func = NULL;
+ const struct headerFmt_s * ext;
for (ext = rpmHeaderFormats; ext->name != NULL; ext++) {
- if (rstreq(ext->name, fmt)) {
- func = ext->func;
- break;
- }
+ if (rstreq(ext->name, fmt))
+ return ext;
}
- return func;
+ return NULL;
}
-headerTagFormatFunction rpmHeaderFormatFuncByValue(rpmtdFormats fmt)
+headerFmt rpmHeaderFormatByValue(rpmtdFormats fmt)
{
- const struct headerFormatFunc_s * ext;
- headerTagFormatFunction func = NULL;
+ const struct headerFmt_s * ext;
for (ext = rpmHeaderFormats; ext->name != NULL; ext++) {
- if (fmt == ext->fmt) {
- func = ext->func;
- break;
- }
+ if (fmt == ext->fmt)
+ return ext;
}
- return func;
+ return NULL;
}
+char *rpmHeaderFormatCall(headerFmt fmt, rpmtd td)
+{
+ char *ret = NULL;
+ char *err = NULL;
+
+ if (fmt->class != RPM_ANY_CLASS && rpmtdClass(td) != fmt->class)
+ err = xstrdup(classEr(fmt->class));
+ else
+ ret = fmt->func(td, &err);
+
+ if (err) {
+ free(ret);
+ ret = err;
+ }
+ return ret;
+}
diff --git a/lib/fprint.c b/lib/fprint.c
index 6f6172cf2..b810e4d2b 100644
--- a/lib/fprint.c
+++ b/lib/fprint.c
@@ -6,7 +6,7 @@
#include <rpm/rpmfileutil.h> /* for rpmCleanPath */
#include <rpm/rpmts.h>
-#include <rpm/rpmdb.h>
+#include <rpm/rpmsq.h>
#include "lib/rpmdb_internal.h"
#include "lib/rpmfi_internal.h"
@@ -251,7 +251,7 @@ int fpLookup(fingerPrintCache cache,
/**
* Return hash value for a finger print.
* Hash based on dev and inode only!
- * @param key pointer to finger print entry
+ * @param fp pointer to finger print entry
* @return hash value
*/
static unsigned int fpHashFunction(const fingerPrint * fp)
@@ -335,7 +335,7 @@ fingerPrint * fpLookupList(fingerPrintCache cache, rpmstrPool pool,
/* Check file for to be installed symlinks in their path and correct their fp */
static void fpLookupSubdir(rpmFpHash symlinks, fingerPrintCache fpc, rpmte p, int filenr)
{
- rpmfi fi = rpmteFI(p);
+ rpmfiles fi = rpmteFiles(p);
struct fingerPrint_s current_fp;
const char *currentsubdir;
size_t lensubDir, bnStart, bnEnd;
@@ -343,13 +343,13 @@ static void fpLookupSubdir(rpmFpHash symlinks, fingerPrintCache fpc, rpmte p, in
struct rpmffi_s * recs;
int numRecs;
int i;
- fingerPrint *fp = rpmfiFps(fi) + filenr;
+ fingerPrint *fp = rpmfilesFps(fi) + filenr;
int symlinkcount = 0;
struct rpmffi_s ffi = { p, filenr};
if (fp->subDirId == 0) {
- rpmFpHashAddEntry(fpc->fp, fp, ffi);
- return;
+ rpmFpHashAddEntry(fpc->fp, fp, ffi);
+ goto exit;
}
currentsubdir = rpmstrPoolStr(fpc->pool, fp->subDirId);
@@ -364,88 +364,98 @@ static void fpLookupSubdir(rpmFpHash symlinks, fingerPrintCache fpc, rpmte p, in
current_fp.subDirId = 0;
while (bnEnd < lensubDir) {
- char found = 0;
+ char found = 0;
- current_fp.baseNameId = rpmstrPoolIdn(fpc->pool,
+ current_fp.baseNameId = rpmstrPoolIdn(fpc->pool,
currentsubdir + bnStart,
bnEnd - bnStart, 1);
- rpmFpHashGetEntry(symlinks, &current_fp, &recs, &numRecs, NULL);
-
- for (i=0; i<numRecs; i++) {
- rpmfi foundfi = rpmteFI(recs[i].p);
- char const *linktarget = rpmfiFLinkIndex(foundfi, recs[i].fileno);
- char *link;
-
- if (linktarget && *linktarget != '\0') {
- const char *bn;
- /* this "directory" is a symlink */
- link = NULL;
- if (*linktarget != '/') {
- const char *dn, *subDir = NULL;
- dn = rpmstrPoolStr(fpc->pool, current_fp.entry->dirId);
- if (current_fp.subDirId) {
- subDir = rpmstrPoolStr(fpc->pool,
- current_fp.subDirId);
- }
- rstrscat(&link, dn,
- subDir ? subDir : "",
- "/", NULL);
- }
- rstrscat(&link, linktarget, "/", NULL);
- if (strlen(currentsubdir + bnEnd)) {
- rstrscat(&link, currentsubdir + bnEnd, NULL);
- }
-
- bn = rpmstrPoolStr(fpc->pool, fp->baseNameId);
- doLookup(fpc, link, bn, fp);
-
- free(link);
- symlinkcount++;
-
- /* setup current_fp for the new path */
- found = 1;
- current_fp = *fp;
- if (fp->subDirId == 0) {
- /* directory exists - no need to look for symlinks */
- rpmFpHashAddEntry(fpc->fp, fp, ffi);
- return;
- }
- currentsubdir = rpmstrPoolStr(fpc->pool, fp->subDirId);
- lensubDir = rpmstrPoolStrlen(fpc->pool, fp->subDirId);
- /* no subDir for now */
- current_fp.subDirId = 0;
-
- /* Set baseName to the upper most dir */
- bnStart = bnEnd = 1;
- while (bnEnd < lensubDir && currentsubdir[bnEnd] != '/')
- bnEnd++;
- break;
-
- }
- }
- if (symlinkcount>50) {
- // found too many symlinks in the path
- // most likley a symlink cicle
- // giving up
- // TODO warning/error
- break;
- }
- if (found) {
- continue; // restart loop after symlink
- }
-
- /* Set former baseName as subDir */
- bnEnd++;
- current_fp.subDirId = rpmstrPoolIdn(fpc->pool, currentsubdir, bnEnd, 1);
-
- /* set baseName to the next lower dir */
- bnStart = bnEnd;
- while (bnEnd < lensubDir && currentsubdir[bnEnd] != '/')
+ rpmFpHashGetEntry(symlinks, &current_fp, &recs, &numRecs, NULL);
+
+ for (i = 0; i < numRecs; i++) {
+ rpmfiles foundfi = rpmteFiles(recs[i].p);
+ char const *linktarget = rpmfilesFLink(foundfi, recs[i].fileno);
+ char *link;
+
+ /* Ignore already removed (by eg %pretrans) links */
+ if (linktarget && rpmteType(recs[i].p) == TR_REMOVED) {
+ char *path = rpmfilesFN(foundfi, recs[i].fileno);
+ struct stat sb;
+ if (lstat(path, &sb) == -1)
+ linktarget = NULL;
+ free(path);
+ }
+
+ foundfi = rpmfilesFree(foundfi);
+
+ if (linktarget && *linktarget != '\0') {
+ const char *bn;
+ /* this "directory" is a symlink */
+ link = NULL;
+ if (*linktarget != '/') {
+ const char *dn, *subDir = NULL;
+ dn = rpmstrPoolStr(fpc->pool, current_fp.entry->dirId);
+ if (current_fp.subDirId) {
+ subDir = rpmstrPoolStr(fpc->pool, current_fp.subDirId);
+ }
+ rstrscat(&link, dn, subDir ? subDir : "", "/", NULL);
+ }
+ rstrscat(&link, linktarget, "/", NULL);
+ if (strlen(currentsubdir + bnEnd)) {
+ rstrscat(&link, currentsubdir + bnEnd, NULL);
+ }
+
+ bn = rpmstrPoolStr(fpc->pool, fp->baseNameId);
+ doLookup(fpc, link, bn, fp);
+
+ free(link);
+ symlinkcount++;
+
+ /* setup current_fp for the new path */
+ found = 1;
+ current_fp = *fp;
+ if (fp->subDirId == 0) {
+ /* directory exists - no need to look for symlinks */
+ rpmFpHashAddEntry(fpc->fp, fp, ffi);
+ goto exit;
+ }
+ currentsubdir = rpmstrPoolStr(fpc->pool, fp->subDirId);
+ lensubDir = rpmstrPoolStrlen(fpc->pool, fp->subDirId);
+ /* no subDir for now */
+ current_fp.subDirId = 0;
+
+ /* Set baseName to the upper most dir */
+ bnStart = bnEnd = 1;
+ while (bnEnd < lensubDir && currentsubdir[bnEnd] != '/')
+ bnEnd++;
+ break;
+
+ }
+ }
+ if (symlinkcount > 50) {
+ // found too many symlinks in the path
+ // most likley a symlink cicle
+ // giving up
+ // TODO warning/error
+ break;
+ }
+ if (found) {
+ continue; // restart loop after symlink
+ }
+
+ /* Set former baseName as subDir */
+ bnEnd++;
+ current_fp.subDirId = rpmstrPoolIdn(fpc->pool, currentsubdir, bnEnd, 1);
+
+ /* set baseName to the next lower dir */
+ bnStart = bnEnd;
+ while (bnEnd < lensubDir && currentsubdir[bnEnd] != '/')
bnEnd++;
}
rpmFpHashAddEntry(fpc->fp, fp, ffi);
+exit:
+ rpmfilesFree(fi);
}
fingerPrint * fpCacheGetByFp(fingerPrintCache cache,
@@ -463,7 +473,7 @@ void fpCachePopulate(fingerPrintCache fpc, rpmts ts, int fileCount)
rpmtsi pi;
rpmte p;
rpmfs fs;
- rpmfi fi;
+ rpmfiles fi;
int i, fc;
if (fpc->fp == NULL)
@@ -475,23 +485,23 @@ void fpCachePopulate(fingerPrintCache fpc, rpmts ts, int fileCount)
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
fingerPrint *fpList;
- (void) rpmdbCheckSignals();
+ (void) rpmsqPoll();
- if ((fi = rpmteFI(p)) == NULL)
+ if ((fi = rpmteFiles(p)) == NULL)
continue; /* XXX can't happen */
(void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0);
- rpmfiFpLookup(fi, fpc);
+ rpmfilesFpLookup(fi, fpc);
fs = rpmteGetFileStates(p);
fc = rpmfsFC(fs);
- fpList = rpmfiFps(fi);
+ fpList = rpmfilesFps(fi);
/* collect symbolic links */
for (i = 0; i < fc; i++) {
struct rpmffi_s ffi;
char const *linktarget;
if (XFA_SKIPPING(rpmfsGetAction(fs, i)))
continue;
- linktarget = rpmfiFLinkIndex(fi, i);
+ linktarget = rpmfilesFLink(fi, i);
if (!(linktarget && *linktarget != '\0'))
continue;
ffi.p = p;
@@ -499,7 +509,7 @@ void fpCachePopulate(fingerPrintCache fpc, rpmts ts, int fileCount)
rpmFpHashAddEntry(symlinks, fpList + i, ffi);
}
(void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), fc);
-
+ rpmfilesFree(fi);
}
rpmtsiFree(pi);
@@ -510,7 +520,7 @@ void fpCachePopulate(fingerPrintCache fpc, rpmts ts, int fileCount)
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
- (void) rpmdbCheckSignals();
+ (void) rpmsqPoll();
fs = rpmteGetFileStates(p);
fc = rpmfsFC(fs);
diff --git a/lib/fsm.c b/lib/fsm.c
index ab4e18034..839ce83c6 100644
--- a/lib/fsm.c
+++ b/lib/fsm.c
@@ -13,129 +13,23 @@
#include <rpm/rpmte.h>
#include <rpm/rpmts.h>
-#include <rpm/rpmsq.h>
#include <rpm/rpmlog.h>
+#include <rpm/rpmmacro.h>
#include "rpmio/rpmio_internal.h" /* fdInit/FiniDigest */
-#include "lib/cpio.h"
#include "lib/fsm.h"
-#define fsmUNSAFE fsmStage
-#include "lib/rpmfi_internal.h" /* XXX fi->apath, ... */
#include "lib/rpmte_internal.h" /* XXX rpmfs */
-#include "lib/rpmts_internal.h" /* rpmtsSELabelFoo() only */
-#include "lib/rpmplugins.h" /* rpm plugins hooks */
+#include "lib/rpmplugins.h" /* rpm plugins hooks */
#include "lib/rpmug.h"
-#include "lib/cpio.h"
#include "debug.h"
#define _FSM_DEBUG 0
int _fsm_debug = _FSM_DEBUG;
-extern int _fsm_debug;
-
-/** \ingroup payload
- */
-enum cpioMapFlags_e {
- CPIO_MAP_PATH = (1 << 0),
- CPIO_MAP_MODE = (1 << 1),
- CPIO_MAP_UID = (1 << 2),
- CPIO_MAP_GID = (1 << 3),
- CPIO_FOLLOW_SYMLINKS= (1 << 4), /*!< only for building. */
- CPIO_MAP_ABSOLUTE = (1 << 5),
- CPIO_MAP_ADDDOT = (1 << 6),
- CPIO_MAP_TYPE = (1 << 8), /*!< only for building. */
- CPIO_SBIT_CHECK = (1 << 9)
-};
-typedef rpmFlags cpioMapFlags;
-
-typedef struct fsmIterator_s * FSMI_t;
-typedef struct fsm_s * FSM_t;
-
-typedef struct hardLink_s * hardLink_t;
-
-typedef enum fileStage_e {
- FSM_PKGINSTALL,
- FSM_PKGERASE,
- FSM_PKGBUILD,
-} fileStage;
-
/* XXX Failure to remove is not (yet) cause for failure. */
static int strict_erasures = 0;
-/** \ingroup payload
- * Keeps track of the set of all hard links to a file in an archive.
- */
-struct hardLink_s {
- hardLink_t next;
- const char ** nsuffix;
- int * filex;
- struct stat sb;
- nlink_t nlink;
- nlink_t linksLeft;
- int linkIndex;
- int createdPath;
-};
-
-/** \ingroup payload
- * Iterator across package file info, forward on install, backward on erase.
- */
-struct fsmIterator_s {
- rpmfs fs; /*!< file state info. */
- rpmfi fi; /*!< transaction element file info. */
- int reverse; /*!< reversed traversal? */
- int isave; /*!< last returned iterator index. */
- int i; /*!< iterator index. */
-};
-
-/** \ingroup payload
- * File name and stat information.
- */
-struct fsm_s {
- char * path; /*!< Current file name. */
- char * buf; /*!< read: Buffer. */
- size_t bufsize; /*!< read: Buffer allocated size. */
- FSMI_t iter; /*!< File iterator. */
- int ix; /*!< Current file iterator index. */
- hardLink_t links; /*!< Pending hard linked file(s). */
- char ** failedFile; /*!< First file name that failed. */
- const char * osuffix; /*!< Old, preserved, file suffix. */
- const char * nsuffix; /*!< New, created, file suffix. */
- char * suffix; /*!< Current file suffix. */
- int postpone; /*!< Skip remaining stages? */
- int diskchecked; /*!< Has stat(2) been performed? */
- int exists; /*!< Does current file exist on disk? */
- cpioMapFlags mapFlags; /*!< Bit(s) to control mapping. */
- const char * dirName; /*!< File directory name. */
- const char * baseName; /*!< File base name. */
- struct selabel_handle *sehandle; /*!< SELinux label handle (if any). */
- rpmPlugins plugins; /*!< Rpm plugins handle */
-
- unsigned fflags; /*!< File flags. */
- rpmFileAction action; /*!< File disposition. */
- fileStage goal; /*!< Package state machine goal. */
- struct stat sb; /*!< Current file stat(2) info. */
- struct stat osb; /*!< Original file stat(2) info. */
-};
-
-
-/**
- * Retrieve transaction element file info from file state machine iterator.
- * @param fsm file state machine
- * @return transaction element file info
- */
-static rpmfi fsmGetFi(const FSM_t fsm)
-{
- const FSMI_t iter = fsm->iter;
- return (iter ? iter->fi : NULL);
-}
-
-static rpmfs fsmGetFs(const FSM_t fsm)
-{
- const FSMI_t iter = fsm->iter;
- return (iter ? iter->fs : NULL);
-}
-
#define SUFFIX_RPMORIG ".rpmorig"
#define SUFFIX_RPMSAVE ".rpmsave"
#define SUFFIX_RPMNEW ".rpmnew"
@@ -152,126 +46,20 @@ static const char * fileActionString(rpmFileAction a);
/** \ingroup payload
* Build path to file from file info, optionally ornamented with suffix.
- * @param fsm file state machine data
- * @param isDir directory or regular path?
+ * @param fi file info iterator
* @param suffix suffix to use (NULL disables)
* @retval path to file (malloced)
*/
-static char * fsmFsPath(const FSM_t fsm, int isDir,
- const char * suffix)
-{
- return rstrscat(NULL,
- fsm->dirName, fsm->baseName,
- (!isDir && suffix) ? suffix : "",
- NULL);
-}
-
-/** \ingroup payload
- * Destroy file info iterator.
- * @param p file info iterator
- * @retval NULL always
- */
-static FSMI_t mapFreeIterator(FSMI_t iter)
+static char * fsmFsPath(rpmfi fi, const char * suffix)
{
- if (iter) {
- iter->fs = NULL; /* rpmfs is not refcounted */
- iter->fi = rpmfiFree(iter->fi);
- free(iter);
- }
- return NULL;
-}
-
-/** \ingroup payload
- * Create file info iterator.
- * @param fi transaction element file info
- * @return file info iterator
- */
-static FSMI_t
-mapInitIterator(rpmfs fs, rpmfi fi, int reverse)
-{
- FSMI_t iter = NULL;
-
- iter = xcalloc(1, sizeof(*iter));
- iter->fs = fs; /* rpmfs is not refcounted */
- iter->fi = rpmfiLink(fi);
- iter->reverse = reverse;
- iter->i = (iter->reverse ? (rpmfiFC(fi) - 1) : 0);
- iter->isave = iter->i;
- return iter;
-}
-
-/** \ingroup payload
- * Return next index into file info.
- * @param a file info iterator
- * @return next index, -1 on termination
- */
-static int mapNextIterator(FSMI_t iter)
-{
- int i = -1;
-
- if (iter) {
- const rpmfi fi = iter->fi;
- if (iter->reverse) {
- if (iter->i >= 0) i = iter->i--;
- } else {
- if (iter->i < rpmfiFC(fi)) i = iter->i++;
- }
- iter->isave = i;
- }
- return i;
-}
-
-/** \ingroup payload
- */
-static int cpioStrCmp(const void * a, const void * b)
-{
- const char * afn = *(const char **)a;
- const char * bfn = *(const char **)b;
-
- /* Match rpm-4.0 payloads with ./ prefixes. */
- if (afn[0] == '.' && afn[1] == '/') afn += 2;
- if (bfn[0] == '.' && bfn[1] == '/') bfn += 2;
-
- /* If either path is absolute, make it relative. */
- if (afn[0] == '/') afn += 1;
- if (bfn[0] == '/') bfn += 1;
-
- return strcmp(afn, bfn);
-}
-
-/** \ingroup payload
- * Locate archive path in file info.
- * @param iter file info iterator
- * @param fsmPath archive path
- * @return index into file info, -1 if archive path was not found
- */
-static int mapFind(FSMI_t iter, const char * fsmPath)
-{
- int ix = -1;
-
- if (iter) {
- const rpmfi fi = iter->fi;
- int fc = rpmfiFC(fi);
- if (fi && fc > 0 && fi->apath && fsmPath && *fsmPath) {
- char ** p = NULL;
-
- if (fi->apath != NULL)
- p = bsearch(&fsmPath, fi->apath, fc, sizeof(fsmPath),
- cpioStrCmp);
- if (p) {
- iter->i = p - fi->apath;
- ix = mapNextIterator(iter);
- }
- }
- }
- return ix;
+ return rstrscat(NULL, rpmfiDN(fi), rpmfiBN(fi), suffix ? suffix : "", NULL);
}
/** \ingroup payload
* Directory name iterator.
*/
typedef struct dnli_s {
- rpmfi fi;
+ rpmfiles fi;
char * active;
int reverse;
int isave;
@@ -280,7 +68,7 @@ typedef struct dnli_s {
/** \ingroup payload
* Destroy directory name iterator.
- * @param a directory name iterator
+ * @param dnli directory name iterator
* @retval NULL always
*/
static DNLI_t dnlFreeIterator(DNLI_t dnli)
@@ -299,7 +87,7 @@ static DNLI_t dnlFreeIterator(DNLI_t dnli)
* @param reverse traverse directory names in reverse order?
* @return directory name iterator
*/
-static DNLI_t dnlInitIterator(rpmfi fi, rpmfs fs, int reverse)
+static DNLI_t dnlInitIterator(rpmfiles fi, rpmfs fs, int reverse)
{
DNLI_t dnli;
int i, j;
@@ -307,7 +95,7 @@ static DNLI_t dnlInitIterator(rpmfi fi, rpmfs fs, int reverse)
if (fi == NULL)
return NULL;
- dc = rpmfiDC(fi);
+ dc = rpmfilesDC(fi);
dnli = xcalloc(1, sizeof(*dnli));
dnli->fi = fi;
dnli->reverse = reverse;
@@ -315,24 +103,24 @@ static DNLI_t dnlInitIterator(rpmfi fi, rpmfs fs, int reverse)
if (dc) {
dnli->active = xcalloc(dc, sizeof(*dnli->active));
- int fc = rpmfiFC(fi);
+ int fc = rpmfilesFC(fi);
/* Identify parent directories not skipped. */
for (i = 0; i < fc; i++)
if (!XFA_SKIPPING(rpmfsGetAction(fs, i)))
- dnli->active[rpmfiDIIndex(fi, i)] = 1;
+ dnli->active[rpmfilesDI(fi, i)] = 1;
/* Exclude parent directories that are explicitly included. */
for (i = 0; i < fc; i++) {
int dil;
size_t dnlen, bnlen;
- if (!S_ISDIR(rpmfiFModeIndex(fi, i)))
+ if (!S_ISDIR(rpmfilesFMode(fi, i)))
continue;
- dil = rpmfiDIIndex(fi, i);
- dnlen = strlen(rpmfiDNIndex(fi, dil));
- bnlen = strlen(rpmfiBNIndex(fi, i));
+ dil = rpmfilesDI(fi, i);
+ dnlen = strlen(rpmfilesDN(fi, dil));
+ bnlen = strlen(rpmfilesBN(fi, i));
for (j = 0; j < dc; j++) {
const char * dnl;
@@ -340,13 +128,13 @@ static DNLI_t dnlInitIterator(rpmfi fi, rpmfs fs, int reverse)
if (!dnli->active[j] || j == dil)
continue;
- dnl = rpmfiDNIndex(fi, j);
+ dnl = rpmfilesDN(fi, j);
jlen = strlen(dnl);
if (jlen != (dnlen+bnlen+1))
continue;
- if (!rstreqn(dnl, rpmfiDNIndex(fi, dil), dnlen))
+ if (!rstreqn(dnl, rpmfilesDN(fi, dil), dnlen))
continue;
- if (!rstreqn(dnl+dnlen, rpmfiBNIndex(fi, i), bnlen))
+ if (!rstreqn(dnl+dnlen, rpmfilesBN(fi, i), bnlen))
continue;
if (dnl[dnlen+bnlen] != '/' || dnl[dnlen+bnlen+1] != '\0')
continue;
@@ -366,7 +154,7 @@ static DNLI_t dnlInitIterator(rpmfi fi, rpmfs fs, int reverse)
rpmlog(RPMLOG_DEBUG,
"========== Directories not explicitly included in package:\n");
}
- rpmlog(RPMLOG_DEBUG, "%10d %s\n", i, rpmfiDNIndex(fi, i));
+ rpmlog(RPMLOG_DEBUG, "%10d %s\n", i, rpmfilesDN(fi, i));
}
if (j)
rpmlog(RPMLOG_DEBUG, "==========\n");
@@ -386,8 +174,8 @@ const char * dnlNextIterator(DNLI_t dnli)
const char * dn = NULL;
if (dnli) {
- rpmfi fi = dnli->fi;
- int dc = rpmfiDC(fi);
+ rpmfiles fi = dnli->fi;
+ int dc = rpmfilesDC(fi);
int i = -1;
if (dnli->active)
@@ -396,7 +184,7 @@ const char * dnlNextIterator(DNLI_t dnli)
} while (i >= 0 && i < dc && !dnli->active[i]);
if (i >= 0 && i < dc)
- dn = rpmfiDNIndex(fi, i);
+ dn = rpmfilesDN(fi, i);
else
i = -1;
dnli->isave = i;
@@ -404,251 +192,6 @@ const char * dnlNextIterator(DNLI_t dnli)
return dn;
}
-/**
- * Map next file path and action.
- * @param fsm file state machine
- * @param i file index
- */
-static int fsmMapPath(FSM_t fsm, int i)
-{
- rpmfi fi = fsmGetFi(fsm); /* XXX const except for fstates */
- int rc = 0;
-
- fsm->osuffix = NULL;
- fsm->nsuffix = NULL;
- fsm->action = FA_UNKNOWN;
-
- if (fi && i >= 0 && i < rpmfiFC(fi)) {
- rpmfs fs = fsmGetFs(fsm);
- /* XXX these should use rpmfiFFlags() etc */
- fsm->action = rpmfsGetAction(fs, i);
- fsm->fflags = rpmfiFFlagsIndex(fi, i);
-
- /* src rpms have simple base name in payload. */
- fsm->dirName = rpmfiDNIndex(fi, rpmfiDIIndex(fi, i));
- fsm->baseName = rpmfiBNIndex(fi, i);
-
- /* Never create backup for %ghost files. */
- if (fsm->goal != FSM_PKGBUILD && !(fsm->fflags & RPMFILE_GHOST)) {
- switch (fsm->action) {
- case FA_ALTNAME:
- fsm->nsuffix = SUFFIX_RPMNEW;
- break;
- case FA_SAVE:
- fsm->osuffix = SUFFIX_RPMSAVE;
- break;
- case FA_BACKUP:
- fsm->osuffix = (fsm->goal == FSM_PKGINSTALL) ?
- SUFFIX_RPMORIG : SUFFIX_RPMSAVE;
- break;
- default:
- break;
- }
- }
-
- if ((fsm->mapFlags & CPIO_MAP_PATH) || fsm->nsuffix) {
- fsm->path = _free(fsm->path);
- fsm->path = fsmFsPath(fsm, S_ISDIR(fsm->sb.st_mode),
- (fsm->suffix ? fsm->suffix : fsm->nsuffix));
- }
- }
- return rc;
-}
-
-/** \ingroup payload
- * Save hard link in chain.
- * @param fsm file state machine data
- * @retval linkSet hard link set when complete
- * @return Is chain only partially filled?
- */
-static int saveHardLink(FSM_t fsm, hardLink_t * linkSet)
-{
- struct stat * st = &fsm->sb;
- int rc = 0;
- int ix = -1;
- int j;
- hardLink_t *tailp, li;
-
- /* Find hard link set. */
- for (tailp = &fsm->links; (li = *tailp) != NULL; tailp = &li->next) {
- if (li->sb.st_ino == st->st_ino && li->sb.st_dev == st->st_dev)
- break;
- }
-
- /* New hard link encountered, add new link to set. */
- if (li == NULL) {
- li = xcalloc(1, sizeof(*li));
- li->next = NULL;
- li->sb = *st; /* structure assignment */
- li->nlink = st->st_nlink;
- li->linkIndex = fsm->ix;
- li->createdPath = -1;
-
- li->filex = xcalloc(st->st_nlink, sizeof(li->filex[0]));
- memset(li->filex, -1, (st->st_nlink * sizeof(li->filex[0])));
- li->nsuffix = xcalloc(st->st_nlink, sizeof(*li->nsuffix));
-
- if (fsm->goal == FSM_PKGBUILD)
- li->linksLeft = st->st_nlink;
- if (fsm->goal == FSM_PKGINSTALL)
- li->linksLeft = 0;
-
- *tailp = li; /* append to tail of linked list */
- }
-
- if (fsm->goal == FSM_PKGBUILD) --li->linksLeft;
- li->filex[li->linksLeft] = fsm->ix;
- li->nsuffix[li->linksLeft] = fsm->nsuffix;
- if (fsm->goal == FSM_PKGINSTALL) li->linksLeft++;
-
- if (fsm->goal == FSM_PKGBUILD)
- return (li->linksLeft > 0);
-
- if (fsm->goal != FSM_PKGINSTALL)
- return 0;
-
- if (!(st->st_size || li->linksLeft == st->st_nlink))
- return 1;
-
- /* Here come the bits, time to choose a non-skipped file name. */
- { rpmfs fs = fsmGetFs(fsm);
-
- for (j = li->linksLeft - 1; j >= 0; j--) {
- ix = li->filex[j];
- if (ix < 0 || XFA_SKIPPING(rpmfsGetAction(fs, ix)))
- continue;
- break;
- }
- }
-
- /* Are all links skipped or not encountered yet? */
- if (ix < 0 || j < 0)
- return 1; /* XXX W2DO? */
-
- /* Save the non-skipped file name and map index. */
- li->linkIndex = j;
- if (linkSet)
- *linkSet = li;
- fsm->path = _free(fsm->path);
- fsm->ix = ix;
- rc = fsmMapPath(fsm, fsm->ix);
- return rc;
-}
-
-/** \ingroup payload
- * Destroy set of hard links.
- * @param li set of hard links
- * @return NULL always
- */
-static hardLink_t freeHardLink(hardLink_t li)
-{
- if (li) {
- li->nsuffix = _free(li->nsuffix); /* XXX elements are shared */
- li->filex = _free(li->filex);
- _free(li);
- }
- return NULL;
-}
-
-/* Check for hard links missing from payload */
-static int checkHardLinks(FSM_t fsm)
-{
- int rc = 0;
- rpmfs fs = fsmGetFs(fsm);
-
- for (hardLink_t li = fsm->links; li != NULL; li = li->next) {
- if (li->linksLeft) {
- for (nlink_t i = 0 ; i < li->linksLeft; i++) {
- int ix = li->filex[i];
- if (ix < 0 || XFA_SKIPPING(rpmfsGetAction(fs, ix)))
- continue;
- rc = CPIOERR_MISSING_HARDLINK;
- if (fsm->failedFile && *fsm->failedFile == NULL) {
- if (!fsmMapPath(fsm, ix)) {
- /* Out-of-sync hardlinks handled as sub-state */
- *fsm->failedFile = fsm->path;
- fsm->path = NULL;
- }
- }
- break;
- }
- }
- }
- return rc;
-}
-
-static FSM_t fsmNew(fileStage goal, rpmfs fs, rpmfi fi, char ** failedFile)
-{
- FSM_t fsm = xcalloc(1, sizeof(*fsm));
-
- fsm->ix = -1;
- fsm->goal = goal;
- fsm->iter = mapInitIterator(fs, fi, (goal == FSM_PKGERASE));
-
- /* common flags for all modes */
- fsm->mapFlags = CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID;
-
- if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) {
- fsm->bufsize = 8 * BUFSIZ;
- fsm->buf = xmalloc(fsm->bufsize);
- }
-
- fsm->failedFile = failedFile;
- if (fsm->failedFile)
- *fsm->failedFile = NULL;
-
- return fsm;
-}
-
-static FSM_t fsmFree(FSM_t fsm)
-{
- hardLink_t li;
- fsm->buf = _free(fsm->buf);
- fsm->bufsize = 0;
-
- fsm->iter = mapFreeIterator(fsm->iter);
- fsm->failedFile = NULL;
-
- fsm->path = _free(fsm->path);
- fsm->suffix = _free(fsm->suffix);
-
- while ((li = fsm->links) != NULL) {
- fsm->links = li->next;
- li->next = NULL;
- freeHardLink(li);
- }
- free(fsm);
- return NULL;
-}
-
-/* Find and set file security context */
-static int fsmSetSELabel(struct selabel_handle *sehandle,
- const char *path, mode_t mode)
-{
- int rc = 0;
-#if WITH_SELINUX
- if (sehandle) {
- security_context_t scon = NULL;
-
- if (selabel_lookup_raw(sehandle, &scon, path, mode) == 0) {
- rc = lsetfilecon(path, scon);
-
- if (_fsm_debug) {
- rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n",
- __func__, path, scon,
- (rc < 0 ? strerror(errno) : ""));
- }
-
- if (rc < 0 && errno == EOPNOTSUPP)
- rc = 0;
- }
-
- freecon(scon);
- }
-#endif
- return rc ? CPIOERR_LSETFCON_FAILED : 0;
-}
-
static int fsmSetFCaps(const char *path, const char *captxt)
{
int rc = 0;
@@ -656,7 +199,7 @@ static int fsmSetFCaps(const char *path, const char *captxt)
if (captxt && *captxt != '\0') {
cap_t fcaps = cap_from_text(captxt);
if (fcaps == NULL || cap_set_file(path, fcaps) != 0) {
- rc = CPIOERR_SETCAP_FAILED;
+ rc = RPMERR_SETCAP_FAILED;
}
cap_free(fcaps);
}
@@ -664,132 +207,102 @@ static int fsmSetFCaps(const char *path, const char *captxt)
return rc;
}
-/**
- * Map file stat(2) info.
- * @param fsm file state machine
- */
-static int fsmMapAttrs(FSM_t fsm)
+static void wfd_close(FD_t *wfdp)
{
- struct stat * st = &fsm->sb;
- rpmfi fi = fsmGetFi(fsm);
- int i = fsm->ix;
-
- /* this check is pretty moot, rpmfi accessors check array bounds etc */
- if (fi && i >= 0 && i < rpmfiFC(fi)) {
- ino_t finalInode = rpmfiFInodeIndex(fi, i);
- mode_t finalMode = rpmfiFModeIndex(fi, i);
- dev_t finalRdev = rpmfiFRdevIndex(fi, i);
- time_t finalMtime = rpmfiFMtimeIndex(fi, i);
- const char *user = rpmfiFUserIndex(fi, i);
- const char *group = rpmfiFGroupIndex(fi, i);
- uid_t uid = 0;
- gid_t gid = 0;
-
- if (user && rpmugUid(user, &uid)) {
- if (fsm->goal == FSM_PKGINSTALL)
- rpmlog(RPMLOG_WARNING,
- _("user %s does not exist - using root\n"), user);
- finalMode &= ~S_ISUID; /* turn off suid bit */
+ if (wfdp && *wfdp) {
+ int myerrno = errno;
+ static int oneshot = 0;
+ static int flush_io = 0;
+ if (!oneshot) {
+ flush_io = rpmExpandNumeric("%{?_flush_io}");
+ oneshot = 1;
}
-
- if (group && rpmugGid(group, &gid)) {
- if (fsm->goal == FSM_PKGINSTALL)
- rpmlog(RPMLOG_WARNING,
- _("group %s does not exist - using root\n"), group);
- finalMode &= ~S_ISGID; /* turn off sgid bit */
+ if (flush_io) {
+ int fdno = Fileno(*wfdp);
+ fsync(fdno);
}
+ Fclose(*wfdp);
+ *wfdp = NULL;
+ errno = myerrno;
+ }
+}
- if (fsm->mapFlags & CPIO_MAP_MODE)
- st->st_mode = (st->st_mode & S_IFMT) | (finalMode & ~S_IFMT);
- if (fsm->mapFlags & CPIO_MAP_TYPE) {
- st->st_mode = (st->st_mode & ~S_IFMT) | (finalMode & S_IFMT);
- if ((S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
- && st->st_nlink == 0)
- st->st_nlink = 1;
- st->st_ino = finalInode;
- st->st_rdev = finalRdev;
- st->st_mtime = finalMtime;
- }
- if (fsm->mapFlags & CPIO_MAP_UID)
- st->st_uid = uid;
- if (fsm->mapFlags & CPIO_MAP_GID)
- st->st_gid = gid;
+static int wfd_open(FD_t *wfdp, const char *dest)
+{
+ int rc = 0;
+ /* Create the file with 0200 permissions (write by owner). */
+ {
+ mode_t old_umask = umask(0577);
+ *wfdp = Fopen(dest, "wx.ufdio");
+ umask(old_umask);
}
+ if (Ferror(*wfdp)) {
+ rc = RPMERR_OPEN_FAILED;
+ goto exit;
+ }
+
return 0;
+
+exit:
+ wfd_close(wfdp);
+ return rc;
}
/** \ingroup payload
* Create file from payload stream.
- * @param fsm file state machine data
- * @param archive payload archive
* @return 0 on success
*/
-static int expandRegular(FSM_t fsm, rpmpsm psm, rpmcpio_t archive, int nodigest)
+static int expandRegular(rpmfi fi, const char *dest, rpmpsm psm, int nodigest)
{
FD_t wfd = NULL;
- const struct stat * st = &fsm->sb;
- rpm_loff_t left = st->st_size;
- const unsigned char * fidigest = NULL;
- pgpHashAlgo digestalgo = 0;
- int rc = 0;
-
- wfd = Fopen(fsm->path, "w.ufdio");
- if (Ferror(wfd)) {
- rc = CPIOERR_OPEN_FAILED;
- goto exit;
- }
-
- if (!nodigest) {
- rpmfi fi = fsmGetFi(fsm);
- digestalgo = rpmfiDigestAlgo(fi);
- fidigest = rpmfiFDigestIndex(fi, fsm->ix, NULL, NULL);
- }
-
- if (st->st_size > 0 && fidigest)
- fdInitDigest(wfd, digestalgo, 0);
-
- while (left) {
- size_t len;
- len = (left > fsm->bufsize ? fsm->bufsize : left);
- if (rpmcpioRead(archive, fsm->buf, len) != len) {
- rc = CPIOERR_READ_FAILED;
- goto exit;
- }
- if ((Fwrite(fsm->buf, sizeof(*fsm->buf), len, wfd) != len) || Ferror(wfd)) {
- rc = CPIOERR_WRITE_FAILED;
- goto exit;
- }
+ int rc;
- left -= len;
+ rc = wfd_open(&wfd, dest);
+ if (rc != 0)
+ goto exit;
- /* don't call this with fileSize == fileComplete */
- if (!rc && left)
- rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, rpmcpioTell(archive));
- }
-
- if (st->st_size > 0 && fidigest) {
- void * digest = NULL;
+ rc = rpmfiArchiveReadToFilePsm(fi, wfd, nodigest, psm);
+ wfd_close(&wfd);
+exit:
+ return rc;
+}
- (void) Fflush(wfd);
- fdFiniDigest(wfd, digestalgo, &digest, NULL, 0);
+static int fsmMkfile(rpmfi fi, const char *dest, rpmfiles files,
+ rpmpsm psm, int nodigest, int *setmeta,
+ int * firsthardlink, FD_t *firstlinkfile)
+{
+ int rc = 0;
+ int numHardlinks = rpmfiFNlink(fi);
- if (digest != NULL && fidigest != NULL) {
- size_t diglen = rpmDigestLength(digestalgo);
- if (memcmp(digest, fidigest, diglen)) {
- rc = CPIOERR_DIGEST_MISMATCH;
- }
+ if (numHardlinks > 1) {
+ /* Create first hardlinked file empty */
+ if (*firsthardlink < 0) {
+ *firsthardlink = rpmfiFX(fi);
+ rc = wfd_open(firstlinkfile, dest);
} else {
- rc = CPIOERR_DIGEST_MISMATCH;
+ /* Create hard links for others */
+ char *fn = rpmfilesFN(files, *firsthardlink);
+ rc = link(fn, dest);
+ if (rc < 0) {
+ rc = RPMERR_LINK_FAILED;
+ }
+ free(fn);
}
- free(digest);
}
-
-exit:
- if (wfd) {
- int myerrno = errno;
- Fclose(wfd);
- errno = myerrno;
+ /* Write normal files or fill the last hardlinked (already
+ existing) file with content */
+ if (numHardlinks<=1) {
+ if (!rc)
+ rc = expandRegular(fi, dest, psm, nodigest);
+ } else if (rpmfiArchiveHasContent(fi)) {
+ if (!rc)
+ rc = rpmfiArchiveReadToFilePsm(fi, *firstlinkfile, nodigest, psm);
+ wfd_close(firstlinkfile);
+ *firsthardlink = -1;
+ } else {
+ *setmeta = 0;
}
+
return rc;
}
@@ -797,7 +310,7 @@ static int fsmReadLink(const char *path,
char *buf, size_t bufsize, size_t *linklen)
{
ssize_t llen = readlink(path, buf, bufsize - 1);
- int rc = CPIOERR_READLINK_FAILED;
+ int rc = RPMERR_READLINK_FAILED;
if (_fsm_debug) {
rpmlog(RPMLOG_DEBUG, " %8s (%s, buf, %d) %s\n",
@@ -813,168 +326,6 @@ static int fsmReadLink(const char *path,
return rc;
}
-/** \ingroup payload
- * Write next item to payload stream.
- * @param fsm file state machine data
- * @param writeData should data be written?
- * @param archive payload archive
- * @param ix file index
- * @return 0 on success
- */
-static int writeFile(FSM_t fsm, int writeData, rpmcpio_t archive, int ix)
-{
- FD_t rfd = NULL;
- char * path = fsm->path;
- struct stat * st = &fsm->sb;
- struct stat * ost = &fsm->osb;
- char * symbuf = NULL;
- rpm_loff_t left;
- int rc = 0;
-
- st->st_size = (writeData ? ost->st_size : 0);
-
- if (S_ISDIR(st->st_mode)) {
- st->st_size = 0;
- } else if (S_ISLNK(st->st_mode)) {
- /*
- * While linux puts the size of a symlink in the st_size field,
- * I don't think that's a specified standard.
- */
- size_t linklen;
- rc = fsmReadLink(fsm->path, fsm->buf, fsm->bufsize, &linklen);
- if (rc) goto exit;
- st->st_size = linklen;
- rstrcat(&symbuf, fsm->buf); /* XXX save readlink return. */
- }
-
- if (fsm->mapFlags & CPIO_MAP_ABSOLUTE) {
- fsm->path = rstrscat(NULL, (fsm->mapFlags & CPIO_MAP_ADDDOT) ? "." : "",
- fsm->dirName, fsm->baseName, NULL);
- } else if (fsm->mapFlags & CPIO_MAP_PATH) {
- rpmfi fi = fsmGetFi(fsm);
- fsm->path = xstrdup((fi->apath ? fi->apath[ix] :
- rpmfiBNIndex(fi, ix)));
- }
-
- rc = rpmcpioHeaderWrite(archive, fsm->path, st);
- _free(fsm->path);
- fsm->path = path;
-
- if (rc) goto exit;
-
-
- if (writeData && S_ISREG(st->st_mode)) {
- size_t len;
-
- rfd = Fopen(fsm->path, "r.ufdio");
- if (Ferror(rfd)) {
- rc = CPIOERR_OPEN_FAILED;
- goto exit;
- }
-
- left = st->st_size;
-
- while (left) {
- len = (left > fsm->bufsize ? fsm->bufsize : left);
- if (Fread(fsm->buf, sizeof(*fsm->buf), len, rfd) != len || Ferror(rfd)) {
- rc = CPIOERR_READ_FAILED;
- goto exit;
- }
-
- if (rpmcpioWrite(archive, fsm->buf, len) != len) {
- rc = CPIOERR_WRITE_FAILED;
- goto exit;
- }
- left -= len;
- }
- } else if (writeData && S_ISLNK(st->st_mode)) {
- size_t len = strlen(symbuf);
- if (rpmcpioWrite(archive, symbuf, len) != len) {
- rc = CPIOERR_WRITE_FAILED;
- goto exit;
- }
- }
-
-exit:
- if (rfd) {
- /* preserve any prior errno across close */
- int myerrno = errno;
- Fclose(rfd);
- errno = myerrno;
- }
- fsm->path = path;
- free(symbuf);
- return rc;
-}
-
-/** \ingroup payload
- * Write set of linked files to payload stream.
- * @param fsm file state machine data
- * @param archive payload archive
- * @param li link to write
- * @return 0 on success
- */
-static int writeLinkedFile(FSM_t fsm, rpmcpio_t archive, hardLink_t li)
-{
- char * path = fsm->path;
- const char * nsuffix = fsm->nsuffix;
- int ec = 0;
- int rc;
- int i;
-
- fsm->path = NULL;
- fsm->nsuffix = NULL;
-
- for (i = li->nlink - 1; i >= 0; i--) {
-
- if (li->filex[i] < 0) continue;
-
- rc = fsmMapPath(fsm, li->filex[i]);
-
- /* Write data after last link. */
- rc = writeFile(fsm, (i == 0), archive, li->filex[i]);
- if (fsm->failedFile && rc != 0 && *fsm->failedFile == NULL) {
- ec = rc;
- *fsm->failedFile = xstrdup(fsm->path);
- }
-
- fsm->path = _free(fsm->path);
- li->filex[i] = -1;
- }
-
- fsm->nsuffix = nsuffix;
- fsm->path = path;
- return ec;
-}
-
-static int writeLinks(FSM_t fsm, rpmcpio_t archive)
-{
- int j, rc = 0;
- nlink_t i, nlink;
-
- for (hardLink_t li = fsm->links; li; li = li->next) {
- /* Re-calculate link count for archive header. */
- for (j = -1, nlink = 0, i = 0; i < li->nlink; i++) {
- if (li->filex[i] < 0)
- continue;
- nlink++;
- if (j == -1) j = i;
- }
- /* XXX force the contents out as well. */
- if (j != 0) {
- li->filex[0] = li->filex[j];
- li->filex[j] = -1;
- }
- li->sb.st_nlink = nlink;
-
- fsm->sb = li->sb; /* structure assignment */
- fsm->osb = fsm->sb; /* structure assignment */
-
- if (!rc) rc = writeLinkedFile(fsm, archive, li);
- }
- return rc;
-}
-
static int fsmStat(const char *path, int dolstat, struct stat *sb)
{
int rc;
@@ -988,105 +339,10 @@ static int fsmStat(const char *path, int dolstat, struct stat *sb)
__func__,
path, (rc < 0 ? strerror(errno) : ""));
if (rc < 0) {
- rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_LSTAT_FAILED);
- /* WTH is this, and is it really needed, still? */
- memset(sb, 0, sizeof(*sb)); /* XXX s390x hackery */
- }
- return rc;
-}
-
-static int fsmVerify(FSM_t fsm);
-
-/** \ingroup payload
- * Create pending hard links to existing file.
- * @param fsm file state machine data
- * @param li hard link
- * @return 0 on success
- */
-static int fsmMakeLinks(FSM_t fsm, hardLink_t li)
-{
- char * path = fsm->path;
- char * opath = NULL;
- const char * nsuffix = fsm->nsuffix;
- int ec = 0;
- int rc;
- int i;
-
- fsm->path = NULL;
- fsm->nsuffix = NULL;
-
- rc = fsmMapPath(fsm, li->filex[li->createdPath]);
- opath = fsm->path;
- fsm->path = NULL;
- for (i = 0; i < li->nlink; i++) {
- if (li->filex[i] < 0) continue;
- if (li->createdPath == i) continue;
-
- fsm->path = _free(fsm->path);
- rc = fsmMapPath(fsm, li->filex[i]);
- if (XFA_SKIPPING(fsm->action)) continue;
-
- rc = fsmVerify(fsm);
- if (!rc) continue;
- if (!(rc == CPIOERR_ENOENT)) break;
-
- /* XXX link(opath, fsm->path) */
- rc = link(opath, fsm->path);
- if (_fsm_debug)
- rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", __func__,
- opath, fsm->path, (rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_LINK_FAILED;
-
- if (fsm->failedFile && rc != 0 && *fsm->failedFile == NULL) {
- ec = rc;
- *fsm->failedFile = xstrdup(fsm->path);
- }
-
- li->linksLeft--;
+ rc = (errno == ENOENT ? RPMERR_ENOENT : RPMERR_LSTAT_FAILED);
+ /* Ensure consistent struct content on failure */
+ memset(sb, 0, sizeof(*sb));
}
- fsm->path = _free(fsm->path);
- free(opath);
-
- fsm->nsuffix = nsuffix;
- fsm->path = path;
- return ec;
-}
-
-static int fsmCommit(FSM_t fsm, int ix);
-
-/** \ingroup payload
- * Commit hard linked file set atomically.
- * @param fsm file state machine data
- * @return 0 on success
- */
-static int fsmCommitLinks(FSM_t fsm)
-{
- char * path = fsm->path;
- const char * nsuffix = fsm->nsuffix;
- struct stat * st = &fsm->sb;
- int rc = 0;
- nlink_t i;
- hardLink_t li;
-
- fsm->path = NULL;
- fsm->nsuffix = NULL;
-
- for (li = fsm->links; li != NULL; li = li->next) {
- if (li->sb.st_ino == st->st_ino && li->sb.st_dev == st->st_dev)
- break;
- }
-
- for (i = 0; i < li->nlink; i++) {
- if (li->filex[i] < 0) continue;
- rc = fsmMapPath(fsm, li->filex[i]);
- if (!XFA_SKIPPING(fsm->action))
- rc = fsmCommit(fsm, li->filex[i]);
- fsm->path = _free(fsm->path);
- li->filex[i] = -1;
- }
-
- fsm->nsuffix = nsuffix;
- fsm->path = path;
return rc;
}
@@ -1098,9 +354,9 @@ static int fsmRmdir(const char *path)
path, (rc < 0 ? strerror(errno) : ""));
if (rc < 0)
switch (errno) {
- case ENOENT: rc = CPIOERR_ENOENT; break;
- case ENOTEMPTY: rc = CPIOERR_ENOTEMPTY; break;
- default: rc = CPIOERR_RMDIR_FAILED; break;
+ case ENOENT: rc = RPMERR_ENOENT; break;
+ case ENOTEMPTY: rc = RPMERR_ENOTEMPTY; break;
+ default: rc = RPMERR_RMDIR_FAILED; break;
}
return rc;
}
@@ -1112,7 +368,7 @@ static int fsmMkdir(const char *path, mode_t mode)
rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", __func__,
path, (unsigned)(mode & 07777),
(rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_MKDIR_FAILED;
+ if (rc < 0) rc = RPMERR_MKDIR_FAILED;
return rc;
}
@@ -1127,7 +383,7 @@ static int fsmMkfifo(const char *path, mode_t mode)
}
if (rc < 0)
- rc = CPIOERR_MKFIFO_FAILED;
+ rc = RPMERR_MKFIFO_FAILED;
return rc;
}
@@ -1144,24 +400,24 @@ static int fsmMknod(const char *path, mode_t mode, dev_t dev)
}
if (rc < 0)
- rc = CPIOERR_MKNOD_FAILED;
+ rc = RPMERR_MKNOD_FAILED;
return rc;
}
/**
* Create (if necessary) directories not explicitly included in package.
- * @param dnli file state machine data
- * @param sehandle selinux label handle (bah)
+ * @param files file data
+ * @param fs file states
* @param plugins rpm plugins handle
* @return 0 on success
*/
-static int fsmMkdirs(rpmfi fi, rpmfs fs, struct selabel_handle *sehandle, rpmPlugins plugins)
+static int fsmMkdirs(rpmfiles files, rpmfs fs, rpmPlugins plugins)
{
- DNLI_t dnli = dnlInitIterator(fi, fs, 0);
+ DNLI_t dnli = dnlInitIterator(files, fs, 0);
struct stat sb;
const char *dpath;
- int dc = rpmfiDC(fi);
+ int dc = rpmfilesDC(files);
int rc = 0;
int i;
int ldnlen = 0;
@@ -1213,21 +469,35 @@ static int fsmMkdirs(rpmfi fi, rpmfs fs, struct selabel_handle *sehandle, rpmPlu
if (rc == 0 && S_ISDIR(sb.st_mode)) {
/* Move pre-existing path marker forward. */
dnlx[dc] = (te - dn);
- } else if (rc == CPIOERR_ENOENT) {
+ } else if (rc == RPMERR_ENOENT) {
*te = '\0';
mode_t mode = S_IFDIR | (_dirPerms & 07777);
- rc = fsmMkdir(dn, mode);
+ rpmFsmOp op = (FA_CREATE|FAF_UNOWNED);
+
+ /* Run fsm file pre hook for all plugins */
+ rc = rpmpluginsCallFsmFilePre(plugins, NULL, dn, mode, op);
+
+ if (!rc)
+ rc = fsmMkdir(dn, mode);
+
if (!rc) {
- rc = fsmSetSELabel(sehandle, dn, mode);
+ rc = rpmpluginsCallFsmFilePrepare(plugins, NULL, dn, dn,
+ mode, op);
+ }
+ /* Run fsm file post hook for all plugins */
+ rpmpluginsCallFsmFilePost(plugins, NULL, dn, mode, op, rc);
+
+ if (!rc) {
rpmlog(RPMLOG_DEBUG,
"%s directory created with perms %04o\n",
dn, (unsigned)(mode & 07777));
}
+
if (!rc) {
- /* Run file closed hook for all plugins */
- rc = rpmpluginsCallFsmCommit(plugins, dn, mode, DIR_TYPE_UNOWNED);
- }
+ /* Run file closed hook for all plugins */
+ rc = rpmpluginsCallFsmCommit(plugins, dn, mode, DIR_TYPE_UNOWNED);
+ }
*te = '/';
}
if (rc)
@@ -1267,72 +537,14 @@ static void removeSBITS(const char *path)
}
}
-/********************************************************************/
-
-static void fsmReset(FSM_t fsm)
-{
- fsm->path = _free(fsm->path);
- fsm->postpone = 0;
- fsm->diskchecked = fsm->exists = 0;
- fsm->action = FA_UNKNOWN;
- fsm->osuffix = NULL;
- fsm->nsuffix = NULL;
- memset(&(fsm->sb), 0, sizeof(fsm->sb));
- memset(&(fsm->osb), 0, sizeof(fsm->sb));
-}
-
-static int fsmInit(FSM_t fsm)
+static void fsmDebug(const char *fpath, rpmFileAction action,
+ const struct stat *st)
{
- int rc = 0;
-
- /* On non-install, mode must be known so that dirs don't get suffix. */
- if (fsm->goal != FSM_PKGINSTALL) {
- rpmfi fi = fsmGetFi(fsm);
- fsm->sb.st_mode = rpmfiFModeIndex(fi, fsm->ix);
- }
-
- /* Generate file path. */
- rc = fsmMapPath(fsm, fsm->ix);
- if (rc) return rc;
-
- /* Perform lstat/stat for disk file. */
- if (fsm->path != NULL &&
- !(fsm->goal == FSM_PKGINSTALL && S_ISREG(fsm->sb.st_mode)))
- {
- int dolstat = !(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS);
- rc = fsmStat(fsm->path, dolstat, &fsm->osb);
- if (rc == CPIOERR_ENOENT) {
- // errno = saveerrno; XXX temporary commented out
- rc = 0;
- fsm->exists = 0;
- } else if (rc == 0) {
- fsm->exists = 1;
- }
- } else {
- /* Skip %ghost files on build. */
- fsm->exists = 0;
- }
- fsm->diskchecked = 1;
- if (rc) return rc;
-
- /* On non-install, the disk file stat is what's remapped. */
- if (fsm->goal != FSM_PKGINSTALL)
- fsm->sb = fsm->osb; /* structure assignment */
-
- /* Remap file perms, owner, and group. */
- rc = fsmMapAttrs(fsm);
- if (rc) return rc;
-
- fsm->postpone = XFA_SKIPPING(fsm->action);
-
rpmlog(RPMLOG_DEBUG, "%-10s %06o%3d (%4d,%4d)%6d %s\n",
- fileActionString(fsm->action), (int)fsm->sb.st_mode,
- (int)fsm->sb.st_nlink, (int)fsm->sb.st_uid,
- (int)fsm->sb.st_gid, (int)fsm->sb.st_size,
- (fsm->path ? fsm->path : ""));
-
- return rc;
-
+ fileActionString(action), (int)st->st_mode,
+ (int)st->st_nlink, (int)st->st_uid,
+ (int)st->st_gid, (int)st->st_size,
+ (fpath ? fpath : ""));
}
static int fsmSymlink(const char *opath, const char *path)
@@ -1345,29 +557,26 @@ static int fsmSymlink(const char *opath, const char *path)
}
if (rc < 0)
- rc = CPIOERR_SYMLINK_FAILED;
+ rc = RPMERR_SYMLINK_FAILED;
return rc;
}
-static int fsmUnlink(const char *path, cpioMapFlags mapFlags)
+static int fsmUnlink(const char *path)
{
int rc = 0;
- if (mapFlags & CPIO_SBIT_CHECK)
- removeSBITS(path);
+ removeSBITS(path);
rc = unlink(path);
if (_fsm_debug)
rpmlog(RPMLOG_DEBUG, " %8s (%s) %s\n", __func__,
path, (rc < 0 ? strerror(errno) : ""));
if (rc < 0)
- rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_UNLINK_FAILED);
+ rc = (errno == ENOENT ? RPMERR_ENOENT : RPMERR_UNLINK_FAILED);
return rc;
}
-static int fsmRename(const char *opath, const char *path,
- cpioMapFlags mapFlags)
+static int fsmRename(const char *opath, const char *path)
{
- if (mapFlags & CPIO_SBIT_CHECK)
- removeSBITS(path);
+ removeSBITS(path);
int rc = rename(opath, path);
#if defined(ETXTBSY) && defined(__HPUX__)
/* XXX HP-UX (and other os'es) don't permit rename to busy files. */
@@ -1382,30 +591,19 @@ static int fsmRename(const char *opath, const char *path,
if (_fsm_debug)
rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", __func__,
opath, path, (rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_RENAME_FAILED;
+ if (rc < 0)
+ rc = (errno == EISDIR ? RPMERR_EXIST_AS_DIR : RPMERR_RENAME_FAILED);
return rc;
}
-
-static int fsmChown(const char *path, uid_t uid, gid_t gid)
+static int fsmRemove(const char *path, mode_t mode)
{
- int rc = chown(path, uid, gid);
- if (rc < 0) {
- struct stat st;
- if (lstat(path, &st) == 0 && st.st_uid == uid && st.st_gid == gid)
- rc = 0;
- }
- if (_fsm_debug)
- rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", __func__,
- path, (int)uid, (int)gid,
- (rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_CHOWN_FAILED;
- return rc;
+ return S_ISDIR(mode) ? fsmRmdir(path) : fsmUnlink(path);
}
-static int fsmLChown(const char *path, uid_t uid, gid_t gid)
+static int fsmChown(const char *path, mode_t mode, uid_t uid, gid_t gid)
{
- int rc = lchown(path, uid, gid);
+ int rc = S_ISLNK(mode) ? lchown(path, uid, gid) : chown(path, uid, gid);
if (rc < 0) {
struct stat st;
if (lstat(path, &st) == 0 && st.st_uid == uid && st.st_gid == gid)
@@ -1415,7 +613,7 @@ static int fsmLChown(const char *path, uid_t uid, gid_t gid)
rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", __func__,
path, (int)uid, (int)gid,
(rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_CHOWN_FAILED;
+ if (rc < 0) rc = RPMERR_CHOWN_FAILED;
return rc;
}
@@ -1431,76 +629,90 @@ static int fsmChmod(const char *path, mode_t mode)
rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", __func__,
path, (unsigned)(mode & 07777),
(rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_CHMOD_FAILED;
+ if (rc < 0) rc = RPMERR_CHMOD_FAILED;
return rc;
}
-static int fsmUtime(const char *path, time_t mtime)
+static int fsmUtime(const char *path, mode_t mode, time_t mtime)
{
int rc = 0;
- struct utimbuf stamp;
- stamp.actime = mtime;
- stamp.modtime = mtime;
- rc = utime(path, &stamp);
+ struct timeval stamps[2] = {
+ { .tv_sec = mtime, .tv_usec = 0 },
+ { .tv_sec = mtime, .tv_usec = 0 },
+ };
+
+#if HAVE_LUTIMES
+ rc = lutimes(path, stamps);
+#else
+ if (!S_ISLNK(mode))
+ rc = utimes(path, stamps);
+#endif
+
if (_fsm_debug)
rpmlog(RPMLOG_DEBUG, " %8s (%s, 0x%x) %s\n", __func__,
path, (unsigned)mtime, (rc < 0 ? strerror(errno) : ""));
- if (rc < 0) rc = CPIOERR_UTIME_FAILED;
+ if (rc < 0) rc = RPMERR_UTIME_FAILED;
+ /* ...but utime error is not critical for directories */
+ if (rc && S_ISDIR(mode))
+ rc = 0;
return rc;
}
-static int fsmVerify(FSM_t fsm)
+static int fsmVerify(const char *path, rpmfi fi, const struct stat *fsb)
{
int rc;
- struct stat * st = &fsm->sb;
- struct stat * ost = &fsm->osb;
int saveerrno = errno;
+ struct stat dsb;
+ mode_t mode = rpmfiFMode(fi);
- if (fsm->diskchecked && !fsm->exists) {
- return CPIOERR_ENOENT;
- }
- if (S_ISREG(st->st_mode)) {
+ rc = fsmStat(path, 1, &dsb);
+ if (rc)
+ return rc;
+
+ if (S_ISREG(mode)) {
/* HP-UX (and other os'es) don't permit unlink on busy files. */
- char *rmpath = rstrscat(NULL, fsm->path, "-RPMDELETE", NULL);
- rc = fsmRename(fsm->path, rmpath, fsm->mapFlags);
+ char *rmpath = rstrscat(NULL, path, "-RPMDELETE", NULL);
+ rc = fsmRename(path, rmpath);
/* XXX shouldn't we take unlink return code here? */
if (!rc)
- (void) fsmUnlink(rmpath, fsm->mapFlags);
+ (void) fsmUnlink(rmpath);
else
- rc = CPIOERR_UNLINK_FAILED;
+ rc = RPMERR_UNLINK_FAILED;
free(rmpath);
- return (rc ? rc : CPIOERR_ENOENT); /* XXX HACK */
- } else if (S_ISDIR(st->st_mode)) {
- if (S_ISDIR(ost->st_mode)) return 0;
- if (S_ISLNK(ost->st_mode)) {
- rc = fsmStat(fsm->path, 0, &fsm->osb);
- if (rc == CPIOERR_ENOENT) rc = 0;
+ return (rc ? rc : RPMERR_ENOENT); /* XXX HACK */
+ } else if (S_ISDIR(mode)) {
+ if (S_ISDIR(dsb.st_mode)) return 0;
+ if (S_ISLNK(dsb.st_mode)) {
+ uid_t luid = dsb.st_uid;
+ rc = fsmStat(path, 0, &dsb);
+ if (rc == RPMERR_ENOENT) rc = 0;
if (rc) return rc;
errno = saveerrno;
- if (S_ISDIR(ost->st_mode)) return 0;
+ /* Only permit directory symlinks by target owner and root */
+ if (S_ISDIR(dsb.st_mode) && (luid == 0 || luid == fsb->st_uid))
+ return 0;
}
- } else if (S_ISLNK(st->st_mode)) {
- if (S_ISLNK(ost->st_mode)) {
+ } else if (S_ISLNK(mode)) {
+ if (S_ISLNK(dsb.st_mode)) {
char buf[8 * BUFSIZ];
size_t len;
- rc = fsmReadLink(fsm->path, buf, 8 * BUFSIZ, &len);
+ rc = fsmReadLink(path, buf, 8 * BUFSIZ, &len);
errno = saveerrno;
if (rc) return rc;
- /* FSM_PROCESS puts link target to fsm->buf. */
- if (rstreq(fsm->buf, buf)) return 0;
+ if (rstreq(rpmfiFLink(fi), buf)) return 0;
}
- } else if (S_ISFIFO(st->st_mode)) {
- if (S_ISFIFO(ost->st_mode)) return 0;
- } else if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode)) {
- if ((S_ISCHR(ost->st_mode) || S_ISBLK(ost->st_mode)) &&
- (ost->st_rdev == st->st_rdev)) return 0;
- } else if (S_ISSOCK(st->st_mode)) {
- if (S_ISSOCK(ost->st_mode)) return 0;
+ } else if (S_ISFIFO(mode)) {
+ if (S_ISFIFO(dsb.st_mode)) return 0;
+ } else if (S_ISCHR(mode) || S_ISBLK(mode)) {
+ if ((S_ISCHR(dsb.st_mode) || S_ISBLK(dsb.st_mode)) &&
+ (dsb.st_rdev == rpmfiFRdev(fi))) return 0;
+ } else if (S_ISSOCK(mode)) {
+ if (S_ISSOCK(dsb.st_mode)) return 0;
}
/* XXX shouldn't do this with commit/undo. */
- rc = fsmUnlink(fsm->path, fsm->mapFlags);
- if (rc == 0) rc = CPIOERR_ENOENT;
- return (rc ? rc : CPIOERR_ENOENT); /* XXX HACK */
+ rc = fsmUnlink(path);
+ if (rc == 0) rc = RPMERR_ENOENT;
+ return (rc ? rc : RPMERR_ENOENT); /* XXX HACK */
}
#define IS_DEV_LOG(_x) \
@@ -1512,88 +724,101 @@ static int fsmVerify(FSM_t fsm)
/* Rename pre-existing modified or unmanaged file. */
-static int fsmBackup(FSM_t fsm)
+static int fsmBackup(rpmfi fi, rpmFileAction action)
{
int rc = 0;
+ const char *suffix = NULL;
- /* FIXME: %ghost can have backup action but no suffix */
- if ((fsm->action == FA_SAVE || fsm->action == FA_BACKUP) && fsm->osuffix) {
- char * opath = fsmFsPath(fsm, S_ISDIR(fsm->sb.st_mode), NULL);
- char * path = fsmFsPath(fsm, 0, fsm->osuffix);
- rc = fsmRename(opath, path, fsm->mapFlags);
- if (!rc) {
- rpmlog(RPMLOG_WARNING, _("%s saved as %s\n"), opath, path);
- fsm->exists = 0; /* it doesn't exist anymore... */
- }
- free(path);
- free(opath);
+ if (!(rpmfiFFlags(fi) & RPMFILE_GHOST)) {
+ switch (action) {
+ case FA_SAVE:
+ suffix = SUFFIX_RPMSAVE;
+ break;
+ case FA_BACKUP:
+ suffix = SUFFIX_RPMORIG;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (suffix) {
+ char * opath = fsmFsPath(fi, NULL);
+ char * path = fsmFsPath(fi, suffix);
+ rc = fsmRename(opath, path);
+ if (!rc) {
+ rpmlog(RPMLOG_WARNING, _("%s saved as %s\n"), opath, path);
+ }
+ free(path);
+ free(opath);
}
return rc;
}
-static int fsmCommit(FSM_t fsm, int ix)
+static int fsmSetmeta(const char *path, rpmfi fi, rpmPlugins plugins,
+ rpmFileAction action, const struct stat * st,
+ int nofcaps)
+{
+ int rc = 0;
+ const char *dest = rpmfiFN(fi);
+
+ if (!rc && !getuid()) {
+ rc = fsmChown(path, st->st_mode, st->st_uid, st->st_gid);
+ }
+ if (!rc && !S_ISLNK(st->st_mode)) {
+ rc = fsmChmod(path, st->st_mode);
+ }
+ /* Set file capabilities (if enabled) */
+ if (!rc && !nofcaps && S_ISREG(st->st_mode) && !getuid()) {
+ rc = fsmSetFCaps(path, rpmfiFCaps(fi));
+ }
+ if (!rc) {
+ rc = fsmUtime(path, st->st_mode, rpmfiFMtime(fi));
+ }
+ if (!rc) {
+ rc = rpmpluginsCallFsmFilePrepare(plugins, fi,
+ path, dest, st->st_mode, action);
+ }
+
+ return rc;
+}
+
+static int fsmCommit(char **path, rpmfi fi, rpmFileAction action, const char *suffix, rpmPlugins plugins)
{
int rc = 0;
- struct stat * st = &fsm->sb;
/* XXX Special case /dev/log, which shouldn't be packaged anyways */
- if (!S_ISSOCK(st->st_mode) && !IS_DEV_LOG(fsm->path)) {
- /* Backup on-disk file if needed. Directories are handled earlier */
- if (!S_ISDIR(st->st_mode))
- rc = fsmBackup(fsm);
- /* Rename temporary to final file name. */
- if (!S_ISDIR(st->st_mode) && (fsm->suffix || fsm->nsuffix)) {
- char *npath = fsmFsPath(fsm, 0, fsm->nsuffix);
- rc = fsmRename(fsm->path, npath, fsm->mapFlags);
- if (!rc && fsm->nsuffix) {
- char * opath = fsmFsPath(fsm, 0, NULL);
- rpmlog(RPMLOG_WARNING, _("%s created as %s\n"),
- opath, npath);
- free(opath);
- }
- free(fsm->path);
- fsm->path = npath;
- }
- /* Set file security context (if enabled) */
- if (!rc && !getuid()) {
- rc = fsmSetSELabel(fsm->sehandle, fsm->path, fsm->sb.st_mode);
- }
+ if (!(S_ISSOCK(rpmfiFMode(fi)) && IS_DEV_LOG(*path))) {
+ const char *nsuffix = (action == FA_ALTNAME) ? SUFFIX_RPMNEW : NULL;
+ char *dest = *path;
+ /* Construct final destination path (nsuffix is usually NULL) */
+ if (suffix)
+ dest = fsmFsPath(fi, nsuffix);
+
+ /* Rename temporary to final file name if needed. */
+ if (dest != *path) {
+ rc = fsmRename(*path, dest);
+ if (!rc && nsuffix) {
+ char * opath = fsmFsPath(fi, NULL);
+ rpmlog(RPMLOG_WARNING, _("%s created as %s\n"),
+ opath, dest);
+ free(opath);
+ }
+ free(*path);
+ *path = dest;
+ }
/* Call fsm commit hook for all plugins */
if (!rc) {
- rc = rpmpluginsCallFsmCommit(fsm->plugins, fsm->path, fsm->sb.st_mode, DIR_TYPE_NORMAL);
- }
- if (S_ISLNK(st->st_mode)) {
- if (!rc && !getuid())
- rc = fsmLChown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid);
- } else {
- rpmfi fi = fsmGetFi(fsm);
- if (!rc && !getuid())
- rc = fsmChown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid);
- if (!rc)
- rc = fsmChmod(fsm->path, fsm->sb.st_mode);
- if (!rc) {
- rc = fsmUtime(fsm->path, rpmfiFMtimeIndex(fi, ix));
- /* utime error is not critical for directories */
- if (rc && S_ISDIR(st->st_mode))
- rc = 0;
- }
- /* Set file capabilities (if enabled) */
- if (!rc && !S_ISDIR(st->st_mode) && !getuid()) {
- rc = fsmSetFCaps(fsm->path, rpmfiFCapsIndex(fi, ix));
- }
+ rc = rpmpluginsCallFsmCommit(plugins, *path, rpmfiFMode(fi), DIR_TYPE_NORMAL);
}
}
- if (rc && fsm->failedFile && *fsm->failedFile == NULL) {
- *fsm->failedFile = fsm->path;
- fsm->path = NULL;
- }
return rc;
}
/**
* Return formatted string representation of file disposition.
- * @param a file dispostion
+ * @param a file disposition
* @return formatted string
*/
static const char * fileActionString(rpmFileAction a)
@@ -1601,8 +826,6 @@ static const char * fileActionString(rpmFileAction a)
switch (a) {
case FA_UNKNOWN: return "unknown";
case FA_CREATE: return "create";
- case FA_COPYOUT: return "copyout";
- case FA_COPYIN: return "copyin";
case FA_BACKUP: return "backup";
case FA_SAVE: return "save";
case FA_SKIP: return "skip";
@@ -1611,14 +834,15 @@ static const char * fileActionString(rpmFileAction a)
case FA_SKIPNSTATE: return "skipnstate";
case FA_SKIPNETSHARED: return "skipnetshared";
case FA_SKIPCOLOR: return "skipcolor";
+ case FA_TOUCH: return "touch";
default: return "???";
}
}
/* Remember any non-regular file state for recording in the rpmdb */
-static void setFileState(rpmfs fs, int i, rpmFileAction action)
+static void setFileState(rpmfs fs, int i)
{
- switch (action) {
+ switch (rpmfsGetAction(fs, i)) {
case FA_SKIPNSTATE:
rpmfsSetState(fs, i, RPMFILE_STATE_NOTINSTALLED);
break;
@@ -1628,219 +852,223 @@ static void setFileState(rpmfs fs, int i, rpmFileAction action)
case FA_SKIPCOLOR:
rpmfsSetState(fs, i, RPMFILE_STATE_WRONGCOLOR);
break;
+ case FA_TOUCH:
+ rpmfsSetState(fs, i, RPMFILE_STATE_NORMAL);
+ break;
default:
break;
}
}
-int rpmPackageFilesInstall(rpmts ts, rpmte te, rpmfi fi, FD_t cfd,
+int rpmPackageFilesInstall(rpmts ts, rpmte te, rpmfiles files,
rpmpsm psm, char ** failedFile)
{
+ FD_t payload = rpmtePayload(te);
+ rpmfi fi = rpmfiNewArchiveReader(payload, files, RPMFI_ITER_READ_ARCHIVE);
rpmfs fs = rpmteGetFileStates(te);
- FSM_t fsm = fsmNew(FSM_PKGINSTALL, fs, fi, failedFile);
- rpmcpio_t archive = rpmcpioOpen(cfd, O_RDONLY);
- struct stat * st = &fsm->sb;
+ rpmPlugins plugins = rpmtsPlugins(ts);
+ struct stat sb;
int saveerrno = errno;
int rc = 0;
- int nodigest = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOFILEDIGEST);
-
- if (!rpmteIsSource(te))
- fsm->mapFlags |= CPIO_SBIT_CHECK;
-
- if (archive == NULL)
- rc = CPIOERR_INTERNAL;
+ int nodigest = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOFILEDIGEST) ? 1 : 0;
+ int nofcaps = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCAPS) ? 1 : 0;
+ int firsthardlink = -1;
+ FD_t firstlinkfile = NULL;
+ int skip;
+ rpmFileAction action;
+ char *tid = NULL;
+ const char *suffix;
+ char *fpath = NULL;
+
+ if (fi == NULL) {
+ rc = RPMERR_BAD_MAGIC;
+ goto exit;
+ }
- fsm->sehandle = rpmtsSELabelHandle(ts);
- fsm->plugins = rpmtsPlugins(ts);
-
/* transaction id used for temporary path suffix while installing */
- rasprintf(&fsm->suffix, ";%08x", (unsigned)rpmtsGetTid(ts));
+ rasprintf(&tid, ";%08x", (unsigned)rpmtsGetTid(ts));
/* Detect and create directories not explicitly in package. */
- if (!rc) {
- rc = fsmMkdirs(fi, rpmteGetFileStates(te), fsm->sehandle, fsm->plugins);
- }
+ rc = fsmMkdirs(files, fs, plugins);
while (!rc) {
- hardLink_t li = NULL;
-
- /* Clean fsm, free'ing memory. */
- fsmReset(fsm);
-
/* Read next payload header. */
- rc = rpmcpioHeaderRead(archive, &(fsm->path), &(fsm->sb));
+ rc = rpmfiNext(fi);
- /* Detect and exit on end-of-payload. */
- if (rc == CPIOERR_HDR_TRAILER) {
- rc = 0;
+ if (rc < 0) {
+ if (rc == RPMERR_ITER_END)
+ rc = 0;
break;
}
- if (rc) break;
-
- /* Identify mapping index. */
- fsm->ix = mapFind(fsm->iter, fsm->path);
-
- /* Mapping error */
- if (fsm->ix < 0) {
- if (fsm->failedFile && *fsm->failedFile == NULL)
- *fsm->failedFile = xstrdup(fsm->path);
- rc = CPIOERR_UNMAPPED_FILE;
- break;
+ action = rpmfsGetAction(fs, rpmfiFX(fi));
+ skip = XFA_SKIPPING(action);
+ suffix = S_ISDIR(rpmfiFMode(fi)) ? NULL : tid;
+ if (action != FA_TOUCH) {
+ fpath = fsmFsPath(fi, suffix);
+ } else {
+ fpath = fsmFsPath(fi, "");
}
- rc = fsmInit(fsm);
+ /* Remap file perms, owner, and group. */
+ rc = rpmfiStat(fi, 1, &sb);
- /* Exit on error. */
- if (rc) {
- fsm->postpone = 1;
- break;
- }
+ fsmDebug(fpath, action, &sb);
- /* Run fsm init hook for all plugins */
- rc = rpmpluginsCallFsmInit(fsm->plugins, fsm->path, fsm->sb.st_mode);
-
/* Exit on error. */
- if (rc) {
- fsm->postpone = 1;
+ if (rc)
break;
- }
-
- if (S_ISREG(fsm->sb.st_mode) && fsm->sb.st_nlink > 1)
- fsm->postpone = saveHardLink(fsm, &li);
-
- setFileState(rpmteGetFileStates(te), fsm->ix, fsm->action);
-
- if (!fsm->postpone) {
- if (S_ISREG(st->st_mode)) {
- rc = fsmVerify(fsm);
- if (!(rc == CPIOERR_ENOENT)) return rc;
- rc = expandRegular(fsm, psm, archive, nodigest);
- } else if (S_ISDIR(st->st_mode)) {
- /* Directories replacing something need early backup */
- rc = fsmBackup(fsm);
- rc = fsmVerify(fsm);
- if (rc == CPIOERR_ENOENT) {
- mode_t mode = st->st_mode;
+
+ /* Run fsm init hook for all plugins */
+ //FIXME. functions related with msm.
+ rc = rpmpluginsCallFsmInit(plugins, fpath, sb.st_mode);
+
+ /* Run fsm file pre hook for all plugins */
+ rc = rpmpluginsCallFsmFilePre(plugins, fi, fpath,
+ sb.st_mode, action);
+ if (rc) {
+ skip = 1;
+ } else {
+ setFileState(fs, rpmfiFX(fi));
+ }
+
+ if (!skip) {
+ int setmeta = 1;
+
+ /* Directories replacing something need early backup */
+ if (!suffix) {
+ rc = fsmBackup(fi, action);
+ }
+ /* Assume file does't exist when tmp suffix is in use */
+ if (!suffix) {
+ rc = fsmVerify(fpath, fi, &sb);
+ } else {
+ rc = (action == FA_TOUCH) ? 0 : RPMERR_ENOENT;
+ }
+
+ if (S_ISREG(sb.st_mode)) {
+ if (rc == RPMERR_ENOENT) {
+ rc = fsmMkfile(fi, fpath, files, psm, nodigest,
+ &setmeta, &firsthardlink, &firstlinkfile);
+ }
+ } else if (S_ISDIR(sb.st_mode)) {
+ if (rc == RPMERR_ENOENT) {
+ mode_t mode = sb.st_mode;
mode &= ~07777;
mode |= 00700;
- rc = fsmMkdir(fsm->path, mode);
+ rc = fsmMkdir(fpath, mode);
}
- } else if (S_ISLNK(st->st_mode)) {
- if ((st->st_size + 1) > fsm->bufsize) {
- rc = CPIOERR_HDR_SIZE;
- } else if (rpmcpioRead(archive, fsm->buf, st->st_size) != st->st_size) {
- rc = CPIOERR_READ_FAILED;
- } else {
-
- fsm->buf[st->st_size] = '\0';
- /* fsmVerify() assumes link target in fsm->buf */
- rc = fsmVerify(fsm);
- if (rc == CPIOERR_ENOENT) {
- rc = fsmSymlink(fsm->buf, fsm->path);
- }
- }
- } else if (S_ISFIFO(st->st_mode)) {
- /* This mimics cpio S_ISSOCK() behavior but probably isnt' right */
- rc = fsmVerify(fsm);
- if (rc == CPIOERR_ENOENT) {
- rc = fsmMkfifo(fsm->path, 0000);
+ } else if (S_ISLNK(sb.st_mode)) {
+ if (rc == RPMERR_ENOENT) {
+ rc = fsmSymlink(rpmfiFLink(fi), fpath);
+ }
+ } else if (S_ISFIFO(sb.st_mode)) {
+ /* This mimics cpio S_ISSOCK() behavior but probably isn't right */
+ if (rc == RPMERR_ENOENT) {
+ rc = fsmMkfifo(fpath, 0000);
}
- } else if (S_ISCHR(st->st_mode) ||
- S_ISBLK(st->st_mode) ||
- S_ISSOCK(st->st_mode))
+ } else if (S_ISCHR(sb.st_mode) ||
+ S_ISBLK(sb.st_mode) ||
+ S_ISSOCK(sb.st_mode))
{
- rc = fsmVerify(fsm);
- if (rc == CPIOERR_ENOENT) {
- rc = fsmMknod(fsm->path, fsm->sb.st_mode, fsm->sb.st_rdev);
+ if (rc == RPMERR_ENOENT) {
+ rc = fsmMknod(fpath, sb.st_mode, sb.st_rdev);
}
} else {
/* XXX Special case /dev/log, which shouldn't be packaged anyways */
- if (!IS_DEV_LOG(fsm->path))
- rc = CPIOERR_UNKNOWN_FILETYPE;
+ if (!IS_DEV_LOG(fpath))
+ rc = RPMERR_UNKNOWN_FILETYPE;
}
- if (li != NULL) {
- li->createdPath = li->linkIndex;
- rc = fsmMakeLinks(fsm, li);
- }
- }
+ /* Set permissions, timestamps etc for non-hardlink entries */
+ if (!rc && setmeta) {
+ rc = fsmSetmeta(fpath, fi, plugins, action, &sb, nofcaps);
+ }
+ } else if (firsthardlink >= 0 && rpmfiArchiveHasContent(fi)) {
+ /* we skip the hard linked file containing the content */
+ /* write the content to the first used instead */
+ char *fn = rpmfilesFN(files, firsthardlink);
+ rc = rpmfiArchiveReadToFilePsm(fi, firstlinkfile, nodigest, psm);
+ wfd_close(&firstlinkfile);
+ firsthardlink = -1;
+ free(fn);
+ }
if (rc) {
- if (!fsm->postpone) {
+ if (!skip) {
/* XXX only erase if temp fn w suffix is in use */
- if (fsm->suffix) {
- if (S_ISDIR(st->st_mode)) {
- (void) fsmRmdir(fsm->path);
- } else {
- (void) fsmUnlink(fsm->path, fsm->mapFlags);
- }
+ if (suffix && (action != FA_TOUCH)) {
+ (void) fsmRemove(fpath, sb.st_mode);
}
errno = saveerrno;
- if (fsm->failedFile && *fsm->failedFile == NULL)
- *fsm->failedFile = xstrdup(fsm->path);
}
+ } else {
+ /* Notify on success. */
+ rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, rpmfiArchiveTell(fi));
- break;
- }
+ if (!skip) {
+ /* Backup file if needed. Directories are handled earlier */
+ if (suffix)
+ rc = fsmBackup(fi, action);
- /* Notify on success. */
- rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, rpmcpioTell(archive));
+ if (!rc)
+ rc = fsmCommit(&fpath, fi, action, suffix, plugins);
+ }
+ }
- if (!fsm->postpone) {
- rc = ((S_ISREG(st->st_mode) && st->st_nlink > 1)
- ? fsmCommitLinks(fsm) : fsmCommit(fsm, fsm->ix));
- }
- if (rc) {
- break;
- }
+ if (rc)
+ *failedFile = xstrdup(fpath);
+
+ /* Run fsm file post hook for all plugins */
+ rpmpluginsCallFsmFilePost(plugins, fi, fpath,
+ sb.st_mode, action, rc);
+ fpath = _free(fpath);
}
- if (!rc)
- rc = checkHardLinks(fsm);
+ rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS), fdOp(payload, FDSTAT_READ));
+ rpmswAdd(rpmtsOp(ts, RPMTS_OP_DIGEST), fdOp(payload, FDSTAT_DIGEST));
+
+exit:
/* No need to bother with close errors on read */
- rpmcpioFree(archive);
- fsmFree(fsm);
+ rpmfiArchiveClose(fi);
+ rpmfiFree(fi);
+ Fclose(payload);
+ free(tid);
+ free(fpath);
return rc;
}
-int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfi fi,
+int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfiles files,
rpmpsm psm, char ** failedFile)
{
+ rpmfi fi = rpmfilesIter(files, RPMFI_ITER_BACK);
rpmfs fs = rpmteGetFileStates(te);
- FSM_t fsm = fsmNew(FSM_PKGERASE, fs, fi, failedFile);
+ rpmPlugins plugins = rpmtsPlugins(ts);
+ struct stat sb;
int rc = 0;
+ char *fpath = NULL;
- if (!rpmteIsSource(te))
- fsm->mapFlags |= CPIO_SBIT_CHECK;
+ while (!rc && rpmfiNext(fi) >= 0) {
+ rpmFileAction action = rpmfsGetAction(fs, rpmfiFX(fi));
+ fpath = fsmFsPath(fi, NULL);
+ rc = fsmStat(fpath, 1, &sb);
- while (!rc) {
- /* Clean fsm, free'ing memory. */
- fsmReset(fsm);
-
- /* Identify mapping index. */
- fsm->ix = mapNextIterator(fsm->iter);
+ fsmDebug(fpath, action, &sb);
- /* Exit on end-of-payload. */
- if (fsm->ix < 0)
- break;
+ /* Run fsm file pre hook for all plugins */
+ rc = rpmpluginsCallFsmFilePre(plugins, fi, fpath,
+ sb.st_mode, action);
- rc = fsmInit(fsm);
-
- if (!fsm->postpone)
- rc = fsmBackup(fsm);
+ if (!XFA_SKIPPING(action))
+ rc = fsmBackup(fi, action);
/* Remove erased files. */
- if (!fsm->postpone && fsm->action == FA_ERASE) {
- int missingok = (fsm->fflags & (RPMFILE_MISSINGOK | RPMFILE_GHOST));
+ if (action == FA_ERASE) {
+ int missingok = (rpmfiFFlags(fi) & (RPMFILE_MISSINGOK | RPMFILE_GHOST));
- if (S_ISDIR(fsm->sb.st_mode)) {
- rc = fsmRmdir(fsm->path);
- } else {
- rc = fsmUnlink(fsm->path, fsm->mapFlags);
- }
+ rc = fsmRemove(fpath, sb.st_mode);
/*
* Missing %ghost or %missingok entries are not errors.
@@ -1849,7 +1077,7 @@ int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfi fi,
* and complaining about job already done seems like kinderkarten
* level "But it was MY turn!" whining...
*/
- if (rc == CPIOERR_ENOENT && missingok) {
+ if (rc == RPMERR_ENOENT && missingok) {
rc = 0;
}
@@ -1858,112 +1086,41 @@ int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfi fi,
* to track at least some of the expected failures though,
* such as when we knowingly left config file backups etc behind.
*/
- if (rc == CPIOERR_ENOTEMPTY) {
+ if (rc == RPMERR_ENOTEMPTY) {
rc = 0;
}
if (rc) {
int lvl = strict_erasures ? RPMLOG_ERR : RPMLOG_WARNING;
rpmlog(lvl, _("%s %s: remove failed: %s\n"),
- S_ISDIR(fsm->sb.st_mode) ? _("directory") : _("file"),
- fsm->path, strerror(errno));
+ S_ISDIR(sb.st_mode) ? _("directory") : _("file"),
+ fpath, strerror(errno));
}
}
+
+ /* Run fsm file post hook for all plugins */
+ rpmpluginsCallFsmFilePost(plugins, fi, fpath,
+ sb.st_mode, action, rc);
+
/* XXX Failure to remove is not (yet) cause for failure. */
if (!strict_erasures) rc = 0;
- if (rc) break;
+ if (rc)
+ *failedFile = xstrdup(fpath);
- /* Notify on success. */
- /* On erase we're iterating backwards, fixup for progress */
- rpm_loff_t amount = (fsm->ix >= 0) ?
- rpmfiFC(fsmGetFi(fsm)) - fsm->ix : 0;
- rpmpsmNotify(psm, RPMCALLBACK_UNINST_PROGRESS, amount);
+ if (rc == 0) {
+ /* Notify on success. */
+ /* On erase we're iterating backwards, fixup for progress */
+ rpm_loff_t amount = rpmfiFC(fi) - rpmfiFX(fi);
+ rpmpsmNotify(psm, RPMCALLBACK_UNINST_PROGRESS, amount);
+ }
+ fpath = _free(fpath);
}
- fsmFree(fsm);
+ free(fpath);
+ rpmfiFree(fi);
return rc;
}
-int rpmPackageFilesArchive(rpmfi fi, int isSrc, FD_t cfd,
- rpm_loff_t * archiveSize, char ** failedFile)
-{
- rpmfs fs = rpmfsNew(rpmfiFC(fi), 0);;
- FSM_t fsm = fsmNew(FSM_PKGBUILD, fs, fi, failedFile);;
- rpmcpio_t archive = rpmcpioOpen(cfd, O_WRONLY);
- int rc = 0;
-
- fsm->mapFlags |= CPIO_MAP_TYPE;
- if (isSrc)
- fsm->mapFlags |= CPIO_FOLLOW_SYMLINKS;
-
- if (archive == NULL) {
- rc = CPIOERR_INTERNAL;
- } else {
- int ghost, i, fc = rpmfiFC(fi);
-
- /* XXX Is this actually still needed? */
- for (i = 0; i < fc; i++) {
- ghost = (rpmfiFFlagsIndex(fi, i) & RPMFILE_GHOST);
- rpmfsSetAction(fs, i, ghost ? FA_SKIP : FA_COPYOUT);
- }
- }
-
- while (!rc) {
- fsmReset(fsm);
-
- /* Identify mapping index. */
- fsm->ix = mapNextIterator(fsm->iter);
-
- /* Exit on end-of-payload. */
- if (fsm->ix < 0)
- break;
-
- rc = fsmInit(fsm);
-
- /* Exit on error. */
- if (rc) {
- fsm->postpone = 1;
- break;
- }
-
- if (S_ISREG(fsm->sb.st_mode) && fsm->sb.st_nlink > 1)
- fsm->postpone = saveHardLink(fsm, NULL);
-
- if (fsm->postpone || fsm->fflags & RPMFILE_GHOST) /* XXX Don't if %ghost file. */
- continue;
- /* Hardlinks are handled later */
- if (!(S_ISREG(fsm->sb.st_mode) && fsm->sb.st_nlink > 1)) {
- /* Copy file into archive. */
- rc = writeFile(fsm, 1, archive, fsm->ix);
- }
-
- if (rc) {
- if (!fsm->postpone) {
- if (fsm->failedFile && *fsm->failedFile == NULL)
- *fsm->failedFile = xstrdup(fsm->path);
- }
-
- break;
- }
- }
-
- /* Flush partial sets of hard linked files. */
- if (!rc)
- rc = writeLinks(fsm, archive);
-
- /* Finish the payload stream */
- if (!rc)
- rc = rpmcpioClose(archive);
-
- if (archiveSize)
- *archiveSize = (rc == 0) ? rpmcpioTell(archive) : 0;
-
- rpmcpioFree(archive);
- rpmfsFree(fs);
- fsmFree(fsm);
-
- return rc;
-}
diff --git a/lib/fsm.h b/lib/fsm.h
index 7f1911406..7a75caf5a 100644
--- a/lib/fsm.h
+++ b/lib/fsm.h
@@ -17,22 +17,21 @@ typedef struct rpmpsm_s * rpmpsm;
/**
* Execute a file actions for package
* @param ts transaction set
- * @param fi transaction element file info
- * @param cfd
+ * @param te transaction set element
+ * @param files transaction element file info
* @param psm owner psm (or NULL)
- * @retval archiveSize pointer to archive size
* @retval failedFile pointer to first file name that failed (malloced)
* @return 0 on success
*/
-int rpmPackageFilesInstall(rpmts ts, rpmte te, rpmfi fi, FD_t cfd,
+int rpmPackageFilesInstall(rpmts ts, rpmte te, rpmfiles files,
rpmpsm psm, char ** failedFile);
-int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfi fi,
+int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfiles files,
rpmpsm psm, char ** failedFile);
-int rpmPackageFilesArchive(rpmfi fi, int isSrc, FD_t cfd,
- rpm_loff_t * archiveSize, char ** failedFile);
+RPM_GNUC_INTERNAL
+int rpmfiArchiveReadToFilePsm(rpmfi fi, FD_t fd, int nodigest, rpmpsm psm);
RPM_GNUC_INTERNAL
void rpmpsmNotify(rpmpsm psm, int what, rpm_loff_t amount);
diff --git a/lib/header.c b/lib/header.c
index 90079f307..0f6efe485 100644
--- a/lib/header.c
+++ b/lib/header.c
@@ -69,8 +69,13 @@ static const int typeSizes[16] = {
0
};
+enum headerSorted_e {
+ HEADERSORT_NONE = 0, /* Not sorted */
+ HEADERSORT_OFFSET = 1, /* Sorted by offset (on-disk format) */
+ HEADERSORT_INDEX = 2, /* Sorted by index */
+};
+
enum headerFlags_e {
- HEADERFLAG_SORTED = (1 << 0), /*!< Are header entries sorted? */
HEADERFLAG_ALLOCATED = (1 << 1), /*!< Is 1st header region allocated? */
HEADERFLAG_LEGACY = (1 << 2), /*!< Header came from legacy source? */
HEADERFLAG_DEBUG = (1 << 3), /*!< Debug this header? */
@@ -79,6 +84,17 @@ enum headerFlags_e {
typedef rpmFlags headerFlags;
/** \ingroup header
+ * A single tag from a Header.
+ */
+typedef struct indexEntry_s * indexEntry;
+struct indexEntry_s {
+ struct entryInfo_s info; /*!< Description of tag data. */
+ rpm_data_t data; /*!< Location of tag data. */
+ int length; /*!< No. bytes of data. */
+ int rdlen; /*!< No. bytes of data in region. */
+};
+
+/** \ingroup header
* The Header data structure.
*/
struct headerToken_s {
@@ -88,13 +104,14 @@ struct headerToken_s {
int indexAlloced; /*!< Allocated size of tag array. */
unsigned int instance; /*!< Rpmdb instance (offset) */
headerFlags flags;
+ int sorted; /*!< Current sort method */
int nrefs; /*!< Reference count. */
};
/** \ingroup header
* Maximum no. of bytes permitted in a header.
*/
-static const size_t headerMaxbytes = (32*1024*1024);
+static const size_t headerMaxbytes = (256*1024*1024);
#define INDEX_MALLOC_SIZE 8
@@ -102,16 +119,62 @@ static const size_t headerMaxbytes = (32*1024*1024);
(((_e)->info.tag >= RPMTAG_HEADERIMAGE) && ((_e)->info.tag < RPMTAG_HEADERREGIONS))
#define ENTRY_IN_REGION(_e) ((_e)->info.offset < 0)
+#define REGION_TAG_TYPE RPM_BIN_TYPE
+#define REGION_TAG_COUNT sizeof(struct entryInfo_s)
+
+/**
+ * Sanity check on no. of tags.
+ * This check imposes a limit of 65K tags, more than enough.
+ */
+#define HEADER_TAGS_MAX 0x0000ffff
+#define hdrchkTags(_ntags) ((_ntags) & (~HEADER_TAGS_MAX))
+
+/**
+ * Sanity check on tag values.
+ * Catches out nasties like negative values and multiple regions.
+ **/
+#define hdrchkTag(_tag) ((_tag) < HEADER_I18NTABLE)
+
+/**
+ * Sanity check on type values.
+ */
+#define hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE)
+
+/**
+ * Sanity check on data size and/or offset and/or count.
+ * This check imposes a limit of 256 MB -- file signatures
+ * may require a lot of space in the header.
+ */
+#define HEADER_DATA_MAX 0x0fffffff
+#define hdrchkData(_nbytes) ((_nbytes) & (~HEADER_DATA_MAX))
+
+/**
+ * Sanity check on data alignment for data type.
+ */
+#define hdrchkAlign(_type, _off) ((_off) & (typeAlign[_type]-1))
+
+/**
+ * Sanity check on range of data offset.
+ */
+#define hdrchkRange(_dl, _off) ((_off) < 0 || (_off) > (_dl))
+
+static int dataLength(rpm_tagtype_t type, rpm_constdata_t p, rpm_count_t count,
+ int onDisk, rpm_constdata_t pend);
+
+#ifndef htonll
/* Convert a 64bit value to network byte order. */
RPM_GNUC_CONST
static uint64_t htonll(uint64_t n)
{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
uint32_t *i = (uint32_t*)&n;
uint32_t b = i[0];
i[0] = htonl(i[1]);
i[1] = htonl(b);
+#endif
return n;
}
+#endif
Header headerLink(Header h)
{
@@ -156,11 +219,11 @@ Header headerFree(Header h)
return NULL;
}
-static Header headerCreate(void *blob, unsigned int pvlen, int32_t indexLen)
+static Header headerCreate(void *blob, int32_t indexLen)
{
Header h = xcalloc(1, sizeof(*h));
if (blob) {
- h->blob = (pvlen > 0) ? memcpy(xmalloc(pvlen), blob, pvlen) : blob;
+ h->blob = blob;
h->indexAlloced = indexLen + 1;
h->indexUsed = indexLen;
} else {
@@ -168,7 +231,7 @@ static Header headerCreate(void *blob, unsigned int pvlen, int32_t indexLen)
h->indexUsed = 0;
}
h->instance = 0;
- h->flags |= HEADERFLAG_SORTED;
+ h->sorted = HEADERSORT_NONE;
h->index = (h->indexAlloced
? xcalloc(h->indexAlloced, sizeof(*h->index))
@@ -180,34 +243,50 @@ static Header headerCreate(void *blob, unsigned int pvlen, int32_t indexLen)
Header headerNew(void)
{
- return headerCreate(NULL, 0, 0);
+ return headerCreate(NULL, 0);
}
-int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate)
+static rpmRC hdrblobVerifyInfo(hdrblob blob, char **emsg)
{
- entryInfo pe = (entryInfo) pev;
- entryInfo info = iv;
- int i;
+ struct entryInfo_s info;
+ int i, len = 0;
+ int32_t end = 0;
+ const char *ds = (const char *) blob->dataStart;
+ int32_t il = (blob->regionTag) ? blob->il-1 : blob->il;
+ entryInfo pe = (blob->regionTag) ? blob->pe+1 : blob->pe;
for (i = 0; i < il; i++) {
- info->tag = ntohl(pe[i].tag);
- info->type = ntohl(pe[i].type);
- info->offset = ntohl(pe[i].offset);
- if (negate)
- info->offset = -info->offset;
- info->count = ntohl(pe[i].count);
-
- if (hdrchkType(info->type))
- return i;
- if (hdrchkAlign(info->type, info->offset))
- return i;
- if (hdrchkRange(dl, info->offset))
- return i;
- if (hdrchkData(info->count))
- return i;
+ ei2h(&pe[i], &info);
+
+ /* Previous data must not overlap */
+ if (end > info.offset)
+ goto err;
+
+ if (hdrchkTag(info.tag))
+ goto err;
+ if (hdrchkType(info.type))
+ goto err;
+ if (hdrchkAlign(info.type, info.offset))
+ goto err;
+ if (hdrchkRange(blob->dl, info.offset))
+ goto err;
+
+ /* Verify the data actually fits */
+ len = dataLength(info.type, ds + info.offset,
+ info.count, 1, ds + blob->dl);
+ end = info.offset + len;
+ if (hdrchkRange(blob->dl, end) || len <= 0)
+ goto err;
+ }
+ return 0; /* Everything ok */
+err:
+ if (emsg) {
+ rasprintf(emsg,
+ _("tag[%d]: BAD, tag %d type %d offset %d count %d len %d"),
+ i, info.tag, info.type, info.offset, info.count, len);
}
- return -1;
+ return i + 1;
}
static int indexCmp(const void * avp, const void * bvp)
@@ -216,11 +295,11 @@ static int indexCmp(const void * avp, const void * bvp)
return (ap->info.tag - bp->info.tag);
}
-void headerSort(Header h)
+static void headerSort(Header h)
{
- if (!(h->flags & HEADERFLAG_SORTED)) {
+ if (h->sorted != HEADERSORT_INDEX) {
qsort(h->index, h->indexUsed, sizeof(*h->index), indexCmp);
- h->flags |= HEADERFLAG_SORTED;
+ h->sorted = HEADERSORT_INDEX;
}
}
@@ -239,11 +318,11 @@ static int offsetCmp(const void * avp, const void * bvp)
return rc;
}
-void headerUnsort(Header h)
+static void headerUnsort(Header h)
{
- if (h->flags & HEADERFLAG_SORTED) {
+ if (h->sorted != HEADERSORT_OFFSET) {
qsort(h->index, h->indexUsed, sizeof(*h->index), offsetCmp);
- h->flags &= ~HEADERFLAG_SORTED;
+ h->sorted = HEADERSORT_OFFSET;
}
}
@@ -270,13 +349,8 @@ unsigned headerSizeof(Header h, int magicp)
headerSort(h);
- switch (magicp) {
- case HEADER_MAGIC_YES:
+ if (magicp == HEADER_MAGIC_YES)
size += sizeof(rpm_header_magic);
- break;
- case HEADER_MAGIC_NO:
- break;
- }
size += 2 * sizeof(int32_t); /* count of index entries */
@@ -284,7 +358,7 @@ unsigned headerSizeof(Header h, int magicp)
/* Regions go in as is ... */
if (ENTRY_IS_REGION(entry)) {
size += entry->length;
- /* XXX Legacy regions do not include the region tag and data. */
+ /* Reserve space for legacy region tag + data */
if (i == 0 && (h->flags & HEADERFLAG_LEGACY))
size += sizeof(struct entryInfo_s) + entry->info.count;
continue;
@@ -313,6 +387,8 @@ static inline int strtaglen(const char *str, rpm_count_t c, const char *end)
const char *s;
if (end) {
+ if (str >= end)
+ return -1;
while ((s = memchr(start, '\0', end-start))) {
if (--c == 0 || s > end)
break;
@@ -407,10 +483,7 @@ static int regionSwab(indexEntry entry, int il, int dl,
for (; il > 0; il--, pe++) {
struct indexEntry_s ie;
- ie.info.tag = ntohl(pe->tag);
- ie.info.type = ntohl(pe->type);
- ie.info.count = ntohl(pe->count);
- ie.info.offset = ntohl(pe->offset);
+ ei2h(pe, &ie.info);
if (hdrchkType(ie.info.type))
return -1;
@@ -507,7 +580,7 @@ void * headerExport(Header h, unsigned int *bsize)
il += ril;
dl += entry->rdlen + entry->info.count;
- /* XXX Legacy regions do not include the region tag and data. */
+ /* Reserve space for legacy region tag */
if (i == 0 && (h->flags & HEADERFLAG_LEGACY))
il += 1;
@@ -580,7 +653,7 @@ void * headerExport(Header h, unsigned int *bsize)
src = (char *)entry->data;
rdlen = entry->rdlen;
- /* XXX Legacy regions do not include the region tag and data. */
+ /* Legacy headers don't have regions originally, create one */
if (i == 0 && (h->flags & HEADERFLAG_LEGACY)) {
int32_t stei[4];
@@ -720,7 +793,8 @@ indexEntry findEntry(Header h, rpmTagVal tag, rpm_tagtype_t type)
struct indexEntry_s key;
if (h == NULL) return NULL;
- if (!(h->flags & HEADERFLAG_SORTED)) headerSort(h);
+ if (h->sorted != HEADERSORT_INDEX)
+ headerSort(h);
key.info.tag = tag;
@@ -750,7 +824,7 @@ int headerDel(Header h, rpmTagVal tag)
entry = findEntry(h, tag, RPM_NULL_TYPE);
if (!entry) return 1;
- /* Make sure entry points to the first occurence of this tag. */
+ /* Make sure entry points to the first occurrence of this tag. */
while (entry > h->index && (entry - 1)->info.tag == tag)
entry--;
@@ -778,92 +852,46 @@ int headerDel(Header h, rpmTagVal tag)
return 0;
}
-Header headerImport(void * blob, unsigned int bsize, headerImportFlags flags)
+rpmRC hdrblobImport(hdrblob blob, int fast, Header *hdrp, char **emsg)
{
- const int32_t * ei = (int32_t *) blob;
- int32_t il = ntohl(ei[0]); /* index length */
- int32_t dl = ntohl(ei[1]); /* data length */
- unsigned int pvlen = sizeof(il) + sizeof(dl) +
- (il * sizeof(struct entryInfo_s)) + dl;;
Header h = NULL;
- entryInfo pe;
- unsigned char * dataStart;
- unsigned char * dataEnd;
indexEntry entry;
int rdlen;
- int fast = (flags & HEADERIMPORT_FAST);
-
- /* Sanity checks on header intro. */
- if (bsize && bsize != pvlen)
- goto errxit;
- if (hdrchkTags(il) || hdrchkData(dl) || pvlen >= headerMaxbytes)
- goto errxit;
- h = headerCreate(blob, (flags & HEADERIMPORT_COPY) ? pvlen : 0, il);
-
- ei = h->blob; /* In case we had to copy */
- pe = (entryInfo) &ei[2];
- dataStart = (unsigned char *) (pe + il);
- dataEnd = dataStart + dl;
+ h = headerCreate(blob->ei, blob->il);
entry = h->index;
- if (!(htonl(pe->tag) < RPMTAG_HEADERI18NTABLE)) {
+ if (!(htonl(blob->pe->tag) < RPMTAG_HEADERI18NTABLE)) {
+ /* An original v3 header, create a legacy region entry for it */
h->flags |= HEADERFLAG_LEGACY;
entry->info.type = REGION_TAG_TYPE;
entry->info.tag = RPMTAG_HEADERIMAGE;
entry->info.count = REGION_TAG_COUNT;
- entry->info.offset = ((unsigned char *)pe - dataStart); /* negative offset */
-
- entry->data = pe;
- entry->length = pvlen - sizeof(il) - sizeof(dl);
- rdlen = regionSwab(entry+1, il, 0, pe,
- dataStart, dataEnd, entry->info.offset, fast);
- if (rdlen != dl)
+ entry->info.offset = ((unsigned char *)blob->pe - blob->dataStart); /* negative offset */
+
+ entry->data = blob->pe;
+ entry->length = blob->pvlen - sizeof(blob->il) - sizeof(blob->dl);
+ rdlen = regionSwab(entry+1, blob->il, 0, blob->pe,
+ blob->dataStart, blob->dataEnd,
+ entry->info.offset, fast);
+ if (rdlen != blob->dl)
goto errxit;
entry->rdlen = rdlen;
h->indexUsed++;
} else {
- int32_t rdl;
+ /* Either a v4 header or an "upgraded" v3 header with a legacy region */
int32_t ril;
h->flags &= ~HEADERFLAG_LEGACY;
-
- entry->info.type = htonl(pe->type);
- entry->info.count = htonl(pe->count);
- entry->info.tag = htonl(pe->tag);
-
- if (!ENTRY_IS_REGION(entry))
- goto errxit;
- if (entry->info.type != REGION_TAG_TYPE)
- goto errxit;
- if (entry->info.count != REGION_TAG_COUNT)
- goto errxit;
-
- { int off = ntohl(pe->offset);
-
- if (off) {
- size_t nb = REGION_TAG_COUNT;
- int32_t stei[nb];
- if (hdrchkRange(dl, (off + nb)))
- goto errxit;
- /* XXX Hmm, why the copy? */
- memcpy(&stei, dataStart + off, nb);
- rdl = -ntohl(stei[2]); /* negative offset */
- ril = rdl/sizeof(*pe);
- if (hdrchkTags(ril) || hdrchkData(rdl))
- goto errxit;
- } else {
- ril = il;
- rdl = (ril * sizeof(struct entryInfo_s));
- entry->info.tag = RPMTAG_HEADERIMAGE;
- }
- }
- entry->info.offset = -rdl; /* negative offset */
-
- entry->data = pe;
- entry->length = pvlen - sizeof(il) - sizeof(dl);
- rdlen = regionSwab(entry+1, ril-1, 0, pe+1,
- dataStart, dataEnd, entry->info.offset, fast);
+ ei2h(blob->pe, &entry->info);
+ ril = (entry->info.offset != 0) ? blob->ril : blob->il;
+
+ entry->info.offset = -(ril * sizeof(*blob->pe)); /* negative offset */
+ entry->data = blob->pe;
+ entry->length = blob->pvlen - sizeof(blob->il) - sizeof(blob->dl);
+ rdlen = regionSwab(entry+1, ril-1, 0, blob->pe+1,
+ blob->dataStart, blob->dataEnd,
+ entry->info.offset, fast);
if (rdlen < 0)
goto errxit;
entry->rdlen = rdlen;
@@ -874,8 +902,8 @@ Header headerImport(void * blob, unsigned int bsize, headerImportFlags flags)
int rid = entry->info.offset+1;
/* Load dribble entries from region. */
- rdlen = regionSwab(newEntry, ne, rdlen, pe+ril,
- dataStart, dataEnd, rid, fast);
+ rdlen = regionSwab(newEntry, ne, rdlen, blob->pe+ril,
+ blob->dataStart, blob->dataEnd, rid, fast);
if (rdlen < 0)
goto errxit;
@@ -902,24 +930,29 @@ Header headerImport(void * blob, unsigned int bsize, headerImportFlags flags)
rdlen += REGION_TAG_COUNT;
- if (rdlen != dl)
+ if (rdlen != blob->dl)
goto errxit;
}
- h->flags &= ~HEADERFLAG_SORTED;
+ /* Force sorting, dribble lookups can cause early sort on partial header */
+ h->sorted = HEADERSORT_NONE;
headerSort(h);
h->flags |= HEADERFLAG_ALLOCATED;
+ if (hdrp)
+ *hdrp = h;
- return h;
+ /* We own the memory now, avoid double-frees */
+ blob->ei = NULL;
+
+ return RPMRC_OK;
errxit:
if (h) {
- if (flags & HEADERIMPORT_COPY)
- free(h->blob);
free(h->index);
free(h);
+ rasprintf(emsg, _("hdr load: BAD"));
}
- return NULL;
+ return RPMRC_FAIL;
}
Header headerReload(Header h, rpmTagVal tag)
@@ -956,54 +989,14 @@ Header headerCopyLoad(const void * uh)
Header headerRead(FD_t fd, int magicp)
{
- int32_t block[4];
- int32_t * ei = NULL;
- int32_t il;
- int32_t dl;
Header h = NULL;
- unsigned int len, blen;
-
- if (magicp == HEADER_MAGIC_YES) {
- int32_t magic;
-
- if (Freadall(fd, block, 4*sizeof(*block)) != 4*sizeof(*block))
- goto exit;
-
- magic = block[0];
-
- if (memcmp(&magic, rpm_header_magic, sizeof(magic)))
- goto exit;
-
- il = ntohl(block[2]);
- dl = ntohl(block[3]);
- } else {
- if (Freadall(fd, block, 2*sizeof(*block)) != 2*sizeof(*block))
- goto exit;
-
- il = ntohl(block[0]);
- dl = ntohl(block[1]);
- }
-
- blen = (il * sizeof(struct entryInfo_s)) + dl;
- len = sizeof(il) + sizeof(dl) + blen;
+ struct hdrblob_s blob;
+ char *buf = NULL;
- /* Sanity checks on header intro. */
- if (hdrchkTags(il) || hdrchkData(dl) || len > headerMaxbytes)
- goto exit;
+ if (hdrblobRead(fd, magicp, 0, 0, &blob, &buf) == RPMRC_OK)
+ hdrblobImport(&blob, 0, &h, &buf);
- ei = xmalloc(len);
- ei[0] = htonl(il);
- ei[1] = htonl(dl);
-
- if (Freadall(fd, (char *)&ei[2], blen) != blen)
- goto exit;
-
- h = headerImport(ei, len, 0);
-
-exit:
- if (h == NULL && ei != NULL) {
- free(ei);
- }
+ free(buf);
return h;
}
@@ -1011,19 +1004,15 @@ int headerWrite(FD_t fd, Header h, int magicp)
{
ssize_t nb;
unsigned int length;
- void * uh;
+ void * uh = headerExport(h, &length);
- uh = headerExport(h, &length);
if (uh == NULL)
return 1;
- switch (magicp) {
- case HEADER_MAGIC_YES:
- nb = Fwrite(rpm_header_magic, sizeof(uint8_t), sizeof(rpm_header_magic), fd);
+
+ if (magicp == HEADER_MAGIC_YES) {
+ nb = Fwrite(rpm_header_magic, sizeof(rpm_header_magic), 1, fd);
if (nb != sizeof(rpm_header_magic))
goto exit;
- break;
- case HEADER_MAGIC_NO:
- break;
}
nb = Fwrite(uh, sizeof(char), length, fd);
@@ -1040,6 +1029,16 @@ int headerIsEntry(Header h, rpmTagVal tag)
}
+/* simple heuristic to find out if the header is from * a source rpm
+ * or not: source rpms contain at least the spec file and have all
+ * files in one directory with an empty name.
+ */
+int headerIsSourceHeuristic(Header h)
+{
+ indexEntry entry = findEntry(h, RPMTAG_DIRNAMES, RPM_STRING_ARRAY_TYPE);
+ return entry && entry->info.count == 1 && entry->data && !*(const char *)entry->data;
+}
+
/** \ingroup header
* Retrieve data from header entry.
* Relevant flags (others are ignored), if neither is set allocation
@@ -1050,7 +1049,6 @@ int headerIsEntry(Header h, rpmTagVal tag)
* @todo Permit retrieval of regions other than HEADER_IMUTABLE.
* @param entry header entry
* @param td tag data container
- * @param minMem string pointers refer to header memory?
* @param flags flags to control memory allocation
* @return 1 on success, otherwise error.
*/
@@ -1167,6 +1165,7 @@ static int copyTdEntry(const indexEntry entry, rpmtd td, headerGetFlags flags)
}
td->type = entry->info.type;
td->count = count;
+ td->size = entry->length;
if (td->data && entry->data != td->data) {
td->flags |= RPMTD_ALLOCED;
@@ -1311,18 +1310,10 @@ static int intGetTdEntry(Header h, rpmtd td, headerGetFlags flags)
return 0;
}
- if (flags & HEADERGET_RAW) {
+ if (entry->info.type == RPM_I18NSTRING_TYPE && !(flags & HEADERGET_RAW))
+ rc = copyI18NEntry(h, entry, td, flags);
+ else
rc = copyTdEntry(entry, td, flags);
- } else {
- switch (entry->info.type) {
- case RPM_I18NSTRING_TYPE:
- rc = copyI18NEntry(h, entry, td, flags);
- break;
- default:
- rc = copyTdEntry(entry, td, flags);
- break;
- }
- }
if (rc == 0)
td->flags |= RPMTD_INVALID;
@@ -1438,7 +1429,7 @@ static int intAddEntry(Header h, rpmtd td)
entry->length = length;
if (h->indexUsed > 0 && td->tag < h->index[h->indexUsed-1].info.tag)
- h->flags &= ~HEADERFLAG_SORTED;
+ h->sorted = HEADERSORT_NONE;
h->indexUsed++;
return 1;
@@ -1650,7 +1641,7 @@ int headerMod(Header h, rpmtd td)
if (data == NULL)
return 0;
- /* make sure entry points to the first occurence of this tag */
+ /* make sure entry points to the first occurrence of this tag */
while (entry > h->index && (entry - 1)->info.tag == td->tag)
entry--;
@@ -1773,3 +1764,264 @@ ssize_t Freadall(FD_t fd, void * buf, ssize_t size)
return total;
}
+static rpmRC hdrblobVerifyRegion(rpmTagVal regionTag, int exact_size,
+ hdrblob blob, char **buf)
+{
+ rpmRC rc = RPMRC_FAIL;
+ struct entryInfo_s trailer, einfo;
+ unsigned char * regionEnd = NULL;
+
+ /* Check that we have at least on tag */
+ if (blob->il < 1) {
+ rasprintf(buf, _("region: no tags"));
+ goto exit;
+ }
+
+ /* Convert the 1st tag element. */
+ ei2h(blob->pe, &einfo);
+
+ if (!regionTag && (einfo.tag == RPMTAG_HEADERSIGNATURES ||
+ einfo.tag == RPMTAG_HEADERIMMUTABLE ||
+ einfo.tag == RPMTAG_HEADERIMAGE)) {
+ regionTag = einfo.tag;
+ }
+
+ /* Is there an immutable header region tag? */
+ if (!(einfo.tag == regionTag)) {
+ rc = RPMRC_NOTFOUND;
+ goto exit;
+ }
+
+ /* Is the region tag sane? */
+ if (!(einfo.type == REGION_TAG_TYPE && einfo.count == REGION_TAG_COUNT)) {
+ rasprintf(buf,
+ _("region tag: BAD, tag %d type %d offset %d count %d"),
+ einfo.tag, einfo.type, einfo.offset, einfo.count);
+ goto exit;
+ }
+
+ /* Is the trailer within the data area? */
+ if (hdrchkRange(blob->dl, einfo.offset + REGION_TAG_COUNT)) {
+ rasprintf(buf,
+ _("region offset: BAD, tag %d type %d offset %d count %d"),
+ einfo.tag, einfo.type, einfo.offset, einfo.count);
+ goto exit;
+ }
+
+ /* Is there an immutable header region tag trailer? */
+ memset(&trailer, 0, sizeof(trailer));
+ regionEnd = blob->dataStart + einfo.offset;
+ (void) memcpy(&trailer, regionEnd, REGION_TAG_COUNT);
+ regionEnd += REGION_TAG_COUNT;
+ blob->rdl = regionEnd - blob->dataStart;
+
+ ei2h(&trailer, &einfo);
+ /* Trailer offset is negative and has a special meaning */
+ einfo.offset = -einfo.offset;
+ if (!(einfo.tag == regionTag &&
+ einfo.type == REGION_TAG_TYPE && einfo.count == REGION_TAG_COUNT))
+ {
+ rasprintf(buf,
+ _("region trailer: BAD, tag %d type %d offset %d count %d"),
+ einfo.tag, einfo.type, einfo.offset, einfo.count);
+ goto exit;
+ }
+
+ /* Does the region actually fit within the header? */
+ blob->ril = einfo.offset/sizeof(*blob->pe);
+ if ((einfo.offset % sizeof(*blob->pe)) || hdrchkRange(blob->il, blob->ril) ||
+ hdrchkRange(blob->dl, blob->rdl)) {
+ rasprintf(buf, _("region %d size: BAD, ril %d il %d rdl %d dl %d"),
+ regionTag, blob->ril, blob->il, blob->rdl, blob->dl);
+ goto exit;
+ }
+
+ /* In package files region size is expected to match header size. */
+ if (exact_size && !(blob->il == blob->ril && blob->dl == blob->rdl)) {
+ rasprintf(buf,
+ _("region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"),
+ regionTag, blob->il, blob->ril, blob->dl, blob->rdl);
+ goto exit;
+ }
+
+ blob->regionTag = regionTag;
+ rc = RPMRC_OK;
+
+exit:
+ return rc;
+}
+
+rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrblob blob, char **emsg)
+{
+ int32_t block[4];
+ int32_t *bs = (magic != 0) ? &block[0] : &block[2];
+ int blen = (magic != 0) ? sizeof(block) : sizeof(block) / 2;
+ int32_t il;
+ int32_t dl;
+ int32_t * ei = NULL;
+ size_t uc;
+ size_t nb;
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ int xx;
+ int32_t il_max = HEADER_TAGS_MAX;
+ int32_t dl_max = HEADER_DATA_MAX;
+
+ if (regionTag == RPMTAG_HEADERSIGNATURES) {
+ il_max = 32;
+ dl_max = 8192;
+ }
+
+ memset(block, 0, sizeof(block));
+ if ((xx = Freadall(fd, bs, blen)) != blen) {
+ rasprintf(emsg,
+ _("hdr size(%d): BAD, read returned %d"), blen, xx);
+ goto exit;
+ }
+ if (magic && memcmp(block, rpm_header_magic, sizeof(rpm_header_magic))) {
+ rasprintf(emsg, _("hdr magic: BAD"));
+ goto exit;
+ }
+ il = ntohl(block[2]);
+ if (hdrchkRange(il_max, il)) {
+ rasprintf(emsg, _("hdr tags: BAD, no. of tags(%d) out of range"), il);
+ goto exit;
+ }
+ dl = ntohl(block[3]);
+ if (hdrchkRange(dl_max, dl)) {
+ rasprintf(emsg, _("hdr data: BAD, no. of bytes(%d) out of range"), dl);
+ goto exit;
+ }
+
+ nb = (il * sizeof(struct entryInfo_s)) + dl;
+ uc = sizeof(il) + sizeof(dl) + nb;
+ ei = xmalloc(uc);
+ ei[0] = block[2];
+ ei[1] = block[3];
+ if ((xx = Freadall(fd, (char *)&ei[2], nb)) != nb) {
+ rasprintf(emsg, _("hdr blob(%zd): BAD, read returned %d"), nb, xx);
+ goto exit;
+ }
+
+ if (regionTag == RPMTAG_HEADERSIGNATURES) {
+ size_t sigSize = uc + sizeof(rpm_header_magic);
+ size_t pad = (8 - (sigSize % 8)) % 8;
+ size_t trc;
+ if (pad && (trc = Freadall(fd, block, pad)) != pad) {
+ rasprintf(emsg, _("sigh pad(%zd): BAD, read %zd bytes"), pad, trc);
+ goto exit;
+ }
+ }
+
+ rc = hdrblobInit(ei, uc, regionTag, exact_size, blob, emsg);
+
+exit:
+ if (rc != RPMRC_OK) {
+ free(ei);
+ blob->ei = NULL;
+ if (emsg && *emsg && regionTag == RPMTAG_HEADERSIGNATURES) {
+ /* rstrscat() cannot handle overlap even if it claims so */
+ char *tmp = rstrscat(NULL, _("signature "), *emsg, NULL);
+ free(*emsg);
+ *emsg = tmp;
+ }
+ }
+
+ return rc;
+}
+
+rpmRC hdrblobInit(const void *uh, size_t uc,
+ rpmTagVal regionTag, int exact_size,
+ struct hdrblob_s *blob, char **emsg)
+{
+ rpmRC rc = RPMRC_FAIL;
+
+ memset(blob, 0, sizeof(*blob));
+ blob->ei = (int32_t *) uh; /* discards const */
+ blob->il = ntohl(blob->ei[0]);
+ blob->dl = ntohl(blob->ei[1]);
+ blob->pe = (entryInfo) &(blob->ei[2]);
+ blob->pvlen = sizeof(blob->il) + sizeof(blob->dl) +
+ (blob->il * sizeof(*blob->pe)) + blob->dl;
+ blob->dataStart = (uint8_t *) (blob->pe + blob->il);
+ blob->dataEnd = blob->dataStart + blob->dl;
+
+ /* Is the blob the right size? */
+ if (blob->pvlen >= headerMaxbytes || (uc && blob->pvlen != uc)) {
+ rasprintf(emsg, _("blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"),
+ blob->pvlen, blob->il, blob->dl);
+ goto exit;
+ }
+
+ if (hdrblobVerifyRegion(regionTag, exact_size, blob, emsg) == RPMRC_FAIL)
+ goto exit;
+
+ /* Sanity check the rest of the header structure. */
+ if (hdrblobVerifyInfo(blob, emsg))
+ goto exit;
+
+ rc = RPMRC_OK;
+
+exit:
+ return rc;
+}
+
+rpmRC hdrblobGet(hdrblob blob, uint32_t tag, rpmtd td)
+{
+ rpmRC rc = RPMRC_NOTFOUND;
+ struct indexEntry_s entry;
+ struct entryInfo_s einfo;
+ const struct entryInfo_s *pe = blob->pe;
+ uint32_t ntag = htonl(tag);
+ int tsize;
+
+ memset(&einfo, 0, sizeof(einfo));
+ rpmtdReset(td);
+
+ for (int i = 1; i < blob->il; i++, pe++) {
+ if (pe->tag != ntag)
+ continue;
+ ei2h(pe, &einfo);
+
+ /* We can only handle non-byteswappable data */
+ tsize = typeSizes[einfo.type];
+ if (tsize != 1 && tsize != -1)
+ return RPMRC_FAIL;
+
+ entry.info = einfo; /* struct assignment */
+ entry.data = blob->dataStart + einfo.offset;
+ entry.length = dataLength(einfo.type, blob->dataStart + einfo.offset,
+ einfo.count, 1, blob->dataEnd);
+ entry.rdlen = 0;
+ td->tag = einfo.tag;
+ rc = copyTdEntry(&entry, td, HEADERGET_MINMEM) ? RPMRC_OK : RPMRC_FAIL;
+ break;
+ }
+ return rc;
+}
+
+Header headerImport(void * blob, unsigned int bsize, headerImportFlags flags)
+{
+ Header h = NULL;
+ struct hdrblob_s hblob;
+ char *buf = NULL;
+ void * b = blob;
+
+ if (flags & HEADERIMPORT_COPY) {
+ if (bsize == 0 && hdrblobInit(b, 0, 0, 0, &hblob, &buf) == RPMRC_OK)
+ bsize = hblob.pvlen;
+ if (bsize == 0)
+ goto exit;
+ b = memcpy(xmalloc(bsize), b, bsize);
+ }
+
+ /* Sanity checks on header intro. */
+ if (hdrblobInit(b, bsize, 0, 0, &hblob, &buf) == RPMRC_OK)
+ hdrblobImport(&hblob, (flags & HEADERIMPORT_FAST), &h, &buf);
+
+exit:
+ if (h == NULL && b != blob)
+ free(b);
+ free(buf);
+
+ return h;
+}
diff --git a/lib/header.h b/lib/header.h
index ddaba4f68..a616deefc 100644
--- a/lib/header.h
+++ b/lib/header.h
@@ -55,18 +55,6 @@ Header headerFree( Header h);
Header headerLink(Header h);
/** \ingroup header
- * Sort tags in header.
- * @param h header
- */
-void headerSort(Header h);
-
-/** \ingroup header
- * Restore tags in header to original ordering.
- * @param h header
- */
-void headerUnsort(Header h);
-
-/** \ingroup header
* Return size of on-disk header representation in bytes.
* @param h header
* @param magicp include size of 8 bytes for (magic, 0)?
@@ -75,17 +63,6 @@ void headerUnsort(Header h);
unsigned int headerSizeof(Header h, int magicp);
/** \ingroup header
- * Perform simple sanity and range checks on header tag(s).
- * @param il no. of tags in header
- * @param dl no. of bytes in header data.
- * @param pev 1st element in tag array, big-endian
- * @param iv failing (or last) tag element, host-endian
- * @param negate negative offset expected?
- * @return -1 on success, otherwise failing tag element index
- */
-int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate);
-
-/** \ingroup header
* Convert header to on-disk representation.
* @deprecated Use headerExport() instead
* @param h header (with pointers)
@@ -245,9 +222,9 @@ int headerPut(Header h, rpmtd td, headerPutFlags flags);
* @return 1 on success, 0 on failure
*
*/
+int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
int headerPutString(Header h, rpmTagVal tag, const char *val);
int headerPutStringArray(Header h, rpmTagVal tag, const char **val, rpm_count_t size);
-int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
int headerPutChar(Header h, rpmTagVal tag, const char *val, rpm_count_t size);
int headerPutUint8(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
int headerPutUint16(Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size);
@@ -348,65 +325,6 @@ int headerNext(HeaderIterator hi, rpmtd td);
rpmTagVal headerNextTag(HeaderIterator hi);
/** \ingroup header
- * Return name, version, release strings from header.
- * @param h header
- * @retval *np name pointer (or NULL)
- * @retval *vp version pointer (or NULL)
- * @retval *rp release pointer (or NULL)
- * @return 0 always
- */
-RPM_GNUC_DEPRECATED
-int headerNVR(Header h,
- const char ** np,
- const char ** vp,
- const char ** rp);
-
-/** \ingroup header
- * Return name, epoch, version, release, arch strings from header.
- * @param h header
- * @retval *np name pointer (or NULL)
- * @retval *ep epoch pointer (or NULL)
- * @retval *vp version pointer (or NULL)
- * @retval *rp release pointer (or NULL)
- * @retval *ap arch pointer (or NULL)
- * @return 0 always
- */
-RPM_GNUC_DEPRECATED
-int headerNEVRA(Header h,
- const char ** np,
- uint32_t ** ep,
- const char ** vp,
- const char ** rp,
- const char ** ap);
-
-/** \ingroup header
- * Return (malloc'd) header name-version-release string.
- * @param h header
- * @retval np name tag value
- * @return name-version-release string
- */
-RPM_GNUC_DEPRECATED
-char * headerGetNEVR(Header h, const char ** np );
-
-/** \ingroup header
- * Return (malloc'd) header name-version-release.arch string.
- * @param h header
- * @retval np name tag value
- * @return name-version-release string
- */
-RPM_GNUC_DEPRECATED
-char * headerGetNEVRA(Header h, const char ** np );
-
-/* \ingroup header
- * Return (malloc'd) header (epoch:)version-release string.
- * @param h header
- * @retval np name tag value (or NULL)
- * @return (epoch:)version-release string
- */
-RPM_GNUC_DEPRECATED
-char * headerGetEVR(Header h, const char **np);
-
-/** \ingroup header
* Return any non-array tag from header, converted to string
* @param h header
* @param tag tag to retrieve
@@ -431,14 +349,6 @@ const char * headerGetString(Header h, rpmTagVal tag);
uint64_t headerGetNumber(Header h, rpmTagVal tag);
/** \ingroup header
- * Return header color.
- * @param h header
- * @return header color
- */
-RPM_GNUC_DEPRECATED
-rpm_color_t headerGetColor(Header h);
-
-/** \ingroup header
* Check if header is a source or binary package header
* @param h header
* @return 0 == binary, 1 == source
diff --git a/lib/header_internal.h b/lib/header_internal.h
index f51435fee..81c8c1e9d 100644
--- a/lib/header_internal.h
+++ b/lib/header_internal.h
@@ -6,6 +6,7 @@
*/
#include <rpm/header.h>
+#include <netinet/in.h>
/** \ingroup header
* Description of tag data.
@@ -18,51 +19,60 @@ struct entryInfo_s {
rpm_count_t count; /*!< Number of tag elements. */
};
-#define REGION_TAG_TYPE RPM_BIN_TYPE
-#define REGION_TAG_COUNT sizeof(struct entryInfo_s)
+typedef struct hdrblob_s * hdrblob;
+struct hdrblob_s {
+ int32_t *ei;
+ int32_t il;
+ int32_t dl;
+ entryInfo pe;
+ int32_t pvlen;
+ uint8_t *dataStart;
+ uint8_t *dataEnd;
-/** \ingroup header
- * A single tag from a Header.
- */
-typedef struct indexEntry_s * indexEntry;
-struct indexEntry_s {
- struct entryInfo_s info; /*!< Description of tag data. */
- rpm_data_t data; /*!< Location of tag data. */
- int length; /*!< No. bytes of data. */
- int rdlen; /*!< No. bytes of data in region. */
+ rpmTagVal regionTag;
+ int32_t ril;
+ int32_t rdl;
};
-/**
- * Sanity check on no. of tags.
- * This check imposes a limit of 65K tags, more than enough.
- */
-#define hdrchkTags(_ntags) ((_ntags) & 0xffff0000)
+#ifdef __cplusplus
+extern "C" {
+#endif
-/**
- * Sanity check on type values.
- */
-#define hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE)
+/* convert entry info to host endianess */
+static inline void ei2h(const struct entryInfo_s *pe, struct entryInfo_s *info)
+{
+ info->tag = ntohl(pe->tag);
+ info->type = ntohl(pe->type);
+ info->offset = ntohl(pe->offset);
+ info->count = ntohl(pe->count);
+}
-/**
- * Sanity check on data size and/or offset and/or count.
- * This check imposes a limit of 16 MB, more than enough.
- */
-#define HEADER_DATA_MAX 0x00ffffff
-#define hdrchkData(_nbytes) ((_nbytes) & (~HEADER_DATA_MAX))
+static inline void ei2td(const struct entryInfo_s *info,
+ unsigned char * dataStart, size_t len,
+ struct rpmtd_s *td)
+{
+ td->tag = info->tag;
+ td->type = info->type;
+ td->count = info->count;
+ td->size = len;
+ td->data = dataStart + info->offset;
+ td->ix = -1;
+ td->flags = RPMTD_IMMUTABLE;
+}
-/**
- * Sanity check on data alignment for data type.
- */
-#define hdrchkAlign(_type, _off) ((_off) & (typeAlign[_type]-1))
+RPM_GNUC_INTERNAL
+rpmRC hdrblobInit(const void *uh, size_t uc,
+ rpmTagVal regionTag, int exact_size,
+ struct hdrblob_s *blob, char **emsg);
-/**
- * Sanity check on range of data offset.
- */
-#define hdrchkRange(_dl, _off) ((_off) < 0 || (_off) > (_dl))
+RPM_GNUC_INTERNAL
+rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrblob blob, char **emsg);
-#ifdef __cplusplus
-extern "C" {
-#endif
+RPM_GNUC_INTERNAL
+rpmRC hdrblobImport(hdrblob blob, int fast, Header *hdrp, char **emsg);
+
+RPM_GNUC_INTERNAL
+rpmRC hdrblobGet(hdrblob blob, uint32_t tag, rpmtd td);
/** \ingroup header
* Set header instance (rpmdb record number)
@@ -75,6 +85,14 @@ void headerSetInstance(Header h, unsigned int instance);
/* Package IO helper to consolidate partial read and error handling */
RPM_GNUC_INTERNAL
ssize_t Freadall(FD_t fd, void * buf, ssize_t size);
+
+/* XXX here only temporarily */
+RPM_GNUC_INTERNAL
+void headerMergeLegacySigs(Header h, Header sigh);
+RPM_GNUC_INTERNAL
+void applyRetrofits(Header h, int leadtype);
+RPM_GNUC_INTERNAL
+int headerIsSourceHeuristic(Header h);
#ifdef __cplusplus
}
#endif
diff --git a/lib/headerfmt.c b/lib/headerfmt.c
index a865ee7a8..fdb3aadb7 100644
--- a/lib/headerfmt.c
+++ b/lib/headerfmt.c
@@ -4,6 +4,7 @@
#include "system.h"
+#include <stdarg.h>
#include <rpm/header.h>
#include <rpm/rpmtag.h>
#include <rpm/rpmstring.h>
@@ -20,7 +21,7 @@
*/
typedef struct sprintfTag_s * sprintfTag;
struct sprintfTag_s {
- headerTagFormatFunction fmt;
+ headerFmt fmt;
rpmTagVal tag;
int justOne;
char * format;
@@ -217,6 +218,25 @@ static char * hsaReserve(headerSprintfArgs hsa, size_t need)
return hsa->val + hsa->vallen;
}
+RPM_GNUC_PRINTF(2, 3)
+static void hsaError(headerSprintfArgs hsa, const char *fmt, ...)
+{
+ /* Use thread local static buffer as headerFormat() errmsg arg is const */
+ static __thread char errbuf[BUFSIZ];
+
+ if (fmt == NULL) {
+ hsa->errmsg = NULL;
+ } else {
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
+ va_end(ap);
+
+ hsa->errmsg = errbuf;
+ }
+}
+
/**
* Search tags for a name.
* @param hsa headerSprintf args
@@ -246,7 +266,7 @@ static int findTag(headerSprintfArgs hsa, sprintfToken token, const char * name)
/* Search extensions for specific format. */
if (stag->type != NULL)
- stag->fmt = rpmHeaderFormatFuncByName(stag->type);
+ stag->fmt = rpmHeaderFormatByName(stag->type);
return stag->fmt ? 0 : 1;
}
@@ -333,13 +353,13 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
chptr = start;
while (*chptr && *chptr != '{' && *chptr != '%') {
if (!risdigit(*chptr) && *chptr != '-') {
- hsa->errmsg = _("invalid field width");
+ hsaError(hsa, _("invalid field width"));
goto errxit;
}
chptr++;
}
if (!*chptr || *chptr == '%') {
- hsa->errmsg = _("missing { after %");
+ hsaError(hsa, _("missing { after %%"));
goto errxit;
}
@@ -361,7 +381,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
dst = next = start;
while (*next && *next != '}') next++;
if (!*next) {
- hsa->errmsg = _("missing } after %{");
+ hsaError(hsa, _("missing } after %%{"));
goto errxit;
}
*next++ = '\0';
@@ -372,7 +392,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
if (*chptr != '\0') {
*chptr++ = '\0';
if (!*chptr) {
- hsa->errmsg = _("empty tag format");
+ hsaError(hsa, _("empty tag format"));
goto errxit;
}
token->u.tag.type = chptr;
@@ -383,14 +403,14 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
}
if (!*start) {
- hsa->errmsg = _("empty tag name");
+ hsaError(hsa, _("empty tag name"));
goto errxit;
}
token->type = PTOK_TAG;
if (findTag(hsa, token, start)) {
- hsa->errmsg = _("unknown tag");
+ hsaError(hsa, _("unknown tag: \"%s\""), start);
goto errxit;
}
@@ -410,7 +430,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
}
if (!start) {
- hsa->errmsg = _("] expected at end of array");
+ hsaError(hsa, _("] expected at end of array"));
goto errxit;
}
@@ -422,7 +442,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
case ']':
if (state != PARSER_IN_ARRAY) {
- hsa->errmsg = _("unexpected ]");
+ hsaError(hsa, _("unexpected ]"));
goto errxit;
}
*start++ = '\0';
@@ -432,7 +452,7 @@ static int parseFormat(headerSprintfArgs hsa, char * str,
case '}':
if (state != PARSER_IN_EXPR) {
- hsa->errmsg = _("unexpected }");
+ hsaError(hsa, _("unexpected }"));
goto errxit;
}
*start++ = '\0';
@@ -483,19 +503,19 @@ static int parseExpression(headerSprintfArgs hsa, sprintfToken token,
char * chptr;
char * end;
- hsa->errmsg = NULL;
+ hsaError(hsa, NULL);
chptr = str;
while (*chptr && *chptr != '?') chptr++;
if (*chptr != '?') {
- hsa->errmsg = _("? expected in expression");
+ hsaError(hsa, _("? expected in expression"));
return 1;
}
*chptr++ = '\0';;
if (*chptr != '{') {
- hsa->errmsg = _("{ expected after ? in expression");
+ hsaError(hsa, _("{ expected after ? in expression"));
return 1;
}
@@ -507,7 +527,7 @@ static int parseExpression(headerSprintfArgs hsa, sprintfToken token,
/* XXX fix segfault on "rpm -q rpm --qf='%|NAME?{%}:{NAME}|\n'"*/
if (!(end && *end)) {
- hsa->errmsg = _("} expected in expression");
+ hsaError(hsa, _("} expected in expression"));
token->u.cond.ifFormat =
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
return 1;
@@ -515,7 +535,7 @@ static int parseExpression(headerSprintfArgs hsa, sprintfToken token,
chptr = end;
if (*chptr != ':' && *chptr != '|') {
- hsa->errmsg = _(": expected following ? subexpression");
+ hsaError(hsa, _(": expected following ? subexpression"));
token->u.cond.ifFormat =
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
return 1;
@@ -533,7 +553,7 @@ static int parseExpression(headerSprintfArgs hsa, sprintfToken token,
chptr++;
if (*chptr != '{') {
- hsa->errmsg = _("{ expected after : in expression");
+ hsaError(hsa, _("{ expected after : in expression"));
token->u.cond.ifFormat =
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
return 1;
@@ -547,7 +567,7 @@ static int parseExpression(headerSprintfArgs hsa, sprintfToken token,
/* XXX fix segfault on "rpm -q rpm --qf='%|NAME?{a}:{%}|{NAME}\n'" */
if (!(end && *end)) {
- hsa->errmsg = _("} expected in expression");
+ hsaError(hsa, _("} expected in expression"));
token->u.cond.ifFormat =
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
return 1;
@@ -555,7 +575,7 @@ static int parseExpression(headerSprintfArgs hsa, sprintfToken token,
chptr = end;
if (*chptr != '|') {
- hsa->errmsg = _("| expected at end of expression");
+ hsaError(hsa, _("| expected at end of expression"));
token->u.cond.ifFormat =
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
token->u.cond.elseFormat =
@@ -624,9 +644,9 @@ static char * formatValue(headerSprintfArgs hsa, sprintfTag tag, int element)
char * t, * te;
rpmtd td;
- if ((td = getData(hsa, tag->tag))) {
+ if ((td = getData(hsa, tag->tag)) && td->count > element) {
td->ix = element; /* Ick, use iterators instead */
- val = tag->fmt(td);
+ val = rpmHeaderFormatCall(tag->fmt, td);
} else {
val = xstrdup("(none)");
}
@@ -748,16 +768,10 @@ static char * singleSprintf(headerSprintfArgs hsa, sprintfToken token,
found = 1;
count = rpmtdCount(td);
- if (numElements > 1 && count != numElements)
- switch (td->type) {
- default:
- hsa->errmsg =
- _("array iterator used with different sized arrays");
+ if (numElements > 0 && count != numElements) {
+ hsaError(hsa,
+ _("array iterator used with different sized arrays"));
return NULL;
- break;
- case RPM_BIN_TYPE:
- case RPM_STRING_TYPE:
- break;
}
if (count > numElements)
numElements = count;
@@ -821,13 +835,6 @@ static unsigned int tagId(rpmTagVal tag)
return tag;
}
-static rpmtd tagFree(rpmtd td)
-{
- rpmtdFreeData(td);
- rpmtdFree(td);
- return NULL;
-}
-
char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg)
{
struct headerSprintfArgs_s hsa;
@@ -845,7 +852,7 @@ char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg)
if (parseFormat(&hsa, hsa.fmt, &hsa.format, &hsa.numTokens, NULL, PARSER_BEGIN))
goto exit;
- hsa.cache = tagCacheCreate(128, tagId, tagCmp, NULL, tagFree);
+ hsa.cache = tagCacheCreate(128, tagId, tagCmp, NULL, rpmtdFree);
hsa.val = xstrdup("");
tag =
diff --git a/lib/headerutil.c b/lib/headerutil.c
index a9f1221eb..2003219b6 100644
--- a/lib/headerutil.c
+++ b/lib/headerutil.c
@@ -1,5 +1,5 @@
/** \ingroup rpmdb
- * \file lib/hdrNVR.c
+ * \file lib/headerutil.c
*/
#include "system.h"
@@ -7,63 +7,10 @@
#include <rpm/rpmtypes.h>
#include <rpm/header.h>
#include <rpm/rpmstring.h>
+#include <rpm/rpmds.h>
#include "debug.h"
-static int NEVRA(Header h, const char **np,
- uint32_t **ep, const char **vp, const char **rp,
- const char **ap)
-{
- if (np) *np = headerGetString(h, RPMTAG_NAME);
- if (vp) *vp = headerGetString(h, RPMTAG_VERSION);
- if (rp) *rp = headerGetString(h, RPMTAG_RELEASE);
- if (ap) *ap = headerGetString(h, RPMTAG_ARCH);
- if (ep) {
- struct rpmtd_s td;
- headerGet(h, RPMTAG_EPOCH, &td, HEADERGET_DEFAULT);
- *ep = rpmtdGetUint32(&td);
- }
- return 0;
-}
-
-int headerNVR(Header h, const char **np, const char **vp, const char **rp)
-{
- return NEVRA(h, np, NULL, vp, rp, NULL);
-}
-
-int headerNEVRA(Header h, const char **np,
- uint32_t **ep, const char **vp, const char **rp,
- const char **ap)
-{
- return NEVRA(h, np, ep, vp, rp, ap);
-}
-
-static char *getNEVRA(Header h, rpmTag tag, const char **np)
-{
- if (np) *np = headerGetString(h, RPMTAG_NAME);
- return headerGetAsString(h, tag);
-}
-
-char * headerGetNEVR(Header h, const char ** np)
-{
- return getNEVRA(h, RPMTAG_NEVR, np);
-}
-
-char * headerGetNEVRA(Header h, const char ** np)
-{
- return getNEVRA(h, RPMTAG_NEVRA, np);
-}
-
-char * headerGetEVR(Header h, const char ** np)
-{
- return getNEVRA(h, RPMTAG_EVR, np);
-}
-
-rpm_color_t headerGetColor(Header h)
-{
- return headerGetNumber(h, RPMTAG_HEADERCOLOR);
-}
-
int headerIsSource(Header h)
{
return (!headerIsEntry(h, RPMTAG_SOURCERPM));
@@ -84,7 +31,7 @@ Header headerCopy(Header h)
}
headerFreeIterator(hi);
- return headerReload(nh, RPMTAG_HEADERIMAGE);
+ return nh;
}
void headerCopyTags(Header headerFrom, Header headerTo,
@@ -243,3 +190,229 @@ int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size)
return headerPutType(h, tag, RPM_BIN_TYPE, val, size);
}
+static int dncmp(const void * a, const void * b)
+{
+ const char *const * first = a;
+ const char *const * second = b;
+ return strcmp(*first, *second);
+}
+
+static void compressFilelist(Header h)
+{
+ struct rpmtd_s fileNames;
+ char ** dirNames;
+ const char ** baseNames;
+ uint32_t * dirIndexes;
+ rpm_count_t count, realCount = 0;
+ int i;
+ int dirIndex = -1;
+
+ /*
+ * This assumes the file list is already sorted, and begins with a
+ * single '/'. That assumption isn't critical, but it makes things go
+ * a bit faster.
+ */
+
+ if (headerIsEntry(h, RPMTAG_DIRNAMES)) {
+ headerDel(h, RPMTAG_OLDFILENAMES);
+ return; /* Already converted. */
+ }
+
+ if (!headerGet(h, RPMTAG_OLDFILENAMES, &fileNames, HEADERGET_MINMEM))
+ return;
+ count = rpmtdCount(&fileNames);
+ if (count < 1)
+ return;
+
+ dirNames = xmalloc(sizeof(*dirNames) * count); /* worst case */
+ baseNames = xmalloc(sizeof(*dirNames) * count);
+ dirIndexes = xmalloc(sizeof(*dirIndexes) * count);
+
+ /* HACK. Source RPM, so just do things differently */
+ { const char *fn = rpmtdGetString(&fileNames);
+ if (fn && *fn != '/') {
+ dirIndex = 0;
+ dirNames[dirIndex] = xstrdup("");
+ while ((i = rpmtdNext(&fileNames)) >= 0) {
+ dirIndexes[i] = dirIndex;
+ baseNames[i] = rpmtdGetString(&fileNames);
+ realCount++;
+ }
+ goto exit;
+ }
+ }
+
+ /*
+ * XXX EVIL HACK, FIXME:
+ * This modifies (and then restores) a const string from rpmtd
+ * through basename retrieved from strrchr() which silently
+ * casts away const on return.
+ */
+ while ((i = rpmtdNext(&fileNames)) >= 0) {
+ char ** needle;
+ char savechar;
+ char * baseName;
+ size_t len;
+ char *filename = (char *) rpmtdGetString(&fileNames); /* HACK HACK */
+
+ if (filename == NULL) /* XXX can't happen */
+ continue;
+ baseName = strrchr(filename, '/');
+ if (baseName == NULL) {
+ baseName = filename;
+ } else {
+ baseName += 1;
+ }
+ len = baseName - filename;
+ needle = dirNames;
+ savechar = *baseName;
+ *baseName = '\0';
+ if (dirIndex < 0 ||
+ (needle = bsearch(&filename, dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) {
+ char *s = xmalloc(len + 1);
+ rstrlcpy(s, filename, len + 1);
+ dirIndexes[realCount] = ++dirIndex;
+ dirNames[dirIndex] = s;
+ } else
+ dirIndexes[realCount] = needle - dirNames;
+
+ *baseName = savechar;
+ baseNames[realCount] = baseName;
+ realCount++;
+ }
+
+exit:
+ if (count > 0) {
+ headerPutUint32(h, RPMTAG_DIRINDEXES, dirIndexes, realCount);
+ headerPutStringArray(h, RPMTAG_BASENAMES, baseNames, realCount);
+ headerPutStringArray(h, RPMTAG_DIRNAMES,
+ (const char **) dirNames, dirIndex + 1);
+ }
+
+ rpmtdFreeData(&fileNames);
+ for (i = 0; i <= dirIndex; i++) {
+ free(dirNames[i]);
+ }
+ free(dirNames);
+ free(baseNames);
+ free(dirIndexes);
+
+ headerDel(h, RPMTAG_OLDFILENAMES);
+}
+
+static void expandFilelist(Header h)
+{
+ struct rpmtd_s filenames;
+
+ if (!headerIsEntry(h, RPMTAG_OLDFILENAMES)) {
+ (void) headerGet(h, RPMTAG_FILENAMES, &filenames, HEADERGET_EXT);
+ if (rpmtdCount(&filenames) < 1)
+ return;
+ rpmtdSetTag(&filenames, RPMTAG_OLDFILENAMES);
+ headerPut(h, &filenames, HEADERPUT_DEFAULT);
+ rpmtdFreeData(&filenames);
+ }
+
+ (void) headerDel(h, RPMTAG_DIRNAMES);
+ (void) headerDel(h, RPMTAG_BASENAMES);
+ (void) headerDel(h, RPMTAG_DIRINDEXES);
+}
+
+/*
+ * Up to rpm 3.0.4, packages implicitly provided their own name-version-release.
+ * Retrofit an explicit "Provides: name = epoch:version-release.
+ */
+static void providePackageNVR(Header h)
+{
+ const char *name = headerGetString(h, RPMTAG_NAME);
+ char *pEVR = headerGetAsString(h, RPMTAG_EVR);
+ rpmsenseFlags pFlags = RPMSENSE_EQUAL;
+ int bingo = 1;
+ struct rpmtd_s pnames;
+ rpmds hds, nvrds;
+
+ /* Generate provides for this package name-version-release. */
+ if (!(name && pEVR))
+ return;
+
+ /*
+ * Rpm prior to 3.0.3 does not have versioned provides.
+ * If no provides at all are available, we can just add.
+ */
+ if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) {
+ goto exit;
+ }
+
+ /*
+ * Otherwise, fill in entries on legacy packages.
+ */
+ if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) {
+ while (rpmtdNext(&pnames) >= 0) {
+ rpmsenseFlags fdummy = RPMSENSE_ANY;
+
+ headerPutString(h, RPMTAG_PROVIDEVERSION, "");
+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &fdummy, 1);
+ }
+ goto exit;
+ }
+
+ /* see if we already have this provide */
+ hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 0);
+ nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags);
+ if (rpmdsFind(hds, nvrds) >= 0) {
+ bingo = 0;
+ }
+ rpmdsFree(hds);
+ rpmdsFree(nvrds);
+
+
+exit:
+ if (bingo) {
+ headerPutString(h, RPMTAG_PROVIDENAME, name);
+ headerPutString(h, RPMTAG_PROVIDEVERSION, pEVR);
+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pFlags, 1);
+ }
+ rpmtdFreeData(&pnames);
+ free(pEVR);
+}
+
+static void legacyRetrofit(Header h)
+{
+ /*
+ * The file list was moved to a more compressed format which not
+ * only saves memory (nice), but gives fingerprinting a nice, fat
+ * speed boost (very nice). Go ahead and convert old headers to
+ * the new style (this is a noop for new headers).
+ */
+ compressFilelist(h);
+
+ /* Retrofit "Provide: name = EVR" for binary packages. */
+ if (!headerIsSource(h)) {
+ providePackageNVR(h);
+ }
+}
+
+int headerConvert(Header h, int op)
+{
+ int rc = 1;
+
+ if (h == NULL)
+ return 0;
+
+ switch (op) {
+ case HEADERCONV_EXPANDFILELIST:
+ expandFilelist(h);
+ break;
+ case HEADERCONV_COMPRESSFILELIST:
+ compressFilelist(h);
+ break;
+ case HEADERCONV_RETROFIT_V3:
+ legacyRetrofit(h);
+ break;
+ default:
+ rc = 0;
+ break;
+ }
+ return rc;
+};
+
diff --git a/lib/legacy.c b/lib/legacy.c
deleted file mode 100644
index 422c2b0e8..000000000
--- a/lib/legacy.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/**
- * \file lib/legacy.c
- */
-
-#include "system.h"
-
-#include <rpm/header.h>
-#include <rpm/rpmmacro.h>
-#include <rpm/rpmstring.h>
-#include <rpm/rpmfi.h>
-#include <rpm/rpmds.h>
-
-#include "debug.h"
-
-static int dncmp(const void * a, const void * b)
-{
- const char *const * first = a;
- const char *const * second = b;
- return strcmp(*first, *second);
-}
-
-static void compressFilelist(Header h)
-{
- struct rpmtd_s fileNames;
- char ** dirNames;
- const char ** baseNames;
- uint32_t * dirIndexes;
- rpm_count_t count;
- int i;
- int dirIndex = -1;
-
- /*
- * This assumes the file list is already sorted, and begins with a
- * single '/'. That assumption isn't critical, but it makes things go
- * a bit faster.
- */
-
- if (headerIsEntry(h, RPMTAG_DIRNAMES)) {
- headerDel(h, RPMTAG_OLDFILENAMES);
- return; /* Already converted. */
- }
-
- if (!headerGet(h, RPMTAG_OLDFILENAMES, &fileNames, HEADERGET_MINMEM))
- return;
- count = rpmtdCount(&fileNames);
- if (count < 1)
- return;
-
- dirNames = xmalloc(sizeof(*dirNames) * count); /* worst case */
- baseNames = xmalloc(sizeof(*dirNames) * count);
- dirIndexes = xmalloc(sizeof(*dirIndexes) * count);
-
- /* HACK. Source RPM, so just do things differently */
- { const char *fn = rpmtdGetString(&fileNames);
- if (fn && *fn != '/') {
- dirIndex = 0;
- dirNames[dirIndex] = xstrdup("");
- while ((i = rpmtdNext(&fileNames)) >= 0) {
- dirIndexes[i] = dirIndex;
- baseNames[i] = rpmtdGetString(&fileNames);
- }
- goto exit;
- }
- }
-
- /*
- * XXX EVIL HACK, FIXME:
- * This modifies (and then restores) a const string from rpmtd
- * through basename retrieved from strrchr() which silently
- * casts away const on return.
- */
- while ((i = rpmtdNext(&fileNames)) >= 0) {
- char ** needle;
- char savechar;
- char * baseName;
- size_t len;
- char *filename = (char *) rpmtdGetString(&fileNames); /* HACK HACK */
-
- if (filename == NULL) /* XXX can't happen */
- continue;
- baseName = strrchr(filename, '/') + 1;
- len = baseName - filename;
- needle = dirNames;
- savechar = *baseName;
- *baseName = '\0';
- if (dirIndex < 0 ||
- (needle = bsearch(&filename, dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) {
- char *s = xmalloc(len + 1);
- rstrlcpy(s, filename, len + 1);
- dirIndexes[i] = ++dirIndex;
- dirNames[dirIndex] = s;
- } else
- dirIndexes[i] = needle - dirNames;
-
- *baseName = savechar;
- baseNames[i] = baseName;
- }
-
-exit:
- if (count > 0) {
- headerPutUint32(h, RPMTAG_DIRINDEXES, dirIndexes, count);
- headerPutStringArray(h, RPMTAG_BASENAMES, baseNames, count);
- headerPutStringArray(h, RPMTAG_DIRNAMES,
- (const char **) dirNames, dirIndex + 1);
- }
-
- rpmtdFreeData(&fileNames);
- for (i = 0; i <= dirIndex; i++) {
- free(dirNames[i]);
- }
- free(dirNames);
- free(baseNames);
- free(dirIndexes);
-
- headerDel(h, RPMTAG_OLDFILENAMES);
-}
-
-static void expandFilelist(Header h)
-{
- struct rpmtd_s filenames;
-
- if (!headerIsEntry(h, RPMTAG_OLDFILENAMES)) {
- (void) headerGet(h, RPMTAG_FILENAMES, &filenames, HEADERGET_EXT);
- if (rpmtdCount(&filenames) < 1)
- return;
- rpmtdSetTag(&filenames, RPMTAG_OLDFILENAMES);
- headerPut(h, &filenames, HEADERPUT_DEFAULT);
- rpmtdFreeData(&filenames);
- }
-
- (void) headerDel(h, RPMTAG_DIRNAMES);
- (void) headerDel(h, RPMTAG_BASENAMES);
- (void) headerDel(h, RPMTAG_DIRINDEXES);
-}
-
-/*
- * Up to rpm 3.0.4, packages implicitly provided their own name-version-release.
- * Retrofit an explicit "Provides: name = epoch:version-release.
- */
-static void providePackageNVR(Header h)
-{
- const char *name = headerGetString(h, RPMTAG_NAME);
- char *pEVR = headerGetAsString(h, RPMTAG_EVR);
- rpmsenseFlags pFlags = RPMSENSE_EQUAL;
- int bingo = 1;
- struct rpmtd_s pnames;
- rpmds hds, nvrds;
-
- /* Generate provides for this package name-version-release. */
- if (!(name && pEVR))
- return;
-
- /*
- * Rpm prior to 3.0.3 does not have versioned provides.
- * If no provides at all are available, we can just add.
- */
- if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) {
- goto exit;
- }
-
- /*
- * Otherwise, fill in entries on legacy packages.
- */
- if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) {
- while (rpmtdNext(&pnames) >= 0) {
- rpmsenseFlags fdummy = RPMSENSE_ANY;
-
- headerPutString(h, RPMTAG_PROVIDEVERSION, "");
- headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &fdummy, 1);
- }
- goto exit;
- }
-
- /* see if we already have this provide */
- hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 0);
- nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags);
- if (rpmdsFind(hds, nvrds) >= 0) {
- bingo = 0;
- }
- rpmdsFree(hds);
- rpmdsFree(nvrds);
-
-
-exit:
- if (bingo) {
- headerPutString(h, RPMTAG_PROVIDENAME, name);
- headerPutString(h, RPMTAG_PROVIDEVERSION, pEVR);
- headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pFlags, 1);
- }
- rpmtdFreeData(&pnames);
- free(pEVR);
-}
-
-static void legacyRetrofit(Header h)
-{
- /*
- * The file list was moved to a more compressed format which not
- * only saves memory (nice), but gives fingerprinting a nice, fat
- * speed boost (very nice). Go ahead and convert old headers to
- * the new style (this is a noop for new headers).
- */
- compressFilelist(h);
-
- /* Retrofit "Provide: name = EVR" for binary packages. */
- if (!headerIsSource(h)) {
- providePackageNVR(h);
- }
-}
-
-int headerConvert(Header h, int op)
-{
- int rc = 1;
-
- if (h == NULL)
- return 0;
-
- switch (op) {
- case HEADERCONV_EXPANDFILELIST:
- expandFilelist(h);
- break;
- case HEADERCONV_COMPRESSFILELIST:
- compressFilelist(h);
- break;
- case HEADERCONV_RETROFIT_V3:
- legacyRetrofit(h);
- break;
- default:
- rc = 0;
- break;
- }
- return rc;
-};
-
-/*
- * Backwards compatibility wrappers for legacy interfaces.
- * Remove these some day...
- */
-#define _RPM_4_4_COMPAT
-#include <rpm/rpmlegacy.h>
-
-/* dumb macro to avoid 50 copies of this code while converting... */
-#define TDWRAP() \
- if (type) \
- *type = td.type; \
- if (p) \
- *p = td.data; \
- else \
- rpmtdFreeData(&td); \
- if (c) \
- *c = td.count
-
-int headerRemoveEntry(Header h, rpm_tag_t tag)
-{
- return headerDel(h, tag);
-}
-
-static void *_headerFreeData(rpm_data_t data, rpm_tagtype_t type)
-{
- if (data) {
- if (type == RPM_FORCEFREE_TYPE ||
- type == RPM_STRING_ARRAY_TYPE ||
- type == RPM_I18NSTRING_TYPE ||
- type == RPM_BIN_TYPE)
- free(data);
- }
- return NULL;
-}
-
-void * headerFreeData(rpm_data_t data, rpm_tagtype_t type)
-{
- return _headerFreeData(data, type);
-}
-
-void * headerFreeTag(Header h, rpm_data_t data, rpm_tagtype_t type)
-{
- return _headerFreeData(data, type);
-}
-
-static int headerGetWrap(Header h, rpm_tag_t tag,
- rpm_tagtype_t * type,
- rpm_data_t * p,
- rpm_count_t * c,
- headerGetFlags flags)
-{
- struct rpmtd_s td;
- int rc;
-
- rc = headerGet(h, tag, &td, flags);
- TDWRAP();
- return rc;
-}
-
-int headerGetEntry(Header h, rpm_tag_t tag,
- rpm_tagtype_t * type,
- rpm_data_t * p,
- rpm_count_t * c)
-{
- return headerGetWrap(h, tag, type, p, c, HEADERGET_DEFAULT);
-}
-
-int headerGetEntryMinMemory(Header h, rpm_tag_t tag,
- rpm_tagtype_t * type,
- rpm_data_t * p,
- rpm_count_t * c)
-{
- return headerGetWrap(h, tag, type, (rpm_data_t) p, c, HEADERGET_MINMEM);
-}
-
-/* XXX shut up compiler warning from missing prototype */
-int headerGetRawEntry(Header h, rpm_tag_t tag, rpm_tagtype_t * type, rpm_data_t * p,
- rpm_count_t * c);
-
-int headerGetRawEntry(Header h, rpm_tag_t tag, rpm_tagtype_t * type, rpm_data_t * p,
- rpm_count_t * c)
-{
- if (p == NULL)
- return headerIsEntry(h, tag);
-
- return headerGetWrap(h, tag, type, p, c, HEADERGET_RAW);
-}
-
-int headerNextIterator(HeaderIterator hi,
- rpm_tag_t * tag,
- rpm_tagtype_t * type,
- rpm_data_t * p,
- rpm_count_t * c)
-{
- struct rpmtd_s td;
- int rc;
-
- rc = headerNext(hi, &td);
- if (tag)
- *tag = td.tag;
- TDWRAP();
- return rc;
-}
-
-int headerModifyEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
- rpm_constdata_t p, rpm_count_t c)
-{
- struct rpmtd_s td = {
- .tag = tag,
- .type = type,
- .data = (void *) p,
- .count = c,
- };
- return headerMod(h, &td);
-}
-
-static int headerPutWrap(Header h, rpm_tag_t tag, rpm_tagtype_t type,
- rpm_constdata_t p, rpm_count_t c, headerPutFlags flags)
-{
- struct rpmtd_s td = {
- .tag = tag,
- .type = type,
- .data = (void *) p,
- .count = c,
- };
- return headerPut(h, &td, flags);
-}
-
-int headerAddOrAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
- rpm_constdata_t p, rpm_count_t c)
-{
- return headerPutWrap(h, tag, type, p, c, HEADERPUT_APPEND);
-}
-
-int headerAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
- rpm_constdata_t p, rpm_count_t c)
-{
- return headerPutWrap(h, tag, type, p, c, HEADERPUT_APPEND);
-}
-
-int headerAddEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
- rpm_constdata_t p, rpm_count_t c)
-{
- return headerPutWrap(h, tag, type, p, c, HEADERPUT_DEFAULT);
-}
-#undef _RPM_4_4_COMPAT
diff --git a/lib/manifest.c b/lib/manifest.c
index 5d71f3f25..71c4c912c 100644
--- a/lib/manifest.c
+++ b/lib/manifest.c
@@ -94,8 +94,8 @@ rpmRC rpmReadPackageManifest(FD_t fd, int * argcPtr, char *** argvPtr)
s++;
if (*s == '\0') continue;
- /* Sanity checks: skip obviously binary lines and dash (for stdin) */
- if (*s < 32 || rstreq(s, "-")) {
+ /* Sanity checks: skip obviously binary lines */
+ if (*s < 32) {
s = NULL;
rpmrc = RPMRC_NOTFOUND;
goto exit;
@@ -117,6 +117,14 @@ rpmRC rpmReadPackageManifest(FD_t fd, int * argcPtr, char *** argvPtr)
rpmrc = (rpmGlob(s, &ac, &av) == 0 ? RPMRC_OK : RPMRC_FAIL);
if (rpmrc != RPMRC_OK) goto exit;
+ /* Sanity check: skip dash (for stdin) */
+ for (i = 0; i < ac; i++) {
+ if (rstreq(av[i], "-")) {
+ rpmrc = RPMRC_NOTFOUND;
+ goto exit;
+ }
+ }
+
rpmlog(RPMLOG_DEBUG, "adding %d args from manifest.\n", ac);
/* Count non-NULL args, keeping track of 1st arg after last NULL. */
diff --git a/lib/merge.c b/lib/merge.c
deleted file mode 100644
index 738ad7a68..000000000
--- a/lib/merge.c
+++ /dev/null
@@ -1,347 +0,0 @@
-#ifndef __APPLE__
-/*-
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Peter McIlroy.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)merge.c 8.2 (Berkeley) 2/14/94";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Hybrid exponential search/linear search merge sort with hybrid
- * natural/pairwise first pass. Requires about .3% more comparisons
- * for random data than LSMS with pairwise first pass alone.
- * It works for objects as small as two bytes.
- */
-
-#define NATURAL
-#define THRESHOLD 16 /* Best choice for natural merge cut-off. */
-
-/* #define NATURAL to get hybrid natural merge.
- * (The default is pairwise merging.)
- */
-
-#include "system.h"
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include "lib/rpmdb_internal.h" /* XXX for mergesort */
-
-#define ISIZE sizeof(int)
-#define PSIZE sizeof(unsigned char *)
-#define ICOPY_LIST(src, dst, last) \
- do \
- *(int*)dst = *(int*)src, src += ISIZE, dst += ISIZE; \
- while(src < last)
-#define ICOPY_ELT(src, dst, i) \
- do \
- *(int*) dst = *(int*) src, src += ISIZE, dst += ISIZE; \
- while (i -= ISIZE)
-
-#define CCOPY_LIST(src, dst, last) \
- do \
- *dst++ = *src++; \
- while (src < last)
-#define CCOPY_ELT(src, dst, i) \
- do \
- *dst++ = *src++; \
- while (i -= 1)
-
-/*
- * Find the next possible pointer head. (Trickery for forcing an array
- * to do double duty as a linked list when objects do not align with word
- * boundaries.
- */
-/* Assumption: PSIZE is a power of 2. */
-#define EVAL(p) (unsigned char **) \
- ((unsigned char *)0 + \
- (((unsigned char *)p + PSIZE - 1 - (unsigned char *) 0) & ~(PSIZE - 1)))
-
-#define swap(a, b) { \
- s = b; \
- i = size; \
- do { \
- tmp = *a; *a++ = *s; *s++ = tmp; \
- } while (--i); \
- a -= size; \
- }
-#define reverse(bot, top) { \
- s = top; \
- do { \
- i = size; \
- do { \
- tmp = *bot; *bot++ = *s; *s++ = tmp; \
- } while (--i); \
- s -= size2; \
- } while(bot < s); \
-}
-
-/*
- * This is to avoid out-of-bounds addresses in sorting the
- * last 4 elements.
- */
-static void
-insertionsort(unsigned char *a, size_t n, size_t size,
- int (*cmp) (const void *, const void *))
-{
- unsigned char *ai, *s, *t, *u, tmp;
- int i;
-
- for (ai = a+size; --n >= 1; ai += size)
- for (t = ai; t > a; t -= size) {
- u = t - size;
- if (cmp(u, t) <= 0)
- break;
- swap(u, t);
- }
-}
-
-/*
- * Optional hybrid natural/pairwise first pass. Eats up list1 in runs of
- * increasing order, list2 in a corresponding linked list. Checks for runs
- * when THRESHOLD/2 pairs compare with same sense. (Only used when NATURAL
- * is defined. Otherwise simple pairwise merging is used.)
- */
-static void
-setup(unsigned char *list1, unsigned char *list2,
- size_t n, size_t size, int (*cmp) (const void *, const void *))
-{
- int i, length, size2, tmp, sense;
- unsigned char *f1, *f2, *s, *l2, *last, *p2;
-
- size2 = size*2;
- if (n <= 5) {
- insertionsort(list1, n, size, cmp);
- *EVAL(list2) = (unsigned char*) list2 + n*size;
- return;
- }
- /*
- * Avoid running pointers out of bounds; limit n to evens
- * for simplicity.
- */
- i = 4 + (n & 1);
- insertionsort(list1 + (n - i) * size, i, size, cmp);
- last = list1 + size * (n - i);
- *EVAL(list2 + (last - list1)) = list2 + n * size;
-
-#ifdef NATURAL
- p2 = list2;
- f1 = list1;
- sense = (cmp(f1, f1 + size) > 0);
- for (; f1 < last; sense = !sense) {
- length = 2;
- /* Find pairs with same sense. */
- for (f2 = f1 + size2; f2 < last; f2 += size2) {
- if ((cmp(f2, f2+ size) > 0) != sense)
- break;
- length += 2;
- }
- if (length < THRESHOLD) { /* Pairwise merge */
- do {
- p2 = *EVAL(p2) = f1 + size2 - list1 + list2;
- if (sense > 0)
- swap (f1, f1 + size);
- } while ((f1 += size2) < f2);
- } else { /* Natural merge */
- l2 = f2;
- for (f2 = f1 + size2; f2 < l2; f2 += size2) {
- if ((cmp(f2-size, f2) > 0) != sense) {
- p2 = *EVAL(p2) = f2 - list1 + list2;
- if (sense > 0)
- reverse(f1, f2-size);
- f1 = f2;
- }
- }
- if (sense > 0)
- reverse (f1, f2-size);
- f1 = f2;
- if (f2 < last || cmp(f2 - size, f2) > 0)
- p2 = *EVAL(p2) = f2 - list1 + list2;
- else
- p2 = *EVAL(p2) = list2 + n*size;
- }
- }
-#else /* pairwise merge only. */
- for (f1 = list1, p2 = list2; f1 < last; f1 += size2) {
- p2 = *EVAL(p2) = p2 + size2;
- if (cmp (f1, f1 + size) > 0)
- swap(f1, f1 + size);
- }
-#endif /* NATURAL */
-}
-
-/*
- * Arguments are as for qsort.
- */
-int
-mergesort(void *base, size_t nmemb, size_t size,
- int (*cmp) (const void *, const void *))
-{
- register int i, sense;
- int big, iflag;
- register unsigned char *f1, *f2, *t, *b, *q, *l1, *l2;
- register unsigned char *tp2;
- unsigned char *list2;
- unsigned char *list1;
- unsigned char *p2, *p, *last, **p1;
-
- if (size < PSIZE / 2) { /* Pointers must fit into 2 * size. */
- errno = EINVAL;
- return (-1);
- }
-
- if (nmemb == 0)
- return (0);
-
- /*
- * XXX
- * Stupid subtraction for the Cray.
- */
- iflag = 0;
- if (!(size % ISIZE) && !(((char *)base - (char *)0) % ISIZE))
- iflag = 1;
-
- if ((list2 = malloc(nmemb * size + PSIZE)) == NULL)
- return (-1);
-
- list1 = base;
- setup(list1, list2, nmemb, size, cmp);
- last = list2 + nmemb * size;
- i = big = 0;
- while (*EVAL(list2) != last) {
- l2 = list1;
- p1 = EVAL(list1);
- for (tp2 = p2 = list2; p2 != last; p1 = EVAL(l2)) {
- p2 = *EVAL(p2);
- f1 = l2;
- f2 = l1 = list1 + (p2 - list2);
- if (p2 != last)
- p2 = *EVAL(p2);
- l2 = list1 + (p2 - list2);
- while (f1 < l1 && f2 < l2) {
- if ((*cmp)(f1, f2) <= 0) {
- q = f2;
- b = f1, t = l1;
- sense = -1;
- } else {
- q = f1;
- b = f2, t = l2;
- sense = 0;
- }
- if (!big) { /* here i = 0 */
- while ((b += size) < t && cmp(q, b) >sense)
- if (++i == 6) {
- big = 1;
- goto EXPONENTIAL;
- }
- } else {
-EXPONENTIAL: for (i = size; ; i <<= 1)
- if ((p = (b + i)) >= t) {
- if ((p = t - size) > b &&
- (*cmp)(q, p) <= sense)
- t = p;
- else
- b = p;
- break;
- } else if ((*cmp)(q, p) <= sense) {
- t = p;
- if (i == size)
- big = 0;
- goto FASTCASE;
- } else
- b = p;
- while (t > b+size) {
- i = (((t - b) / size) >> 1) * size;
- if ((*cmp)(q, p = b + i) <= sense)
- t = p;
- else
- b = p;
- }
- goto COPY;
-FASTCASE: while (i > size)
- if ((*cmp)(q,
- p = b + (i >>= 1)) <= sense)
- t = p;
- else
- b = p;
-COPY: b = t;
- }
- i = size;
- if (q == f1) {
- if (iflag) {
- ICOPY_LIST(f2, tp2, b);
- ICOPY_ELT(f1, tp2, i);
- } else {
- CCOPY_LIST(f2, tp2, b);
- CCOPY_ELT(f1, tp2, i);
- }
- } else {
- if (iflag) {
- ICOPY_LIST(f1, tp2, b);
- ICOPY_ELT(f2, tp2, i);
- } else {
- CCOPY_LIST(f1, tp2, b);
- CCOPY_ELT(f2, tp2, i);
- }
- }
- }
- if (f2 < l2) {
- if (iflag)
- ICOPY_LIST(f2, tp2, l2);
- else
- CCOPY_LIST(f2, tp2, l2);
- } else if (f1 < l1) {
- if (iflag)
- ICOPY_LIST(f1, tp2, l1);
- else
- CCOPY_LIST(f1, tp2, l1);
- }
- *p1 = l2;
- }
- tp2 = list1; /* swap list1, list2 */
- list1 = list2;
- list2 = tp2;
- last = list2 + nmemb*size;
- }
- if (base == list2) {
- memmove(list2, list1, nmemb*size);
- list2 = list1;
- }
- free(list2);
- return (0);
-}
-#else
-/* mergesort is implemented in System on Mac OS X */
-#endif /* __APPLE__ */
diff --git a/lib/misc.h b/lib/misc.h
index 15c9e3111..74e94a2e7 100644
--- a/lib/misc.h
+++ b/lib/misc.h
@@ -9,6 +9,9 @@
#include <string.h>
#include <rpm/rpmtypes.h>
#include <rpm/header.h> /* for headerGetFlags typedef, duh.. */
+#include "lib/rpmfs.h"
+
+typedef const struct headerFmt_s * headerFmt;
#ifdef __cplusplus
extern "C" {
@@ -24,18 +27,43 @@ char * rpmVerifyString(uint32_t verifyResult, const char *pad);
RPM_GNUC_INTERNAL
char * rpmFFlagsString(uint32_t fflags, const char *pad);
-typedef char * (*headerTagFormatFunction) (rpmtd td);
typedef int (*headerTagTagFunction) (Header h, rpmtd td, headerGetFlags hgflags);
RPM_GNUC_INTERNAL
headerTagTagFunction rpmHeaderTagFunc(rpmTagVal tag);
RPM_GNUC_INTERNAL
-headerTagFormatFunction rpmHeaderFormatFuncByName(const char *fmt);
+headerFmt rpmHeaderFormatByName(const char *fmt);
+
+RPM_GNUC_INTERNAL
+headerFmt rpmHeaderFormatByValue(rpmtdFormats fmt);
+
+RPM_GNUC_INTERNAL
+char * rpmHeaderFormatCall(headerFmt fmt, rpmtd td);
+
+RPM_GNUC_INTERNAL
+int headerFindSpec(Header h);
+
+/**
+ * Relocate files in header.
+ * @todo multilib file dispositions need to be checked.
+ * @param relocs relocations
+ * @param numRelocations number of relocations
+ * @param fs file state set
+ * @param h package header to relocate
+ */
+RPM_GNUC_INTERNAL
+void rpmRelocateFileList(rpmRelocation *relocs, int numRelocations, rpmfs fs, Header h);
RPM_GNUC_INTERNAL
-headerTagFormatFunction rpmHeaderFormatFuncByValue(rpmtdFormats fmt);
+int rpmRelocateSrpmFileList(Header h, const char *rootDir);
+RPM_GNUC_INTERNAL
+void rpmRelocationBuild(Header h, rpmRelocation *rawrelocs,
+ int *rnrelocs, rpmRelocation **rrelocs, uint8_t **rbadrelocs);
+
+RPM_GNUC_INTERNAL
+void rpmAtExit(void);
#ifdef __cplusplus
}
#endif
diff --git a/lib/order.c b/lib/order.c
index c0ef5470a..7a1dd10fd 100644
--- a/lib/order.c
+++ b/lib/order.c
@@ -67,7 +67,8 @@ static void rpmTSIFree(tsortInfo tsi)
static inline int addSingleRelation(rpmte p,
rpmte q,
- rpmsenseFlags dsflags)
+ rpmsenseFlags dsflags,
+ int reversed)
{
struct tsortInfo_s *tsi_p, *tsi_q;
relation rel;
@@ -80,9 +81,7 @@ static inline int addSingleRelation(rpmte p,
/* Erasures are reversed installs. */
if (teType == TR_REMOVED) {
- rpmte r = p;
- p = q;
- q = r;
+ reversed = ! reversed;
flags = isErasePreReq(dsflags);
} else {
flags = isInstallPreReq(dsflags);
@@ -94,32 +93,62 @@ static inline int addSingleRelation(rpmte p,
RPMSENSE_SCRIPT_PRE : RPMSENSE_SCRIPT_PREUN;
}
+ if (reversed) {
+ rpmte r = p;
+ p = q;
+ q = r;
+ }
+
tsi_p = rpmteTSI(p);
tsi_q = rpmteTSI(q);
/* if relation got already added just update the flags */
- if (tsi_q->tsi_relations && tsi_q->tsi_relations->rel_suc == tsi_p) {
+ if (!reversed &&
+ tsi_q->tsi_relations && tsi_q->tsi_relations->rel_suc == tsi_p) {
+ /* must be latest one added to q as we add all rels to p at once */
tsi_q->tsi_relations->rel_flags |= flags;
- tsi_p->tsi_forward_relations->rel_flags |= flags;
- return 0;
+ /* search entry in p */
+ for (struct relation_s * tsi = tsi_p->tsi_forward_relations;
+ tsi; tsi = tsi->rel_next) {
+ if (tsi->rel_suc == tsi_q) {
+ tsi->rel_flags |= flags;
+ return 0;
+ }
+ }
+ assert(0);
}
- /* Record next "q <- p" relation (i.e. "p" requires "q"). */
- if (p != q) {
- /* bump p predecessor count */
- tsi_p->tsi_count++;
+ /* if relation got already added just update the flags */
+ if (reversed && tsi_q->tsi_forward_relations &&
+ tsi_q->tsi_forward_relations->rel_suc == tsi_p) {
+ /* must be latest one added to q as we add all rels to p at once */
+ tsi_q->tsi_forward_relations->rel_flags |= flags;
+ /* search entry in p */
+ for (struct relation_s * tsi = tsi_p->tsi_relations;
+ tsi; tsi = tsi->rel_next) {
+ if (tsi->rel_suc == tsi_q) {
+ tsi->rel_flags |= flags;
+ return 0;
+ }
+ }
+ assert(0);
}
+ /* Record next "q <- p" relation (i.e. "p" requires "q"). */
+
+ /* bump p predecessor count */
+ tsi_p->tsi_count++;
+
rel = xcalloc(1, sizeof(*rel));
rel->rel_suc = tsi_p;
rel->rel_flags = flags;
rel->rel_next = tsi_q->tsi_relations;
tsi_q->tsi_relations = rel;
- if (p != q) {
- /* bump q successor count */
- tsi_q->tsi_qcnt++;
- }
+
+
+ /* bump q successor count */
+ tsi_q->tsi_qcnt++;
rel = xcalloc(1, sizeof(*rel));
rel->rel_suc = tsi_q;
@@ -134,6 +163,7 @@ static inline int addSingleRelation(rpmte p,
/**
* Record next "q <- p" relation (i.e. "p" requires "q").
* @param ts transaction set
+ * @param al packages list
* @param p predecessor (i.e. package that "Requires: q")
* @param requires relation
* @return 0 always
@@ -141,7 +171,8 @@ static inline int addSingleRelation(rpmte p,
static inline int addRelation(rpmts ts,
rpmal al,
rpmte p,
- rpmds requires)
+ rpmds requires,
+ int reversed)
{
rpmte q;
rpmsenseFlags dsflags;
@@ -152,47 +183,35 @@ static inline int addRelation(rpmts ts,
if (dsflags & (RPMSENSE_RPMLIB|RPMSENSE_CONFIG|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS))
return 0;
- q = rpmalSatisfiesDepend(al, requires);
+ if (rpmdsIsRich(requires)) {
+ rpmds ds1, ds2;
+ rpmrichOp op;
+ if (rpmdsParseRichDep(requires, &ds1, &ds2, &op, NULL) == RPMRC_OK) {
+ if (op != RPMRICHOP_ELSE)
+ addRelation(ts, al, p, ds1, reversed);
+ if (op == RPMRICHOP_IF || op == RPMRICHOP_UNLESS) {
+ rpmds ds21, ds22;
+ rpmrichOp op2;
+ if (rpmdsParseRichDep(requires, &ds21, &ds22, &op2, NULL) == RPMRC_OK && op2 == RPMRICHOP_ELSE) {
+ addRelation(ts, al, p, ds22, reversed);
+ }
+ ds21 = rpmdsFree(ds21);
+ ds22 = rpmdsFree(ds22);
+ }
+ if (op == RPMRICHOP_AND || op == RPMRICHOP_OR)
+ addRelation(ts, al, p, ds2, reversed);
+ ds1 = rpmdsFree(ds1);
+ ds2 = rpmdsFree(ds2);
+ }
+ return 0;
+ }
+ q = rpmalSatisfiesDepend(al, p, requires);
/* Avoid deps outside this transaction and self dependencies */
if (q == NULL || q == p)
return 0;
- addSingleRelation(p, q, dsflags);
-
- return 0;
-}
-
-/*
- * Collections might have special ordering requirements. Notably
- * sepolicy collection requires having all the bits in the collection
- * close to each other. We try to ensure this by creating a strongly
- * connected component of such "grouped" collections, by introducing
- * an artificial relation loop across the all its members.
- */
-static int addCollRelations(rpmal al, rpmte p, ARGV_t *seenColls)
-{
- ARGV_const_t qcolls;
-
- for (qcolls = rpmteCollections(p); qcolls && *qcolls; qcolls++) {
- char * flags;
- if (argvSearch(*seenColls, *qcolls, NULL))
- continue;
-
- flags = rstrscat(NULL, "%{__collection_", *qcolls, "_flags}", NULL);
- if (rpmExpandNumeric(flags) & 0x1) {
- rpmte *tes = rpmalAllInCollection(al, *qcolls);
- for (rpmte *te = tes; te && *te; te++) {
- rpmte next = (*(te + 1) != NULL) ? *(te + 1) : *tes;
- addSingleRelation(*te, next, RPMSENSE_ANY);
- }
- _free(tes);
- }
- free(flags);
-
- argvAdd(seenColls, *qcolls);
- argvSort(*seenColls, NULL);
- }
+ addSingleRelation(p, q, dsflags, reversed);
return 0;
}
@@ -552,7 +571,6 @@ int rpmtsOrder(rpmts ts)
scc SCCs;
int nelem = rpmtsNElements(ts);
tsortInfo sortInfo = xcalloc(nelem, sizeof(struct tsortInfo_s));
- ARGV_t seenColls = NULL;
(void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_ORDER), 0);
@@ -571,22 +589,43 @@ int rpmtsOrder(rpmts ts)
rpmal al = (rpmteType(p) == TR_REMOVED) ?
erasedPackages : tsmem->addedPackages;
rpmds requires = rpmdsInit(rpmteDS(p, RPMTAG_REQUIRENAME));
+ rpmds recommends = rpmdsInit(rpmteDS(p, RPMTAG_RECOMMENDNAME));
+ rpmds suggests = rpmdsInit(rpmteDS(p, RPMTAG_SUGGESTNAME));
+ rpmds supplements = rpmdsInit(rpmteDS(p, RPMTAG_SUPPLEMENTNAME));
+ rpmds enhances = rpmdsInit(rpmteDS(p, RPMTAG_ENHANCENAME));
rpmds order = rpmdsInit(rpmteDS(p, RPMTAG_ORDERNAME));
while (rpmdsNext(requires) >= 0) {
/* Record next "q <- p" relation (i.e. "p" requires "q"). */
- (void) addRelation(ts, al, p, requires);
+ (void) addRelation(ts, al, p, requires, 0);
+ }
+
+ while (rpmdsNext(recommends) >= 0) {
+ /* Record next "q <- p" relation (i.e. "p" recommends "q"). */
+ (void) addRelation(ts, al, p, recommends, 0);
+ }
+
+ while (rpmdsNext(suggests) >= 0) {
+ /* Record next "q <- p" relation (i.e. "p" suggests "q"). */
+ (void) addRelation(ts, al, p, suggests, 0);
}
while (rpmdsNext(order) >= 0) {
/* Record next "q <- p" ordering request */
- (void) addRelation(ts, al, p, order);
+ (void) addRelation(ts, al, p, order, 0);
}
- addCollRelations(al, p, &seenColls);
+ while (rpmdsNext(supplements) >= 0) {
+ /* Record next "p -> q" relation (i.e. "q" supplemented by "p"). */
+ (void) addRelation(ts, al, p, supplements, 1);
+ }
+
+ while (rpmdsNext(enhances) >= 0) {
+ /* Record next "p <- q" relation (i.e. "q" is enhanced by "p"). */
+ (void) addRelation(ts, al, p, enhances, 1);
+ }
}
- seenColls = argvFree(seenColls);
rpmtsiFree(pi);
newOrder = xcalloc(tsmem->orderCount, sizeof(*newOrder));
diff --git a/lib/package.c b/lib/package.c
index 157c96900..1d9e9e138 100644
--- a/lib/package.c
+++ b/lib/package.c
@@ -5,6 +5,7 @@
#include "system.h"
#include <netinet/in.h>
+#include <pthread.h>
#include <rpm/rpmlib.h> /* XXX RPMSIGTAG, other sig stuff */
#include <rpm/rpmts.h>
@@ -13,26 +14,20 @@
#include <rpm/rpmkeyring.h>
#include "lib/rpmlead.h"
-#include "lib/signature.h"
-#include "rpmio/digest.h"
#include "rpmio/rpmio_internal.h" /* fd digest bits */
#include "lib/header_internal.h" /* XXX headerCheck */
+#include "lib/rpmvs.h"
#include "lib/rpmplugins.h" /* rpm plugins hooks */
#include "debug.h"
-static const unsigned int nkeyids_max = 256;
-static unsigned int nkeyids = 0;
-static unsigned int nextkeyid = 0;
-static unsigned int * keyids;
-
/** \ingroup header
* Translate and merge legacy signature tags into header.
* @param h header (dest)
* @param sigh signature header (src)
*/
-static void headerMergeLegacySigs(Header h, Header sigh)
+void headerMergeLegacySigs(Header h, Header sigh)
{
HeaderIterator hi;
struct rpmtd_s td;
@@ -61,6 +56,7 @@ static void headerMergeLegacySigs(Header h, Header sigh)
td.tag = RPMTAG_ARCHIVESIZE;
break;
case RPMSIGTAG_SHA1:
+ case RPMSIGTAG_SHA256:
case RPMSIGTAG_DSA:
case RPMSIGTAG_RSA:
default:
@@ -68,13 +64,8 @@ static void headerMergeLegacySigs(Header h, Header sigh)
continue;
break;
}
- if (td.data == NULL) continue; /* XXX can't happen */
if (!headerIsEntry(h, td.tag)) {
- if (hdrchkType(td.type))
- continue;
- if (td.count < 0 || hdrchkData(td.count))
- continue;
- switch(td.type) {
+ switch (td.type) {
case RPM_NULL_TYPE:
continue;
break;
@@ -104,25 +95,34 @@ static void headerMergeLegacySigs(Header h, Header sigh)
/**
* Remember current key id.
- * @param dig OpenPGP packet containter
+ * XXX: This s*** needs to die. Hook it into keyring or sumthin...
+ * @param keyid signature keyid
* @return 0 if new keyid, otherwise 1
*/
-static int stashKeyid(pgpDigParams sigp)
+static int stashKeyid(unsigned int keyid)
{
- unsigned int keyid;
+ static pthread_mutex_t keyid_lock = PTHREAD_MUTEX_INITIALIZER;
+ static const unsigned int nkeyids_max = 256;
+ static unsigned int nkeyids = 0;
+ static unsigned int nextkeyid = 0;
+ static unsigned int * keyids;
+
int i;
+ int seen = 0;
- if (sigp == NULL)
+ if (keyid == 0)
return 0;
- keyid = pgpGrab(sigp->signid+4, 4);
- if (keyid == 0)
+ /* Just pretend we didn't see the keyid if we fail to lock */
+ if (pthread_mutex_lock(&keyid_lock))
return 0;
if (keyids != NULL)
for (i = 0; i < nkeyids; i++) {
- if (keyid == keyids[i])
- return 1;
+ if (keyid == keyids[i]) {
+ seen = 1;
+ goto exit;
+ }
}
if (nkeyids < nkeyids_max) {
@@ -134,346 +134,86 @@ static int stashKeyid(pgpDigParams sigp)
nextkeyid++;
nextkeyid %= nkeyids_max;
- return 0;
+exit:
+ pthread_mutex_unlock(&keyid_lock);
+ return seen;
}
-int parsePGPSig(rpmtd sigtd, const char *type, const char *fn,
- pgpDigParams *sig)
+static rpmRC handleHdrVS(struct rpmsinfo_s *sinfo, rpmRC rc, const char *msg, void *cbdata)
{
- int rc = pgpPrtParams(sigtd->data, sigtd->count, PGPTAG_SIGNATURE, sig);
-
- if (rc != 0) {
- if (type && fn) {
- rpmlog(RPMLOG_ERR,
- _("skipping %s %s with unverifiable signature\n"), type, fn);
- } else if (type) {
- rpmlog(RPMLOG_ERR,
- _("skipping %s with unverifiable signature\n"), type);
- }
+ char **buf = cbdata;
+ if (buf) {
+ char *vsmsg = rpmsinfoMsg(sinfo, rc, msg);
+ *buf = rstrscat(buf, "\n", vsmsg, NULL);
+ free(vsmsg);
}
return rc;
}
-/*
- * Argument monster to verify header-only signature/digest if there is
- * one, otherwisereturn RPMRC_NOTFOUND to signal for plain sanity check.
- */
-static rpmRC headerSigVerify(rpmKeyring keyring, rpmVSFlags vsflags,
- int il, int dl, int ril, int rdl,
- entryInfo pe, unsigned char * dataStart,
- char **buf)
+static void updateHdrDigests(rpmDigestBundle bundle, struct hdrblob_s *blob)
{
- size_t siglen = 0;
- rpmRC rc = RPMRC_FAIL;
- pgpDigParams sig = NULL;
- struct rpmtd_s sigtd;
- struct entryInfo_s info, einfo;
- unsigned int hashalgo = 0;
-
- rpmtdReset(&sigtd);
- memset(&info, 0, sizeof(info));
- memset(&einfo, 0, sizeof(einfo));
-
- /* Find a header-only digest/signature tag. */
- for (int i = ril; i < il; i++) {
- if (headerVerifyInfo(1, dl, pe+i, &einfo, 0) != -1) {
- rasprintf(buf,
- _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"),
- i, einfo.tag, einfo.type,
- einfo.offset, einfo.count);
- goto exit;
- }
+ int32_t ildl[2] = { htonl(blob->ril), htonl(blob->rdl) };
- switch (einfo.tag) {
- case RPMTAG_SHA1HEADER: {
- size_t blen = 0;
- unsigned const char * b;
- if (vsflags & RPMVSF_NOSHA1HEADER)
- break;
- for (b = dataStart + einfo.offset; *b != '\0'; b++) {
- if (strchr("0123456789abcdefABCDEF", *b) == NULL)
- break;
- blen++;
- }
- if (einfo.type != RPM_STRING_TYPE || *b != '\0' || blen != 40)
- {
- rasprintf(buf, _("hdr SHA1: BAD, not hex\n"));
- goto exit;
- }
- if (info.tag == 0) {
- info = einfo; /* structure assignment */
- siglen = blen + 1;
- }
- } break;
- case RPMTAG_RSAHEADER:
- if (vsflags & RPMVSF_NORSAHEADER)
- break;
- if (einfo.type != RPM_BIN_TYPE) {
- rasprintf(buf, _("hdr RSA: BAD, not binary\n"));
- goto exit;
- }
- info = einfo; /* structure assignment */
- siglen = info.count;
- break;
- case RPMTAG_DSAHEADER:
- if (vsflags & RPMVSF_NODSAHEADER)
- break;
- if (einfo.type != RPM_BIN_TYPE) {
- rasprintf(buf, _("hdr DSA: BAD, not binary\n"));
- goto exit;
- }
- info = einfo; /* structure assignment */
- siglen = info.count;
- break;
- default:
- break;
- }
- }
-
- /* No header-only digest/signature found, get outta here */
- if (info.tag == 0) {
- rc = RPMRC_NOTFOUND;
- goto exit;
- }
-
- sigtd.tag = info.tag;
- sigtd.type = info.type;
- sigtd.count = info.count;
- sigtd.data = memcpy(xmalloc(siglen), dataStart + info.offset, siglen);
- sigtd.flags = RPMTD_ALLOCED;
-
- switch (info.tag) {
- case RPMTAG_RSAHEADER:
- case RPMTAG_DSAHEADER:
- if (parsePGPSig(&sigtd, "header", NULL, &sig))
- goto exit;
- hashalgo = pgpDigParamsAlgo(sig, PGPVAL_HASHALGO);
- break;
- case RPMTAG_SHA1HEADER:
- hashalgo = PGPHASHALGO_SHA1;
- break;
- default:
- break;
- }
-
- if (hashalgo) {
- DIGEST_CTX ctx = rpmDigestInit(hashalgo, RPMDIGEST_NONE);
- int32_t ildl[2] = { htonl(ril), htonl(rdl) };
-
- rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic));
- rpmDigestUpdate(ctx, ildl, sizeof(ildl));
- rpmDigestUpdate(ctx, pe, (ril * sizeof(*pe)));
- rpmDigestUpdate(ctx, dataStart, rdl);
-
- rc = rpmVerifySignature(keyring, &sigtd, sig, ctx, buf);
-
- rpmDigestFinal(ctx, NULL, NULL, 0);
- }
-
-exit:
- rpmtdFreeData(&sigtd);
- pgpDigParamsFree(sig);
-
- return rc;
+ rpmDigestBundleUpdate(bundle, rpm_header_magic, sizeof(rpm_header_magic));
+ rpmDigestBundleUpdate(bundle, ildl, sizeof(ildl));
+ rpmDigestBundleUpdate(bundle, blob->pe, (blob->ril * sizeof(*blob->pe)));
+ rpmDigestBundleUpdate(bundle, blob->dataStart, blob->rdl);
}
-static rpmRC headerVerify(rpmKeyring keyring, rpmVSFlags vsflags,
- const void * uh, size_t uc, char ** msg)
+rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg)
{
- char *buf = NULL;
- int32_t * ei = (int32_t *) uh;
- int32_t il = ntohl(ei[0]);
- int32_t dl = ntohl(ei[1]);
- entryInfo pe = (entryInfo) &ei[2];
- int32_t pvlen = sizeof(il) + sizeof(dl) + (il * sizeof(*pe)) + dl;
- unsigned char * dataStart = (unsigned char *) (pe + il);
- struct indexEntry_s entry;
- struct entryInfo_s info;
- int32_t ril = 0;
- unsigned char * regionEnd = NULL;
- rpmRC rc = RPMRC_FAIL; /* assume failure */
-
- /* Is the blob the right size? */
- if (uc > 0 && pvlen != uc) {
- rasprintf(&buf, _("blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"),
- (int)uc, (int)il, (int)dl);
- goto exit;
- }
-
- memset(&entry, 0, sizeof(entry));
- memset(&info, 0, sizeof(info));
-
- /* Check (and convert) the 1st tag element. */
- if (headerVerifyInfo(1, dl, pe, &entry.info, 0) != -1) {
- rasprintf(&buf, _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"),
- 0, entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
-
- /* Is there an immutable header region tag? */
- if (!(entry.info.tag == RPMTAG_HEADERIMMUTABLE)) {
- rc = RPMRC_NOTFOUND;
- goto exit;
- }
+ rpmRC rc = RPMRC_FAIL;
+ rpmVSFlags vsflags = rpmtsVSFlags(ts) | RPMVSF_NEEDPAYLOAD;
+ rpmKeyring keyring = rpmtsGetKeyring(ts, 1);
+ struct hdrblob_s blob;
- /* Is the region tag sane? */
- if (!(entry.info.type == REGION_TAG_TYPE &&
- entry.info.count == REGION_TAG_COUNT)) {
- rasprintf(&buf,
- _("region tag: BAD, tag %d type %d offset %d count %d\n"),
- entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
+ if (hdrblobInit(uh, uc, 0, 0, &blob, msg) == RPMRC_OK) {
+ struct rpmvs_s *vs = rpmvsCreate(&blob, vsflags);
+ rpmDigestBundle bundle = rpmDigestBundleNew();
- /* Is the trailer within the data area? */
- if (entry.info.offset + REGION_TAG_COUNT > dl) {
- rasprintf(&buf,
- _("region offset: BAD, tag %d type %d offset %d count %d\n"),
- entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
+ rpmswEnter(rpmtsOp(ts, RPMTS_OP_DIGEST), 0);
- /* Is there an immutable header region tag trailer? */
- regionEnd = dataStart + entry.info.offset;
- (void) memcpy(&info, regionEnd, REGION_TAG_COUNT);
- regionEnd += REGION_TAG_COUNT;
+ rpmvsInitDigests(vs, RPMSIG_HEADER, bundle);
+ updateHdrDigests(bundle, &blob);
- if (headerVerifyInfo(1, il * sizeof(*pe), &info, &entry.info, 1) != -1 ||
- !(entry.info.tag == RPMTAG_HEADERIMMUTABLE
- && entry.info.type == REGION_TAG_TYPE
- && entry.info.count == REGION_TAG_COUNT))
- {
- rasprintf(&buf,
- _("region trailer: BAD, tag %d type %d offset %d count %d\n"),
- entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
- memset(&info, 0, sizeof(info));
+ rc = rpmvsVerifyItems(rpmtsPlugins(ts), vs, RPMSIG_HEADER, bundle, keyring,
+ handleHdrVS, msg);
- /* Is the no. of tags in the region less than the total no. of tags? */
- ril = entry.info.offset/sizeof(*pe);
- if ((entry.info.offset % sizeof(*pe)) || ril > il) {
- rasprintf(&buf, _("region size: BAD, ril(%d) > il(%d)\n"), ril, il);
- goto exit;
- }
+ rpmswExit(rpmtsOp(ts, RPMTS_OP_DIGEST), uc);
- /* Verify header-only digest/signature if there is one we can use. */
- rc = headerSigVerify(keyring, vsflags,
- il, dl, ril, (regionEnd - dataStart),
- pe, dataStart, &buf);
+ if (rc == RPMRC_OK && msg != NULL && *msg == NULL)
+ rasprintf(msg, "Header sanity check: OK");
-exit:
- /* If no header-only digest/signature, then do simple sanity check. */
- if (rc == RPMRC_NOTFOUND) {
- int xx = headerVerifyInfo(ril-1, dl, pe+1, &entry.info, 0);
- if (xx != -1) {
- rasprintf(&buf,
- _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"),
- xx+1, entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- rc = RPMRC_FAIL;
- } else {
- rasprintf(&buf, "Header sanity check: OK\n");
- rc = RPMRC_OK;
- }
+ rpmDigestBundleFree(bundle);
+ rpmvsFree(vs);
}
- if (msg)
- *msg = buf;
- else
- free(buf);
-
- return rc;
-}
-
-rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg)
-{
- rpmRC rc;
- rpmVSFlags vsflags = rpmtsVSFlags(ts);
- rpmKeyring keyring = rpmtsGetKeyring(ts, 1);
-
- rpmswEnter(rpmtsOp(ts, RPMTS_OP_DIGEST), 0);
- rc = headerVerify(keyring, vsflags, uh, uc, msg);
- rpmswExit(rpmtsOp(ts, RPMTS_OP_DIGEST), uc);
rpmKeyringFree(keyring);
return rc;
}
-static rpmRC rpmpkgReadHeader(rpmKeyring keyring, rpmVSFlags vsflags,
- FD_t fd, Header *hdrp, char ** msg)
+rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg)
{
char *buf = NULL;
- int32_t block[4];
- int32_t il;
- int32_t dl;
- int32_t * ei = NULL;
- size_t uc;
- size_t nb;
+ struct hdrblob_s blob;
Header h = NULL;
rpmRC rc = RPMRC_FAIL; /* assume failure */
- int xx;
if (hdrp)
*hdrp = NULL;
if (msg)
*msg = NULL;
- memset(block, 0, sizeof(block));
- if ((xx = Freadall(fd, block, sizeof(block))) != sizeof(block)) {
- rasprintf(&buf,
- _("hdr size(%d): BAD, read returned %d\n"), (int)sizeof(block), xx);
- goto exit;
- }
- if (memcmp(block, rpm_header_magic, sizeof(rpm_header_magic))) {
- rasprintf(&buf, _("hdr magic: BAD\n"));
- goto exit;
- }
- il = ntohl(block[2]);
- if (hdrchkTags(il)) {
- rasprintf(&buf, _("hdr tags: BAD, no. of tags(%d) out of range\n"), il);
- goto exit;
- }
- dl = ntohl(block[3]);
- if (hdrchkData(dl)) {
- rasprintf(&buf,
- _("hdr data: BAD, no. of bytes(%d) out of range\n"), dl);
- goto exit;
- }
-
- nb = (il * sizeof(struct entryInfo_s)) + dl;
- uc = sizeof(il) + sizeof(dl) + nb;
- ei = xmalloc(uc);
- ei[0] = block[2];
- ei[1] = block[3];
- if ((xx = Freadall(fd, (char *)&ei[2], nb)) != nb) {
- rasprintf(&buf, _("hdr blob(%zd): BAD, read returned %d\n"), nb, xx);
- goto exit;
- }
-
- /* Sanity check header tags */
- rc = headerVerify(keyring, vsflags, ei, uc, &buf);
- if (rc != RPMRC_OK)
+ if (hdrblobRead(fd, 1, 1, RPMTAG_HEADERIMMUTABLE, &blob, &buf) != RPMRC_OK)
goto exit;
/* OK, blob looks sane, load the header. */
- h = headerImport(ei, uc, 0);
- if (h == NULL) {
- free(buf);
- rasprintf(&buf, _("hdr load: BAD\n"));
- rc = RPMRC_FAIL;
- goto exit;
- }
- ei = NULL; /* XXX will be freed with header */
+ rc = hdrblobImport(&blob, 0, &h, &buf);
exit:
if (hdrp && h && rc == RPMRC_OK)
*hdrp = headerLink(h);
- free(ei);
headerFree(h);
if (msg != NULL && *msg == NULL && buf != NULL) {
@@ -485,241 +225,100 @@ exit:
return rc;
}
-rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg)
-{
- rpmRC rc;
- rpmKeyring keyring = rpmtsGetKeyring(ts, 1);
- rpmVSFlags vsflags = rpmtsVSFlags(ts);
-
- rc = rpmpkgReadHeader(keyring, vsflags, fd, hdrp, msg);
-
- rpmKeyringFree(keyring);
- return rc;
-}
-
-static rpmRC rpmpkgRead(rpmPlugins plugins, rpmKeyring keyring, rpmVSFlags vsflags,
- FD_t fd, const char * fn, Header * hdrp)
+void applyRetrofits(Header h, int leadtype)
{
- pgpDigParams sig = NULL;
- char buf[8*BUFSIZ];
- ssize_t count;
- Header sigh = NULL;
- rpmTagVal sigtag;
- struct rpmtd_s sigtd;
- Header h = NULL;
- char * msg = NULL;
- rpmRC rc = RPMRC_FAIL; /* assume failure */
- int leadtype = -1;
- headerGetFlags hgeflags = HEADERGET_DEFAULT;
- DIGEST_CTX ctx = NULL;
-
- if (hdrp) *hdrp = NULL;
- if (fn == NULL)
- fn = Fdescr(fd);
-
- rpmtdReset(&sigtd);
-
- if ((rc = rpmLeadRead(fd, NULL, &leadtype, &msg)) != RPMRC_OK) {
- /* Avoid message spew on manifests */
- if (rc != RPMRC_NOTFOUND)
- rpmlog(RPMLOG_ERR, "%s: %s\n", fn, msg);
- free(msg);
- goto exit;
- }
-
- /* Read the signature header. */
- rc = rpmReadSignature(fd, &sigh, RPMSIGTYPE_HEADERSIG, &msg);
- switch (rc) {
- default:
- rpmlog(RPMLOG_ERR, _("%s: rpmReadSignature failed: %s"), fn,
- (msg && *msg ? msg : "\n"));
- msg = _free(msg);
- goto exit;
- break;
- case RPMRC_OK:
- if (sigh == NULL) {
- rpmlog(RPMLOG_ERR, _("%s: No signature available\n"), fn);
- rc = RPMRC_FAIL;
- goto exit;
+ /*
+ * Make sure that either RPMTAG_SOURCERPM or RPMTAG_SOURCEPACKAGE
+ * is set. Use a simple heuristic to find the type if both are unset.
+ */
+ if (!headerIsEntry(h, RPMTAG_SOURCERPM) && !headerIsEntry(h, RPMTAG_SOURCEPACKAGE)) {
+ /* the heuristic needs the compressed file list */
+ if (headerIsEntry(h, RPMTAG_OLDFILENAMES))
+ headerConvert(h, HEADERCONV_COMPRESSFILELIST);
+ if (headerIsSourceHeuristic(h)) {
+ /* Retrofit RPMTAG_SOURCEPACKAGE to srpms for compatibility */
+ uint32_t one = 1;
+ headerPutUint32(h, RPMTAG_SOURCEPACKAGE, &one, 1);
+ } else {
+ /*
+ * Make sure binary rpms have RPMTAG_SOURCERPM set as that's
+ * what we use for differentiating binary vs source elsewhere.
+ */
+ headerPutString(h, RPMTAG_SOURCERPM, "(none)");
}
- break;
}
- msg = _free(msg);
-
-#define _chk(_mask, _tag) \
- (sigtag == 0 && !(vsflags & (_mask)) && headerIsEntry(sigh, (_tag)))
/*
- * Figger the most effective available signature.
- * Prefer signatures over digests, then header-only over header+payload.
- * DSA will be preferred over RSA if both exist because tested first.
- * Note that NEEDPAYLOAD prevents header+payload signatures and digests.
+ * Convert legacy headers on the fly. Not having immutable region
+ * equals a truly ancient package, do full retrofit. OTOH newer
+ * packages might have been built with --nodirtokens, test and handle
+ * the non-compressed filelist case separately.
*/
- sigtag = 0;
- if (_chk(RPMVSF_NODSAHEADER, RPMSIGTAG_DSA)) {
- sigtag = RPMSIGTAG_DSA;
- } else if (_chk(RPMVSF_NORSAHEADER, RPMSIGTAG_RSA)) {
- sigtag = RPMSIGTAG_RSA;
- } else if (_chk(RPMVSF_NODSA|RPMVSF_NEEDPAYLOAD, RPMSIGTAG_GPG)) {
- sigtag = RPMSIGTAG_GPG;
- fdInitDigest(fd, PGPHASHALGO_SHA1, 0);
- } else if (_chk(RPMVSF_NORSA|RPMVSF_NEEDPAYLOAD, RPMSIGTAG_PGP)) {
- sigtag = RPMSIGTAG_PGP;
- fdInitDigest(fd, PGPHASHALGO_MD5, 0);
- } else if (_chk(RPMVSF_NOSHA1HEADER, RPMSIGTAG_SHA1)) {
- sigtag = RPMSIGTAG_SHA1;
- } else if (_chk(RPMVSF_NOMD5|RPMVSF_NEEDPAYLOAD, RPMSIGTAG_MD5)) {
- sigtag = RPMSIGTAG_MD5;
- fdInitDigest(fd, PGPHASHALGO_MD5, 0);
- }
-
- /* Read the metadata, computing digest(s) on the fly. */
- h = NULL;
- msg = NULL;
-
- rc = rpmpkgReadHeader(keyring, vsflags, fd, &h, &msg);
-
- if (rc != RPMRC_OK || h == NULL) {
- rpmlog(RPMLOG_ERR, _("%s: headerRead failed: %s"), fn,
- (msg && *msg ? msg : "\n"));
- msg = _free(msg);
- goto exit;
- }
- msg = _free(msg);
-
- /* Any digests or signatures to check? */
- if (sigtag == 0) {
- rc = RPMRC_OK;
- goto exit;
- }
-
- /* Retrieve the tag parameters from the signature header. */
- if (!headerGet(sigh, sigtag, &sigtd, hgeflags)) {
- rc = RPMRC_FAIL;
- goto exit;
- }
-
- switch (sigtag) {
- case RPMSIGTAG_RSA:
- case RPMSIGTAG_DSA:
- if (parsePGPSig(&sigtd, "package", fn, &sig)) {
- rc = RPMRC_FAIL;
- goto exit;
- }
- /* fallthrough */
- case RPMSIGTAG_SHA1:
- { struct rpmtd_s utd;
- unsigned int hashalgo = (sigtag == RPMSIGTAG_SHA1) ?
- PGPHASHALGO_SHA1 :
- pgpDigParamsAlgo(sig, PGPVAL_HASHALGO);
-
- if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, hgeflags))
- break;
- ctx = rpmDigestInit(hashalgo, RPMDIGEST_NONE);
- (void) rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic));
- (void) rpmDigestUpdate(ctx, utd.data, utd.count);
- rpmtdFreeData(&utd);
- } break;
- case RPMSIGTAG_GPG:
- case RPMSIGTAG_PGP5: /* XXX legacy */
- case RPMSIGTAG_PGP:
- if (parsePGPSig(&sigtd, "package", fn, &sig)) {
- rc = RPMRC_FAIL;
- goto exit;
- }
- /* fallthrough */
- case RPMSIGTAG_MD5:
- /* Legacy signatures need the compressed payload in the digest too. */
- while ((count = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0) {}
- if (count < 0) {
- rpmlog(RPMLOG_ERR, _("%s: Fread failed: %s\n"),
- fn, Fstrerror(fd));
- rc = RPMRC_FAIL;
- goto exit;
- }
+ if (!headerIsEntry(h, RPMTAG_HEADERIMMUTABLE))
+ headerConvert(h, HEADERCONV_RETROFIT_V3);
+ else if (headerIsEntry(h, RPMTAG_OLDFILENAMES))
+ headerConvert(h, HEADERCONV_COMPRESSFILELIST);
+}
- ctx = rpmDigestBundleDupCtx(fdGetBundle(fd),(sigtag == RPMSIGTAG_MD5) ?
- PGPHASHALGO_MD5 :
- pgpDigParamsAlgo(sig, PGPVAL_HASHALGO));
- break;
- default:
- break;
- }
+struct pkgdata_s {
+ const char *fn;
+ rpmRC rc;
+};
- /** @todo Implement disable/enable/warn/error/anal policy. */
- rc = rpmVerifySignature(keyring, &sigtd, sig, ctx, &msg);
-
- /* Run verify hook for all plugins */
- rc = rpmpluginsCallVerify(plugins, keyring, &sigtd, sig, ctx, rc);
-
+static rpmRC handlePkgVS(struct rpmsinfo_s *sinfo, rpmRC rc, const char *msg, void *cbdata)
+{
+ struct pkgdata_s *pkgdata = cbdata;
+ int lvl = RPMLOG_DEBUG;
+ char *vsmsg = rpmsinfoMsg(sinfo, rc, msg);
switch (rc) {
case RPMRC_OK: /* Signature is OK. */
- rpmlog(RPMLOG_DEBUG, "%s: %s", fn, msg);
break;
case RPMRC_NOTTRUSTED: /* Signature is OK, but key is not trusted. */
case RPMRC_NOKEY: /* Public key is unavailable. */
/* XXX Print NOKEY/NOTTRUSTED warning only once. */
- { int lvl = (stashKeyid(sig) ? RPMLOG_DEBUG : RPMLOG_WARNING);
- rpmlog(lvl, "%s: %s", fn, msg);
- } break;
- case RPMRC_NOTFOUND: /* Signature is unknown type. */
- rpmlog(RPMLOG_WARNING, "%s: %s", fn, msg);
+ if (stashKeyid(sinfo->keyid) == 0)
+ lvl = RPMLOG_WARNING;
+ break;
+ case RPMRC_NOTFOUND: /* Signature/digest not present. */
+ lvl = RPMLOG_WARNING;
break;
default:
case RPMRC_FAIL: /* Signature does not verify. */
- rpmlog(RPMLOG_ERR, "%s: %s", fn, msg);
+ lvl = RPMLOG_ERR;
break;
}
- free(msg);
-exit:
- if (rc != RPMRC_FAIL && h != NULL && hdrp != NULL) {
- /* Retrofit RPMTAG_SOURCEPACKAGE to srpms for compatibility */
- if (leadtype == RPMLEAD_SOURCE && headerIsSource(h)) {
- if (!headerIsEntry(h, RPMTAG_SOURCEPACKAGE)) {
- uint32_t one = 1;
- headerPutUint32(h, RPMTAG_SOURCEPACKAGE, &one, 1);
- }
- }
- /*
- * Try to make sure binary rpms have RPMTAG_SOURCERPM set as that's
- * what we use for differentiating binary vs source elsewhere.
- */
- if (!headerIsEntry(h, RPMTAG_SOURCEPACKAGE) && headerIsSource(h)) {
- headerPutString(h, RPMTAG_SOURCERPM, "(none)");
- }
- /*
- * Convert legacy headers on the fly. Not having immutable region
- * equals a truly ancient package, do full retrofit. OTOH newer
- * packages might have been built with --nodirtokens, test and handle
- * the non-compressed filelist case separately.
- */
- if (!headerIsEntry(h, RPMTAG_HEADERIMMUTABLE))
- headerConvert(h, HEADERCONV_RETROFIT_V3);
- else if (headerIsEntry(h, RPMTAG_OLDFILENAMES))
- headerConvert(h, HEADERCONV_COMPRESSFILELIST);
-
- /* Append (and remap) signature tags to the metadata. */
- headerMergeLegacySigs(h, sigh);
+ rpmlog(lvl, "%s: %s\n", pkgdata->fn, vsmsg);
- /* Bump reference count for return. */
- *hdrp = headerLink(h);
- }
- rpmtdFreeData(&sigtd);
- rpmDigestFinal(ctx, NULL, NULL, 0);
- h = headerFree(h);
- pgpDigParamsFree(sig);
- sigh = rpmFreeSignature(sigh);
+ /* Remember actual return code, but don't override a previous failure */
+ if (rc && pkgdata->rc != RPMRC_FAIL)
+ pkgdata->rc = rc;
+
+ /* Preserve traditional behavior for now: only failure prevents read */
+ if (rc != RPMRC_FAIL)
+ rc = RPMRC_OK;
+
+ free(vsmsg);
return rc;
}
rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char * fn, Header * hdrp)
{
- rpmRC rc;
- rpmVSFlags vsflags = rpmtsVSFlags(ts);
+ rpmVSFlags vsflags = rpmtsVSFlags(ts) | RPMVSF_NEEDPAYLOAD;
rpmKeyring keyring = rpmtsGetKeyring(ts, 1);
+ struct pkgdata_s pkgdata = {
+ .fn = fn ? fn : Fdescr(fd),
+ .rc = RPMRC_OK,
+ };
+
+ /* XXX: lots of 3rd party software relies on the behavior */
+ if (hdrp)
+ *hdrp = NULL;
- rc = rpmpkgRead(rpmtsPlugins(ts), keyring, vsflags, fd, fn, hdrp);
+ rpmRC rc = rpmpkgRead(rpmtsPlugins(ts), keyring, vsflags, fd, handlePkgVS, &pkgdata, hdrp);
+ /* If there was a "substatus" (NOKEY in practise), return that instead */
+ if (rc == RPMRC_OK && pkgdata.rc)
+ rc = pkgdata.rc;
rpmKeyringFree(keyring);
diff --git a/lib/poptALL.c b/lib/poptALL.c
index 541e8c4ab..b7f48da36 100644
--- a/lib/poptALL.c
+++ b/lib/poptALL.c
@@ -4,7 +4,6 @@
*/
#include "system.h"
-const char *__progname;
#include <rpm/rpmcli.h>
#include <rpm/rpmlib.h> /* rpmEVR, rpmReadConfigFiles etc */
@@ -20,6 +19,7 @@ const char *__progname;
#define POPT_PREDEFINE -996
#define POPT_DBPATH -995
#define POPT_UNDEFINE -994
+#define POPT_PIPE -993
static int _debug = 0;
@@ -69,6 +69,27 @@ void rpmcliConfigured(void)
exit(EXIT_FAILURE);
}
+static int cliDefine(const char *arg, int predefine)
+{
+ int rc;
+ char *s, *t;
+ /* XXX Convert '-' in macro name to underscore, skip leading %. */
+ s = t = xstrdup(arg);
+ while (*t && !risspace(*t)) {
+ if (*t == '-') *t = '_';
+ t++;
+ }
+ t = s;
+ if (*t == '%') t++;
+
+ rc = rpmDefineMacro(NULL, t, RMIL_CMDLINE);
+ if (!predefine && rc == 0)
+ (void) rpmDefineMacro(rpmCLIMacroContext, t, RMIL_CMDLINE);
+
+ free(s);
+ return rc;
+}
+
/**
*/
static void rpmcliAllArgCallback( poptContext con,
@@ -87,43 +108,32 @@ static void rpmcliAllArgCallback( poptContext con,
rpmIncreaseVerbosity();
break;
case POPT_PREDEFINE:
- (void) rpmDefineMacro(NULL, arg, RMIL_CMDLINE);
+ if (cliDefine(arg, 1))
+ exit(EXIT_FAILURE);
break;
case 'D':
- { char *s, *t;
- /* XXX Convert '-' in macro name to underscore, skip leading %. */
- s = t = xstrdup(arg);
- while (*t && !risspace(*t)) {
- if (*t == '-') *t = '_';
- t++;
- }
- t = s;
- if (*t == '%') t++;
- /* XXX Predefine macro if not initialized yet. */
- if (rpmcliInitialized < 0)
- (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE);
rpmcliConfigured();
- (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE);
- (void) rpmDefineMacro(rpmCLIMacroContext, t, RMIL_CMDLINE);
- free(s);
+ if (cliDefine(arg, 0))
+ exit(EXIT_FAILURE);
break;
- }
case POPT_UNDEFINE:
rpmcliConfigured();
if (*arg == '%')
arg++;
- delMacro(NULL, arg);
+ rpmPopMacro(NULL, arg);
break;
case 'E':
rpmcliConfigured();
- { char *val = rpmExpand(arg, NULL);
+ { char *val = NULL;
+ if (rpmExpandMacros(NULL, arg, &val, 0) < 0)
+ exit(EXIT_FAILURE);
fprintf(stdout, "%s\n", val);
free(val);
}
break;
case POPT_DBPATH:
rpmcliConfigured();
- addMacro(NULL, "_dbpath", NULL, arg, RMIL_CMDLINE);
+ rpmPushMacro(NULL, "_dbpath", NULL, arg, RMIL_CMDLINE);
break;
case POPT_SHOWVERSION:
printVersion(stdout);
@@ -138,6 +148,16 @@ static void rpmcliAllArgCallback( poptContext con,
rpmDisplayQueryTags(stdout);
exit(EXIT_SUCCESS);
break;
+ case POPT_PIPE:
+ if (rpmcliPipeOutput) {
+ fprintf(stderr,
+ _("%s: error: more than one --pipe specified "
+ "(incompatible popt aliases?)\n"), xgetprogname());
+ exit(EXIT_FAILURE);
+ }
+ rpmcliPipeOutput = xstrdup(arg);
+ break;
+
case RPMCLI_POPT_NODIGEST:
rpmcliQueryFlags |= VERIFY_DIGEST;
break;
@@ -149,6 +169,10 @@ static void rpmcliAllArgCallback( poptContext con,
case RPMCLI_POPT_NOHDRCHK:
rpmcliQueryFlags |= VERIFY_HDRCHK;
break;
+
+ case RPMCLI_POPT_TARGETPLATFORM:
+ rpmcliInitialized = rpmReadConfigFiles(rpmcliRcfile, arg);
+ break;
}
}
@@ -172,10 +196,17 @@ struct poptOption rpmcliAllPoptTable[] = {
{ "eval", 'E', POPT_ARG_STRING, 0, 'E',
N_("print macro expansion of EXPR"),
N_("'EXPR'") },
+ { "target", '\0', POPT_ARG_STRING, NULL, RPMCLI_POPT_TARGETPLATFORM,
+ N_("Specify target platform"), N_("CPU-VENDOR-OS") },
{ "macros", '\0', POPT_ARG_STRING, &macrofiles, 0,
N_("read <FILE:...> instead of default file(s)"),
N_("<FILE:...>") },
+ /* XXX this is a bit out of place here but kinda unavoidable... */
+ { "noplugins", '\0', POPT_BIT_SET,
+ &rpmIArgs.transFlags, RPMTRANS_FLAG_NOPLUGINS,
+ N_("don't enable any plugins"), NULL },
+
{ "nodigest", '\0', 0, 0, RPMCLI_POPT_NODIGEST,
N_("don't verify package digest(s)"), NULL },
{ "nohdrchk", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NOHDRCHK,
@@ -183,7 +214,7 @@ struct poptOption rpmcliAllPoptTable[] = {
{ "nosignature", '\0', 0, 0, RPMCLI_POPT_NOSIGNATURE,
N_("don't verify package signature(s)"), NULL },
- { "pipe", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, &rpmcliPipeOutput, 0,
+ { "pipe", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_PIPE,
N_("send stdout to CMD"),
N_("CMD") },
{ "rcfile", '\0', POPT_ARG_STRING, &rpmcliRcfile, 0,
@@ -244,14 +275,6 @@ rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
int rc;
const char *ctx, *execPath;
- setprogname(argv[0]); /* Retrofit glibc __progname */
-
- /* XXX glibc churn sanity */
- if (__progname == NULL) {
- if ((__progname = strrchr(argv[0], '/')) != NULL) __progname++;
- else __progname = argv[0];
- }
-
#if defined(ENABLE_NLS)
(void) setlocale(LC_ALL, "" );
@@ -268,7 +291,7 @@ rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
}
/* XXX hack to get popt working from build tree wrt lt-foo names */
- ctx = rstreqn(__progname, "lt-", 3) ? __progname + 3 : __progname;
+ ctx = rstreqn(xgetprogname(), "lt-", 3) ? xgetprogname() + 3 : xgetprogname();
optCon = poptGetContext(ctx, argc, (const char **)argv, optionsTable, 0);
{
@@ -285,12 +308,12 @@ rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
/* Process all options, whine if unknown. */
while ((rc = poptGetNextOpt(optCon)) > 0) {
fprintf(stderr, _("%s: option table misconfigured (%d)\n"),
- __progname, rc);
+ xgetprogname(), rc);
exit(EXIT_FAILURE);
}
if (rc < -1) {
- fprintf(stderr, "%s: %s: %s\n", __progname,
+ fprintf(stderr, "%s: %s: %s\n", xgetprogname(),
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
poptStrerror(rc));
exit(EXIT_FAILURE);
diff --git a/lib/poptI.c b/lib/poptI.c
index 051f0f56f..8272fa80f 100644
--- a/lib/poptI.c
+++ b/lib/poptI.c
@@ -26,7 +26,7 @@ struct rpmInstallArguments_s rpmIArgs = {
RPM_GNUC_NORETURN
static void argerror(const char * desc)
{
- fprintf(stderr, _("%s: %s\n"), __progname, desc);
+ fprintf(stderr, _("%s: %s\n"), xgetprogname(), desc);
exit(EXIT_FAILURE);
}
@@ -87,6 +87,10 @@ static void installArgCallback( poptContext con,
ia->transFlags |= RPMTRANS_FLAG_NOCONTEXTS;
break;
+ case RPMCLI_POPT_NOCAPS:
+ ia->transFlags |= RPMTRANS_FLAG_NOCAPS;
+ break;
+
case RPMCLI_POPT_FORCE:
ia->probFilter |=
( RPMPROB_FILTER_REPLACEPKG
@@ -181,6 +185,8 @@ struct poptOption rpmInstallPoptTable[] = {
N_("don't verify digest of files (obsolete)"), NULL },
{ "nocontexts", '\0',0, NULL, RPMCLI_POPT_NOCONTEXTS,
N_("don't install file security contexts"), NULL},
+ { "nocaps", '\0',0, NULL, RPMCLI_POPT_NOCAPS,
+ N_("don't install file capabilities"), NULL},
{ "noorder", '\0', POPT_BIT_SET,
&rpmIArgs.installInterfaceFlags, INSTALL_NOORDER,
@@ -224,10 +230,6 @@ struct poptOption rpmInstallPoptTable[] = {
&rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERPOSTUN,
N_("do not execute any %%triggerpostun scriptlet(s)"), NULL},
- { "nocollections", '\0', POPT_BIT_SET,
- &rpmIArgs.transFlags, RPMTRANS_FLAG_NOCOLLECTIONS,
- N_("do not perform any collection actions"), NULL},
-
{ "oldpackage", '\0', POPT_BIT_SET,
&rpmIArgs.probFilter, RPMPROB_FILTER_OLDPACKAGE,
N_("upgrade to an old version of the package (--force on upgrades does this automatically)"),
@@ -253,6 +255,10 @@ struct poptOption rpmInstallPoptTable[] = {
&rpmIArgs.installInterfaceFlags, (INSTALL_UPGRADE|INSTALL_INSTALL),
N_("upgrade package(s)"),
N_("<packagefile>+") },
+ { "reinstall", '\0', POPT_BIT_SET,
+ &rpmIArgs.installInterfaceFlags, (INSTALL_REINSTALL|INSTALL_INSTALL),
+ N_("reinstall package(s)"),
+ N_("<packagefile>+") },
POPT_TABLEEND
};
diff --git a/lib/poptQV.c b/lib/poptQV.c
index 3db17b0ab..e3ea2d7bc 100644
--- a/lib/poptQV.c
+++ b/lib/poptQV.c
@@ -21,6 +21,10 @@ struct rpmQVKArguments_s rpmQVKArgs;
#define POPT_QUERYBYPKGID -1007
#define POPT_QUERYBYHDRID -1008
#define POPT_QUERYBYTID -1010
+#define POPT_WHATRECOMMENDS -1011
+#define POPT_WHATSUGGESTS -1012
+#define POPT_WHATSUPPLEMENTS -1013
+#define POPT_WHATENHANCES -1014
/* ========== Query/Verify/Signature source args */
static void rpmQVSourceArgCallback( poptContext con,
@@ -45,6 +49,10 @@ static void rpmQVSourceArgCallback( poptContext con,
case 'p': qva->qva_source |= RPMQV_RPM; break;
case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES; break;
case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES; break;
+ case POPT_WHATRECOMMENDS: qva->qva_source |= RPMQV_WHATRECOMMENDS; break;
+ case POPT_WHATSUGGESTS: qva->qva_source |= RPMQV_WHATSUGGESTS; break;
+ case POPT_WHATSUPPLEMENTS: qva->qva_source |= RPMQV_WHATSUPPLEMENTS; break;
+ case POPT_WHATENHANCES: qva->qva_source |= RPMQV_WHATENHANCES; break;
case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY; break;
case POPT_QUERYBYPKGID: qva->qva_source |= RPMQV_PKGID; break;
case POPT_QUERYBYHDRID: qva->qva_source |= RPMQV_HDRID; break;
@@ -93,6 +101,14 @@ struct poptOption rpmQVSourcePoptTable[] = {
N_("query/verify the package(s) which require a dependency"), "CAPABILITY" },
{ "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES,
N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" },
+ { "whatrecommends", '\0', 0, 0, POPT_WHATRECOMMENDS,
+ N_("query/verify the package(s) which recommends a dependency"), "CAPABILITY" },
+ { "whatsuggests", '\0', 0, 0, POPT_WHATSUGGESTS,
+ N_("query/verify the package(s) which suggests a dependency"), "CAPABILITY" },
+ { "whatsupplements", '\0', 0, 0, POPT_WHATSUPPLEMENTS,
+ N_("query/verify the package(s) which supplements a dependency"), "CAPABILITY" },
+ { "whatenhances", '\0', 0, 0, POPT_WHATENHANCES,
+ N_("query/verify the package(s) which enhances a dependency"), "CAPABILITY" },
{ "noglob", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &giFlags, RPMGI_NOGLOB,
N_("do not glob arguments"), NULL},
@@ -115,6 +131,7 @@ static void queryArgCallback(poptContext con,
case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
case 'L': qva->qva_flags |= QUERY_FOR_LICENSE | QUERY_FOR_LIST; break;
+ case 'A': qva->qva_flags |= QUERY_FOR_ARTIFACT | QUERY_FOR_LIST; break;
case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
break;
@@ -144,6 +161,10 @@ static void queryArgCallback(poptContext con,
qva->qva_flags |= VERIFY_CONTEXTS;
break;
+ case RPMCLI_POPT_NOCAPS:
+ qva->qva_flags |= VERIFY_CAPS;
+ break;
+
#ifdef NOTYET
case RPMCLI_POPT_FORCE:
ia->probFilter |=
@@ -174,6 +195,8 @@ struct poptOption rpmQueryPoptTable[] = {
N_("list all documentation files"), NULL },
{ "licensefiles", 'L', 0, 0, 'L',
N_("list all license files"), NULL },
+ { "artifactfiles", 'A', 0, 0, 'A',
+ N_("list all artifact files"), NULL },
{ "dump", '\0', 0, 0, POPT_DUMP,
N_("dump basic file information"), NULL },
{ NULL, 'i', POPT_ARGFLAG_DOC_HIDDEN, 0, 'i',
@@ -182,9 +205,15 @@ struct poptOption rpmQueryPoptTable[] = {
N_("list files in package"), NULL },
/* Duplicate file attr flags from packages into command line options. */
- { "noghost", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN,
+ { "noghost", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
&rpmQVKArgs.qva_fflags, RPMFILE_GHOST,
N_("skip %%ghost files"), NULL },
+ { "noconfig", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
+ &rpmQVKArgs.qva_fflags, RPMFILE_CONFIG,
+ N_("skip %%config files"), NULL },
+ { "noartifact", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
+ &rpmQVKArgs.qva_fflags, RPMFILE_ARTIFACT,
+ N_("skip %%artifact files"), NULL },
{ "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0,
POPT_QUERYFORMAT, NULL, NULL },
@@ -228,12 +257,11 @@ struct poptOption rpmVerifyPoptTable[] = {
{ "nordev", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
&rpmQVKArgs.qva_flags, VERIFY_RDEV,
N_("don't verify mode of files"), NULL },
- { "nocaps", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
- &rpmQVKArgs.qva_flags, VERIFY_CAPS,
- N_("don't verify capabilities of files"), NULL },
{ "nocontexts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCONTEXTS,
N_("don't verify file security contexts"), NULL },
+ { "nocaps", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCAPS,
+ N_("don't verify capabilities of files"), NULL },
{ "nofiles", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_FILES,
N_("don't verify files in package"), NULL},
{ "nodeps", '\0', 0, NULL, RPMCLI_POPT_NODEPS,
diff --git a/lib/psm.c b/lib/psm.c
index fcc6749cc..2c6c9c550 100644
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -17,107 +17,38 @@
#include <rpm/rpmstring.h>
#include <rpm/argv.h>
-#include "lib/cpio.h"
#include "lib/fsm.h" /* XXX CPIO_FOO/FSM_FOO constants */
#include "lib/rpmchroot.h"
#include "lib/rpmfi_internal.h" /* XXX replaced/states... */
#include "lib/rpmte_internal.h" /* XXX internal apis */
#include "lib/rpmdb_internal.h" /* rpmdbAdd/Remove */
-#include "lib/rpmts_internal.h" /* ts->plugins */
+#include "lib/rpmts_internal.h" /* rpmtsPlugins() etc */
+#include "lib/rpmds_internal.h" /* rpmdsFilterTi() */
#include "lib/rpmscript.h"
+#include "lib/misc.h"
+#include "lib/rpmtriggers.h"
#include "lib/rpmplugins.h"
#include "debug.h"
-typedef enum pkgStage_e {
- PSM_UNKNOWN = 0,
- PSM_INIT = 1,
- PSM_PRE = 2,
- PSM_PROCESS = 3,
- PSM_POST = 4,
- PSM_UNDO = 5,
- PSM_FINI = 6,
-
- PSM_CREATE = 17,
- PSM_DESTROY = 23,
-
- PSM_SCRIPT = 53,
- PSM_TRIGGERS = 54,
- PSM_IMMED_TRIGGERS = 55,
-
- PSM_RPMDB_ADD = 98,
- PSM_RPMDB_REMOVE = 99
-
-} pkgStage;
-
struct rpmpsm_s {
rpmts ts; /*!< transaction set */
rpmte te; /*!< current transaction element */
- rpmfi fi; /*!< transaction element file info */
- const char * goalName;
- char * failedFile;
- rpmTagVal scriptTag; /*!< Scriptlet data tag. */
- int npkgs_installed; /*!< No. of installed instances. */
+ rpmfiles files; /*!< transaction element file info */
int scriptArg; /*!< Scriptlet package arg. */
- rpmsenseFlags sense; /*!< One of RPMSENSE_TRIGGER{PREIN,IN,UN,POSTUN}. */
int countCorrection; /*!< 0 if installing, -1 if removing. */
rpmCallbackType what; /*!< Callback type. */
rpm_loff_t amount; /*!< Callback amount. */
rpm_loff_t total; /*!< Callback total. */
- pkgGoal goal;
- pkgStage stage; /*!< Current psm stage. */
- pkgStage nstage; /*!< Next psm stage. */
int nrefs; /*!< Reference count. */
};
-static rpmpsm rpmpsmNew(rpmts ts, rpmte te);
+static rpmpsm rpmpsmNew(rpmts ts, rpmte te, pkgGoal goal);
+static rpmRC rpmpsmUnpack(rpmpsm psm);
static rpmpsm rpmpsmFree(rpmpsm psm);
-static rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage);
-
-/**
- * Macros to be defined from per-header tag values.
- * @todo Should other macros be added from header when installing a package?
- */
-static struct tagMacro {
- const char *macroname; /*!< Macro name to define. */
- rpmTag tag; /*!< Header tag to use for value. */
-} const tagMacros[] = {
- { "name", RPMTAG_NAME },
- { "version", RPMTAG_VERSION },
- { "release", RPMTAG_RELEASE },
- { "epoch", RPMTAG_EPOCH },
- { NULL, 0 }
-};
-
-/**
- * Define per-header macros.
- * @param h header
- * @return 0 always
- */
-static void rpmInstallLoadMacros(Header h)
-{
- const struct tagMacro * tagm;
-
- for (tagm = tagMacros; tagm->macroname != NULL; tagm++) {
- struct rpmtd_s td;
- char *body;
- if (!headerGet(h, tagm->tag, &td, HEADERGET_DEFAULT))
- continue;
-
- switch (rpmtdType(&td)) {
- default:
- body = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL);
- addMacro(NULL, tagm->macroname, NULL, body, -1);
- free(body);
- break;
- case RPM_NULL_TYPE:
- break;
- }
- rpmtdFreeData(&td);
- }
-}
+static const char * pkgGoalString(pkgGoal goal);
/**
* Adjust file states in database for files shared with this package:
@@ -133,9 +64,9 @@ static rpmRC markReplacedFiles(const rpmpsm psm)
sharedFileInfo sfi;
rpmdbMatchIterator mi;
Header h;
- int * offsets;
+ unsigned int * offsets;
unsigned int prev;
- int num;
+ unsigned int num;
if (!replaced)
return RPMRC_OK;
@@ -227,17 +158,12 @@ static int rpmlibDeps(Header h)
rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
char ** specFilePtr, char ** cookie)
{
- rpmfi fi = NULL;
- char * specFile = NULL;
- const char *rootdir = rpmtsRootDir(ts);
Header h = NULL;
rpmpsm psm = NULL;
rpmte te = NULL;
rpmRC rpmrc;
int specix = -1;
- struct rpmtd_s filenames;
- rpmtdReset(&filenames);
rpmrc = rpmReadPackageFile(ts, fd, NULL, &h);
switch (rpmrc) {
case RPMRC_NOTTRUSTED:
@@ -262,51 +188,9 @@ rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
if (!rpmlibDeps(h))
goto exit;
- if (headerGet(h, RPMTAG_BASENAMES, &filenames, HEADERGET_ALLOC)) {
- struct rpmtd_s td;
- const char *str;
- const char *_cookie = headerGetString(h, RPMTAG_COOKIE);
- if (cookie && _cookie) *cookie = xstrdup(_cookie);
-
- /* Try to find spec by file flags */
- if (_cookie && headerGet(h, RPMTAG_FILEFLAGS, &td, HEADERGET_MINMEM)) {
- rpmfileAttrs *flags;
- while (specix < 0 && (flags = rpmtdNextUint32(&td))) {
- if (*flags & RPMFILE_SPECFILE)
- specix = rpmtdGetIndex(&td);
- }
- }
- /* Still no spec? Look by filename. */
- while (specix < 0 && (str = rpmtdNextString(&filenames))) {
- if (rpmFileHasSuffix(str, ".spec"))
- specix = rpmtdGetIndex(&filenames);
- }
- }
-
- if (rootdir && rstreq(rootdir, "/"))
- rootdir = NULL;
-
- /* Macros need to be added before trying to create directories */
- rpmInstallLoadMacros(h);
+ specix = headerFindSpec(h);
- if (specix >= 0) {
- const char *bn;
-
- headerDel(h, RPMTAG_BASENAMES);
- headerDel(h, RPMTAG_DIRNAMES);
- headerDel(h, RPMTAG_DIRINDEXES);
-
- rpmtdInit(&filenames);
- for (int i = 0; (bn = rpmtdNextString(&filenames)); i++) {
- int spec = (i == specix);
- char *fn = rpmGenPath(rpmtsRootDir(ts),
- spec ? "%{_specdir}" : "%{_sourcedir}", bn);
- headerPutString(h, RPMTAG_OLDFILENAMES, fn);
- if (spec) specFile = xstrdup(fn);
- free(fn);
- }
- headerConvert(h, HEADERCONV_COMPRESSFILELIST);
- } else {
+ if (specix < 0) {
rpmlog(RPMLOG_ERR, _("source package contains no .spec file\n"));
goto exit;
};
@@ -322,142 +206,50 @@ rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
rpmteSetFd(te, fd);
rpmteSetHeader(te, h);
- fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, RPMFI_KEEPHEADER);
- h = headerFree(h);
-
- if (fi == NULL) {
- goto exit;
- }
- fi->apath = filenames.data; /* Ick */
- rpmteSetFI(te, fi);
- fi = rpmfiFree(fi);
-
- if (rpmMkdirs(rpmtsRootDir(ts), "%{_topdir}:%{_sourcedir}:%{_specdir}")) {
- goto exit;
- }
{
/* set all files to be installed */
rpmfs fs = rpmteGetFileStates(te);
- int i;
- unsigned int fc = rpmfiFC(fi);
- for (i=0; i<fc; i++) rpmfsSetAction(fs, i, FA_CREATE);
+ int fc = rpmfsFC(fs);
+ for (int i = 0; i < fc; i++)
+ rpmfsSetAction(fs, i, FA_CREATE);
}
- psm = rpmpsmNew(ts, te);
- psm->goal = PKG_INSTALL;
+ psm = rpmpsmNew(ts, te, PKG_INSTALL);
- /* FIX: psm->fi->dnl should be owned. */
- if (rpmpsmStage(psm, PSM_PROCESS) == RPMRC_OK)
+ if (rpmpsmUnpack(psm) == RPMRC_OK)
rpmrc = RPMRC_OK;
- (void) rpmpsmStage(psm, PSM_FINI);
rpmpsmFree(psm);
exit:
- if (specFilePtr && specFile && rpmrc == RPMRC_OK)
- *specFilePtr = specFile;
- else
- free(specFile);
-
- headerFree(h);
- rpmfiFree(fi);
+ if (rpmrc == RPMRC_OK && specix >= 0) {
+ if (cookie)
+ *cookie = headerGetAsString(h, RPMTAG_COOKIE);
+ if (specFilePtr) {
+ rpmfiles files = rpmteFiles(te);
+ *specFilePtr = rpmfilesFN(files, specix);
+ rpmfilesFree(files);
+ }
+ }
/* XXX nuke the added package(s). */
- rpmtsClean(ts);
+ headerFree(h);
+ rpmtsEmpty(ts);
return rpmrc;
}
-static rpmTagVal triggertag(rpmsenseFlags sense)
-{
- rpmTagVal tag = RPMTAG_NOT_FOUND;
- switch (sense) {
- case RPMSENSE_TRIGGERIN:
- tag = RPMTAG_TRIGGERIN;
- break;
- case RPMSENSE_TRIGGERUN:
- tag = RPMTAG_TRIGGERUN;
- break;
- case RPMSENSE_TRIGGERPOSTUN:
- tag = RPMTAG_TRIGGERPOSTUN;
- break;
- case RPMSENSE_TRIGGERPREIN:
- tag = RPMTAG_TRIGGERPREIN;
- break;
- default:
- break;
- }
- return tag;
-}
-
-/**
- * Run a scriptlet with args.
- *
- * Run a script with an interpreter. If the interpreter is not specified,
- * /bin/sh will be used. If the interpreter is /bin/sh, then the args from
- * the header will be ignored, passing instead arg1 and arg2.
- *
- * @param psm package state machine data
- * @param prefixes install prefixes
- * @param script scriptlet from header
- * @param arg1 no. instances of package installed after scriptlet exec
- * (-1 is no arg)
- * @param arg2 ditto, but for the target package
- * @return 0 on success
- */
-static rpmRC runScript(rpmpsm psm, ARGV_const_t prefixes,
- rpmScript script, int arg1, int arg2)
-{
- rpmRC stoprc, rc = RPMRC_OK;
- rpmTagVal stag = rpmScriptTag(script);
- FD_t sfd = NULL;
- int warn_only = (stag != RPMTAG_PREIN &&
- stag != RPMTAG_PREUN &&
- stag != RPMTAG_PRETRANS &&
- stag != RPMTAG_VERIFYSCRIPT);
- int selinux = !(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_NOCONTEXTS);
-
- sfd = rpmtsNotify(psm->ts, psm->te, RPMCALLBACK_SCRIPT_START, stag, 0);
- if (sfd == NULL)
- sfd = rpmtsScriptFd(psm->ts);
-
- rpmtsSuspendResumeDBLock(psm->ts, 0);
- rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0);
- rc = rpmScriptRun(script, arg1, arg2, sfd,
- prefixes, warn_only, selinux, psm->ts->plugins);
- rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0);
- rpmtsSuspendResumeDBLock(psm->ts, 1);
-
- /* Map warn-only errors to "notfound" for script stop callback */
- stoprc = (rc != RPMRC_OK && warn_only) ? RPMRC_NOTFOUND : rc;
- rpmtsNotify(psm->ts, psm->te, RPMCALLBACK_SCRIPT_STOP, stag, stoprc);
-
- /*
- * Notify callback for all errors. "total" abused for warning/error,
- * rc only reflects whether the condition prevented install/erase
- * (which is only happens with %prein and %preun scriptlets) or not.
- */
- if (rc != RPMRC_OK) {
- if (warn_only) {
- rc = RPMRC_OK;
- }
- rpmtsNotify(psm->ts, psm->te, RPMCALLBACK_SCRIPT_ERROR, stag, rc);
- }
-
- return rc;
-}
-
-static rpmRC runInstScript(rpmpsm psm)
+static rpmRC runInstScript(rpmpsm psm, rpmTagVal scriptTag)
{
rpmRC rc = RPMRC_OK;
struct rpmtd_s pfx;
Header h = rpmteHeader(psm->te);
- rpmScript script = rpmScriptFromTag(h, psm->scriptTag);
+ rpmScript script = rpmScriptFromTag(h, scriptTag);
if (script) {
headerGet(h, RPMTAG_INSTPREFIXES, &pfx, HEADERGET_ALLOC|HEADERGET_ARGV);
- rc = runScript(psm, pfx.data, script, psm->scriptArg, -1);
+ rc = runScript(psm->ts, psm->te, h, pfx.data, script, psm->scriptArg, -1);
rpmtdFreeData(&pfx);
}
@@ -470,18 +262,19 @@ static rpmRC runInstScript(rpmpsm psm)
/**
* Execute triggers.
* @todo Trigger on any provides, not just package NVR.
- * @param psm package state machine data
+ * @param ts transaction set
+ * @param te transaction element
+ * @param sense trigger type
* @param sourceH header of trigger source
* @param trigH header of triggered package
* @param arg2
* @param triggersAlreadyRun
* @return
*/
-static rpmRC handleOneTrigger(const rpmpsm psm,
- Header sourceH, Header trigH,
+static rpmRC handleOneTrigger(rpmts ts, rpmte te, rpmsenseFlags sense,
+ Header sourceH, Header trigH, int countCorrection,
int arg2, unsigned char * triggersAlreadyRun)
{
- const rpmts ts = psm->ts;
rpmds trigger = rpmdsInit(rpmdsNew(trigH, RPMTAG_TRIGGERNAME, 0));
struct rpmtd_s pfx;
const char * sourceName = headerGetString(sourceH, RPMTAG_NAME);
@@ -496,10 +289,9 @@ static rpmRC handleOneTrigger(const rpmpsm psm,
(void) rpmdsSetNoPromote(trigger, 1);
while ((i = rpmdsNext(trigger)) >= 0) {
- struct rpmtd_s tindexes;
uint32_t tix;
- if (!(rpmdsFlags(trigger) & psm->sense))
+ if (!(rpmdsFlags(trigger) & sense))
continue;
if (!rstreq(rpmdsN(trigger), sourceName))
@@ -509,15 +301,7 @@ static rpmRC handleOneTrigger(const rpmpsm psm,
if (!rpmdsAnyMatchesDep(sourceH, trigger, 1))
continue;
- if (!headerGet(trigH, RPMTAG_TRIGGERINDEX, &tindexes, HEADERGET_MINMEM))
- continue;
-
- if (rpmtdSetIndex(&tindexes, i) < 0) {
- rpmtdFreeData(&tindexes);
- continue;
- }
-
- tix = rpmtdGetNumber(&tindexes);
+ tix = rpmdsTi(trigger);
if (triggersAlreadyRun == NULL || triggersAlreadyRun[tix] == 0) {
int arg1 = rpmdbCountPackages(rpmtsGetRdb(ts), triggerName);
@@ -526,10 +310,9 @@ static rpmRC handleOneTrigger(const rpmpsm psm,
rc = RPMRC_FAIL;
} else {
rpmScript script = rpmScriptFromTriggerTag(trigH,
- triggertag(psm->sense), tix);
- arg1 += psm->countCorrection;
- rc = runScript(psm, pfx.data, script, arg1, arg2);
-
+ triggertag(sense), RPMSCRIPT_NORMALTRIGGER, tix);
+ arg1 += countCorrection;
+ rc = runScript(ts, te, trigH, pfx.data, script, arg1, arg2);
if (triggersAlreadyRun != NULL)
triggersAlreadyRun[tix] = 1;
@@ -537,8 +320,6 @@ static rpmRC handleOneTrigger(const rpmpsm psm,
}
}
- rpmtdFreeData(&tindexes);
-
/*
* Each target/source header pair can only result in a single
* script being run.
@@ -555,9 +336,10 @@ static rpmRC handleOneTrigger(const rpmpsm psm,
/**
* Run trigger scripts in the database that are fired by this header.
* @param psm package state machine data
+ * @param sense trigger type
* @return 0 on success
*/
-static rpmRC runTriggers(rpmpsm psm)
+static rpmRC runTriggers(rpmpsm psm, rpmsenseFlags sense)
{
const rpmts ts = psm->ts;
int numPackage = -1;
@@ -575,14 +357,13 @@ static rpmRC runTriggers(rpmpsm psm)
{ Header triggeredH;
Header h = rpmteHeader(psm->te);
rpmdbMatchIterator mi;
- int countCorrection = psm->countCorrection;
- psm->countCorrection = 0;
mi = rpmtsInitIterator(ts, RPMDBI_TRIGGERNAME, N, 0);
- while((triggeredH = rpmdbNextIterator(mi)) != NULL)
- nerrors += handleOneTrigger(psm, h, triggeredH, numPackage, NULL);
+ while ((triggeredH = rpmdbNextIterator(mi)) != NULL) {
+ nerrors += handleOneTrigger(ts, NULL, sense, h, triggeredH,
+ 0, numPackage, NULL);
+ }
rpmdbFreeIterator(mi);
- psm->countCorrection = countCorrection;
headerFree(h);
}
@@ -592,9 +373,10 @@ static rpmRC runTriggers(rpmpsm psm)
/**
* Run triggers from this header that are fired by headers in the database.
* @param psm package state machine data
+ * @param sense trigger type
* @return 0 on success
*/
-static rpmRC runImmedTriggers(rpmpsm psm)
+static rpmRC runImmedTriggers(rpmpsm psm, rpmsenseFlags sense)
{
const rpmts ts = psm->ts;
unsigned char * triggersRun;
@@ -620,8 +402,10 @@ static rpmRC runImmedTriggers(rpmpsm psm)
mi = rpmtsInitIterator(ts, RPMDBI_NAME, trigName, 0);
- while((sourceH = rpmdbNextIterator(mi)) != NULL) {
- nerrors += handleOneTrigger(psm, sourceH, h,
+ while ((sourceH = rpmdbNextIterator(mi)) != NULL) {
+ nerrors += handleOneTrigger(psm->ts, psm->te,
+ sense, sourceH, h,
+ psm->countCorrection,
rpmdbGetIteratorCount(mi),
triggersRun);
}
@@ -641,7 +425,7 @@ exit:
static rpmpsm rpmpsmFree(rpmpsm psm)
{
if (psm) {
- rpmfiFree(psm->fi);
+ rpmfilesFree(psm->files);
rpmtsFree(psm->ts),
/* XXX rpmte not refcounted yet */
memset(psm, 0, sizeof(*psm)); /* XXX trash and burn */
@@ -650,12 +434,55 @@ static rpmpsm rpmpsmFree(rpmpsm psm)
return NULL;
}
-static rpmpsm rpmpsmNew(rpmts ts, rpmte te)
+static rpmpsm rpmpsmNew(rpmts ts, rpmte te, pkgGoal goal)
{
rpmpsm psm = xcalloc(1, sizeof(*psm));
psm->ts = rpmtsLink(ts);
- psm->fi = rpmfiLink(rpmteFI(te));
+ psm->files = rpmteFiles(te);
psm->te = te; /* XXX rpmte not refcounted yet */
+ if (!rpmteIsSource(te)) {
+ /*
+ * When we run scripts, we pass an argument which is the number of
+ * versions of this package that will be installed when we are
+ * finished.
+ */
+ int npkgs_installed = rpmdbCountPackages(rpmtsGetRdb(ts), rpmteN(te));
+ switch (goal) {
+ case PKG_INSTALL:
+ case PKG_PRETRANS:
+ psm->scriptArg = npkgs_installed + 1;
+ psm->countCorrection = 0;
+ break;
+ case PKG_ERASE:
+ psm->scriptArg = npkgs_installed - 1;
+ psm->countCorrection = -1;
+ break;
+ case PKG_VERIFY:
+ case PKG_POSTTRANS:
+ psm->scriptArg = npkgs_installed;
+ psm->countCorrection = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (goal == PKG_INSTALL) {
+ Header h = rpmteHeader(te);
+ psm->total = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
+ headerFree(h);
+ } else if (goal == PKG_ERASE) {
+ psm->total = rpmfilesFC(psm->files);
+ }
+ /* Fake up something for packages with no files */
+ if (psm->total == 0)
+ psm->total = 100;
+
+ if (goal == PKG_INSTALL || goal == PKG_ERASE) {
+ rpmlog(RPMLOG_DEBUG, "%s: %s has %d files\n", pkgGoalString(goal),
+ rpmteNEVRA(psm->te), rpmfilesFC(psm->files));
+ }
+
return psm;
}
@@ -685,14 +512,13 @@ void rpmpsmNotify(rpmpsm psm, int what, rpm_loff_t amount)
*/
static void markReplacedInstance(rpmts ts, rpmte te)
{
- /* this must match rpmNameVersionCompare in depends.c */
rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(te), 0);
rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP, rpmteE(te));
rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_STRCMP, rpmteV(te));
rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP, rpmteR(te));
- rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP, rpmteA(te));
/* XXX shouldn't we also do this on colorless transactions? */
if (rpmtsColor(ts)) {
+ rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP, rpmteA(te));
rpmdbSetIteratorRE(mi, RPMTAG_OS, RPMMIRE_STRCMP, rpmteO(te));
}
@@ -703,323 +529,293 @@ static void markReplacedInstance(rpmts ts, rpmte te)
rpmdbFreeIterator(mi);
}
-static rpmRC rpmpsmNext(rpmpsm psm, pkgStage nstage)
+static rpmRC dbAdd(rpmts ts, rpmte te)
{
- psm->nstage = nstage;
- return rpmpsmStage(psm, psm->nstage);
+ Header h = rpmteHeader(te);
+ rpm_time_t installTime = (rpm_time_t) time(NULL);
+ rpmfs fs = rpmteGetFileStates(te);
+ rpm_count_t fc = rpmfsFC(fs);
+ rpm_fstate_t * fileStates = rpmfsGetStates(fs);
+ rpm_color_t tscolor = rpmtsColor(ts);
+ rpm_tid_t tid = rpmtsGetTid(ts);
+ rpmRC rc;
+
+ if (fileStates != NULL && fc > 0) {
+ headerPutChar(h, RPMTAG_FILESTATES, fileStates, fc);
+ }
+
+ headerPutUint32(h, RPMTAG_INSTALLTID, &tid, 1);
+ headerPutUint32(h, RPMTAG_INSTALLTIME, &installTime, 1);
+ headerPutUint32(h, RPMTAG_INSTALLCOLOR, &tscolor, 1);
+
+ (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBADD), 0);
+ rc = (rpmdbAdd(rpmtsGetRdb(ts), h) == 0) ? RPMRC_OK : RPMRC_FAIL;
+ (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBADD), 0);
+
+ if (rc == RPMRC_OK) {
+ rpmteSetDBInstance(te, headerGetInstance(h));
+ packageHashAddEntry(ts->members->installedPackages,
+ headerGetInstance(h), te);
+ }
+ headerFree(h);
+ return rc;
}
-static rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage)
+static rpmRC dbRemove(rpmts ts, rpmte te)
{
- const rpmts ts = psm->ts;
- rpmfi fi = psm->fi;
+ rpmRC rc;
+
+ (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0);
+ rc = (rpmdbRemove(rpmtsGetRdb(ts), rpmteDBInstance(te)) == 0) ?
+ RPMRC_OK : RPMRC_FAIL;
+ (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0);
+
+ if (rc == RPMRC_OK)
+ rpmteSetDBInstance(te, 0);
+ return rc;
+}
+
+static rpmRC rpmpsmUnpack(rpmpsm psm)
+{
+ char *failedFile = NULL;
+ int fsmrc = 0;
+ int saved_errno = 0;
rpmRC rc = RPMRC_OK;
- switch (stage) {
- case PSM_UNKNOWN:
- break;
- case PSM_INIT:
- rpmlog(RPMLOG_DEBUG, "%s: %s has %d files\n",
- psm->goalName, rpmteNEVR(psm->te), rpmfiFC(fi));
+ rpmpsmNotify(psm, RPMCALLBACK_INST_START, 0);
+ /* make sure first progress call gets made */
+ rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, 0);
- /*
- * When we run scripts, we pass an argument which is the number of
- * versions of this package that will be installed when we are
- * finished.
- */
- psm->npkgs_installed = rpmdbCountPackages(rpmtsGetRdb(ts), rpmteN(psm->te));
- if (psm->npkgs_installed < 0) {
- rc = RPMRC_FAIL;
- break;
+ if (!(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_JUSTDB)) {
+ if (rpmfilesFC(psm->files) > 0) {
+ fsmrc = rpmPackageFilesInstall(psm->ts, psm->te, psm->files,
+ psm, &failedFile);
+ saved_errno = errno;
}
+ }
- if (psm->goal == PKG_INSTALL) {
- Header h = rpmteHeader(psm->te);
- psm->scriptArg = psm->npkgs_installed + 1;
+ /* XXX make sure progress reaches 100% */
+ rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, psm->total);
+ rpmpsmNotify(psm, RPMCALLBACK_INST_STOP, psm->total);
+
+ if (fsmrc) {
+ char *emsg;
+ errno = saved_errno;
+ emsg = rpmfileStrerror(fsmrc);
+ rpmlog(RPMLOG_ERR,
+ _("unpacking of archive failed%s%s: %s\n"),
+ (failedFile != NULL ? _(" on file ") : ""),
+ (failedFile != NULL ? failedFile : ""),
+ emsg);
+ free(emsg);
+ rc = RPMRC_FAIL;
+
+ /* XXX notify callback on error. */
+ rpmtsNotify(psm->ts, psm->te, RPMCALLBACK_UNPACK_ERROR, 0, 0);
+ }
+ free(failedFile);
+ return rc;
+}
- psm->amount = 0;
- psm->total = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
- /* fake up something for packages with no files */
- if (psm->total == 0)
- psm->total = 100;
+static rpmRC rpmpsmRemove(rpmpsm psm)
+{
+ char *failedFile = NULL;
+ int fsmrc = 0;
+
+ rpmpsmNotify(psm, RPMCALLBACK_UNINST_START, 0);
+ /* make sure first progress call gets made */
+ rpmpsmNotify(psm, RPMCALLBACK_UNINST_PROGRESS, 0);
+
+ /* XXX should't we log errors from here? */
+ if (!(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_JUSTDB)) {
+ if (rpmfilesFC(psm->files) > 0) {
+ fsmrc = rpmPackageFilesRemove(psm->ts, psm->te, psm->files,
+ psm, &failedFile);
+ }
+ }
+ /* XXX make sure progress reaches 100% */
+ rpmpsmNotify(psm, RPMCALLBACK_UNINST_PROGRESS, psm->total);
+ rpmpsmNotify(psm, RPMCALLBACK_UNINST_STOP, psm->total);
- /* HACK: reinstall abuses te instance to remove old header */
- if (rpmtsFilterFlags(ts) & RPMPROB_FILTER_REPLACEPKG)
- markReplacedInstance(ts, psm->te);
+ free(failedFile);
+ return (fsmrc == 0) ? RPMRC_OK : RPMRC_FAIL;
+}
- if (rpmfiFC(fi) > 0) {
- struct rpmtd_s filenames;
- rpmTag ftag = RPMTAG_FILENAMES;
-
- if (headerIsEntry(h, RPMTAG_ORIGBASENAMES)) {
- ftag = RPMTAG_ORIGFILENAMES;
- }
- headerGet(h, ftag, &filenames, HEADERGET_EXT);
- fi->apath = filenames.data; /* Ick.. */
- }
- headerFree(h);
- }
- if (psm->goal == PKG_ERASE) {
- psm->scriptArg = psm->npkgs_installed - 1;
+static rpmRC rpmPackageInstall(rpmts ts, rpmpsm psm)
+{
+ rpmRC rc = RPMRC_OK;
+ int once = 1;
- psm->amount = 0;
- psm->total = rpmfiFC(fi) ? rpmfiFC(fi) : 100;
- }
- break;
- case PSM_PRE:
- if (psm->goal == PKG_INSTALL) {
- psm->scriptTag = RPMTAG_PREIN;
- psm->sense = RPMSENSE_TRIGGERPREIN;
- psm->countCorrection = 0; /* XXX is this correct?!? */
-
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPREIN)) {
- /* Run triggers in other package(s) this package sets off. */
- rc = rpmpsmNext(psm, PSM_TRIGGERS);
- if (rc) break;
-
- /* Run triggers in this package other package(s) set off. */
- rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS);
- if (rc) break;
- }
+ rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_INSTALL), 0);
+ while (once--) {
+ /* HACK: replacepkgs abuses te instance to remove old header */
+ if (rpmtsFilterFlags(psm->ts) & RPMPROB_FILTER_REPLACEPKG)
+ markReplacedInstance(ts, psm->te);
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPRE)) {
- rc = rpmpsmNext(psm, PSM_SCRIPT);
- if (rc) break;
- }
- }
- if (psm->goal == PKG_ERASE) {
- psm->scriptTag = RPMTAG_PREUN;
- psm->sense = RPMSENSE_TRIGGERUN;
- psm->countCorrection = -1;
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPREIN)) {
+ /* Run triggers in other package(s) this package sets off. */
+ rc = runTriggers(psm, RPMSENSE_TRIGGERPREIN);
+ if (rc) break;
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERUN)) {
- /* Run triggers in this package other package(s) set off. */
- rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS);
- if (rc) break;
+ /* Run triggers in this package other package(s) set off. */
+ rc = runImmedTriggers(psm, RPMSENSE_TRIGGERPREIN);
+ if (rc) break;
+ }
- /* Run triggers in other package(s) this package sets off. */
- rc = rpmpsmNext(psm, PSM_TRIGGERS);
- if (rc) break;
- }
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPRE)) {
+ rc = runInstScript(psm, RPMTAG_PREIN);
+ if (rc) break;
+ }
+
+ rc = rpmpsmUnpack(psm);
+ if (rc) break;
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPREUN))
- rc = rpmpsmNext(psm, PSM_SCRIPT);
+ /*
+ * If this package has already been installed, remove it from
+ * the database before adding the new one.
+ */
+ if (rpmteDBInstance(psm->te)) {
+ rc = dbRemove(ts, psm->te);
+ if (rc) break;
}
- break;
- case PSM_PROCESS:
- if (psm->goal == PKG_INSTALL) {
- int fsmrc = 0;
-
- rpmpsmNotify(psm, RPMCALLBACK_INST_START, 0);
- /* make sure first progress call gets made */
- rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, 0);
-
- if (rpmfiFC(fi) > 0 && !(rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB)) {
- rpmtransFlags oldtsflags;
- FD_t payload = rpmtePayload(psm->te);
- if (payload == NULL) {
- rc = RPMRC_FAIL;
- break;
- }
- oldtsflags = rpmtsFlags(ts);
- if (headerIsEntry(fi->h, RPMTAG_REMOVETID))
- (void) rpmtsSetFlags(ts, oldtsflags | RPMTRANS_FLAG_NOMD5);
+ rc = dbAdd(ts, psm->te);
+ if (rc) break;
- fsmrc = rpmPackageFilesInstall(psm->ts, psm->te, psm->fi,
- payload, psm, &psm->failedFile);
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) {
+ /* Run upper file triggers i. e. with higher priorities */
+ /* Run file triggers in other package(s) this package sets off. */
+ rc = runFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERIN,
+ RPMSCRIPT_FILETRIGGER, 1);
+ if (rc) break;
- rpmswAdd(rpmtsOp(psm->ts, RPMTS_OP_UNCOMPRESS),
- fdOp(payload, FDSTAT_READ));
- rpmswAdd(rpmtsOp(psm->ts, RPMTS_OP_DIGEST),
- fdOp(payload, FDSTAT_DIGEST));
+ /* Run file triggers in this package other package(s) set off. */
+ rc = runImmedFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERIN,
+ RPMSCRIPT_FILETRIGGER, 1);
+ if (rc) break;
+ }
- if (headerIsEntry(fi->h, RPMTAG_REMOVETID))
- (void) rpmtsSetFlags(ts, oldtsflags);
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOST)) {
+ rc = runInstScript(psm, RPMTAG_POSTIN);
+ if (rc) break;
+ }
- Fclose(payload);
- }
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) {
+ /* Run triggers in other package(s) this package sets off. */
+ rc = runTriggers(psm, RPMSENSE_TRIGGERIN);
+ if (rc) break;
- /* XXX make sure progress reaches 100% */
- rpmpsmNotify(psm, 0, psm->total);
- rpmpsmNotify(psm, RPMCALLBACK_INST_STOP, psm->total);
+ /* Run triggers in this package other package(s) set off. */
+ rc = runImmedTriggers(psm, RPMSENSE_TRIGGERIN);
+ if (rc) break;
- if (fsmrc) {
- rpmlog(RPMLOG_ERR,
- _("unpacking of archive failed%s%s: %s\n"),
- (psm->failedFile != NULL ? _(" on file ") : ""),
- (psm->failedFile != NULL ? psm->failedFile : ""),
- rpmcpioStrerror(fsmrc));
- rc = RPMRC_FAIL;
+ /* Run lower file triggers i. e. with lower priorities */
+ /* Run file triggers in other package(s) this package sets off. */
+ rc = runFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERIN,
+ RPMSCRIPT_FILETRIGGER, 2);
+ if (rc) break;
- /* XXX notify callback on error. */
- rpmtsNotify(ts, psm->te, RPMCALLBACK_UNPACK_ERROR, 0, 0);
- break;
- }
+ /* Run file triggers in this package other package(s) set off. */
+ rc = runImmedFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERIN,
+ RPMSCRIPT_FILETRIGGER, 2);
+ if (rc) break;
}
- if (psm->goal == PKG_ERASE) {
- if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB) break;
- rpmpsmNotify(psm, RPMCALLBACK_UNINST_START, 0);
- /* make sure first progress call gets made */
- rpmpsmNotify(psm, RPMCALLBACK_UNINST_PROGRESS, 0);
+ rc = markReplacedFiles(psm);
+ }
- /* XXX should't we log errors from here? */
- if (rpmfiFC(fi) > 0 && !(rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB)) {
- rc = rpmPackageFilesRemove(psm->ts, psm->te, psm->fi,
- psm, &psm->failedFile);
- }
+ rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_INSTALL), 0);
- /* XXX make sure progress reaches 100% */
- rpmpsmNotify(psm, 0, psm->total);
- rpmpsmNotify(psm, RPMCALLBACK_UNINST_STOP, psm->total);
- }
- break;
- case PSM_POST:
- if (psm->goal == PKG_INSTALL) {
- rpm_time_t installTime = (rpm_time_t) time(NULL);
- rpmfs fs = rpmteGetFileStates(psm->te);
- rpm_count_t fc = rpmfsFC(fs);
- rpm_fstate_t * fileStates = rpmfsGetStates(fs);
- Header h = rpmteHeader(psm->te);
- rpm_color_t tscolor = rpmtsColor(ts);
-
- if (fileStates != NULL && fc > 0) {
- headerPutChar(h, RPMTAG_FILESTATES, fileStates, fc);
- }
+ return rc;
+}
- headerPutUint32(h, RPMTAG_INSTALLTIME, &installTime, 1);
- headerPutUint32(h, RPMTAG_INSTALLCOLOR, &tscolor, 1);
- headerFree(h);
-
- /*
- * If this package has already been installed, remove it from
- * the database before adding the new one.
- */
- if (rpmteDBInstance(psm->te)) {
- rc = rpmpsmNext(psm, PSM_RPMDB_REMOVE);
- if (rc) break;
- }
+static rpmRC rpmPackageErase(rpmts ts, rpmpsm psm)
+{
+ rpmRC rc = RPMRC_OK;
+ int once = 1;
+
+ rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_ERASE), 0);
+ while (once--) {
- rc = rpmpsmNext(psm, PSM_RPMDB_ADD);
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERUN)) {
+ /* Run file triggers in this package other package(s) set off. */
+ rc = runImmedFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERUN,
+ RPMSCRIPT_FILETRIGGER, 1);
if (rc) break;
- psm->scriptTag = RPMTAG_POSTIN;
- psm->sense = RPMSENSE_TRIGGERIN;
- psm->countCorrection = 0;
+ /* Run file triggers in other package(s) this package sets off. */
+ rc = runFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERUN,
+ RPMSCRIPT_FILETRIGGER, 1);
+ if (rc) break;
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOST)) {
- rc = rpmpsmNext(psm, PSM_SCRIPT);
- if (rc) break;
- }
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) {
- /* Run triggers in other package(s) this package sets off. */
- rc = rpmpsmNext(psm, PSM_TRIGGERS);
- if (rc) break;
-
- /* Run triggers in this package other package(s) set off. */
- rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS);
- if (rc) break;
- }
+ /* Run triggers in this package other package(s) set off. */
+ rc = runImmedTriggers(psm, RPMSENSE_TRIGGERUN);
+ if (rc) break;
- rc = markReplacedFiles(psm);
+ /* Run triggers in other package(s) this package sets off. */
+ rc = runTriggers(psm, RPMSENSE_TRIGGERUN);
+ if (rc) break;
+ }
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPREUN)) {
+ rc = runInstScript(psm, RPMTAG_PREUN);
+ if (rc) break;
}
- if (psm->goal == PKG_ERASE) {
- psm->scriptTag = RPMTAG_POSTUN;
- psm->sense = RPMSENSE_TRIGGERPOSTUN;
- psm->countCorrection = -1;
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERUN)) {
+ /* Run file triggers in this package other package(s) set off. */
+ rc = runImmedFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERUN,
+ RPMSCRIPT_FILETRIGGER, 2);
+ if (rc) break;
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUN)) {
- rc = rpmpsmNext(psm, PSM_SCRIPT);
- if (rc) break;
- }
+ /* Run file triggers in other package(s) this package sets off. */
+ rc = runFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERUN,
+ RPMSCRIPT_FILETRIGGER, 2);
+ if (rc) break;
+ }
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) {
- /* Run triggers in other package(s) this package sets off. */
- rc = rpmpsmNext(psm, PSM_TRIGGERS);
- if (rc) break;
- }
+ rc = rpmpsmRemove(psm);
+ if (rc) break;
- rc = rpmpsmNext(psm, PSM_RPMDB_REMOVE);
- }
- break;
- case PSM_UNDO:
- break;
- case PSM_FINI:
- if (rc) {
- if (psm->failedFile)
- rpmlog(RPMLOG_ERR,
- _("%s failed on file %s: %s\n"),
- psm->goalName, psm->failedFile, rpmcpioStrerror(rc));
- else
- rpmlog(RPMLOG_ERR, _("%s failed: %s\n"),
- psm->goalName, rpmcpioStrerror(rc));
-
- /* XXX notify callback on error. */
- rpmtsNotify(ts, psm->te, RPMCALLBACK_CPIO_ERROR, 0, 0);
+ /* Run file triggers in other package(s) this package sets off. */
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) {
+ rc = runFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERPOSTUN,
+ RPMSCRIPT_FILETRIGGER, 1);
}
- psm->failedFile = _free(psm->failedFile);
-
- fi->apath = _free(fi->apath);
- break;
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUN)) {
+ rc = runInstScript(psm, RPMTAG_POSTUN);
+ if (rc) break;
+ }
- case PSM_CREATE:
- break;
- case PSM_DESTROY:
- break;
- case PSM_SCRIPT: /* Run current package scriptlets. */
- rc = runInstScript(psm);
- break;
- case PSM_TRIGGERS:
- /* Run triggers in other package(s) this package sets off. */
- rc = runTriggers(psm);
- break;
- case PSM_IMMED_TRIGGERS:
- /* Run triggers in this package other package(s) set off. */
- rc = runImmedTriggers(psm);
- break;
+ if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) {
+ /* Run triggers in other package(s) this package sets off. */
+ rc = runTriggers(psm, RPMSENSE_TRIGGERPOSTUN);
+ if (rc) break;
- case PSM_RPMDB_ADD: {
- Header h = rpmteHeader(psm->te);
+ /* Run file triggers in other package(s) this package sets off. */
+ rc = runFileTriggers(psm->ts, psm->te, RPMSENSE_TRIGGERPOSTUN,
+ RPMSCRIPT_FILETRIGGER, 2);
+ }
+ if (rc) break;
- if (!headerIsEntry(h, RPMTAG_INSTALLTID)) {
- rpm_tid_t tid = rpmtsGetTid(ts);
- if (tid != 0 && tid != (rpm_tid_t)-1)
- headerPutUint32(h, RPMTAG_INSTALLTID, &tid, 1);
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) {
+ /* Prepare post transaction uninstall triggers */
+ rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te);
}
-
- (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBADD), 0);
- rc = (rpmdbAdd(rpmtsGetRdb(ts), h) == 0) ? RPMRC_OK : RPMRC_FAIL;
- (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBADD), 0);
- if (rc == RPMRC_OK)
- rpmteSetDBInstance(psm->te, headerGetInstance(h));
- headerFree(h);
- } break;
-
- case PSM_RPMDB_REMOVE:
- (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0);
- rc = (rpmdbRemove(rpmtsGetRdb(ts), rpmteDBInstance(psm->te)) == 0) ?
- RPMRC_OK : RPMRC_FAIL;
- (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0);
- if (rc == RPMRC_OK)
- rpmteSetDBInstance(psm->te, 0);
- break;
+ rc = dbRemove(ts, psm->te);
+ }
- default:
- break;
- }
+ rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_ERASE), 0);
return rc;
}
static const char * pkgGoalString(pkgGoal goal)
{
- switch(goal) {
+ switch (goal) {
case PKG_INSTALL: return " install";
case PKG_ERASE: return " erase";
case PKG_VERIFY: return " verify";
@@ -1038,42 +834,39 @@ rpmRC rpmpsmRun(rpmts ts, rpmte te, pkgGoal goal)
if (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)
return RPMRC_OK;
- psm = rpmpsmNew(ts, te);
+ psm = rpmpsmNew(ts, te, goal);
if (rpmChrootIn() == 0) {
- rpmtsOpX op;
- psm->goal = goal;
- psm->goalName = pkgGoalString(goal);
+ /* Run pre transaction element hook for all plugins */
+ rc = rpmpluginsCallPsmPre(rpmtsPlugins(ts), te);
- switch (goal) {
- case PKG_INSTALL:
- case PKG_ERASE:
- /* Run pre transaction element hook for all plugins */
- if (rpmpluginsCallPsmPre(ts->plugins, te) != RPMRC_FAIL) {
-
- op = (goal == PKG_INSTALL) ? RPMTS_OP_INSTALL : RPMTS_OP_ERASE;
- rpmswEnter(rpmtsOp(psm->ts, op), 0);
-
- rc = rpmpsmNext(psm, PSM_INIT);
- if (!rc) rc = rpmpsmNext(psm, PSM_PRE);
- if (!rc) rc = rpmpsmNext(psm, PSM_PROCESS);
- if (!rc) rc = rpmpsmNext(psm, PSM_POST);
- (void) rpmpsmNext(psm, PSM_FINI);
-
- rpmswExit(rpmtsOp(psm->ts, op), 0);
+ if (!rc) {
+ switch (goal) {
+ case PKG_INSTALL:
+ rc = rpmPackageInstall(ts, psm);
+ break;
+ case PKG_ERASE:
+ rc = rpmPackageErase(ts, psm);
+ break;
+ case PKG_PRETRANS:
+ case PKG_POSTTRANS:
+ case PKG_VERIFY:
+ rc = runInstScript(psm, goal);
+ break;
+ case PKG_TRANSFILETRIGGERIN:
+ rc = runImmedFileTriggers(ts, te, RPMSENSE_TRIGGERIN,
+ RPMSCRIPT_TRANSFILETRIGGER, 0);
+ break;
+ case PKG_TRANSFILETRIGGERUN:
+ rc = runImmedFileTriggers(ts, te, RPMSENSE_TRIGGERUN,
+ RPMSCRIPT_TRANSFILETRIGGER, 0);
+ break;
+ default:
+ break;
}
-
- /* Run post transaction element hook for all plugins */
- rpmpluginsCallPsmPost(ts->plugins, te, rc);
- break;
- case PKG_PRETRANS:
- case PKG_POSTTRANS:
- case PKG_VERIFY:
- psm->scriptTag = goal;
- rc = rpmpsmStage(psm, PSM_SCRIPT);
- break;
- default:
- break;
}
+ /* Run post transaction element hook for all plugins */
+ rpmpluginsCallPsmPost(rpmtsPlugins(ts), te, rc);
+
/* XXX an error here would require a full abort */
(void) rpmChrootOut();
}
diff --git a/lib/query.c b/lib/query.c
index 6f2d593a7..d857ae5bc 100644
--- a/lib/query.c
+++ b/lib/query.c
@@ -14,6 +14,7 @@
#include <rpm/rpmdb.h>
#include <rpm/rpmfi.h>
#include <rpm/rpmts.h>
+#include <rpm/rpmsq.h>
#include <rpm/rpmlog.h>
#include <rpm/rpmfileutil.h> /* rpmCleanPath */
@@ -30,21 +31,16 @@ static void printFileInfo(const char * name,
unsigned int mtime,
unsigned short rdev, unsigned int nlink,
const char * owner, const char * group,
- const char * linkto)
+ const char * linkto, time_t now)
{
char sizefield[21];
char ownerfield[8+1], groupfield[8+1];
char timefield[100];
time_t when = mtime; /* important if sizeof(int32_t) ! sizeof(time_t) */
struct tm * tm;
- static time_t now;
char * perms = rpmPermsString(mode);
char *link = NULL;
- /* On first call, grab snapshot of now */
- if (now == 0)
- now = time(NULL);
-
rstrlcpy(ownerfield, owner, sizeof(ownerfield));
rstrlcpy(groupfield, group, sizeof(groupfield));
@@ -99,6 +95,7 @@ int showQueryPackage(QVA_t qva, rpmts ts, Header h)
rpmfi fi = NULL;
rpmfiFlags fiflags = (RPMFI_NOHEADER | RPMFI_FLAGS_QUERY);
int rc = 0; /* XXX FIXME: need real return code */
+ time_t now = 0;
if (qva->qva_queryFormat != NULL) {
const char *errstr;
@@ -150,8 +147,12 @@ int showQueryPackage(QVA_t qva, rpmts ts, Header h)
if ((qva->qva_flags & QUERY_FOR_LICENSE) && !(fflags & RPMFILE_LICENSE))
continue;
- /* If not querying %ghost, skip ghost files. */
- if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
+ /* If querying only ... yes we know the drill, and this is dumb. */
+ if ((qva->qva_flags & QUERY_FOR_ARTIFACT) && !(fflags & RPMFILE_ARTIFACT))
+ continue;
+
+ /* Skip on attributes (eg from --noghost) */
+ if (fflags & qva->qva_fflags)
continue;
if (qva->qva_flags & QUERY_FOR_STATE) {
@@ -219,11 +220,14 @@ int showQueryPackage(QVA_t qva, rpmts ts, Header h)
}
if (fuser && fgroup) {
+ /* On first call, grab snapshot of now */
+ if (now == 0)
+ now = time(NULL);
if (buf) {
rpmlog(RPMLOG_NOTICE, "%s", buf);
}
printFileInfo(fn, fsize, fmode, fmtime, frdev, fnlink,
- fuser, fgroup, flink);
+ fuser, fgroup, flink, now);
} else {
rpmlog(RPMLOG_ERR,
_("package has neither file owner or id lists\n"));
@@ -262,7 +266,6 @@ void rpmDisplayQueryTags(FILE * fp)
}
fprintf(fp, "\n");
}
- rpmtdFreeData(names);
rpmtdFree(names);
}
@@ -274,7 +277,7 @@ static int rpmgiShowMatches(QVA_t qva, rpmts ts, rpmgi gi)
while ((h = rpmgiNext(gi)) != NULL) {
int rc;
- rpmdbCheckSignals();
+ rpmsqPoll();
if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
ec = rc;
headerFree(h);
@@ -292,7 +295,7 @@ static int rpmcliShowMatches(QVA_t qva, rpmts ts, rpmdbMatchIterator mi)
while ((h = rpmdbNextIterator(mi)) != NULL) {
int rc;
- rpmdbCheckSignals();
+ rpmsqPoll();
if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
ec = rc;
}
@@ -305,7 +308,7 @@ static rpmdbMatchIterator initQueryIterator(QVA_t qva, rpmts ts, const char * ar
int i;
rpmdbMatchIterator mi = NULL;
- (void) rpmdbCheckSignals();
+ (void) rpmsqPoll();
if (qva->qva_showPackage == NULL)
goto exit;
@@ -385,6 +388,34 @@ static rpmdbMatchIterator initQueryIterator(QVA_t qva, rpmts ts, const char * ar
}
break;
+ case RPMQV_WHATRECOMMENDS:
+ mi = rpmtsInitIterator(ts, RPMDBI_RECOMMENDNAME, arg, 0);
+ if (mi == NULL) {
+ rpmlog(RPMLOG_NOTICE, _("no package recommends %s\n"), arg);
+ }
+ break;
+
+ case RPMQV_WHATSUGGESTS:
+ mi = rpmtsInitIterator(ts, RPMDBI_SUGGESTNAME, arg, 0);
+ if (mi == NULL) {
+ rpmlog(RPMLOG_NOTICE, _("no package suggests %s\n"), arg);
+ }
+ break;
+
+ case RPMQV_WHATSUPPLEMENTS:
+ mi = rpmtsInitIterator(ts, RPMDBI_SUPPLEMENTNAME, arg, 0);
+ if (mi == NULL) {
+ rpmlog(RPMLOG_NOTICE, _("no package supplements %s\n"), arg);
+ }
+ break;
+
+ case RPMQV_WHATENHANCES:
+ mi = rpmtsInitIterator(ts, RPMDBI_ENHANCENAME, arg, 0);
+ if (mi == NULL) {
+ rpmlog(RPMLOG_NOTICE, _("no package enhances %s\n"), arg);
+ }
+ break;
+
case RPMQV_WHATPROVIDES:
if (arg[0] != '/' && arg[0] != '.') {
mi = rpmtsInitIterator(ts, RPMDBI_PROVIDENAME, arg, 0);
@@ -455,7 +486,9 @@ static rpmdbMatchIterator initQueryIterator(QVA_t qva, rpmts ts, const char * ar
}
mi = rpmdbFreeIterator(mi);
if (! matches) {
- rpmlog(RPMLOG_NOTICE, _("package %s is not installed\n"), arg);
+ size_t l = strlen(arg);
+ if (!(l > 4 && !strcmp(arg + l - 4, ".rpm")))
+ rpmlog(RPMLOG_NOTICE, _("package %s is not installed\n"), arg);
} else {
mi = rpmtsInitIterator(ts, RPMDBI_LABEL, arg, 0);
}
@@ -520,6 +553,7 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_const_t argv)
break;
}
case RPMQV_SPECRPMS:
+ case RPMQV_SPECBUILTRPMS:
case RPMQV_SPECSRPM:
for (ARGV_const_t arg = argv; arg && *arg; arg++) {
ec += ((qva->qva_specQuery != NULL)
@@ -530,6 +564,14 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_const_t argv)
for (ARGV_const_t arg = argv; arg && *arg; arg++) {
rpmdbMatchIterator mi = initQueryIterator(qva, ts, *arg);
ec += rpmcliShowMatches(qva, ts, mi);
+ if (mi == NULL && qva->qva_source == RPMQV_PACKAGE) {
+ size_t l = strlen(*arg);
+ if (l > 4 && !strcmp(*arg + l - 4, ".rpm")) {
+ rpmgi gi = rpmgiNew(ts, giFlags, argv);
+ ec += rpmgiShowMatches(qva, ts, gi);
+ rpmgiFree(gi);
+ }
+ }
rpmdbFreeIterator(mi);
}
break;
diff --git a/lib/relocation.c b/lib/relocation.c
new file mode 100644
index 000000000..3ba4cfeab
--- /dev/null
+++ b/lib/relocation.c
@@ -0,0 +1,560 @@
+#include "system.h"
+
+#include <rpm/rpmtypes.h>
+#include <rpm/header.h>
+#include <rpm/rpmfi.h>
+#include <rpm/rpmfileutil.h>
+#include <rpm/rpmmacro.h>
+#include <rpm/rpmlog.h>
+
+#include "lib/rpmfs.h"
+#include "lib/misc.h"
+
+#include "debug.h"
+
+/**
+ * Identify a file type.
+ * @param ft file type
+ * @return string to identify a file type
+ */
+static
+const char * ftstring (rpmFileTypes ft)
+{
+ switch (ft) {
+ case XDIR: return "directory";
+ case CDEV: return "char dev";
+ case BDEV: return "block dev";
+ case LINK: return "link";
+ case SOCK: return "sock";
+ case PIPE: return "fifo/pipe";
+ case REG: return "file";
+ default: return "unknown file type";
+ }
+}
+
+static char **duparray(char ** src, int size)
+{
+ char **dest = xmalloc((size+1) * sizeof(*dest));
+ for (int i = 0; i < size; i++) {
+ dest[i] = xstrdup(src[i]);
+ }
+ free(src);
+ return dest;
+}
+
+static int addPrefixes(Header h, rpmRelocation *relocations, int numRelocations)
+{
+ struct rpmtd_s validRelocs;
+ const char *validprefix;
+ const char ** actualRelocations;
+ int numActual = 0;
+
+ headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM);
+ /*
+ * If no relocations are specified (usually the case), then return the
+ * original header. If there are prefixes, however, then INSTPREFIXES
+ * should be added for RPM_INSTALL_PREFIX environ variables in scriptlets,
+ * but, since relocateFileList() can be called more than once for
+ * the same header, don't bother if already present.
+ */
+ if (relocations == NULL || numRelocations == 0) {
+ if (rpmtdCount(&validRelocs) > 0) {
+ if (!headerIsEntry(h, RPMTAG_INSTPREFIXES)) {
+ rpmtdSetTag(&validRelocs, RPMTAG_INSTPREFIXES);
+ headerPut(h, &validRelocs, HEADERPUT_DEFAULT);
+ }
+ rpmtdFreeData(&validRelocs);
+ }
+ return 0;
+ }
+
+ actualRelocations = xmalloc(rpmtdCount(&validRelocs) * sizeof(*actualRelocations));
+ rpmtdInit(&validRelocs);
+ while ((validprefix = rpmtdNextString(&validRelocs))) {
+ int j;
+ for (j = 0; j < numRelocations; j++) {
+ if (relocations[j].oldPath == NULL || /* XXX can't happen */
+ !rstreq(validprefix, relocations[j].oldPath))
+ continue;
+ /* On install, a relocate to NULL means skip the path. */
+ if (relocations[j].newPath) {
+ actualRelocations[numActual] = relocations[j].newPath;
+ numActual++;
+ }
+ break;
+ }
+ if (j == numRelocations) {
+ actualRelocations[numActual] = validprefix;
+ numActual++;
+ }
+ }
+ rpmtdFreeData(&validRelocs);
+
+ if (numActual) {
+ headerPutStringArray(h, RPMTAG_INSTPREFIXES, actualRelocations, numActual);
+ }
+ free(actualRelocations);
+ /* When any relocations are present there'll be more work to do */
+ return 1;
+}
+
+static void saveOrig(Header h)
+{
+ struct rpmtd_s td;
+ headerGet(h, RPMTAG_BASENAMES, &td, HEADERGET_MINMEM);
+ rpmtdSetTag(&td, RPMTAG_ORIGBASENAMES);
+ headerPut(h, &td, HEADERPUT_DEFAULT);
+ rpmtdFreeData(&td);
+
+ headerGet(h, RPMTAG_DIRNAMES, &td, HEADERGET_MINMEM);
+ rpmtdSetTag(&td, RPMTAG_ORIGDIRNAMES);
+ headerPut(h, &td, HEADERPUT_DEFAULT);
+ rpmtdFreeData(&td);
+
+ headerGet(h, RPMTAG_DIRINDEXES, &td, HEADERGET_MINMEM);
+ rpmtdSetTag(&td, RPMTAG_ORIGDIRINDEXES);
+ headerPut(h, &td, HEADERPUT_DEFAULT);
+ rpmtdFreeData(&td);
+}
+
+void rpmRelocateFileList(rpmRelocation *relocations, int numRelocations,
+ rpmfs fs, Header h)
+{
+ char ** baseNames;
+ char ** dirNames;
+ uint32_t * dirIndexes;
+ rpm_count_t fileCount, dirCount;
+ int nrelocated = 0;
+ int fileAlloced = 0;
+ char * fn = NULL;
+ int haveRelocatedBase = 0;
+ size_t maxlen = 0;
+ int i, j;
+ struct rpmtd_s bnames, dnames, dindexes, fmodes;
+
+ if (!addPrefixes(h, relocations, numRelocations))
+ return;
+
+ if (rpmIsDebug()) {
+ rpmlog(RPMLOG_DEBUG, "========== relocations\n");
+ for (i = 0; i < numRelocations; i++) {
+ if (relocations[i].oldPath == NULL) continue; /* XXX can't happen */
+ if (relocations[i].newPath == NULL)
+ rpmlog(RPMLOG_DEBUG, "%5d exclude %s\n",
+ i, relocations[i].oldPath);
+ else
+ rpmlog(RPMLOG_DEBUG, "%5d relocate %s -> %s\n",
+ i, relocations[i].oldPath, relocations[i].newPath);
+ }
+ }
+
+ for (i = 0; i < numRelocations; i++) {
+ if (relocations[i].newPath == NULL) continue;
+ size_t len = strlen(relocations[i].newPath);
+ if (len > maxlen) maxlen = len;
+ }
+
+ headerGet(h, RPMTAG_BASENAMES, &bnames, HEADERGET_MINMEM);
+ headerGet(h, RPMTAG_DIRINDEXES, &dindexes, HEADERGET_ALLOC);
+ headerGet(h, RPMTAG_DIRNAMES, &dnames, HEADERGET_MINMEM);
+ headerGet(h, RPMTAG_FILEMODES, &fmodes, HEADERGET_MINMEM);
+ /* TODO XXX ugh.. use rpmtd iterators & friends instead */
+ baseNames = bnames.data;
+ dirIndexes = dindexes.data;
+ fileCount = rpmtdCount(&bnames);
+ dirCount = rpmtdCount(&dnames);
+ /* XXX TODO: use rpmtdDup() instead */
+ dirNames = dnames.data = duparray(dnames.data, dirCount);
+ dnames.flags |= RPMTD_PTR_ALLOCED;
+
+ /*
+ * For all relocations, we go through sorted file/relocation lists
+ * backwards so that /usr/local relocations take precedence over /usr
+ * ones.
+ */
+
+ /* Relocate individual paths. */
+
+ for (i = fileCount - 1; i >= 0; i--) {
+ rpmFileTypes ft;
+ int fnlen;
+
+ size_t len = maxlen +
+ strlen(dirNames[dirIndexes[i]]) + strlen(baseNames[i]) + 1;
+ if (len >= fileAlloced) {
+ fileAlloced = len * 2;
+ fn = xrealloc(fn, fileAlloced);
+ }
+
+assert(fn != NULL); /* XXX can't happen */
+ *fn = '\0';
+ fnlen = stpcpy( stpcpy(fn, dirNames[dirIndexes[i]]), baseNames[i]) - fn;
+
+ /*
+ * See if this file path needs relocating.
+ */
+ /*
+ * XXX FIXME: Would a bsearch of the (already sorted)
+ * relocation list be a good idea?
+ */
+ for (j = numRelocations - 1; j >= 0; j--) {
+ if (relocations[j].oldPath == NULL) /* XXX can't happen */
+ continue;
+ len = !rstreq(relocations[j].oldPath, "/")
+ ? strlen(relocations[j].oldPath)
+ : 0;
+
+ if (fnlen < len)
+ continue;
+ /*
+ * Only subdirectories or complete file paths may be relocated. We
+ * don't check for '\0' as our directory names all end in '/'.
+ */
+ if (!(fn[len] == '/' || fnlen == len))
+ continue;
+
+ if (!rstreqn(relocations[j].oldPath, fn, len))
+ continue;
+ break;
+ }
+ if (j < 0) continue;
+
+ rpmtdSetIndex(&fmodes, i);
+ ft = rpmfiWhatis(rpmtdGetNumber(&fmodes));
+
+ /* On install, a relocate to NULL means skip the path. */
+ if (relocations[j].newPath == NULL) {
+ if (ft == XDIR) {
+ /* Start with the parent, looking for directory to exclude. */
+ for (j = dirIndexes[i]; j < dirCount; j++) {
+ len = strlen(dirNames[j]) - 1;
+ while (len > 0 && dirNames[j][len-1] == '/') len--;
+ if (fnlen != len)
+ continue;
+ if (!rstreqn(fn, dirNames[j], fnlen))
+ continue;
+ break;
+ }
+ }
+ rpmfsSetAction(fs, i, FA_SKIPNSTATE);
+ rpmlog(RPMLOG_DEBUG, "excluding %s %s\n",
+ ftstring(ft), fn);
+ continue;
+ }
+
+ /* Relocation on full paths only, please. */
+ if (fnlen != len) continue;
+
+ rpmlog(RPMLOG_DEBUG, "relocating %s to %s\n",
+ fn, relocations[j].newPath);
+ nrelocated++;
+
+ strcpy(fn, relocations[j].newPath);
+ { char * te = strrchr(fn, '/');
+ if (te) {
+ if (te > fn) te++; /* root is special */
+ fnlen = te - fn;
+ } else
+ te = fn + strlen(fn);
+ if (!rstreq(baseNames[i], te)) { /* basename changed too? */
+ if (!haveRelocatedBase) {
+ /* XXX TODO: use rpmtdDup() instead */
+ bnames.data = baseNames = duparray(baseNames, fileCount);
+ bnames.flags |= RPMTD_PTR_ALLOCED;
+ haveRelocatedBase = 1;
+ }
+ free(baseNames[i]);
+ baseNames[i] = xstrdup(te);
+ }
+ *te = '\0'; /* terminate new directory name */
+ }
+
+ /* Does this directory already exist in the directory list? */
+ for (j = 0; j < dirCount; j++) {
+ if (fnlen != strlen(dirNames[j]))
+ continue;
+ if (!rstreqn(fn, dirNames[j], fnlen))
+ continue;
+ break;
+ }
+
+ if (j < dirCount) {
+ dirIndexes[i] = j;
+ continue;
+ }
+
+ /* Creating new paths is a pita */
+ dirNames = dnames.data = xrealloc(dnames.data,
+ sizeof(*dirNames) * (dirCount + 1));
+
+ dirNames[dirCount] = xstrdup(fn);
+ dirIndexes[i] = dirCount;
+ dirCount++;
+ dnames.count++;
+ }
+
+ /* Finish off by relocating directories. */
+ for (i = dirCount - 1; i >= 0; i--) {
+ for (j = numRelocations - 1; j >= 0; j--) {
+
+ if (relocations[j].oldPath == NULL) /* XXX can't happen */
+ continue;
+ size_t len = !rstreq(relocations[j].oldPath, "/")
+ ? strlen(relocations[j].oldPath)
+ : 0;
+
+ if (len && !rstreqn(relocations[j].oldPath, dirNames[i], len))
+ continue;
+
+ /*
+ * Only subdirectories or complete file paths may be relocated. We
+ * don't check for '\0' as our directory names all end in '/'.
+ */
+ if (dirNames[i][len] != '/')
+ continue;
+
+ if (relocations[j].newPath) { /* Relocate the path */
+ char *t = NULL;
+ rstrscat(&t, relocations[j].newPath, (dirNames[i] + len), NULL);
+ /* Unfortunately rpmCleanPath strips the trailing slash.. */
+ (void) rpmCleanPath(t);
+ rstrcat(&t, "/");
+
+ rpmlog(RPMLOG_DEBUG,
+ "relocating directory %s to %s\n", dirNames[i], t);
+ free(dirNames[i]);
+ dirNames[i] = t;
+ nrelocated++;
+ }
+ }
+ }
+
+ /* Save original filenames in header and replace (relocated) filenames. */
+ if (nrelocated) {
+ saveOrig(h);
+ headerMod(h, &bnames);
+ headerMod(h, &dnames);
+ headerMod(h, &dindexes);
+ }
+
+ rpmtdFreeData(&bnames);
+ rpmtdFreeData(&dnames);
+ rpmtdFreeData(&dindexes);
+ rpmtdFreeData(&fmodes);
+ free(fn);
+}
+
+/**
+ * Macros to be defined from per-header tag values.
+ * @todo Should other macros be added from header when installing a package?
+ */
+static struct tagMacro {
+ const char *macroname; /*!< Macro name to define. */
+ rpmTag tag; /*!< Header tag to use for value. */
+} const tagMacros[] = {
+ { "name", RPMTAG_NAME },
+ { "version", RPMTAG_VERSION },
+ { "release", RPMTAG_RELEASE },
+ { "epoch", RPMTAG_EPOCH },
+ { NULL, 0 }
+};
+
+/**
+ * Define or undefine per-header macros.
+ * @param h header
+ * @param define define/undefine?
+ * @return 0 always
+ */
+static void rpmInstallLoadMacros(Header h, int define)
+{
+ const struct tagMacro * tagm;
+
+ for (tagm = tagMacros; tagm->macroname != NULL; tagm++) {
+ struct rpmtd_s td;
+ char *body;
+ if (!headerGet(h, tagm->tag, &td, HEADERGET_DEFAULT))
+ continue;
+
+ /*
+ * Undefine doesn't need the actual data for anything, but
+ * this way ensures we only undefine what was defined earlier.
+ */
+ if (define) {
+ body = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL);
+ rpmPushMacro(NULL, tagm->macroname, NULL, body, -1);
+ free(body);
+ } else {
+ rpmPopMacro(NULL, tagm->macroname);
+ }
+ rpmtdFreeData(&td);
+ }
+}
+
+int headerFindSpec(Header h)
+{
+ struct rpmtd_s filenames;
+ int specix = -1;
+
+ if (headerGet(h, RPMTAG_BASENAMES, &filenames, HEADERGET_MINMEM)) {
+ struct rpmtd_s td;
+ const char *str;
+
+ /* Try to find spec by file flags */
+ if (headerGet(h, RPMTAG_FILEFLAGS, &td, HEADERGET_MINMEM)) {
+ rpmfileAttrs *flags;
+ while (specix < 0 && (flags = rpmtdNextUint32(&td))) {
+ if (*flags & RPMFILE_SPECFILE)
+ specix = rpmtdGetIndex(&td);
+ }
+ rpmtdFreeData(&td);
+ }
+ /* Still no spec? Look by filename. */
+ while (specix < 0 && (str = rpmtdNextString(&filenames))) {
+ if (rpmFileHasSuffix(str, ".spec"))
+ specix = rpmtdGetIndex(&filenames);
+ }
+ rpmtdFreeData(&filenames);
+ }
+ return specix;
+}
+
+/*
+ * Source rpms only contain basenames, on install the full paths are
+ * constructed with %{_specdir} and %{_sourcedir} macros. Because
+ * of that regular relocation wont work, we need to do it the hard
+ * way. Return spec file index on success, -1 on errors.
+ */
+int rpmRelocateSrpmFileList(Header h, const char *rootDir)
+{
+ int specix = headerFindSpec(h);
+
+ if (specix >= 0) {
+ const char *bn;
+ struct rpmtd_s filenames;
+ /* save original file names */
+ saveOrig(h);
+
+ headerDel(h, RPMTAG_BASENAMES);
+ headerDel(h, RPMTAG_DIRNAMES);
+ headerDel(h, RPMTAG_DIRINDEXES);
+
+ /* Macros need to be added before trying to create directories */
+ rpmInstallLoadMacros(h, 1);
+
+ /* ALLOC is needed as we modify the header */
+ headerGet(h, RPMTAG_ORIGBASENAMES, &filenames, HEADERGET_ALLOC);
+ for (int i = 0; (bn = rpmtdNextString(&filenames)); i++) {
+ int spec = (i == specix);
+ char *fn = rpmGenPath(rootDir,
+ spec ? "%{_specdir}" : "%{_sourcedir}", bn);
+ headerPutString(h, RPMTAG_OLDFILENAMES, fn);
+ free(fn);
+ }
+ rpmtdFreeData(&filenames);
+ headerConvert(h, HEADERCONV_COMPRESSFILELIST);
+ rpmInstallLoadMacros(h, 0);
+ }
+
+ return specix;
+}
+
+/* stupid bubble sort, but it's probably faster here */
+static void sortRelocs(rpmRelocation *relocations, int numRelocations)
+{
+ for (int i = 0; i < numRelocations; i++) {
+ int madeSwap = 0;
+ for (int j = 1; j < numRelocations; j++) {
+ rpmRelocation tmpReloc;
+ if (relocations[j - 1].oldPath == NULL || /* XXX can't happen */
+ relocations[j ].oldPath == NULL || /* XXX can't happen */
+ strcmp(relocations[j - 1].oldPath, relocations[j].oldPath) <= 0)
+ continue;
+ tmpReloc = relocations[j - 1];
+ relocations[j - 1] = relocations[j];
+ relocations[j] = tmpReloc;
+ madeSwap = 1;
+ }
+ if (!madeSwap) break;
+ }
+}
+
+static char * stripTrailingChar(char * s, char c)
+{
+ char * t;
+ for (t = s + strlen(s) - 1; *t == c && t >= s; t--)
+ *t = '\0';
+ return s;
+}
+
+void rpmRelocationBuild(Header h, rpmRelocation *rawrelocs,
+ int *rnrelocs, rpmRelocation **rrelocs, uint8_t **rbadrelocs)
+{
+ int i;
+ struct rpmtd_s validRelocs;
+ rpmRelocation * relocs = NULL;
+ uint8_t *badrelocs = NULL;
+ int nrelocs = 0;
+
+ for (rpmRelocation *r = rawrelocs; r->oldPath || r->newPath; r++)
+ nrelocs++;
+
+ headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM);
+ relocs = xmalloc(sizeof(*relocs) * (nrelocs+1));
+
+ /* Build sorted relocation list from raw relocations. */
+ for (i = 0; i < nrelocs; i++) {
+ char * t;
+
+ /*
+ * Default relocations (oldPath == NULL) are handled in the UI,
+ * not rpmlib.
+ */
+ if (rawrelocs[i].oldPath == NULL) continue; /* XXX can't happen */
+
+ /* FIXME: Trailing /'s will confuse us greatly. Internal ones will
+ too, but those are more trouble to fix up. :-( */
+ t = xstrdup(rawrelocs[i].oldPath);
+ relocs[i].oldPath = (t[0] == '/' && t[1] == '\0')
+ ? t
+ : stripTrailingChar(t, '/');
+
+ /* An old path w/o a new path is valid, and indicates exclusion */
+ if (rawrelocs[i].newPath) {
+ int valid = 0;
+ const char *validprefix;
+
+ t = xstrdup(rawrelocs[i].newPath);
+ relocs[i].newPath = (t[0] == '/' && t[1] == '\0')
+ ? t
+ : stripTrailingChar(t, '/');
+
+ /* FIX: relocations[i].oldPath == NULL */
+ /* Verify that the relocation's old path is in the header. */
+ rpmtdInit(&validRelocs);
+ while ((validprefix = rpmtdNextString(&validRelocs))) {
+ if (rstreq(validprefix, relocs[i].oldPath)) {
+ valid = 1;
+ break;
+ }
+ }
+
+ if (!valid) {
+ if (badrelocs == NULL)
+ badrelocs = xcalloc(nrelocs, sizeof(*badrelocs));
+ badrelocs[i] = 1;
+ }
+ } else {
+ relocs[i].newPath = NULL;
+ }
+ }
+ relocs[i].oldPath = NULL;
+ relocs[i].newPath = NULL;
+ sortRelocs(relocs, nrelocs);
+
+ rpmtdFreeData(&validRelocs);
+
+ *rrelocs = relocs;
+ *rnrelocs = nrelocs;
+ *rbadrelocs = badrelocs;
+}
+
diff --git a/lib/rpmal.c b/lib/rpmal.c
index 71f25916a..ca7ab053e 100644
--- a/lib/rpmal.c
+++ b/lib/rpmal.c
@@ -27,7 +27,7 @@ struct availablePackage_s {
rpmte p; /*!< transaction member */
rpmds provides; /*!< Provides: dependencies. */
rpmds obsoletes; /*!< Obsoletes: dependencies. */
- rpmfi fi; /*!< File info set. */
+ rpmfiles fi; /*!< File info set. */
};
/** \ingroup rpmdep
@@ -38,11 +38,6 @@ typedef struct availableIndexEntry_s {
unsigned int entryIx; /*!< Dependency index. */
} * availableIndexEntry;
-struct fileNameEntry_s {
- rpmsid dirName;
- rpmsid baseName;
-};
-
#undef HASHTYPE
#undef HTKEYTYPE
#undef HTDATATYPE
@@ -52,12 +47,18 @@ struct fileNameEntry_s {
#include "lib/rpmhash.H"
#include "lib/rpmhash.C"
+typedef struct availableIndexFileEntry_s {
+ rpmsid dirName;
+ rpmalNum pkgNum; /*!< Containing package index. */
+ unsigned int entryIx; /*!< Dependency index. */
+} * availableIndexFileEntry;
+
#undef HASHTYPE
#undef HTKEYTYPE
#undef HTDATATYPE
#define HASHTYPE rpmalFileHash
-#define HTKEYTYPE struct fileNameEntry_s
-#define HTDATATYPE struct availableIndexEntry_s
+#define HTKEYTYPE rpmsid
+#define HTDATATYPE struct availableIndexFileEntry_s
#include "lib/rpmhash.H"
#include "lib/rpmhash.C"
@@ -76,6 +77,7 @@ struct rpmal_s {
rpmtransFlags tsflags; /*!< Transaction control flags. */
rpm_color_t tscolor; /*!< Transaction color. */
rpm_color_t prefcolor; /*!< Transaction preferred color. */
+ fingerPrintCache fpc;
};
/**
@@ -87,6 +89,7 @@ static void rpmalFreeIndex(rpmal al)
al->providesHash = rpmalDepHashFree(al->providesHash);
al->obsoletesHash = rpmalDepHashFree(al->obsoletesHash);
al->fileHash = rpmalFileHashFree(al->fileHash);
+ al->fpc = fpCacheFree(al->fpc);
}
rpmal rpmalCreate(rpmstrPool pool, int delta, rpmtransFlags tsflags,
@@ -125,7 +128,7 @@ rpmal rpmalFree(rpmal al)
for (i = 0; i < al->size; i++, alp++) {
alp->obsoletes = rpmdsFree(alp->obsoletes);
alp->provides = rpmdsFree(alp->provides);
- alp->fi = rpmfiFree(alp->fi);
+ alp->fi = rpmfilesFree(alp->fi);
}
al->pool = rpmstrPoolFree(al->pool);
al->list = _free(al->list);
@@ -146,19 +149,6 @@ static int sidCmp(rpmsid a, rpmsid b)
return (a != b);
}
-static unsigned int fileHash(struct fileNameEntry_s file)
-{
- return file.dirName ^ file.baseName;
-}
-
-static int fileCompare(struct fileNameEntry_s one, struct fileNameEntry_s two)
-{
- int rc = (one.dirName != two.dirName);;
- if (!rc)
- rc = (one.baseName != two.baseName);
- return rc;
-}
-
void rpmalDel(rpmal al, rpmte p)
{
availablePackage alp;
@@ -181,11 +171,10 @@ void rpmalDel(rpmal al, rpmte p)
alp->p = NULL;
}
-static void rpmalAddFiles(rpmal al, rpmalNum pkgNum, rpmfi fi)
+static void rpmalAddFiles(rpmal al, rpmalNum pkgNum, rpmfiles fi)
{
- struct fileNameEntry_s fileName;
- struct availableIndexEntry_s fileEntry;
- int fc = rpmfiFC(fi);
+ struct availableIndexFileEntry_s fileEntry;
+ int fc = rpmfilesFC(fi);
rpm_color_t ficolor;
int skipdoc = (al->tsflags & RPMTRANS_FLAG_NODOCS);
int skipconf = (al->tsflags & RPMTRANS_FLAG_NOCONFIGS);
@@ -194,22 +183,20 @@ static void rpmalAddFiles(rpmal al, rpmalNum pkgNum, rpmfi fi)
for (int i = 0; i < fc; i++) {
/* Ignore colored provides not in our rainbow. */
- ficolor = rpmfiFColorIndex(fi, i);
+ ficolor = rpmfilesFColor(fi, i);
if (al->tscolor && ficolor && !(al->tscolor & ficolor))
continue;
/* Ignore files that wont be installed */
- if (skipdoc && (rpmfiFFlagsIndex(fi, i) & RPMFILE_DOC))
+ if (skipdoc && (rpmfilesFFlags(fi, i) & RPMFILE_DOC))
continue;
- if (skipconf && (rpmfiFFlagsIndex(fi, i) & RPMFILE_CONFIG))
+ if (skipconf && (rpmfilesFFlags(fi, i) & RPMFILE_CONFIG))
continue;
- fileName.dirName = rpmfiDNIdIndex(fi, rpmfiDIIndex(fi, i));
- fileName.baseName = rpmfiBNIdIndex(fi, i);
-
+ fileEntry.dirName = rpmfilesDNId(fi, rpmfilesDI(fi, i));
fileEntry.entryIx = i;
- rpmalFileHashAddEntry(al->fileHash, fileName, fileEntry);
+ rpmalFileHashAddEntry(al->fileHash, rpmfilesBNId(fi, i), fileEntry);
}
}
@@ -275,7 +262,7 @@ void rpmalAdd(rpmal al, rpmte p)
alp->provides = rpmdsLink(rpmteDS(p, RPMTAG_PROVIDENAME));
alp->obsoletes = rpmdsLink(rpmteDS(p, RPMTAG_OBSOLETENAME));
- alp->fi = rpmfiLink(rpmteFI(p));
+ alp->fi = rpmteFiles(p);
/*
* Transition-time safe-guard to catch private-pool uses.
@@ -286,7 +273,7 @@ void rpmalAdd(rpmal al, rpmte p)
* NULL pool from NULL alp->provides in numerous cases?
*/
{
- rpmstrPool fipool = rpmfiPool(alp->fi);
+ rpmstrPool fipool = rpmfilesPool(alp->fi);
rpmstrPool dspool = rpmdsPool(alp->provides);
assert(fipool == NULL || fipool == al->pool);
@@ -312,10 +299,10 @@ static void rpmalMakeFileIndex(rpmal al)
for (i = 0; i < al->size; i++) {
alp = al->list + i;
if (alp->fi != NULL)
- fileCnt += rpmfiFC(alp->fi);
+ fileCnt += rpmfilesFC(alp->fi);
}
al->fileHash = rpmalFileHashCreate(fileCnt/4+128,
- fileHash, fileCompare, NULL, NULL);
+ sidHash, sidCmp, NULL, NULL);
for (i = 0; i < al->size; i++) {
alp = al->list + i;
rpmalAddFiles(al, i, alp->fi);
@@ -403,7 +390,7 @@ rpmte * rpmalAllObsoletes(rpmal al, rpmds ds)
return ret;
}
-static rpmte * rpmalAllFileSatisfiesDepend(const rpmal al, const char *fileName)
+static rpmte * rpmalAllFileSatisfiesDepend(const rpmal al, const char *fileName, const rpmds filterds)
{
const char *slash;
rpmte * ret = NULL;
@@ -413,31 +400,45 @@ static rpmte * rpmalAllFileSatisfiesDepend(const rpmal al, const char *fileName)
/* Split path into dirname and basename components for lookup */
if ((slash = strrchr(fileName, '/')) != NULL) {
- availableIndexEntry result;
+ availableIndexFileEntry result;
int resultCnt = 0;
size_t bnStart = (slash - fileName) + 1;
- struct fileNameEntry_s fne;
-
- fne.baseName = rpmstrPoolId(al->pool, fileName + bnStart, 0);
- fne.dirName = rpmstrPoolIdn(al->pool, fileName, bnStart, 0);
+ rpmsid baseName;
if (al->fileHash == NULL)
rpmalMakeFileIndex(al);
- rpmalFileHashGetEntry(al->fileHash, fne, &result, &resultCnt, NULL);
+ baseName = rpmstrPoolId(al->pool, fileName + bnStart, 0);
+ if (!baseName)
+ return NULL; /* no match possible */
+
+ rpmalFileHashGetEntry(al->fileHash, baseName, &result, &resultCnt, NULL);
if (resultCnt > 0) {
int i, found;
ret = xmalloc((resultCnt+1) * sizeof(*ret));
+ fingerPrint * fp = NULL;
+ rpmsid dirName = rpmstrPoolIdn(al->pool, fileName, bnStart, 1);
+
+ if (!al->fpc)
+ al->fpc = fpCacheCreate(1001, NULL);
+ fpLookup(al->fpc, rpmstrPoolStr(al->pool, dirName), fileName + bnStart, &fp);
for (found = i = 0; i < resultCnt; i++) {
availablePackage alp = al->list + result[i].pkgNum;
- if (alp->p == NULL) // deleted
+ if (alp->p == NULL) /* deleted */
+ continue;
+ /* ignore self-conflicts/obsoletes */
+ if (filterds && rpmteDS(alp->p, rpmdsTagN(filterds)) == filterds)
+ continue;
+ if (result[i].dirName != dirName &&
+ !fpLookupEquals(al->fpc, fp, rpmstrPoolStr(al->pool, result[i].dirName), fileName + bnStart))
continue;
ret[found] = alp->p;
found++;
}
+ _free(fp);
ret[found] = NULL;
}
}
@@ -454,6 +455,8 @@ rpmte * rpmalAllSatisfiesDepend(const rpmal al, const rpmds ds)
availableIndexEntry result;
int resultCnt;
int obsolete;
+ rpmTagVal dtag;
+ rpmds filterds = NULL;
availablePackage alp;
int rc;
@@ -461,11 +464,14 @@ rpmte * rpmalAllSatisfiesDepend(const rpmal al, const rpmds ds)
if (al == NULL || ds == NULL || (nameId = rpmdsNId(ds)) == 0)
return ret;
- obsolete = (rpmdsTagN(ds) == RPMTAG_OBSOLETENAME);
+ dtag = rpmdsTagN(ds);
+ obsolete = (dtag == RPMTAG_OBSOLETENAME);
+ if (dtag == RPMTAG_OBSOLETENAME || dtag == RPMTAG_CONFLICTNAME)
+ filterds = ds;
name = rpmstrPoolStr(al->pool, nameId);
if (!obsolete && *name == '/') {
/* First, look for files "contained" in package ... */
- ret = rpmalAllFileSatisfiesDepend(al, name);
+ ret = rpmalAllFileSatisfiesDepend(al, name, filterds);
if (ret != NULL && *ret != NULL) {
rpmdsNotify(ds, "(added files)", 0);
return ret;
@@ -486,52 +492,70 @@ rpmte * rpmalAllSatisfiesDepend(const rpmal al, const rpmds ds)
for (found=i=0; i<resultCnt; i++) {
alp = al->list + result[i].pkgNum;
- if (alp->p == NULL) // deleted
+ if (alp->p == NULL) /* deleted */
continue;
- ix = result[i].entryIx;
-
- /* Obsoletes are on package name, filter out other provide matches */
- if (obsolete && !rstreq(rpmdsNIndex(alp->provides, ix), rpmteN(alp->p)))
+ /* ignore self-conflicts/obsoletes */
+ if (filterds && rpmteDS(alp->p, rpmdsTagN(filterds)) == filterds)
continue;
+ ix = result[i].entryIx;
- rc = rpmdsCompareIndex(alp->provides, ix, ds, rpmdsIx(ds));
-
- if (rc) {
- rpmdsNotify(ds, "(added provide)", 0);
- ret[found] = alp->p;
- found++;
+ if (obsolete) {
+ /* Obsoletes are on package NEVR only */
+ rpmds thisds;
+ if (!rstreq(rpmdsNIndex(alp->provides, ix), rpmteN(alp->p)))
+ continue;
+ thisds = rpmteDS(alp->p, RPMTAG_NAME);
+ rc = rpmdsCompareIndex(thisds, rpmdsIx(thisds), ds, rpmdsIx(ds));
+ } else {
+ rc = rpmdsCompareIndex(alp->provides, ix, ds, rpmdsIx(ds));
}
+
+ if (rc)
+ ret[found++] = alp->p;
}
- if (found)
+ if (found) {
+ rpmdsNotify(ds, "(added provide)", 0);
ret[found] = NULL;
- else
+ } else {
ret = _free(ret);
+ }
return ret;
}
rpmte
-rpmalSatisfiesDepend(const rpmal al, const rpmds ds)
+rpmalSatisfiesDepend(const rpmal al, const rpmte te, const rpmds ds)
{
rpmte *providers = rpmalAllSatisfiesDepend(al, ds);
rpmte best = NULL;
+ int bestscore = 0;
if (providers) {
- if (al->tscolor) {
+ rpm_color_t dscolor = rpmdsColor(ds);
+ for (rpmte *p = providers; *p; p++) {
+ int score = 0;
+
/*
- * For colored dependencies, try to find a matching provider.
+ * For colored dependencies, prefer a matching colored provider.
* Otherwise prefer provider of ts preferred color.
*/
- rpm_color_t dscolor = rpmdsColor(ds);
- for (rpmte *p = providers; *p; p++) {
+ if (al->tscolor) {
rpm_color_t tecolor = rpmteColor(*p);
if (dscolor) {
- if (dscolor == tecolor) best = *p;
+ if (dscolor == tecolor) score += 2;
} else if (al->prefcolor) {
- if (al->prefcolor == tecolor) best = *p;
+ if (al->prefcolor == tecolor) score += 2;
}
- if (best) break;
+ }
+
+ /* Being self-provided is a bonus */
+ if (*p == te)
+ score += 1;
+
+ if (score > bestscore) {
+ bestscore = score;
+ best = *p;
}
}
/* if not decided by now, just pick first match */
@@ -541,27 +565,13 @@ rpmalSatisfiesDepend(const rpmal al, const rpmds ds)
return best;
}
-rpmte *
-rpmalAllInCollection(const rpmal al, const char *collname)
+unsigned int
+rpmalLookupTE(const rpmal al, const rpmte te)
{
- rpmte *ret = NULL;
- int found = 0;
rpmalNum pkgNum;
-
- if (!al || !al->list || !collname)
- return NULL;
-
- for (pkgNum = 0; pkgNum < al->size; pkgNum++) {
- rpmte p = al->list[pkgNum].p;
- if (rpmteHasCollection(p, collname)) {
- ret = xrealloc(ret, sizeof(*ret) * (found + 1 + 1));
- ret[found] = p;
- found++;
- }
- }
- if (ret) {
- ret[found] = NULL;
- }
-
- return ret;
+ for (pkgNum=0; pkgNum < al->size; pkgNum++)
+ if (al->list[pkgNum].p == te)
+ break;
+ return pkgNum < al->size ? pkgNum : (unsigned int)-1;
}
+
diff --git a/lib/rpmal.h b/lib/rpmal.h
index 6f1327bdb..10fe756d4 100644
--- a/lib/rpmal.h
+++ b/lib/rpmal.h
@@ -73,22 +73,21 @@ rpmte * rpmalAllSatisfiesDepend(const rpmal al, const rpmds ds);
/**
* Lookup best provider for a dependency in the available list
* @param al available list
+ * @param te transaction element
* @param ds dependency set
* @return best provider for the dependency, NULL if none
*/
RPM_GNUC_INTERNAL
-rpmte rpmalSatisfiesDepend(const rpmal al, const rpmds ds);
+rpmte rpmalSatisfiesDepend(const rpmal al, const rpmte te, const rpmds ds);
/**
- * Get a list of transaction elements that are memebers of a collection in the
- * available list
- * @param al available list
- * @param collname collection name to search for
- * @return NULL-terminated list of transaction elements that are
- * members of the specified collection
+ * Return index of a transaction element in the available list
+ * @param al available list
+ * @param te transaction element
+ * @return index, (unsigned int)-1 if not found
*/
RPM_GNUC_INTERNAL
-rpmte * rpmalAllInCollection(const rpmal al, const char * collname);
+unsigned int rpmalLookupTE(const rpmal al, const rpmte te);
#ifdef __cplusplus
}
diff --git a/lib/rpmarchive.h b/lib/rpmarchive.h
new file mode 100644
index 000000000..c864e5b56
--- /dev/null
+++ b/lib/rpmarchive.h
@@ -0,0 +1,149 @@
+#ifndef H_ARCHIVE
+#define H_ARCHIVE
+
+/** \ingroup payload
+ * \file lib/rpmarchive.h
+ * File archive (aka payload) API.
+ */
+
+#define RPMERR_CHECK_ERRNO -32768
+
+/** \ingroup payload
+ * Error codes for archive and file handling
+ */
+enum rpmfilesErrorCodes {
+ RPMERR_ITER_END = -1,
+ RPMERR_BAD_MAGIC = -2,
+ RPMERR_BAD_HEADER = -3,
+ RPMERR_HDR_SIZE = -4,
+ RPMERR_UNKNOWN_FILETYPE= -5,
+ RPMERR_MISSING_FILE = -6,
+ RPMERR_DIGEST_MISMATCH = -7,
+ RPMERR_INTERNAL = -8,
+ RPMERR_UNMAPPED_FILE = -9,
+ RPMERR_ENOENT = -10,
+ RPMERR_ENOTEMPTY = -11,
+ RPMERR_FILE_SIZE = -12,
+ RPMERR_ITER_SKIP = -13,
+ RPMERR_EXIST_AS_DIR = -14,
+
+ RPMERR_OPEN_FAILED = -32768,
+ RPMERR_CHMOD_FAILED = -32769,
+ RPMERR_CHOWN_FAILED = -32770,
+ RPMERR_WRITE_FAILED = -32771,
+ RPMERR_UTIME_FAILED = -32772,
+ RPMERR_UNLINK_FAILED = -32773,
+ RPMERR_RENAME_FAILED = -32774,
+ RPMERR_SYMLINK_FAILED = -32775,
+ RPMERR_STAT_FAILED = -32776,
+ RPMERR_LSTAT_FAILED = -32777,
+ RPMERR_MKDIR_FAILED = -32778,
+ RPMERR_RMDIR_FAILED = -32779,
+ RPMERR_MKNOD_FAILED = -32780,
+ RPMERR_MKFIFO_FAILED = -32781,
+ RPMERR_LINK_FAILED = -32782,
+ RPMERR_READLINK_FAILED = -32783,
+ RPMERR_READ_FAILED = -32784,
+ RPMERR_COPY_FAILED = -32785,
+ RPMERR_LSETFCON_FAILED = -32786,
+ RPMERR_SETCAP_FAILED = -32787,
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \ingroup payload
+ * Return formatted error message on payload handling failure.
+ * @param rc error code
+ * @return formatted error string (malloced)
+ */
+char * rpmfileStrerror(int rc);
+
+/** \ingroup payload
+ * Get new file iterator for writing the archive content.
+ * The returned rpmfi will only visit the files needing some content.
+ * You need to provide the content using rpmfiArchiveWrite() or
+ * rpmfiArchiveWriteFile(). Make sure to close the rpmfi with
+ * rpmfiArchiveClose() to get the trailer written.
+ * rpmfiSetFX() is not supported for this type of iterator.
+ * @param fd file
+ * @param files file info
+ * @return new rpmfi
+ */
+rpmfi rpmfiNewArchiveWriter(FD_t fd, rpmfiles files);
+
+/** \ingroup payload
+ * Get new file iterator for looping over the archive content.
+ * Returned rpmfi visites files in the order they are read from the payload.
+ * Content of the regular files can be retrieved with rpmfiArchiveRead() or
+ * rpmfiArchiveReadToFile() when they are visited with rpmfiNext().
+ * rpmfiSetFX() is not supported for this type of iterator.
+ * @param fd file
+ * @param files file info
+ * @param itype how to handle hard links. See rpmFileIter.
+ * @return new rpmfi
+ */
+ rpmfi rpmfiNewArchiveReader(FD_t fd, rpmfiles files, int itype);
+
+/** \ingroup payload
+ * Close payload archive
+ * @param fi file info
+ * @return > 0 on error
+ */
+int rpmfiArchiveClose(rpmfi fi);
+
+/** \ingroup payload
+ * Return current position in payload archive
+ * @param fi file info
+ * @return position
+ */
+rpm_loff_t rpmfiArchiveTell(rpmfi fi);
+
+/** \ingroup payload
+ * Write content into current file in archive
+ * @param fi file info
+ * @param buf pointer to content
+ * @param size number of bytes to write
+ * @return bytes actually written
+ */
+size_t rpmfiArchiveWrite(rpmfi fi, const void * buf, size_t size);
+
+/** \ingroup payload
+ * Write content from given file into current file in archive
+ * @param fi file info
+ * @param fd file descriptor of file to read
+ * @return > 0 on error
+ */
+int rpmfiArchiveWriteFile(rpmfi fi, FD_t fd);
+
+/** \ingroup payload
+ * Read content from current file in archive
+ * @param fi file info
+ * @param buf pointer to buffer
+ * @param size number of bytes to read
+ * @return bytes actually read
+ */
+size_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size);
+
+/** \ingroup payload
+ * Has current file content stored in the archive
+ * @param fi file info
+ * @ return 1 for regular files but 0 for hardlinks without content
+ */
+int rpmfiArchiveHasContent(rpmfi fi);
+
+/** \ingroup payload
+ * Write content from current file in archive to a file
+ * @param fi file info
+ * @param fd file descriptor of file to write to
+ * @param nodigest omit checksum check if 1
+ * @return > 0 on error
+ */
+int rpmfiArchiveReadToFile(rpmfi fi, FD_t fd, int nodigest);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_ARCHIVE */
diff --git a/lib/rpmcallback.h b/lib/rpmcallback.h
index b3b05c6c1..f07892d0a 100644
--- a/lib/rpmcallback.h
+++ b/lib/rpmcallback.h
@@ -1,6 +1,12 @@
#ifndef _RPMCALLBACK_H
#define _RPMCALLBACK_H
+/** \ingroup rpmcallback
+ * \file lib/rpmcallback.h
+ *
+ * (un)install callbacks
+ */
+
#include <rpm/rpmtypes.h>
#ifdef __cplusplus
@@ -31,9 +37,22 @@ typedef enum rpmCallbackType_e {
RPMCALLBACK_SCRIPT_START = (1 << 16),
RPMCALLBACK_SCRIPT_STOP = (1 << 17),
RPMCALLBACK_INST_STOP = (1 << 18),
+ RPMCALLBACK_ELEM_PROGRESS = (1 << 19),
} rpmCallbackType;
-/**
+/** \ingroup rpmts
+ * Function pointer type for rpmtsSetNotifyCallback() triggered by
+ * rpmtsNotify()
+ *
+ * @param h related header or NULL
+ * @param what kind of notification (See RPMCALLBACK_ constants above)
+ * @param amount number of bytes/packages already processed or
+ * tag of the scriptlet involved
+ * or 0 or some other number
+ * @param total total number of bytes/packages to be processed or
+ * return code of the scriptlet or 0
+ * @param key result of rpmteKey() of related rpmte or 0
+ * @param data user data as passed to rpmtsSetNotifyCallback()
*/
typedef void * (*rpmCallbackFunction)
(const void * h,
diff --git a/lib/rpmchecksig.c b/lib/rpmchecksig.c
index 0d3e95ad7..196bb1ccb 100644
--- a/lib/rpmchecksig.c
+++ b/lib/rpmchecksig.c
@@ -11,7 +11,7 @@
#include <rpm/rpmpgp.h>
#include <rpm/rpmcli.h>
#include <rpm/rpmfileutil.h> /* rpmMkTemp() */
-#include <rpm/rpmdb.h>
+#include <rpm/rpmsq.h>
#include <rpm/rpmts.h>
#include <rpm/rpmlog.h>
#include <rpm/rpmstring.h>
@@ -19,7 +19,8 @@
#include "rpmio/rpmio_internal.h" /* fdSetBundle() */
#include "lib/rpmlead.h"
-#include "lib/signature.h"
+#include "lib/header_internal.h"
+#include "lib/rpmvs.h"
#include "debug.h"
@@ -35,14 +36,31 @@ static int doImport(rpmts ts, const char *fn, char *buf, ssize_t blen)
do {
uint8_t *pkt = NULL;
+ uint8_t *pkti = NULL;
size_t pktlen = 0;
+ size_t certlen;
/* Read pgp packet. */
if (pgpParsePkts(start, &pkt, &pktlen) == PGPARMOR_PUBKEY) {
- /* Import pubkey packet(s). */
- if (rpmtsImportPubkey(ts, pkt, pktlen) != RPMRC_OK) {
- rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn, keyno);
- res++;
+ pkti = pkt;
+
+ /* Iterate over certificates in pkt */
+ while (pktlen > 0) {
+ if (pgpPubKeyCertLen(pkti, pktlen, &certlen)) {
+ rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn,
+ keyno);
+ res++;
+ break;
+ }
+
+ /* Import pubkey certificate. */
+ if (rpmtsImportPubkey(ts, pkti, certlen) != RPMRC_OK) {
+ rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn,
+ keyno);
+ res++;
+ }
+ pkti += certlen;
+ pktlen -= certlen;
}
} else {
rpmlog(RPMLOG_ERR, _("%s: key %d not an armored public key.\n"),
@@ -102,308 +120,155 @@ int rpmcliImportPubkeys(rpmts ts, ARGV_const_t argv)
return res;
}
-/**
- * @todo If the GPG key was known available, the md5 digest could be skipped.
- */
-static int readFile(FD_t fd, const char * fn,
- rpmDigestBundle plbundle, rpmDigestBundle hdrbundle)
+static int readFile(FD_t fd, char **msg)
{
unsigned char buf[4*BUFSIZ];
ssize_t count;
- int rc = 1;
- Header h = NULL;
- char *msg = NULL;
-
- /* Read the header from the package. */
- if (rpmReadHeader(NULL, fd, &h, &msg) != RPMRC_OK) {
- rpmlog(RPMLOG_ERR, _("%s: headerRead failed: %s\n"), fn, msg);
- goto exit;
- }
-
- if (headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) {
- struct rpmtd_s utd;
-
- if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, HEADERGET_DEFAULT)){
- rpmlog(RPMLOG_ERR,
- _("%s: Immutable header region could not be read. "
- "Corrupted package?\n"), fn);
- goto exit;
- }
- rpmDigestBundleUpdate(hdrbundle, rpm_header_magic, sizeof(rpm_header_magic));
- rpmDigestBundleUpdate(hdrbundle, utd.data, utd.count);
- rpmtdFreeData(&utd);
- }
/* Read the payload from the package. */
while ((count = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0) {}
- if (count < 0) {
- rpmlog(RPMLOG_ERR, _("%s: Fread failed: %s\n"), fn, Fstrerror(fd));
- goto exit;
- }
+ if (count < 0)
+ rasprintf(msg, _("Fread failed: %s"), Fstrerror(fd));
- rc = 0;
-
-exit:
- free(msg);
- headerFree(h);
- return rc;
+ return (count != 0);
}
-/*
- * Figure best available signature.
- * XXX TODO: Similar detection in rpmReadPackageFile(), unify these.
- */
-static rpmTagVal bestSig(Header sigh, int nosignatures, int nodigests)
-{
- rpmTagVal sigtag = 0;
- if (sigtag == 0 && !nosignatures) {
- if (headerIsEntry(sigh, RPMSIGTAG_DSA))
- sigtag = RPMSIGTAG_DSA;
- else if (headerIsEntry(sigh, RPMSIGTAG_RSA))
- sigtag = RPMSIGTAG_RSA;
- else if (headerIsEntry(sigh, RPMSIGTAG_GPG))
- sigtag = RPMSIGTAG_GPG;
- else if (headerIsEntry(sigh, RPMSIGTAG_PGP))
- sigtag = RPMSIGTAG_PGP;
- }
- if (sigtag == 0 && !nodigests) {
- if (headerIsEntry(sigh, RPMSIGTAG_MD5))
- sigtag = RPMSIGTAG_MD5;
- else if (headerIsEntry(sigh, RPMSIGTAG_SHA1))
- sigtag = RPMSIGTAG_SHA1; /* XXX never happens */
- }
- return sigtag;
-}
+struct vfydata_s {
+ int seen;
+ int bad;
+};
-static const char *sigtagname(rpmTagVal sigtag, int upper)
+static rpmRC formatVerbose(struct rpmsinfo_s *sinfo, rpmRC sigres, const char *result, void *cbdata)
{
- const char *n = NULL;
-
- switch (sigtag) {
- case RPMSIGTAG_SIZE:
- n = (upper ? "SIZE" : "size");
- break;
- case RPMSIGTAG_SHA1:
- n = (upper ? "SHA1" : "sha1");
- break;
- case RPMSIGTAG_MD5:
- n = (upper ? "MD5" : "md5");
- break;
- case RPMSIGTAG_RSA:
- n = (upper ? "RSA" : "rsa");
- break;
- case RPMSIGTAG_PGP5: /* XXX legacy */
- case RPMSIGTAG_PGP:
- n = (upper ? "(MD5) PGP" : "(md5) pgp");
- break;
- case RPMSIGTAG_DSA:
- n = (upper ? "(SHA1) DSA" : "(sha1) dsa");
- break;
- case RPMSIGTAG_GPG:
- n = (upper ? "GPG" : "gpg");
- break;
- default:
- n = (upper ? "?UnknownSigatureType?" : "???");
- break;
- }
- return n;
+ char *vsmsg = rpmsinfoMsg(sinfo, sigres, result);
+ rpmlog(RPMLOG_NOTICE, " %s\n", vsmsg);
+ free(vsmsg);
+ return sigres;
}
-/*
- * Format sigcheck result for output, appending the message spew to buf and
- * bad/missing keyids to keyprob.
- *
- * In verbose mode, just dump it all. Otherwise ok signatures
- * are dumped lowercase, bad sigs uppercase and for PGP/GPG
- * if misssing/untrusted key it's uppercase in parenthesis
- * and stash the key id as <SIGTYPE>#<keyid>. Pfft.
- */
-static void formatResult(rpmTagVal sigtag, rpmRC sigres, const char *result,
- int havekey, char **keyprob, char **buf)
+/* Failures are uppercase, in parenthesis if NOKEY. Otherwise lowercase. */
+static rpmRC formatDefault(struct rpmsinfo_s *sinfo, rpmRC sigres, const char *result, void *cbdata)
{
- char *msg = NULL;
- if (rpmIsVerbose()) {
- rasprintf(&msg, " %s", result);
- } else {
- /* Check for missing / untrusted keys in result. */
- const char *signame = sigtagname(sigtag, (sigres != RPMRC_OK));
-
- if (havekey && (sigres == RPMRC_NOKEY || sigres == RPMRC_NOTTRUSTED)) {
- const char *tempKey = strstr(result, "ey ID");
- if (tempKey) {
- char keyid[sizeof(pgpKeyID_t) + 1];
- rstrlcpy(keyid, tempKey + 6, sizeof(keyid));
- rstrscat(keyprob, " ", signame, "#", keyid, NULL);
- }
- }
- rasprintf(&msg, (*keyprob ? "(%s) " : "%s "), signame);
- }
- rstrcat(buf, msg);
- free(msg);
+ struct vfydata_s *vd = cbdata;
+ vd->seen |= sinfo->type;
+ if (sigres != RPMRC_OK)
+ vd->bad |= sinfo->type;
+ return sigres;
}
-static int rpmpkgVerifySigs(rpmKeyring keyring, rpmQueryFlags flags,
- FD_t fd, const char *fn)
+rpmRC rpmpkgRead(rpmPlugins plugins, rpmKeyring keyring, rpmVSFlags flags, FD_t fd,
+ rpmsinfoCb cb, void *cbdata, Header *hdrp)
{
- char *buf = NULL;
- char *missingKeys = NULL;
- char *untrustedKeys = NULL;
- struct rpmtd_s sigtd;
- rpmTagVal sigtag;
- pgpDigParams sig = NULL;
- Header sigh = NULL;
- HeaderIterator hi = NULL;
char * msg = NULL;
- int res = 1; /* assume failure */
- rpmRC rc;
+ rpmRC xx, rc = RPMRC_FAIL; /* assume failure */
int failed = 0;
- int nodigests = !(flags & VERIFY_DIGEST);
- int nosignatures = !(flags & VERIFY_SIGNATURE);
- rpmDigestBundle plbundle = rpmDigestBundleNew();
- rpmDigestBundle hdrbundle = rpmDigestBundleNew();
-
- if ((rc = rpmLeadRead(fd, NULL, NULL, &msg)) != RPMRC_OK) {
- rpmlog(RPMLOG_ERR, "%s: %s\n", fn, msg);
- free(msg);
+ int leadtype = -1;
+ struct hdrblob_s sigblob, blob;
+ struct rpmvs_s *sigset = NULL;
+ Header h = NULL;
+ Header sigh = NULL;
+ rpmDigestBundle bundle = fdGetBundle(fd, 1); /* freed with fd */
+
+ memset(&blob, 0, sizeof(blob));
+ memset(&sigblob, 0, sizeof(sigblob));
+
+ if ((xx = rpmLeadRead(fd, &leadtype, &msg)) != RPMRC_OK) {
+ /* Avoid message spew on manifests */
+ if (xx == RPMRC_NOTFOUND)
+ msg = _free(msg);
+ rc = xx;
goto exit;
}
- rc = rpmReadSignature(fd, &sigh, RPMSIGTYPE_HEADERSIG, &msg);
- switch (rc) {
- default:
- rpmlog(RPMLOG_ERR, _("%s: rpmReadSignature failed: %s"), fn,
- (msg && *msg ? msg : "\n"));
- msg = _free(msg);
+ /* Read the signature header. Might not be in a contiguous region. */
+ if (hdrblobRead(fd, 1, 0, RPMTAG_HEADERSIGNATURES, &sigblob, &msg))
goto exit;
- break;
- case RPMRC_OK:
- if (sigh == NULL) {
- rpmlog(RPMLOG_ERR, _("%s: No signature available\n"), fn);
- goto exit;
- }
- break;
- }
- msg = _free(msg);
-
- /* Grab a hint of what needs doing to avoid duplication. */
- sigtag = bestSig(sigh, nosignatures, nodigests);
-
- /* XXX RSA needs the hash_algo, so decode early. */
- if (sigtag == RPMSIGTAG_RSA || sigtag == RPMSIGTAG_PGP ||
- sigtag == RPMSIGTAG_DSA || sigtag == RPMSIGTAG_GPG) {
- unsigned int hashalgo;
- if (headerGet(sigh, sigtag, &sigtd, HEADERGET_DEFAULT)) {
- parsePGPSig(&sigtd, "package", fn, &sig);
- rpmtdFreeData(&sigtd);
- }
- if (sig == NULL) goto exit;
-
- /* XXX assume same hash_algo in header-only and header+payload */
- hashalgo = pgpDigParamsAlgo(sig, PGPVAL_HASHALGO);
- rpmDigestBundleAdd(plbundle, hashalgo, RPMDIGEST_NONE);
- rpmDigestBundleAdd(hdrbundle, hashalgo, RPMDIGEST_NONE);
- }
- if (headerIsEntry(sigh, RPMSIGTAG_PGP) ||
- headerIsEntry(sigh, RPMSIGTAG_PGP5) ||
- headerIsEntry(sigh, RPMSIGTAG_MD5)) {
- rpmDigestBundleAdd(plbundle, PGPHASHALGO_MD5, RPMDIGEST_NONE);
- }
- if (headerIsEntry(sigh, RPMSIGTAG_GPG)) {
- rpmDigestBundleAdd(plbundle, PGPHASHALGO_SHA1, RPMDIGEST_NONE);
- }
+ sigset = rpmvsCreate(&sigblob, flags);
- /* always do sha1 hash of header */
- rpmDigestBundleAdd(hdrbundle, PGPHASHALGO_SHA1, RPMDIGEST_NONE);
+ /* Initialize digests ranging over the header */
+ rpmvsInitDigests(sigset, RPMSIG_HEADER, bundle);
- /* Read the file, generating digest(s) on the fly. */
- fdSetBundle(fd, plbundle);
- if (readFile(fd, fn, plbundle, hdrbundle)) {
+ /* Read the header from the package. */
+ if (hdrblobRead(fd, 1, 1, RPMTAG_HEADERIMMUTABLE, &blob, &msg))
goto exit;
+
+ /* Fish interesting tags from the main header. This is a bit hacky... */
+ if (!(flags & (RPMVSF_NOPAYLOAD|RPMVSF_NEEDPAYLOAD)))
+ rpmvsAppend(sigset, &blob, RPMTAG_PAYLOADDIGEST);
+
+ /* Initialize digests ranging over the payload only */
+ rpmvsInitDigests(sigset, RPMSIG_PAYLOAD, bundle);
+
+
+ /* Verify header signatures and digests */
+ failed += rpmvsVerifyItems(plugins, sigset, (RPMSIG_HEADER), bundle, keyring, cb, cbdata);
+
+ /* Unless disabled, read the file, generating digest(s) on the fly. */
+ if (!(flags & RPMVSF_NEEDPAYLOAD)) {
+ if (readFile(fd, &msg))
+ goto exit;
}
- rasprintf(&buf, "%s:%c", fn, (rpmIsVerbose() ? '\n' : ' ') );
-
- hi = headerInitIterator(sigh);
- for (; headerNext(hi, &sigtd) != 0; rpmtdFreeData(&sigtd)) {
- char *result = NULL;
- int havekey = 0;
- DIGEST_CTX ctx = NULL;
- if (sigtd.data == NULL) /* XXX can't happen */
- continue;
-
- /* Clean up parameters from previous sigtag. */
- sig = pgpDigParamsFree(sig);
-
- switch (sigtd.tag) {
- case RPMSIGTAG_GPG:
- case RPMSIGTAG_PGP5: /* XXX legacy */
- case RPMSIGTAG_PGP:
- havekey = 1;
- case RPMSIGTAG_RSA:
- case RPMSIGTAG_DSA:
- if (nosignatures)
- continue;
- if (parsePGPSig(&sigtd, "package", fn, &sig))
- goto exit;
- ctx = rpmDigestBundleDupCtx(havekey ? plbundle : hdrbundle,
- pgpDigParamsAlgo(sig, PGPVAL_HASHALGO));
- break;
- case RPMSIGTAG_SHA1:
- if (nodigests)
- continue;
- ctx = rpmDigestBundleDupCtx(hdrbundle, PGPHASHALGO_SHA1);
- break;
- case RPMSIGTAG_MD5:
- if (nodigests)
- continue;
- ctx = rpmDigestBundleDupCtx(plbundle, PGPHASHALGO_MD5);
- break;
- default:
- continue;
- break;
- }
+ /* Verify signatures and digests ranging over the payload */
+ failed += rpmvsVerifyItems(plugins, sigset, (RPMSIG_PAYLOAD), bundle,
+ keyring, cb, cbdata);
+ failed += rpmvsVerifyItems(plugins, sigset, (RPMSIG_HEADER|RPMSIG_PAYLOAD), bundle,
+ keyring, cb, cbdata);
- rc = rpmVerifySignature(keyring, &sigtd, sig, ctx, &result);
- rpmDigestFinal(ctx, NULL, NULL, 0);
+ if (failed == 0) {
+ /* Finally import the headers and do whatever required retrofits etc */
+ if (hdrp) {
+ if (hdrblobImport(&sigblob, 0, &sigh, &msg))
+ goto exit;
+ if (hdrblobImport(&blob, 0, &h, &msg))
+ goto exit;
- formatResult(sigtd.tag, rc, result, havekey,
- (rc == RPMRC_NOKEY ? &missingKeys : &untrustedKeys),
- &buf);
- free(result);
+ /* Append (and remap) signature tags to the metadata. */
+ headerMergeLegacySigs(h, sigh);
+ applyRetrofits(h, leadtype);
- if (rc != RPMRC_OK) {
- failed = 1;
+ /* Bump reference count for return. */
+ *hdrp = headerLink(h);
}
-
+ rc = RPMRC_OK;
}
- res = failed;
+exit:
+ if (rc && msg != NULL)
+ rpmlog(RPMLOG_ERR, "%s: %s\n", Fdescr(fd), msg);
+ free(msg);
+ free(sigblob.ei);
+ free(blob.ei);
+ headerFree(h);
+ headerFree(sigh);
+ rpmvsFree(sigset);
+ return rc;
+}
+
+static int rpmpkgVerifySigs(rpmPlugins plugins, rpmKeyring keyring, rpmVSFlags flags,
+ FD_t fd, const char *fn)
+{
+ int rc;
if (rpmIsVerbose()) {
- rpmlog(RPMLOG_NOTICE, "%s", buf);
+ rpmlog(RPMLOG_NOTICE, "%s:\n", fn);
+ rc = rpmpkgRead(plugins, keyring, flags, fd, formatVerbose, NULL, NULL);
} else {
- const char *ok = (failed ? _("NOT OK") : _("OK"));
- rpmlog(RPMLOG_NOTICE, "%s%s%s%s%s%s%s%s\n", buf, ok,
- missingKeys ? _(" (MISSING KEYS:") : "",
- missingKeys ? missingKeys : "",
- missingKeys ? _(") ") : "",
- untrustedKeys ? _(" (UNTRUSTED KEYS:") : "",
- untrustedKeys ? untrustedKeys : "",
- untrustedKeys ? _(")") : "");
+ struct vfydata_s vd = { 0, 0 };
+ rpmlog(RPMLOG_NOTICE, "%s:", fn);
+ rc = rpmpkgRead(plugins, keyring, flags, fd, formatDefault, &vd, NULL);
+ if (vd.seen & RPMSIG_DIGEST_TYPE) {
+ rpmlog(RPMLOG_NOTICE, " %s", (vd.bad & RPMSIG_DIGEST_TYPE) ?
+ _("DIGESTS") : _("digests"));
+ }
+ if (vd.seen & RPMSIG_SIGNATURE_TYPE) {
+ rpmlog(RPMLOG_NOTICE, " %s", (vd.bad & RPMSIG_SIGNATURE_TYPE) ?
+ _("SIGNATURES") : _("signatures"));
+ }
+ rpmlog(RPMLOG_NOTICE, " %s\n", rc ? _("NOT OK") : _("OK"));
}
- free(missingKeys);
- free(untrustedKeys);
-
-exit:
- free(buf);
- rpmDigestBundleFree(hdrbundle);
- rpmDigestBundleFree(plbundle);
- fdSetBundle(fd, NULL); /* XXX avoid double-free from fd close */
- sigh = rpmFreeSignature(sigh);
- hi = headerFreeIterator(hi);
- pgpDigParamsFree(sig);
- return res;
+ return rc;
}
/* Wrapper around rpmkVerifySigs to preserve API */
@@ -412,7 +277,7 @@ int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn)
int rc = 1; /* assume failure */
if (ts && qva && fd && fn) {
rpmKeyring keyring = rpmtsGetKeyring(ts, 1);
- rc = rpmpkgVerifySigs(keyring, qva->qva_flags, fd, fn);
+ rc = rpmpkgVerifySigs(rpmtsPlugins(ts), keyring, qva->qva_flags, fd, fn);
rpmKeyringFree(keyring);
}
return rc;
@@ -423,9 +288,12 @@ int rpmcliVerifySignatures(rpmts ts, ARGV_const_t argv)
const char * arg;
int res = 0;
rpmKeyring keyring = rpmtsGetKeyring(ts, 1);
- rpmVerifyFlags verifyFlags = (VERIFY_DIGEST|VERIFY_SIGNATURE);
-
- verifyFlags &= ~rpmcliQueryFlags;
+ rpmVSFlags vsflags = 0;
+
+ if (rpmcliQueryFlags & QUERY_DIGEST)
+ vsflags |= _RPMVSF_NODIGESTS;
+ if (rpmcliQueryFlags & QUERY_SIGNATURE)
+ vsflags |= _RPMVSF_NOSIGNATURES;
while ((arg = *argv++) != NULL) {
FD_t fd = Fopen(arg, "r.ufdio");
@@ -433,12 +301,12 @@ int rpmcliVerifySignatures(rpmts ts, ARGV_const_t argv)
rpmlog(RPMLOG_ERR, _("%s: open failed: %s\n"),
arg, Fstrerror(fd));
res++;
- } else if (rpmpkgVerifySigs(keyring, verifyFlags, fd, arg)) {
+ } else if (rpmpkgVerifySigs(rpmtsPlugins(ts), keyring, vsflags, fd, arg)) {
res++;
}
Fclose(fd);
- rpmdbCheckSignals();
+ rpmsqPoll();
}
rpmKeyringFree(keyring);
return res;
diff --git a/lib/rpmcli.h b/lib/rpmcli.h
index cdb1f8ab4..7a88f8791 100644
--- a/lib/rpmcli.h
+++ b/lib/rpmcli.h
@@ -3,6 +3,8 @@
/** \ingroup rpmcli rpmbuild
* \file lib/rpmcli.h
+ *
+ * Parsing RPM command line arguments
*/
#include <popt.h>
@@ -67,6 +69,8 @@ rpmcliFini(poptContext optCon);
#define RPMCLI_POPT_NODIGEST -1030
#define RPMCLI_POPT_NOHDRCHK -1031
#define RPMCLI_POPT_NOCONTEXTS -1032
+#define RPMCLI_POPT_NOCAPS -1033
+#define RPMCLI_POPT_TARGETPLATFORM -1034
/* ==================================================================== */
/** \name RPMQV */
@@ -91,6 +95,11 @@ enum rpmQVSources_e {
RPMQV_HDRID, /*!< ... from header id (immutable header SHA1). */
RPMQV_TID, /*!< ... from install transaction id (time stamp). */
RPMQV_SPECSRPM, /*!< ... from spec file source (query only). */
+ RPMQV_WHATRECOMMENDS, /*!< ... from recommends db search. */
+ RPMQV_WHATSUGGESTS, /*!< ... from suggests db search. */
+ RPMQV_WHATSUPPLEMENTS, /*!< ... from supplements db search. */
+ RPMQV_WHATENHANCES, /*!< ... from enhances db search. */
+ RPMQV_SPECBUILTRPMS, /*!< ... from pkgs which would be built from spec */
};
typedef rpmFlags rpmQVSources;
@@ -124,7 +133,8 @@ enum rpmQueryFlags_e {
QUERY_FOR_DOCS = (1 << 25), /*!< query: from --docfiles */
QUERY_FOR_CONFIG = (1 << 26), /*!< query: from --configfiles */
QUERY_FOR_DUMPFILES = (1 << 27), /*!< query: from --dump */
- QUERY_FOR_LICENSE = (1 << 28) /*!< query: from --licensefiles */
+ QUERY_FOR_LICENSE = (1 << 28), /*!< query: from --licensefiles */
+ QUERY_FOR_ARTIFACT = (1 << 29), /*!< query: from --artifacts */
};
typedef rpmFlags rpmQueryFlags;
@@ -282,7 +292,8 @@ enum rpmInstallFlags_e {
INSTALL_FRESHEN = (1 << 6), /*!< from --freshen */
INSTALL_INSTALL = (1 << 7), /*!< from --install */
INSTALL_ERASE = (1 << 8), /*!< from --erase */
- INSTALL_ALLMATCHES = (1 << 9) /*!< from --allmatches */
+ INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */
+ INSTALL_REINSTALL = (1 << 10), /*!< from --reinstall */
};
typedef rpmFlags rpmInstallFlags;
@@ -343,7 +354,7 @@ struct rpmInstallArguments_s {
};
/** \ingroup rpmcli
- * Install/upgrade/freshen binary rpm package.
+ * Install/upgrade/freshen/reinstall binary rpm package.
* @param ts transaction set
* @param ia mode flags and parameters
* @param fileArgv array of package file names (NULL terminated)
diff --git a/lib/rpmdb.c b/lib/rpmdb.c
index c22c98aa8..4af21f69c 100644
--- a/lib/rpmdb.c
+++ b/lib/rpmdb.c
@@ -4,8 +4,6 @@
#include "system.h"
-#define _USE_COPY_LOAD /* XXX don't use DB_DBT_MALLOC (yet) */
-
#include <sys/file.h>
#include <utime.h>
#include <errno.h>
@@ -34,6 +32,8 @@
#include "lib/rpmdb_internal.h"
#include "lib/fprint.h"
#include "lib/header_internal.h" /* XXX for headerSetInstance() */
+#include "lib/backend/dbiset.h"
+#include "lib/misc.h"
#include "debug.h"
#undef HASHTYPE
@@ -48,39 +48,14 @@
#undef HTKEYTYPE
#undef HTDATATYPE
-static rpmDbiTag const dbiTags[] = {
- RPMDBI_PACKAGES,
- RPMDBI_NAME,
- RPMDBI_BASENAMES,
- RPMDBI_GROUP,
- RPMDBI_REQUIRENAME,
- RPMDBI_PROVIDENAME,
- RPMDBI_CONFLICTNAME,
- RPMDBI_OBSOLETENAME,
- RPMDBI_TRIGGERNAME,
- RPMDBI_DIRNAMES,
- RPMDBI_INSTALLTID,
- RPMDBI_SIGMD5,
- RPMDBI_SHA1HEADER,
-};
-
-#define dbiTagsMax (sizeof(dbiTags) / sizeof(rpmDbiTag))
-
-/* A single item from an index database (i.e. the "data returned"). */
-struct dbiIndexItem {
- unsigned int hdrNum; /*!< header instance in db */
- unsigned int tagNum; /*!< tag index in header */
-};
+typedef rpmRC (*idxfunc)(dbiIndex dbi, dbiCursor dbc, const char *keyp, size_t keylen,
+ dbiIndexItem rec);
-/* Items retrieved from the index database.*/
-typedef struct _dbiIndexSet {
- struct dbiIndexItem * recs; /*!< array of records */
- unsigned int count; /*!< number of records */
- size_t alloced; /*!< alloced size */
-} * dbiIndexSet;
+static rpmRC tag2index(dbiIndex dbi, rpmTagVal rpmtag,
+ unsigned int hdrNum, Header h,
+ idxfunc idxupdate);
-static int addToIndex(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h);
-static unsigned int pkgInstance(dbiIndex dbi, int alloc);
+static rpmRC indexPut(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h);
static rpmdb rpmdbUnlink(rpmdb db);
static int buildIndexes(rpmdb db)
@@ -92,7 +67,7 @@ static int buildIndexes(rpmdb db)
rc += rpmdbOpenAll(db);
/* If the main db was just created, this is expected - dont whine */
- if (!(dbiFlags(db->_dbi[0]) & DBI_CREATED)) {
+ if (!(dbiFlags(db->db_pkgs) & DBI_CREATED)) {
rpmlog(RPMLOG_WARNING,
_("Generating %d missing index(es), please wait...\n"),
db->db_buildindex);
@@ -101,21 +76,27 @@ static int buildIndexes(rpmdb db)
/* Don't call us again */
db->db_buildindex = 0;
- dbSetFSync(db->db_dbenv, 0);
+ dbSetFSync(db, 0);
+
+ dbCtrl(db, RPMDB_CTRL_LOCK_RW);
mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0);
while ((h = rpmdbNextIterator(mi))) {
unsigned int hdrNum = headerGetInstance(h);
/* Build all secondary indexes which were created on open */
- for (int dbix = 1; dbix < dbiTagsMax; dbix++) {
- dbiIndex dbi = db->_dbi[dbix];
+ for (int dbix = 0; dbix < db->db_ndbi; dbix++) {
+ dbiIndex dbi = db->db_indexes[dbix];
if (dbi && (dbiFlags(dbi) & DBI_CREATED)) {
- rc += addToIndex(dbi, dbiTags[dbix], hdrNum, h);
+ rc += indexPut(dbi, db->db_tags[dbix], hdrNum, h);
}
}
}
rpmdbFreeIterator(mi);
- dbSetFSync(db->db_dbenv, !db->cfg.db_no_fsync);
+
+ dbCtrl(db, DB_CTRL_INDEXSYNC);
+ dbCtrl(db, DB_CTRL_UNLOCK_RW);
+
+ dbSetFSync(db, !db->cfg.db_no_fsync);
return rc;
}
@@ -154,395 +135,135 @@ static int64_t splitEpoch(const char *s, const char **version)
return e;
}
-/** \ingroup dbi
- * Return handle for an index database.
- * @param db rpm database
- * @param rpmtag rpm tag
- * @param flags
- * @return index database handle
- */
-static dbiIndex rpmdbOpenIndex(rpmdb db, rpmDbiTagVal rpmtag, int flags)
+static int pkgdbOpen(rpmdb db, int flags, dbiIndex *dbip)
{
- int dbix;
- dbiIndex dbi = NULL;
int rc = 0;
+ dbiIndex dbi = NULL;
if (db == NULL)
- return NULL;
-
- for (dbix = 0; dbix < dbiTagsMax; dbix++) {
- if (rpmtag == dbiTags[dbix])
- break;
- }
- if (dbix >= dbiTagsMax)
- return NULL;
-
- /* Is this index already open ? */
- if ((dbi = db->_dbi[dbix]) != NULL)
- return dbi;
-
- errno = 0;
- dbi = NULL;
- rc = dbiOpen(db, rpmtag, &dbi, flags);
-
- if (rc) {
- static int _printed[32];
- if (!_printed[dbix & 0x1f]++)
- rpmlog(RPMLOG_ERR, _("cannot open %s index using db%d - %s (%d)\n"),
- rpmTagGetName(rpmtag), db->db_ver,
- (rc > 0 ? strerror(rc) : ""), rc);
- } else {
- db->_dbi[dbix] = dbi;
- int verifyonly = (flags & RPMDB_FLAG_VERIFYONLY);
- int rebuild = (db->db_flags & RPMDB_FLAG_REBUILD);
- if (dbiType(dbi) == DBI_PRIMARY) {
- /* Allocate based on max header instance number + some reserve */
- if (!verifyonly && (db->db_checked == NULL)) {
- db->db_checked = dbChkCreate(1024 + pkgInstance(dbi, 0) / 4,
- uintId, uintCmp, NULL, NULL);
- }
- /* If primary got created, we can safely run without fsync */
- if ((!verifyonly && (dbiFlags(dbi) & DBI_CREATED)) || db->cfg.db_no_fsync) {
- rpmlog(RPMLOG_DEBUG, "disabling fsync on database\n");
- db->cfg.db_no_fsync = 1;
- dbSetFSync(db->db_dbenv, 0);
- }
- } else { /* secondary index */
- if (!rebuild && !verifyonly && (dbiFlags(dbi) & DBI_CREATED)) {
- rpmlog(RPMLOG_DEBUG, "index %s needs creating\n", dbiName(dbi));
- db->db_buildindex++;
- if (db->db_buildindex == 1) {
- buildIndexes(db);
- }
- }
- }
- }
-
- return dbi;
-}
-
-union _dbswap {
- unsigned int ui;
- unsigned char uc[4];
-};
-
-#define _DBSWAP(_a) \
-\
- { unsigned char _b, *_c = (_a).uc; \
- _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \
- _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \
-\
- }
-
-/*
- * Ensure sufficient memory for nrecs of new records in dbiIndexSet.
- * Allocate in power of two sizes to avoid memory fragmentation, so
- * realloc is not always needed.
- */
-static inline void dbiGrowSet(dbiIndexSet set, unsigned int nrecs)
-{
- size_t need = (set->count + nrecs) * sizeof(*(set->recs));
- size_t alloced = set->alloced ? set->alloced : 1 << 4;
-
- while (alloced < need)
- alloced <<= 1;
-
- if (alloced != set->alloced) {
- set->recs = xrealloc(set->recs, alloced);
- set->alloced = alloced;
- }
-}
-
-/**
- * Convert retrieved data to index set.
- * @param dbi index database handle
- * @param data retrieved data
- * @retval setp (malloc'ed) index set
- * @return 0 on success
- */
-static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp)
-{
- int _dbbyteswapped = dbiByteSwapped(dbi);
- const char * sdbir;
- dbiIndexSet set;
- unsigned int i;
- dbiIndexType itype = dbiType(dbi);
-
- if (dbi == NULL || data == NULL || setp == NULL)
return -1;
+ /* Is this it already open ? */
+ if ((dbi = db->db_pkgs) != NULL)
+ goto exit;
- if ((sdbir = data->data) == NULL) {
- *setp = NULL;
- return 0;
- }
-
- set = xcalloc(1, sizeof(*set));
- dbiGrowSet(set, data->size / itype);
- set->count = data->size / itype;
-
- switch (itype) {
- default:
- case DBI_SECONDARY:
- for (i = 0; i < set->count; i++) {
- union _dbswap hdrNum, tagNum;
-
- memcpy(&hdrNum.ui, sdbir, sizeof(hdrNum.ui));
- sdbir += sizeof(hdrNum.ui);
- memcpy(&tagNum.ui, sdbir, sizeof(tagNum.ui));
- sdbir += sizeof(tagNum.ui);
- if (_dbbyteswapped) {
- _DBSWAP(hdrNum);
- _DBSWAP(tagNum);
- }
- /* remove tagged directory info */
- if (tagNum.ui & 0x80000000)
- tagNum.ui &= 0x0000ffff;
- set->recs[i].hdrNum = hdrNum.ui;
- set->recs[i].tagNum = tagNum.ui;
- }
- break;
- case DBI_PRIMARY:
- for (i = 0; i < set->count; i++) {
- union _dbswap hdrNum;
-
- memcpy(&hdrNum.ui, sdbir, sizeof(hdrNum.ui));
- sdbir += sizeof(hdrNum.ui);
- if (_dbbyteswapped) {
- _DBSWAP(hdrNum);
- }
- set->recs[i].hdrNum = hdrNum.ui;
- set->recs[i].tagNum = 0;
- }
- break;
- }
- *setp = set;
- return 0;
-}
-
-/**
- * Convert index set to database representation.
- * @param dbi index database handle
- * @param data retrieved data
- * @param set index set
- * @return 0 on success
- */
-static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set)
-{
- int _dbbyteswapped = dbiByteSwapped(dbi);
- char * tdbir;
- unsigned int i;
- dbiIndexType itype = dbiType(dbi);
-
- if (dbi == NULL || data == NULL || set == NULL)
- return -1;
+ rc = dbiOpen(db, RPMDBI_PACKAGES, &dbi, flags);
- data->size = set->count * itype;
- if (data->size == 0) {
- data->data = NULL;
- return 0;
- }
- tdbir = data->data = xmalloc(data->size);
+ if (rc == 0) {
+ int verifyonly = (flags & RPMDB_FLAG_VERIFYONLY);
- switch (itype) {
- default:
- case DBI_SECONDARY:
- for (i = 0; i < set->count; i++) {
- union _dbswap hdrNum, tagNum;
-
- memset(&hdrNum, 0, sizeof(hdrNum));
- memset(&tagNum, 0, sizeof(tagNum));
- hdrNum.ui = set->recs[i].hdrNum;
- tagNum.ui = set->recs[i].tagNum;
- if (_dbbyteswapped) {
- _DBSWAP(hdrNum);
- _DBSWAP(tagNum);
- }
- memcpy(tdbir, &hdrNum.ui, sizeof(hdrNum.ui));
- tdbir += sizeof(hdrNum.ui);
- memcpy(tdbir, &tagNum.ui, sizeof(tagNum.ui));
- tdbir += sizeof(tagNum.ui);
+ db->db_pkgs = dbi;
+ /* Allocate header checking cache .. based on some random number */
+ if (!verifyonly && (db->db_checked == NULL)) {
+ db->db_checked = dbChkCreate(567, uintId, uintCmp, NULL, NULL);
}
- break;
- case DBI_PRIMARY:
- for (i = 0; i < set->count; i++) {
- union _dbswap hdrNum;
-
- memset(&hdrNum, 0, sizeof(hdrNum));
- hdrNum.ui = set->recs[i].hdrNum;
- if (_dbbyteswapped) {
- _DBSWAP(hdrNum);
- }
- memcpy(tdbir, &hdrNum.ui, sizeof(hdrNum.ui));
- tdbir += sizeof(hdrNum.ui);
+ /* If primary got created, we can safely run without fsync */
+ if ((!verifyonly && (dbiFlags(dbi) & DBI_CREATED)) || db->cfg.db_no_fsync) {
+ rpmlog(RPMLOG_DEBUG, "disabling fsync on database\n");
+ db->cfg.db_no_fsync = 1;
+ dbSetFSync(db, 0);
}
- break;
+ } else {
+ rpmlog(RPMLOG_ERR, _("cannot open %s index using %s - %s (%d)\n"),
+ rpmTagGetName(RPMDBI_PACKAGES), db->db_descr,
+ (rc > 0 ? strerror(rc) : ""), rc);
}
- return 0;
-}
+exit:
+ if (rc == 0 && dbip)
+ *dbip = dbi;
-/* XXX assumes hdrNum is first int in dbiIndexItem */
-static int hdrNumCmp(const void * one, const void * two)
-{
- const unsigned int * a = one, * b = two;
- return (*a - *b);
+ return rc;
}
-/**
- * Append element(s) to set of index database items.
- * @param set set of index database items
- * @param recs array of items to append to set
- * @param nrecs number of items
- * @param recsize size of an array item
- * @param sortset should resulting set be sorted?
- * @return 0 success, 1 failure (bad args)
- */
-static int dbiAppendSet(dbiIndexSet set, const void * recs,
- int nrecs, size_t recsize, int sortset)
+static int indexOpen(rpmdb db, rpmDbiTagVal rpmtag, int flags, dbiIndex *dbip)
{
- const char * rptr = recs;
- size_t rlen = (recsize < sizeof(*(set->recs)))
- ? recsize : sizeof(*(set->recs));
-
- if (set == NULL || recs == NULL || nrecs <= 0 || recsize == 0)
- return 1;
+ int dbix, rc = 0;
+ dbiIndex dbi = NULL;
- dbiGrowSet(set, nrecs);
- memset(set->recs + set->count, 0, nrecs * sizeof(*(set->recs)));
+ if (db == NULL)
+ return -1;
- while (nrecs-- > 0) {
- memcpy(set->recs + set->count, rptr, rlen);
- rptr += recsize;
- set->count++;
+ for (dbix = 0; dbix < db->db_ndbi; dbix++) {
+ if (rpmtag == db->db_tags[dbix])
+ break;
}
+ if (dbix >= db->db_ndbi)
+ return -1;
- if (sortset && set->count > 1)
- qsort(set->recs, set->count, sizeof(*(set->recs)), hdrNumCmp);
-
- return 0;
-}
+ /* Is this index already open ? */
+ if ((dbi = db->db_indexes[dbix]) != NULL)
+ goto exit;
-/**
- * Remove element(s) from set of index database items.
- * @param set set of index database items
- * @param recs array of items to remove from set
- * @param nrecs number of items
- * @param recsize size of an array item
- * @param sorted array is already sorted?
- * @return 0 success, 1 failure (no items found)
- */
-static int dbiPruneSet(dbiIndexSet set, void * recs, int nrecs,
- size_t recsize, int sorted)
-{
- unsigned int from;
- unsigned int to = 0;
- unsigned int num = set->count;
- unsigned int numCopied = 0;
+ rc = dbiOpen(db, rpmtag, &dbi, flags);
- assert(set->count > 0);
- if (nrecs > 1 && !sorted)
- qsort(recs, nrecs, recsize, hdrNumCmp);
+ if (rc == 0) {
+ int verifyonly = (flags & RPMDB_FLAG_VERIFYONLY);
+ int rebuild = (db->db_flags & RPMDB_FLAG_REBUILD);
- for (from = 0; from < num; from++) {
- if (bsearch(&set->recs[from], recs, nrecs, recsize, hdrNumCmp)) {
- set->count--;
- continue;
+ db->db_indexes[dbix] = dbi;
+ if (!rebuild && !verifyonly && (dbiFlags(dbi) & DBI_CREATED)) {
+ rpmlog(RPMLOG_DEBUG, "index %s needs creating\n", dbiName(dbi));
+ db->db_buildindex++;
+ if (db->db_buildindex == 1) {
+ buildIndexes(db);
+ }
}
- if (from != to)
- set->recs[to] = set->recs[from]; /* structure assignment */
- to++;
- numCopied++;
+ } else {
+ rpmlog(RPMLOG_ERR, _("cannot open %s index using %s - %s (%d)\n"),
+ rpmTagGetName(rpmtag), db->db_descr,
+ (rc > 0 ? strerror(rc) : ""), rc);
}
- return (numCopied == num);
-}
-
-/* Count items in index database set. */
-static unsigned int dbiIndexSetCount(dbiIndexSet set)
-{
- return set->count;
-}
-
-/* Return record offset of header from element in index database set. */
-static unsigned int dbiIndexRecordOffset(dbiIndexSet set, int recno)
-{
- return set->recs[recno].hdrNum;
-}
-/* Return file index from element in index database set. */
-static unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, int recno)
-{
- return set->recs[recno].tagNum;
-}
-
-/* Destroy set of index database items */
-static dbiIndexSet dbiIndexSetFree(dbiIndexSet set)
-{
- if (set) {
- free(set->recs);
- memset(set, 0, sizeof(*set)); /* trash and burn */
- free(set);
- }
- return NULL;
+exit:
+ if (rc == 0 && dbip)
+ *dbip = dbi;
+ return rc;
}
-static int dbiCursorGetToSet(dbiCursor dbc, const char *keyp, size_t keylen,
- dbiIndexSet *set)
+static rpmRC indexGet(dbiIndex dbi, const char *keyp, size_t keylen,
+ dbiIndexSet *set)
{
- int rc = EINVAL;
- if (dbc != NULL && set != NULL) {
- dbiIndex dbi = dbiCursorIndex(dbc);
- int cflags = DB_NEXT;
- DBT data, key;
- memset(&data, 0, sizeof(data));
- memset(&key, 0, sizeof(key));
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ if (dbi != NULL) {
+ dbiCursor dbc = dbiCursorInit(dbi, DBC_READ);
if (keyp) {
- key.data = (void *) keyp; /* discards const */
- key.size = keylen;
- cflags = DB_SET;
- }
-
- rc = dbiCursorGet(dbc, &key, &data, cflags);
+ if (keylen == 0)
+ keylen = strlen(keyp);
+ rc = idxdbGet(dbi, dbc, keyp, keylen, set, DBC_NORMAL_SEARCH);
+ } else {
+ do {
+ rc = idxdbGet(dbi, dbc, NULL, 0, set, DBC_NORMAL_SEARCH);
+ } while (rc == RPMRC_OK);
- if (rc == 0) {
- dbiIndexSet newset = NULL;
- dbt2set(dbi, &data, &newset);
- if (*set == NULL) {
- *set = newset;
- } else {
- dbiAppendSet(*set, newset->recs, newset->count,
- sizeof(*(newset->recs)), 0);
- dbiIndexSetFree(newset);
- }
- } else if (rc != DB_NOTFOUND) {
- rpmlog(RPMLOG_ERR,
- _("error(%d) getting \"%s\" records from %s index: %s\n"),
- rc, keyp ? keyp : "???", dbiName(dbi), db_strerror(rc));
+ /* If we got some results, not found is not an error */
+ if (rc == RPMRC_NOTFOUND && set != NULL)
+ rc = RPMRC_OK;
}
+
+ dbiCursorFree(dbi, dbc);
}
return rc;
}
-static int dbiGetToSet(dbiIndex dbi, const char *keyp, size_t keylen,
- dbiIndexSet *set)
+static rpmRC indexPrefixGet(dbiIndex dbi, const char *pfx, size_t plen,
+ dbiIndexSet *set)
{
- int rc = EINVAL;
- if (dbi != NULL && keyp != NULL) {
- dbiCursor dbc = dbiCursorInit(dbi, 0);
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
- if (keylen == 0) {
- keylen = strlen(keyp);
- if (keylen == 0)
- keylen++; /* XXX "/" fixup */
- }
+ if (dbi != NULL && pfx) {
+ dbiCursor dbc = dbiCursorInit(dbi, DBC_READ);
- rc = dbiCursorGetToSet(dbc, keyp, keylen, set);
+ if (plen == 0)
+ plen = strlen(pfx);
+ rc = idxdbGet(dbi, dbc, pfx, plen, set, DBC_PREFIX_SEARCH);
- dbiCursorFree(dbc);
+ dbiCursorFree(dbi, dbc);
}
return rc;
}
+
typedef struct miRE_s {
rpmTagVal tag; /*!< header tag */
rpmMireMode mode; /*!< pattern match mode */
@@ -556,8 +277,6 @@ typedef struct miRE_s {
struct rpmdbMatchIterator_s {
rpmdbMatchIterator mi_next;
- void * mi_keyp;
- size_t mi_keylen;
rpmdb mi_db;
rpmDbiTagVal mi_rpmtag;
dbiIndexSet mi_set;
@@ -583,92 +302,28 @@ struct rpmdbIndexIterator_s {
dbiIndex ii_dbi;
rpmDbiTag ii_rpmtag;
dbiCursor ii_dbc;
- DBT ii_key;
dbiIndexSet ii_set;
+ unsigned int *ii_hdrNums;
};
static rpmdb rpmdbRock;
static rpmdbMatchIterator rpmmiRock;
static rpmdbIndexIterator rpmiiRock;
-int rpmdbCheckTerminate(int terminate)
+void rpmAtExit(void)
{
- sigset_t newMask, oldMask;
- static int terminating = 0;
-
- if (terminating) return 0;
-
- (void) sigfillset(&newMask); /* block all signals */
- (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask);
-
- if (rpmsqIsCaught(SIGINT) > 0
- || rpmsqIsCaught(SIGQUIT) > 0
- || rpmsqIsCaught(SIGHUP) > 0
- || rpmsqIsCaught(SIGTERM) > 0
- || rpmsqIsCaught(SIGPIPE) > 0
- || terminate)
- terminating = 1;
-
- if (terminating) {
- rpmdb db;
- rpmdbMatchIterator mi;
- rpmdbIndexIterator ii;
-
- while ((mi = rpmmiRock) != NULL) {
- rpmmiRock = mi->mi_next;
- mi->mi_next = NULL;
- rpmdbFreeIterator(mi);
- }
-
- while ((ii = rpmiiRock) != NULL) {
- rpmiiRock = ii->ii_next;
- ii->ii_next = NULL;
- rpmdbIndexIteratorFree(ii);
- }
-
- while ((db = rpmdbRock) != NULL) {
- rpmdbRock = db->db_next;
- db->db_next = NULL;
- (void) rpmdbClose(db);
- }
- }
- sigprocmask(SIG_SETMASK, &oldMask, NULL);
- return terminating;
-}
-
-int rpmdbCheckSignals(void)
-{
- if (rpmdbCheckTerminate(0)) {
- rpmlog(RPMLOG_DEBUG, "Exiting on signal...\n");
- exit(EXIT_FAILURE);
- }
- return 0;
-}
+ rpmdb db;
+ rpmdbMatchIterator mi;
+ rpmdbIndexIterator ii;
-/**
- * Block all signals, returning previous signal mask.
- */
-static int blockSignals(sigset_t * oldMask)
-{
- sigset_t newMask;
+ while ((mi = rpmmiRock) != NULL)
+ rpmdbFreeIterator(mi);
- (void) sigfillset(&newMask); /* block all signals */
- (void) sigprocmask(SIG_BLOCK, &newMask, oldMask);
- (void) sigdelset(&newMask, SIGINT);
- (void) sigdelset(&newMask, SIGQUIT);
- (void) sigdelset(&newMask, SIGHUP);
- (void) sigdelset(&newMask, SIGTERM);
- (void) sigdelset(&newMask, SIGPIPE);
- return sigprocmask(SIG_BLOCK, &newMask, NULL);
-}
+ while ((ii = rpmiiRock) != NULL)
+ rpmdbIndexIteratorFree(ii);
-/**
- * Restore signal mask.
- */
-static int unblockSignals(sigset_t * oldMask)
-{
- (void) rpmdbCheckSignals();
- return sigprocmask(SIG_SETMASK, oldMask, NULL);
+ while ((db = rpmdbRock) != NULL)
+ (void) rpmdbClose(db);
}
rpmop rpmdbOp(rpmdb rpmdb, rpmdbOpX opx)
@@ -705,20 +360,18 @@ int rpmdbOpenAll(rpmdb db)
if (db == NULL) return -2;
- for (int dbix = 0; dbix < dbiTagsMax; dbix++) {
- dbiIndex dbi = db->_dbi[dbix];
- if (dbi == NULL) {
- rc += (rpmdbOpenIndex(db, dbiTags[dbix], db->db_flags) == NULL);
- }
+ rc = pkgdbOpen(db, db->db_flags, NULL);
+ for (int dbix = 0; dbix < db->db_ndbi; dbix++) {
+ rc += indexOpen(db, db->db_tags[dbix], db->db_flags, NULL);
}
return rc;
}
-static int dbiForeach(dbiIndex *dbis,
+static int dbiForeach(dbiIndex *dbis, int ndbi,
int (*func) (dbiIndex, unsigned int), int del)
{
int xx, rc = 0;
- for (int dbix = dbiTagsMax; --dbix >= 0; ) {
+ for (int dbix = ndbi; --dbix >= 0; ) {
if (dbis[dbix] == NULL)
continue;
xx = func(dbis[dbix], 0);
@@ -733,12 +386,16 @@ int rpmdbClose(rpmdb db)
{
rpmdb * prev, next;
int rc = 0;
- int dbmode;
if (db == NULL)
goto exit;
- dbmode = db->db_mode;
+ prev = &rpmdbRock;
+ while ((next = *prev) != NULL && next != db)
+ prev = &next->db_next;
+ if (!next)
+ goto exit;
+
(void) rpmdbUnlink(db);
if (db->nrefs > 0)
@@ -746,19 +403,19 @@ int rpmdbClose(rpmdb db)
/* Always re-enable fsync on close of rw-database */
if ((db->db_mode & O_ACCMODE) != O_RDONLY)
- dbSetFSync(db->db_dbenv, 1);
+ dbSetFSync(db, 1);
- rc = dbiForeach(db->_dbi, dbiClose, 1);
+ if (db->db_pkgs)
+ rc = dbiClose(db->db_pkgs, 0);
+ rc += dbiForeach(db->db_indexes, db->db_ndbi, dbiClose, 1);
db->db_root = _free(db->db_root);
db->db_home = _free(db->db_home);
db->db_fullpath = _free(db->db_fullpath);
db->db_checked = dbChkFree(db->db_checked);
- db->_dbi = _free(db->_dbi);
+ db->db_indexes = _free(db->db_indexes);
+ db->db_descr = _free(db->db_descr);
- prev = &rpmdbRock;
- while ((next = *prev) != NULL && next != db)
- prev = &next->db_next;
if (next) {
*prev = next->db_next;
next->db_next = NULL;
@@ -766,36 +423,39 @@ int rpmdbClose(rpmdb db)
db = _free(db);
- if (rpmdbRock == NULL && (dbmode & (O_RDWR|O_WRONLY)) != 0) {
- (void) rpmsqEnable(-SIGHUP, NULL);
- (void) rpmsqEnable(-SIGINT, NULL);
- (void) rpmsqEnable(-SIGTERM, NULL);
- (void) rpmsqEnable(-SIGQUIT, NULL);
- (void) rpmsqEnable(-SIGPIPE, NULL);
+ if (rpmdbRock == NULL) {
+ rpmsqActivate(0);
}
exit:
return rc;
}
-
-int rpmdbSync(rpmdb db)
-{
- if (db == NULL) return 0;
-
- return dbiForeach(db->_dbi, dbiSync, 0);
-}
-
-int rpmdbSuspendResumeDBLock(rpmdb db, int mode)
-{
- if (db == NULL) return 0;
- return dbiForeach(db->_dbi, mode ? dbiResumeDBLock : dbiSuspendDBLock, 0);
-}
-
static rpmdb newRpmdb(const char * root, const char * home,
int mode, int perms, int flags)
{
rpmdb db = NULL;
char * db_home = rpmGetPath((home && *home) ? home : "%{_dbpath}", NULL);
+ static rpmDbiTag const dbiTags[] = {
+ RPMDBI_NAME,
+ RPMDBI_BASENAMES,
+ RPMDBI_GROUP,
+ RPMDBI_REQUIRENAME,
+ RPMDBI_PROVIDENAME,
+ RPMDBI_CONFLICTNAME,
+ RPMDBI_OBSOLETENAME,
+ RPMDBI_TRIGGERNAME,
+ RPMDBI_DIRNAMES,
+ RPMDBI_INSTALLTID,
+ RPMDBI_SIGMD5,
+ RPMDBI_SHA1HEADER,
+ RPMDBI_FILETRIGGERNAME,
+ RPMDBI_TRANSFILETRIGGERNAME,
+ RPMDBI_RECOMMENDNAME,
+ RPMDBI_SUGGESTNAME,
+ RPMDBI_SUPPLEMENTNAME,
+ RPMDBI_ENHANCENAME,
+ };
+
if (!(db_home && db_home[0] != '%')) {
rpmlog(RPMLOG_ERR, _("no dbpath has been set\n"));
free(db_home);
@@ -815,8 +475,10 @@ static rpmdb newRpmdb(const char * root, const char * home,
db->db_fullpath = rpmGenPath(db->db_root, db->db_home, NULL);
/* XXX remove environment after chrooted operations, for now... */
db->db_remove_env = (!rstreq(db->db_root, "/") ? 1 : 0);
- db->_dbi = xcalloc(dbiTagsMax, sizeof(*db->_dbi));
- db->db_ver = DB_VERSION_MAJOR; /* XXX just to put something in messages */
+ db->db_tags = dbiTags;
+ db->db_ndbi = sizeof(dbiTags) / sizeof(rpmDbiTag);
+ db->db_indexes = xcalloc(db->db_ndbi, sizeof(*db->db_indexes));
+ db->db_descr = xstrdup("unknown db");
db->nrefs = 0;
return rpmdbLink(db);
}
@@ -838,19 +500,15 @@ static int openDatabase(const char * prefix,
if (db == NULL)
return 1;
- /* Try to ensure db home exists, error out if we cant even create */
+ /* Try to ensure db home exists, error out if we can't even create */
rc = rpmioMkpath(rpmdbHome(db), 0755, getuid(), getgid());
if (rc == 0) {
- if (rpmdbRock == NULL && (db->db_mode & (O_RDWR|O_WRONLY)) != 0) {
- (void) rpmsqEnable(SIGHUP, NULL);
- (void) rpmsqEnable(SIGINT, NULL);
- (void) rpmsqEnable(SIGTERM, NULL);
- (void) rpmsqEnable(SIGQUIT, NULL);
- (void) rpmsqEnable(SIGPIPE, NULL);
+ if (rpmdbRock == NULL) {
+ rpmsqActivate(1);
}
/* Just the primary Packages database opened here */
- rc = (rpmdbOpenIndex(db, RPMDBI_PACKAGES, db->db_flags) != NULL) ? 0 : -2;
+ rc = pkgdbOpen(db, db->db_flags, NULL);
}
if (rc || justCheck || dbp == NULL)
@@ -911,7 +569,10 @@ int rpmdbVerify(const char * prefix)
int xx;
rc = rpmdbOpenAll(db);
- rc = dbiForeach(db->_dbi, dbiVerify, 0);
+
+ if (db->db_pkgs)
+ rc += dbiVerify(db->db_pkgs, 0);
+ rc += dbiForeach(db->db_indexes, db->db_ndbi, dbiVerify, 0);
xx = rpmdbClose(db);
if (xx && rc == 0) rc = xx;
@@ -920,7 +581,7 @@ int rpmdbVerify(const char * prefix)
return rc;
}
-static Header rpmdbGetHeaderAt(rpmdb db, unsigned int offset)
+Header rpmdbGetHeaderAt(rpmdb db, unsigned int offset)
{
rpmdbMatchIterator mi = rpmdbInitIterator(db, RPMDBI_PACKAGES,
&offset, sizeof(offset));
@@ -936,9 +597,9 @@ static Header rpmdbGetHeaderAt(rpmdb db, unsigned int offset)
* @param filespec
* @param usestate take file state into account?
* @retval matches
- * @return 0 on success, 1 on not found, -2 on error
+ * @return RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL
*/
-static int rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
+static rpmRC rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
int usestate, dbiIndexSet * matches)
{
char * dirName = NULL;
@@ -947,7 +608,7 @@ static int rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
fingerPrint * fp1 = NULL;
dbiIndexSet allMatches = NULL;
unsigned int i;
- int rc = -2; /* assume error */
+ rpmRC rc = RPMRC_FAIL; /* assume error */
*matches = NULL;
if (filespec == NULL) return rc; /* nothing alloced yet */
@@ -964,11 +625,11 @@ static int rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
if (baseName == NULL)
goto exit;
- rc = dbiGetToSet(dbi, baseName, 0, &allMatches);
+ rc = indexGet(dbi, baseName, 0, &allMatches);
if (rc || allMatches == NULL) goto exit;
- *matches = xcalloc(1, sizeof(**matches));
+ *matches = dbiIndexSetNew(0);
fpc = fpCacheCreate(allMatches->count, NULL);
fpLookup(fpc, dirName, baseName, &fp1);
@@ -996,7 +657,7 @@ static int rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
headerGet(h, RPMTAG_FILESTATES, &fs, HEADERGET_MINMEM);
do {
- int num = dbiIndexRecordFileNumber(allMatches, i);
+ unsigned int num = dbiIndexRecordFileNumber(allMatches, i);
int skip = 0;
if (usestate) {
@@ -1009,11 +670,8 @@ static int rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
if (!skip) {
const char *dirName = dirNames[dirIndexes[num]];
if (fpLookupEquals(fpc, fp1, dirName, baseNames[num])) {
- struct dbiIndexItem rec = {
- .hdrNum = dbiIndexRecordOffset(allMatches, i),
- .tagNum = dbiIndexRecordFileNumber(allMatches, i),
- };
- dbiAppendSet(*matches, &rec, 1, sizeof(rec), 0);
+ dbiIndexSetAppendOne(*matches, dbiIndexRecordOffset(allMatches, i),
+ dbiIndexRecordFileNumber(allMatches, i), 0);
}
}
@@ -1036,9 +694,9 @@ static int rpmdbFindByFile(rpmdb db, dbiIndex dbi, const char *filespec,
if ((*matches)->count == 0) {
*matches = dbiIndexSetFree(*matches);
- rc = 1;
+ rc = RPMRC_NOTFOUND;
} else {
- rc = 0;
+ rc = RPMRC_OK;
}
exit:
@@ -1049,29 +707,29 @@ exit:
int rpmdbCountPackages(rpmdb db, const char * name)
{
- int rc = -1;
- dbiIndex dbi = rpmdbOpenIndex(db, RPMDBI_NAME, 0);
+ int count = -1;
+ dbiIndex dbi = NULL;
- if (dbi != NULL && name != NULL) {
+ if (name != NULL && indexOpen(db, RPMDBI_NAME, 0, &dbi) == 0) {
dbiIndexSet matches = NULL;
- rc = dbiGetToSet(dbi, name, strlen(name), &matches);
+ rpmRC rc = indexGet(dbi, name, strlen(name), &matches);
- if (rc == 0) {
- rc = dbiIndexSetCount(matches);
+ if (rc == RPMRC_OK) {
+ count = dbiIndexSetCount(matches);
} else {
- rc = (rc == DB_NOTFOUND) ? 0 : -1;
+ count = (rc == RPMRC_NOTFOUND) ? 0 : -1;
}
dbiIndexSetFree(matches);
}
- return rc;
+ return count;
}
/**
* Attempt partial matches on name[-version[-release]][.arch] strings.
* @param db rpmdb handle
- * @param dbc index database cursor
+ * @param dbi index database
* @param name package name
* @param epoch package epoch (-1 for any epoch)
* @param version package version (can be a pattern)
@@ -1080,7 +738,7 @@ int rpmdbCountPackages(rpmdb db, const char * name)
* @retval matches set of header instances that match
* @return RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL
*/
-static rpmRC dbiFindMatches(rpmdb db, dbiCursor dbc,
+static rpmRC dbiFindMatches(rpmdb db, dbiIndex dbi,
const char * name,
int64_t epoch,
const char * version,
@@ -1089,16 +747,18 @@ static rpmRC dbiFindMatches(rpmdb db, dbiCursor dbc,
dbiIndexSet * matches)
{
unsigned int gotMatches = 0;
- int rc;
+ rpmRC rc;
unsigned int i;
- rc = dbiCursorGetToSet(dbc, name, strlen(name), matches);
+ rc = indexGet(dbi, name, strlen(name), matches);
- if (rc != 0) {
- return (rc == DB_NOTFOUND) ? RPMRC_NOTFOUND : RPMRC_FAIL;
- } else if (epoch < 0 && version == NULL && release == NULL && arch == NULL) {
- return RPMRC_OK;
- }
+ /* No matches on the name, anything else wont match either */
+ if (rc != RPMRC_OK)
+ goto exit;
+
+ /* If we got matches on name and nothing else was specified, we're done */
+ if (epoch < 0 && version == NULL && release == NULL && arch == NULL)
+ goto exit;
/* Make sure the version and release match. */
for (i = 0; i < dbiIndexSetCount(*matches); i++) {
@@ -1184,16 +844,14 @@ static rpmRC dbiFindByLabelArch(rpmdb db, dbiIndex dbi,
char c;
int brackets;
rpmRC rc;
- dbiCursor dbc;
if (arglen == 0) return RPMRC_NOTFOUND;
strncpy(localarg, arg, arglen);
localarg[arglen] = '\0';
- dbc = dbiCursorInit(dbi, 0);
/* did they give us just a name? */
- rc = dbiFindMatches(db, dbc, localarg, -1, NULL, NULL, arch, matches);
+ rc = dbiFindMatches(db, dbi, localarg, -1, NULL, NULL, arch, matches);
if (rc != RPMRC_NOTFOUND)
goto exit;
@@ -1228,7 +886,7 @@ static rpmRC dbiFindByLabelArch(rpmdb db, dbiIndex dbi,
*s = '\0';
epoch = splitEpoch(s + 1, &version);
- rc = dbiFindMatches(db, dbc, localarg, epoch, version, NULL, arch, matches);
+ rc = dbiFindMatches(db, dbi, localarg, epoch, version, NULL, arch, matches);
if (rc != RPMRC_NOTFOUND) goto exit;
/* FIX: double indirection */
@@ -1262,9 +920,8 @@ static rpmRC dbiFindByLabelArch(rpmdb db, dbiIndex dbi,
*s = '\0';
/* FIX: *matches may be NULL. */
epoch = splitEpoch(s + 1, &version);
- rc = dbiFindMatches(db, dbc, localarg, epoch, version, release, arch, matches);
+ rc = dbiFindMatches(db, dbi, localarg, epoch, version, release, arch, matches);
exit:
- dbiCursorFree(dbc);
return rc;
}
@@ -1298,22 +955,16 @@ static int miFreeHeader(rpmdbMatchIterator mi, dbiIndex dbi)
return 0;
if (dbi && mi->mi_dbc && mi->mi_modified && mi->mi_prevoffset) {
- DBT key, data;
- sigset_t signalMask;
rpmRC rpmrc = RPMRC_NOTFOUND;
-
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
- key.data = (void *) &mi->mi_prevoffset;
- key.size = sizeof(mi->mi_prevoffset);
- data.data = headerExport(mi->mi_h, &data.size);
+ unsigned int hdrLen = 0;
+ unsigned char *hdrBlob = headerExport(mi->mi_h, &hdrLen);
/* Check header digest/signature on blob export (if requested). */
if (mi->mi_hdrchk && mi->mi_ts) {
char * msg = NULL;
int lvl;
- rpmrc = (*mi->mi_hdrchk) (mi->mi_ts, data.data, data.size, &msg);
+ rpmrc = (*mi->mi_hdrchk) (mi->mi_ts, hdrBlob, hdrLen, &msg);
lvl = (rpmrc == RPMRC_FAIL ? RPMLOG_ERR : RPMLOG_DEBUG);
rpmlog(lvl, "%s h#%8u %s",
(rpmrc == RPMRC_FAIL ? _("miFreeHeader: skipping") : "write"),
@@ -1321,19 +972,22 @@ static int miFreeHeader(rpmdbMatchIterator mi, dbiIndex dbi)
msg = _free(msg);
}
- if (data.data != NULL && rpmrc != RPMRC_FAIL) {
- (void) blockSignals(&signalMask);
- rc = dbiCursorPut(mi->mi_dbc, &key, &data, DB_KEYLAST);
+ if (hdrBlob != NULL && rpmrc != RPMRC_FAIL) {
+ rpmsqBlock(SIG_BLOCK);
+ dbCtrl(mi->mi_db, DB_CTRL_LOCK_RW);
+ rc = pkgdbPut(dbi, mi->mi_dbc, mi->mi_prevoffset,
+ hdrBlob, hdrLen);
+ dbCtrl(mi->mi_db, DB_CTRL_INDEXSYNC);
+ dbCtrl(mi->mi_db, DB_CTRL_UNLOCK_RW);
+ rpmsqBlock(SIG_UNBLOCK);
+
if (rc) {
rpmlog(RPMLOG_ERR,
_("error(%d) storing record #%d into %s\n"),
rc, mi->mi_prevoffset, dbiName(dbi));
}
- dbiSync(dbi, 0);
- (void) unblockSignals(&signalMask);
}
- data.data = _free(data.data);
- data.size = 0;
+ free(hdrBlob);
}
mi->mi_h = headerFree(mi->mi_h);
@@ -1344,7 +998,7 @@ static int miFreeHeader(rpmdbMatchIterator mi, dbiIndex dbi)
rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi)
{
rpmdbMatchIterator * prev, next;
- dbiIndex dbi;
+ dbiIndex dbi = NULL;
int i;
if (mi == NULL)
@@ -1356,13 +1010,14 @@ rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi)
if (next) {
*prev = next->mi_next;
next->mi_next = NULL;
- }
+ } else
+ return NULL;
- dbi = rpmdbOpenIndex(mi->mi_db, RPMDBI_PACKAGES, 0);
+ pkgdbOpen(mi->mi_db, 0, &dbi);
miFreeHeader(mi, dbi);
- mi->mi_dbc = dbiCursorFree(mi->mi_dbc);
+ mi->mi_dbc = dbiCursorFree(dbi, mi->mi_dbc);
if (mi->mi_re != NULL)
for (i = 0; i < mi->mi_nre; i++) {
@@ -1376,13 +1031,12 @@ rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi)
mi->mi_re = _free(mi->mi_re);
mi->mi_set = dbiIndexSetFree(mi->mi_set);
- mi->mi_keyp = _free(mi->mi_keyp);
rpmdbClose(mi->mi_db);
mi->mi_ts = rpmtsFree(mi->mi_ts);
mi = _free(mi);
- (void) rpmdbCheckSignals();
+ (void) rpmsqPoll();
return NULL;
}
@@ -1402,6 +1056,24 @@ int rpmdbGetIteratorCount(rpmdbMatchIterator mi)
return (mi && mi->mi_set ? mi->mi_set->count : 0);
}
+int rpmdbGetIteratorIndex(rpmdbMatchIterator mi)
+{
+ return (mi ? mi->mi_setx : 0);
+}
+
+void rpmdbSetIteratorIndex(rpmdbMatchIterator mi, unsigned int ix)
+{
+ if (mi)
+ mi->mi_setx = ix;
+}
+
+unsigned int rpmdbGetIteratorOffsetFor(rpmdbMatchIterator mi, unsigned int ix)
+{
+ if (mi && mi->mi_set && ix < mi->mi_set->count)
+ return mi->mi_set->recs[ix].hdrNum;
+ return 0;
+}
+
/**
* Return pattern match.
* @param mire match iterator regex
@@ -1714,11 +1386,11 @@ int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite)
int rc;
if (mi == NULL)
return 0;
- rc = (mi->mi_cflags & DB_WRITECURSOR) ? 1 : 0;
+ rc = (mi->mi_cflags & DBC_WRITE) ? 1 : 0;
if (rewrite)
- mi->mi_cflags |= DB_WRITECURSOR;
+ mi->mi_cflags |= DBC_WRITE;
else
- mi->mi_cflags &= ~DB_WRITECURSOR;
+ mi->mi_cflags &= ~DBC_WRITE;
return rc;
}
@@ -1766,9 +1438,9 @@ static rpmRC miVerifyHeader(rpmdbMatchIterator mi, const void *uh, size_t uhlen)
rpmrc = (*mi->mi_hdrchk) (mi->mi_ts, uh, uhlen, &msg);
lvl = (rpmrc == RPMRC_FAIL ? RPMLOG_ERR : RPMLOG_DEBUG);
- rpmlog(lvl, "%s h#%8u %s",
+ rpmlog(lvl, "%s h#%8u %s\n",
(rpmrc == RPMRC_FAIL ? _("rpmdbNextIterator: skipping") : " read"),
- mi->mi_offset, (msg ? msg : "\n"));
+ mi->mi_offset, (msg ? msg : ""));
msg = _free(msg);
/* Mark header checked. */
@@ -1782,20 +1454,16 @@ static rpmRC miVerifyHeader(rpmdbMatchIterator mi, const void *uh, size_t uhlen)
/* FIX: mi->mi_key.data may be NULL */
Header rpmdbNextIterator(rpmdbMatchIterator mi)
{
- dbiIndex dbi;
- void * uh;
+ dbiIndex dbi = NULL;
+ unsigned char * uh;
unsigned int uhlen;
- DBT key, data;
- void * keyp;
- size_t keylen;
int rc;
headerImportFlags importFlags = HEADERIMPORT_FAST;
if (mi == NULL)
return NULL;
- dbi = rpmdbOpenIndex(mi->mi_db, RPMDBI_PACKAGES, 0);
- if (dbi == NULL)
+ if (pkgdbOpen(mi->mi_db, 0, &dbi))
return NULL;
#if defined(_USE_COPY_LOAD)
@@ -1803,63 +1471,26 @@ Header rpmdbNextIterator(rpmdbMatchIterator mi)
#endif
/*
* Cursors are per-iterator, not per-dbi, so get a cursor for the
- * iterator on 1st call. If the iteration is to rewrite headers, and the
- * CDB model is used for the database, then the cursor needs to
- * marked with DB_WRITECURSOR as well.
+ * iterator on 1st call. If the iteration is to rewrite headers,
+ * then the cursor needs to marked with DBC_WRITE as well.
*/
if (mi->mi_dbc == NULL)
mi->mi_dbc = dbiCursorInit(dbi, mi->mi_cflags);
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
-
top:
uh = NULL;
uhlen = 0;
- union _dbswap mi_offset;
do {
-
if (mi->mi_set) {
if (!(mi->mi_setx < mi->mi_set->count))
return NULL;
mi->mi_offset = dbiIndexRecordOffset(mi->mi_set, mi->mi_setx);
mi->mi_filenum = dbiIndexRecordFileNumber(mi->mi_set, mi->mi_setx);
- mi_offset.ui = mi->mi_offset;
- if (dbiByteSwapped(dbi) == 1)
- _DBSWAP(mi_offset);
- keyp = &mi_offset;
- keylen = sizeof(mi_offset.ui);
} else {
-
- key.data = keyp = (void *)mi->mi_keyp;
- key.size = keylen = mi->mi_keylen;
- data.data = uh;
- data.size = uhlen;
-#if !defined(_USE_COPY_LOAD)
- data.flags |= DB_DBT_MALLOC;
-#endif
- rc = dbiCursorGet(mi->mi_dbc, &key, &data,
- (key.data == NULL ? DB_NEXT : DB_SET));
- data.flags = 0;
- keyp = key.data;
- keylen = key.size;
- uh = data.data;
- uhlen = data.size;
-
- /*
- * If we got the next key, save the header instance number.
- *
- * Instance 0 (i.e. mi->mi_setx == 0) is the
- * largest header instance in the database, and should be
- * skipped.
- */
- if (keyp && mi->mi_setx && rc == 0) {
- memcpy(&mi_offset, keyp, sizeof(mi_offset.ui));
- if (dbiByteSwapped(dbi) == 1)
- _DBSWAP(mi_offset);
- mi->mi_offset = mi_offset.ui;
- }
+ rc = pkgdbGet(dbi, mi->mi_dbc, 0, &uh, &uhlen);
+ if (rc == 0)
+ mi->mi_offset = pkgdbKey(dbi, mi->mi_dbc);
/* Terminate on error or end of keys */
if (rc || (mi->mi_setx && mi->mi_offset == 0))
@@ -1869,22 +1500,12 @@ top:
} while (mi->mi_offset == 0);
/* If next header is identical, return it now. */
- if (mi->mi_prevoffset && mi->mi_offset == mi->mi_prevoffset) {
- /* ...but rpmdb record numbers are unique, avoid endless loop */
- return (mi->mi_rpmtag == RPMDBI_PACKAGES) ? NULL : mi->mi_h;
- }
+ if (mi->mi_prevoffset && mi->mi_offset == mi->mi_prevoffset)
+ return mi->mi_h;
/* Retrieve next header blob for index iterator. */
if (uh == NULL) {
- key.data = keyp;
- key.size = keylen;
-#if !defined(_USE_COPY_LOAD)
- data.flags |= DB_DBT_MALLOC;
-#endif
- rc = dbiCursorGet(mi->mi_dbc, &key, &data, DB_SET);
- data.flags = 0;
- uh = data.data;
- uhlen = data.size;
+ rc = pkgdbGet(dbi, mi->mi_dbc, mi->mi_offset, &uh, &uhlen);
if (rc)
return NULL;
}
@@ -1914,10 +1535,7 @@ top:
* Skip this header if iterator selector (if any) doesn't match.
*/
if (mireSkip(mi)) {
- /* XXX hack, can't restart with Packages locked on single instance. */
- if (mi->mi_set || mi->mi_keyp == NULL)
- goto top;
- return NULL;
+ goto top;
}
headerSetInstance(mi->mi_h, mi->mi_offset);
@@ -1934,22 +1552,19 @@ top:
*/
void rpmdbSortIterator(rpmdbMatchIterator mi)
{
- if (mi && mi->mi_set && mi->mi_set->recs && mi->mi_set->count > 0) {
- /*
- * mergesort is much (~10x with lots of identical basenames) faster
- * than pure quicksort, but glibc uses msort_with_tmp() on stack.
- */
-#if defined(__GLIBC__)
- qsort(mi->mi_set->recs, mi->mi_set->count,
- sizeof(*mi->mi_set->recs), hdrNumCmp);
-#else
- mergesort(mi->mi_set->recs, mi->mi_set->count,
- sizeof(*mi->mi_set->recs), hdrNumCmp);
-#endif
+ if (mi && mi->mi_set) {
+ dbiIndexSetSort(mi->mi_set);
mi->mi_sorted = 1;
}
}
+void rpmdbUniqIterator(rpmdbMatchIterator mi)
+{
+ if (mi && mi->mi_set) {
+ dbiIndexSetUniq(mi->mi_set, mi->mi_sorted);
+ }
+}
+
int rpmdbExtendIterator(rpmdbMatchIterator mi,
const void * keyp, size_t keylen)
{
@@ -1960,16 +1575,13 @@ int rpmdbExtendIterator(rpmdbMatchIterator mi,
if (mi == NULL || keyp == NULL)
return rc;
- dbi = rpmdbOpenIndex(mi->mi_db, mi->mi_rpmtag, 0);
+ rc = indexOpen(mi->mi_db, mi->mi_rpmtag, 0, &dbi);
- if (dbiGetToSet(dbi, keyp, keylen, &set) == 0) {
+ if (rc == 0 && indexGet(dbi, keyp, keylen, &set) == RPMRC_OK) {
if (mi->mi_set == NULL) {
mi->mi_set = set;
} else {
- dbiGrowSet(mi->mi_set, set->count);
- memcpy(mi->mi_set->recs + mi->mi_set->count, set->recs,
- set->count * sizeof(*(mi->mi_set->recs)));
- mi->mi_set->count += set->count;
+ dbiIndexSetAppendSet(mi->mi_set, set, 0);
dbiIndexSetFree(set);
}
rc = 0;
@@ -1978,22 +1590,31 @@ int rpmdbExtendIterator(rpmdbMatchIterator mi,
return rc;
}
-int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums)
+int rpmdbFilterIterator(rpmdbMatchIterator mi, packageHash hdrNums, int neg)
{
- if (mi == NULL || hdrNums == NULL || removedHashNumKeys(hdrNums) <= 0)
+ if (mi == NULL || hdrNums == NULL)
return 1;
if (!mi->mi_set)
- return 0;
+ return 0;
+
+ if (packageHashNumKeys(hdrNums) == 0) {
+ if (!neg)
+ mi->mi_set->count = 0;
+ return 0;
+ }
unsigned int from;
unsigned int to = 0;
unsigned int num = mi->mi_set->count;
+ int cond;
assert(mi->mi_set->count > 0);
for (from = 0; from < num; from++) {
- if (removedHashHasEntry(hdrNums, mi->mi_set->recs[from].hdrNum)) {
+ cond = !packageHashHasEntry(hdrNums, mi->mi_set->recs[from].hdrNum);
+ cond = neg ? !cond : cond;
+ if (cond) {
mi->mi_set->count--;
continue;
}
@@ -2004,14 +1625,26 @@ int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums)
return 0;
}
-int rpmdbAppendIterator(rpmdbMatchIterator mi, const int * hdrNums, int nHdrNums)
+int rpmdbPruneIterator(rpmdbMatchIterator mi, packageHash hdrNums)
+{
+ if (packageHashNumKeys(hdrNums) <= 0)
+ return 1;
+
+ return rpmdbFilterIterator(mi, hdrNums, 1);
+}
+
+
+int rpmdbAppendIterator(rpmdbMatchIterator mi,
+ const unsigned int * hdrNums, unsigned int nHdrNums)
{
- if (mi == NULL || hdrNums == NULL || nHdrNums <= 0)
+ if (mi == NULL || hdrNums == NULL || nHdrNums == 0)
return 1;
if (mi->mi_set == NULL)
- mi->mi_set = xcalloc(1, sizeof(*mi->mi_set));
- (void) dbiAppendSet(mi->mi_set, hdrNums, nHdrNums, sizeof(*hdrNums), 0);
+ mi->mi_set = dbiIndexSetNew(nHdrNums);
+
+ for (unsigned int i = 0; i < nHdrNums; i++)
+ dbiIndexSetAppendOne(mi->mi_set, hdrNums[i], 0, 0);
return 0;
}
@@ -2019,12 +1652,15 @@ rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag)
{
rpmdbMatchIterator mi = NULL;
- if (rpmdbOpenIndex(db, dbitag, 0) == NULL)
- return NULL;
+ if (dbitag == RPMDBI_PACKAGES) {
+ if (pkgdbOpen(db, 0, NULL))
+ return NULL;
+ } else {
+ if (indexOpen(db, dbitag, 0, NULL))
+ return NULL;
+ }
mi = xcalloc(1, sizeof(*mi));
- mi->mi_keyp = NULL;
- mi->mi_keylen = 0;
mi->mi_set = NULL;
mi->mi_db = rpmdbLink(db);
mi->mi_rpmtag = dbitag;
@@ -2051,19 +1687,32 @@ rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag)
return mi;
};
-rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
- const void * keyp, size_t keylen)
+static rpmdbMatchIterator pkgdbIterInit(rpmdb db,
+ const unsigned int * keyp, size_t keylen)
{
rpmdbMatchIterator mi = NULL;
- dbiIndexSet set = NULL;
- dbiIndex dbi;
- void * mi_keyp = NULL;
- rpmDbiTagVal dbtag = rpmtag;
+ rpmDbiTagVal dbtag = RPMDBI_PACKAGES;
+ dbiIndex pkgs = NULL;
- if (db == NULL)
+ /* Require a sane keylen if one is specified */
+ if (keyp && keylen != sizeof(*keyp))
return NULL;
- (void) rpmdbCheckSignals();
+ if (pkgdbOpen(db, 0, &pkgs) == 0) {
+ mi = rpmdbNewIterator(db, dbtag);
+ if (keyp)
+ rpmdbAppendIterator(mi, keyp, 1);
+ }
+ return mi;
+}
+
+static rpmdbMatchIterator indexIterInit(rpmdb db, rpmDbiTagVal rpmtag,
+ const void * keyp, size_t keylen)
+{
+ rpmdbMatchIterator mi = NULL;
+ rpmDbiTagVal dbtag = rpmtag;
+ dbiIndex dbi = NULL;
+ dbiIndexSet set = NULL;
/* Fixup the physical index for our pseudo indexes */
if (rpmtag == RPMDBI_LABEL) {
@@ -2072,19 +1721,10 @@ rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
dbtag = RPMDBI_BASENAMES;
}
- dbi = rpmdbOpenIndex(db, dbtag, 0);
- if (dbi == NULL)
- return NULL;
-
- /*
- * Handle label and file name special cases.
- * Otherwise, retrieve join keys for secondary lookup.
- */
- if (rpmtag != RPMDBI_PACKAGES) {
+ if (indexOpen(db, dbtag, 0, &dbi) == 0) {
int rc = 0;
if (keyp) {
-
if (rpmtag == RPMDBI_LABEL) {
rc = dbiFindByLabel(db, dbi, keyp, &set);
} else if (rpmtag == RPMDBI_BASENAMES) {
@@ -2092,117 +1732,130 @@ rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
} else if (rpmtag == RPMDBI_INSTFILENAMES) {
rc = rpmdbFindByFile(db, dbi, keyp, 1, &set);
} else {
- rc = dbiGetToSet(dbi, keyp, keylen, &set);
+ rc = indexGet(dbi, keyp, keylen, &set);
}
} else {
/* get all entries from index */
- dbiCursor dbc = dbiCursorInit(dbi, 0);
-
- do {
- rc = dbiCursorGetToSet(dbc, NULL, 0, &set);
- } while (rc == 0);
-
- /* If we got some results, not found is not an error */
- if (rc == DB_NOTFOUND && set != NULL)
- rc = 0;
-
- dbiCursorFree(dbc);
+ rc = indexGet(dbi, NULL, 0, &set);
}
if (rc) { /* error/not found */
set = dbiIndexSetFree(set);
- goto exit;
+ } else {
+ mi = rpmdbNewIterator(db, dbtag);
+ mi->mi_set = set;
+
+ if (keyp) {
+ rpmdbSortIterator(mi);
+ }
}
}
+
+ return mi;
+}
- /* Copy the retrieval key, byte swapping header instance if necessary. */
- if (keyp) {
- switch (dbtag) {
- case RPMDBI_PACKAGES:
- { union _dbswap *k;
+rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
+ const void * keyp, size_t keylen)
+{
+ rpmdbMatchIterator mi = NULL;
- assert(keylen == sizeof(k->ui)); /* xxx programmer error */
- k = xmalloc(sizeof(*k));
- memcpy(k, keyp, keylen);
- if (dbiByteSwapped(dbi) == 1)
- _DBSWAP(*k);
- mi_keyp = k;
- } break;
- default:
- { char * k;
- if (keylen == 0)
- keylen = strlen(keyp);
- k = xmalloc(keylen + 1);
- memcpy(k, keyp, keylen);
- k[keylen] = '\0'; /* XXX assumes strings */
- mi_keyp = k;
- } break;
- }
+ if (db != NULL) {
+ (void) rpmsqPoll();
+
+ if (rpmtag == RPMDBI_PACKAGES)
+ mi = pkgdbIterInit(db, keyp, keylen);
+ else
+ mi = indexIterInit(db, rpmtag, keyp, keylen);
}
- mi = rpmdbNewIterator(db, dbtag);
- mi->mi_keyp = mi_keyp;
- mi->mi_keylen = keylen;
- mi->mi_set = set;
+ return mi;
+}
+
+rpmdbMatchIterator rpmdbInitPrefixIterator(rpmdb db, rpmDbiTagVal rpmtag,
+ const void * pfx, size_t plen)
+{
+ rpmdbMatchIterator mi = NULL;
+ dbiIndexSet set = NULL;
+ dbiIndex dbi = NULL;
+ rpmDbiTagVal dbtag = rpmtag;
+
+ if (!pfx)
+ return NULL;
+
+ if (db != NULL && rpmtag != RPMDBI_PACKAGES) {
+ (void) rpmsqPoll();
+
+
+ if (indexOpen(db, dbtag, 0, &dbi) == 0) {
+ int rc = 0;
+
+ rc = indexPrefixGet(dbi, pfx, plen, &set);
+
+ if (rc) {
+ set = dbiIndexSetFree(set);
+ } else {
+ mi = rpmdbNewIterator(db, dbtag);
+ mi->mi_set = set;
+ rpmdbSortIterator(mi);
+ }
+ }
- if (dbtag != RPMDBI_PACKAGES && keyp == NULL) {
- rpmdbSortIterator(mi);
}
-exit:
return mi;
}
/*
* Convert current tag data to db key
* @param tagdata Tag data container
- * @retval key DB key struct
- * @retval freedata Should key.data be freed afterwards
- * Return 0 to signal this item should be discarded (ie continue)
+ * @retval keylen Length of key
+ * @return Pointer to key value or NULL to signal skip
*/
-static int td2key(rpmtd tagdata, DBT *key, int *freedata)
+static const void * td2key(rpmtd tagdata, unsigned int *keylen)
{
+ const void * data = NULL;
+ unsigned int size = 0;
const char *str = NULL;
- *freedata = 0;
switch (rpmtdType(tagdata)) {
case RPM_CHAR_TYPE:
case RPM_INT8_TYPE:
- key->size = sizeof(uint8_t);
- key->data = rpmtdGetChar(tagdata);
+ size = sizeof(uint8_t);
+ data = rpmtdGetChar(tagdata);
break;
case RPM_INT16_TYPE:
- key->size = sizeof(uint16_t);
- key->data = rpmtdGetUint16(tagdata);
+ size = sizeof(uint16_t);
+ data = rpmtdGetUint16(tagdata);
break;
case RPM_INT32_TYPE:
- key->size = sizeof(uint32_t);
- key->data = rpmtdGetUint32(tagdata);
+ size = sizeof(uint32_t);
+ data = rpmtdGetUint32(tagdata);
break;
case RPM_INT64_TYPE:
- key->size = sizeof(uint64_t);
- key->data = rpmtdGetUint64(tagdata);
+ size = sizeof(uint64_t);
+ data = rpmtdGetUint64(tagdata);
break;
case RPM_BIN_TYPE:
- key->size = tagdata->count;
- key->data = tagdata->data;
+ size = tagdata->count;
+ data = tagdata->data;
break;
case RPM_STRING_TYPE:
case RPM_I18NSTRING_TYPE:
case RPM_STRING_ARRAY_TYPE:
- default:
str = rpmtdGetString(tagdata);
- key->data = (char *) str; /* XXX discards const */
- key->size = strlen(str);
+ if (str) {
+ size = strlen(str);
+ data = str;
+ }
+ break;
+ default:
break;
}
- if (key->size == 0)
- key->size = strlen((char *)key->data);
- if (key->size == 0)
- key->size++; /* XXX "/" fixup. */
+ if (data && keylen)
+ *keylen = size;
- return 1;
+ return data;
}
/*
* rpmdbIndexIterator
@@ -2216,10 +1869,9 @@ rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag)
if (db == NULL)
return NULL;
- (void) rpmdbCheckSignals();
+ (void) rpmsqPoll();
- dbi = rpmdbOpenIndex(db, rpmtag, 0);
- if (dbi == NULL)
+ if (indexOpen(db, rpmtag, 0, &dbi))
return NULL;
/* Chain cursors for teardown on abnormal exit. */
@@ -2238,37 +1890,69 @@ rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag)
int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen)
{
int rc;
- DBT data;
+ unsigned int iikeylen = 0; /* argh, size_t vs uint pointer... */
if (ii == NULL)
return -1;
if (ii->ii_dbc == NULL)
- ii->ii_dbc = dbiCursorInit(ii->ii_dbi, 0);
+ ii->ii_dbc = dbiCursorInit(ii->ii_dbi, DBC_READ);
/* free old data */
ii->ii_set = dbiIndexSetFree(ii->ii_set);
- memset(&data, 0, sizeof(data));
- rc = dbiCursorGet(ii->ii_dbc, &ii->ii_key, &data, DB_NEXT);
+ rc = idxdbGet(ii->ii_dbi, ii->ii_dbc, NULL, 0, &ii->ii_set, DBC_NORMAL_SEARCH);
- if (rc != 0) {
- *key = NULL;
- *keylen = 0;
+ *key = idxdbKey(ii->ii_dbi, ii->ii_dbc, &iikeylen);
+ *keylen = iikeylen;
- if (rc != DB_NOTFOUND) {
- rpmlog(RPMLOG_ERR,
- _("error(%d:%s) getting next key from %s index\n"),
- rc, db_strerror(rc), rpmTagGetName(ii->ii_rpmtag));
- }
- return -1;
- }
+ return (rc == RPMRC_OK) ? 0 : -1;
+}
- (void) dbt2set(ii->ii_dbi, &data, &ii->ii_set);
- *key = ii->ii_key.data;
- *keylen = ii->ii_key.size;
+int rpmdbIndexIteratorNextTd(rpmdbIndexIterator ii, rpmtd keytd)
+{
+ size_t keylen = 0;
+ const void * keyp = NULL;
- return 0;
+ int rc = rpmdbIndexIteratorNext(ii, &keyp, &keylen);
+
+ if (rc == 0) {
+ rpmTagVal tag = ii->ii_rpmtag;
+ rpmTagClass tagclass = rpmTagGetClass(tag);
+
+ /* Set the common values, overridden below as necessary */
+ keytd->type = rpmTagGetTagType(tag);
+ keytd->tag = tag;
+ keytd->flags = RPMTD_ALLOCED;
+ keytd->count = 1;
+
+ switch (tagclass) {
+ case RPM_STRING_CLASS: {
+ /*
+ * XXX: We never return arrays here, so everything is a
+ * "simple" string. However this can disagree with the
+ * type of the index tag, eg requires are string arrays.
+ */
+ char *key = memcpy(xmalloc(keylen + 1), keyp, keylen);
+ key[keylen] = '\0';
+ keytd->data = key;
+ keytd->type = RPM_STRING_TYPE;
+ } break;
+ case RPM_BINARY_CLASS:
+ /* Binary types abuse count for data length */
+ keytd->count = keylen;
+ /* fallthrough */
+ case RPM_NUMERIC_CLASS:
+ keytd->data = memcpy(xmalloc(keylen), keyp, keylen);
+ break;
+ default:
+ rpmtdReset(keytd);
+ rc = -1;
+ break;
+ }
+ }
+
+ return rc;
}
unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii)
@@ -2285,6 +1969,24 @@ unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr)
return dbiIndexRecordOffset(ii->ii_set, nr);
}
+unsigned int *rpmdbIndexIteratorPkgOffsets(rpmdbIndexIterator ii)
+{
+ int i;
+
+ if (!ii || !ii->ii_set)
+ return NULL;
+
+ if (ii->ii_hdrNums)
+ ii->ii_hdrNums = _free(ii->ii_hdrNums);
+
+ ii->ii_hdrNums = xmalloc(sizeof(*ii->ii_hdrNums) * ii->ii_set->count);
+ for (i = 0; i < ii->ii_set->count; i++) {
+ ii->ii_hdrNums[i] = ii->ii_set->recs[i].hdrNum;
+ }
+
+ return ii->ii_hdrNums;
+}
+
unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr)
{
if (!ii || !ii->ii_set)
@@ -2307,13 +2009,17 @@ rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii)
if (next) {
*prev = next->ii_next;
next->ii_next = NULL;
- }
+ } else
+ return NULL;
- ii->ii_dbc = dbiCursorFree(ii->ii_dbc);
+ ii->ii_dbc = dbiCursorFree(ii->ii_dbi, ii->ii_dbc);
ii->ii_dbi = NULL;
rpmdbClose(ii->ii_db);
ii->ii_set = dbiIndexSetFree(ii->ii_set);
+ if (ii->ii_hdrNums)
+ ii->ii_hdrNums = _free(ii->ii_hdrNums);
+
ii = _free(ii);
return NULL;
}
@@ -2332,56 +2038,16 @@ static void logAddRemove(const char *dbiname, int removing, rpmtd tagdata)
}
}
-/* Update primary Packages index. NULL hdr means remove */
-static int updatePackages(dbiIndex dbi, unsigned int hdrNum, DBT *hdr)
+static rpmRC indexDel(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h)
{
- union _dbswap mi_offset;
- int rc = 0;
- dbiCursor dbc;
- DBT key;
-
- if (dbi == NULL || hdrNum == 0)
- return 1;
-
- memset(&key, 0, sizeof(key));
-
- dbc = dbiCursorInit(dbi, DB_WRITECURSOR);
-
- mi_offset.ui = hdrNum;
- if (dbiByteSwapped(dbi) == 1)
- _DBSWAP(mi_offset);
- key.data = (void *) &mi_offset;
- key.size = sizeof(mi_offset.ui);
-
- if (hdr) {
- rc = dbiCursorPut(dbc, &key, hdr, DB_KEYLAST);
- if (rc) {
- rpmlog(RPMLOG_ERR,
- _("error(%d) adding header #%d record\n"), rc, hdrNum);
- }
- } else {
- DBT data;
-
- memset(&data, 0, sizeof(data));
- rc = dbiCursorGet(dbc, &key, &data, DB_SET);
- if (rc) {
- rpmlog(RPMLOG_ERR,
- _("error(%d) removing header #%d record\n"), rc, hdrNum);
- } else
- rc = dbiCursorDel(dbc, &key, &data, 0);
- }
-
- dbiCursorFree(dbc);
- dbiSync(dbi, 0);
-
- return rc;
+ return tag2index(dbi, rpmtag, hdrNum, h, idxdbDel);
}
int rpmdbRemove(rpmdb db, unsigned int hdrNum)
{
- dbiIndex dbi;
+ dbiIndex dbi = NULL;
+ dbiCursor dbc = NULL;
Header h;
- sigset_t signalMask;
int ret = 0;
if (db == NULL)
@@ -2399,112 +2065,32 @@ int rpmdbRemove(rpmdb db, unsigned int hdrNum)
free(nevra);
}
- (void) blockSignals(&signalMask);
+ if (pkgdbOpen(db, 0, &dbi))
+ return 1;
+
+ rpmsqBlock(SIG_BLOCK);
+ dbCtrl(db, DB_CTRL_LOCK_RW);
- dbi = rpmdbOpenIndex(db, RPMDBI_PACKAGES, 0);
/* Remove header from primary index */
- ret = updatePackages(dbi, hdrNum, NULL);
+ dbc = dbiCursorInit(dbi, DBC_WRITE);
+ ret = pkgdbDel(dbi, dbc, hdrNum);
+ dbiCursorFree(dbi, dbc);
/* Remove associated data from secondary indexes */
if (ret == 0) {
- struct dbiIndexItem rec = { .hdrNum = hdrNum, .tagNum = 0 };
- int rc = 0;
- dbiCursor dbc = NULL;
- DBT key, data;
-
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
+ for (int dbix = 0; dbix < db->db_ndbi; dbix++) {
+ rpmDbiTag rpmtag = db->db_tags[dbix];
- for (int dbix = 1; dbix < dbiTagsMax; dbix++) {
- rpmDbiTag rpmtag = dbiTags[dbix];
- struct rpmtd_s tagdata;
-
- if (!(dbi = rpmdbOpenIndex(db, rpmtag, 0)))
- continue;
-
- if (!headerGet(h, rpmtag, &tagdata, HEADERGET_MINMEM))
+ if (indexOpen(db, rpmtag, 0, &dbi))
continue;
- dbc = dbiCursorInit(dbi, DB_WRITECURSOR);
-
- logAddRemove(dbiName(dbi), 1, &tagdata);
- while (rpmtdNext(&tagdata) >= 0) {
- dbiIndexSet set;
- int freedata = 0;
-
- if (!td2key(&tagdata, &key, &freedata)) {
- continue;
- }
-
- /* XXX
- * This is almost right, but, if there are duplicate tag
- * values, there will be duplicate attempts to remove
- * the header instance. It's faster to just ignore errors
- * than to do things correctly.
- */
-
- /*
- * XXX with duplicates, an accurate data value and
- * DB_GET_BOTH is needed.
- * */
- set = NULL;
-
- rc = dbiCursorGet(dbc, &key, &data, DB_SET);
- if (rc == 0) { /* success */
- (void) dbt2set(dbi, &data, &set);
- } else if (rc == DB_NOTFOUND) { /* not found */
- goto cont;
- } else { /* error */
- rpmlog(RPMLOG_ERR,
- _("error(%d) setting \"%s\" records from %s index\n"),
- rc, (char*)key.data, dbiName(dbi));
- ret += 1;
- goto cont;
- }
-
- rc = dbiPruneSet(set, &rec, 1, sizeof(rec), 1);
-
- /* If nothing was pruned, then don't bother updating. */
- if (rc) {
- set = dbiIndexSetFree(set);
- goto cont;
- }
-
- if (set->count > 0) {
- (void) set2dbt(dbi, &data, set);
- rc = dbiCursorPut(dbc, &key, &data, DB_KEYLAST);
- if (rc) {
- rpmlog(RPMLOG_ERR,
- _("error(%d) storing record \"%s\" into %s\n"),
- rc, (char*)key.data, dbiName(dbi));
- ret += 1;
- }
- data.data = _free(data.data);
- data.size = 0;
- } else {
- rc = dbiCursorDel(dbc, &key, &data, 0);
- if (rc) {
- rpmlog(RPMLOG_ERR,
- _("error(%d) removing record \"%s\" from %s\n"),
- rc, (char*)key.data, dbiName(dbi));
- ret += 1;
- }
- }
- set = dbiIndexSetFree(set);
-cont:
- if (freedata) {
- free(key.data);
- }
- }
-
- dbc = dbiCursorFree(dbc);
- dbiSync(dbi, 0);
-
- rpmtdFreeData(&tagdata);
+ ret += indexDel(dbi, rpmtag, hdrNum, h);
}
}
- (void) unblockSignals(&signalMask);
+ dbCtrl(db, DB_CTRL_INDEXSYNC);
+ dbCtrl(db, DB_CTRL_UNLOCK_RW);
+ rpmsqBlock(SIG_UNBLOCK);
headerFree(h);
@@ -2512,79 +2098,109 @@ cont:
return 0;
}
-/* Get current header instance number or try to allocate a new one */
-static unsigned int pkgInstance(dbiIndex dbi, int alloc)
-{
- unsigned int hdrNum = 0;
-
- if (dbi != NULL && dbiType(dbi) == DBI_PRIMARY) {
- dbiCursor dbc;
- DBT key, data;
- unsigned int firstkey = 0;
- union _dbswap mi_offset;
- int ret;
-
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
-
- dbc = dbiCursorInit(dbi, alloc ? DB_WRITECURSOR : 0);
-
- /* Key 0 holds the current largest instance, fetch it */
- key.data = &firstkey;
- key.size = sizeof(firstkey);
- ret = dbiCursorGet(dbc, &key, &data, DB_SET);
+struct updateRichDepData {
+ ARGV_t argv;
+ int nargv;
+ int neg;
+ int level;
+ int *nargv_level;
+};
- if (ret == 0 && data.data) {
- memcpy(&mi_offset, data.data, sizeof(mi_offset.ui));
- if (dbiByteSwapped(dbi) == 1)
- _DBSWAP(mi_offset);
- hdrNum = mi_offset.ui;
+static rpmRC updateRichDepCB(void *cbdata, rpmrichParseType type,
+ const char *n, int nl, const char *e, int el, rpmsenseFlags sense,
+ rpmrichOp op, char **emsg) {
+ struct updateRichDepData *data = cbdata;
+ if (type == RPMRICH_PARSE_ENTER) {
+ data->level++;
+ data->nargv_level = xrealloc(data->nargv_level, data->level * (sizeof(int)));
+ data->nargv_level[data->level - 1] = data->nargv;
+ }
+ if (type == RPMRICH_PARSE_LEAVE) {
+ data->level--;
+ }
+ if (type == RPMRICH_PARSE_SIMPLE && nl && !(nl > 7 && !strncmp(n, "rpmlib(", 7))) {
+ char *name = xmalloc(nl + 2);
+ *name = data->neg ? '!' : ' ';
+ strncpy(name + 1, n, nl);
+ name[1 + nl] = 0;
+ argvAdd(&data->argv, name);
+ data->nargv++;
+ _free(name);
+ }
+ if (type == RPMRICH_PARSE_OP && (op == RPMRICHOP_IF || op == RPMRICHOP_UNLESS)) {
+ /* save nargv in case of ELSE */
+ data->nargv_level[data->level - 1] = data->nargv;
+ data->neg ^= 1;
+ }
+ if (type == RPMRICH_PARSE_OP && op == RPMRICHOP_ELSE) {
+ int i, nargv = data->nargv;
+ /* copy and invert condition block */
+ for (i = data->nargv_level[data->level - 1]; i < nargv; i++) {
+ char *name = data->argv[i];
+ *name ^= ' ' ^ '!';
+ argvAdd(&data->argv, name);
+ *name ^= ' ' ^ '!';
+ data->nargv++;
}
-
- if (alloc) {
- /* Rather complicated "increment by one", bswapping as needed */
- ++hdrNum;
- mi_offset.ui = hdrNum;
- if (dbiByteSwapped(dbi) == 1)
- _DBSWAP(mi_offset);
- if (ret == 0 && data.data) {
- memcpy(data.data, &mi_offset, sizeof(mi_offset.ui));
- } else {
- data.data = &mi_offset;
- data.size = sizeof(mi_offset.ui);
- }
-
- /* Unless we manage to insert the new instance number, we failed */
- ret = dbiCursorPut(dbc, &key, &data, DB_KEYLAST);
- if (ret) {
- hdrNum = 0;
- rpmlog(RPMLOG_ERR,
- _("error(%d) allocating new package instance\n"), ret);
+ data->neg ^= 1;
+ }
+ if (type == RPMRICH_PARSE_LEAVE && (op == RPMRICHOP_IF || op == RPMRICHOP_UNLESS)) {
+ data->neg ^= 1;
+ }
+ return RPMRC_OK;
+}
+
+static rpmRC updateRichDep(dbiIndex dbi, dbiCursor dbc, const char *str,
+ struct dbiIndexItem_s *rec,
+ idxfunc idxupdate)
+{
+ int n, i, rc = 0;
+ struct updateRichDepData data;
+
+ data.argv = argvNew();
+ data.neg = 0;
+ data.nargv = 0;
+ data.level = 0;
+ data.nargv_level = xcalloc(1, sizeof(int));
+ if (rpmrichParse(&str, NULL, updateRichDepCB, &data) == RPMRC_OK) {
+ n = argvCount(data.argv);
+ if (n) {
+ argvSort(data.argv, NULL);
+ for (i = 0; i < n; i++) {
+ char *name = data.argv[i];
+ if (i && !strcmp(data.argv[i - 1], name))
+ continue; /* ignore dups */
+ if (*name == ' ')
+ name++;
+ rc += idxupdate(dbi, dbc, name, strlen(name), rec);
}
-
- dbiSync(dbi, 0);
}
- dbiCursorFree(dbc);
}
-
- return hdrNum;
+ _free(data.nargv_level);
+ argvFree(data.argv);
+ return rc;
}
-/* Add data to secondary index */
-static int addToIndex(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h)
+static rpmRC tag2index(dbiIndex dbi, rpmTagVal rpmtag,
+ unsigned int hdrNum, Header h,
+ idxfunc idxupdate)
{
int i, rc = 0;
- struct rpmtd_s tagdata, reqflags;
+ struct rpmtd_s tagdata, reqflags, trig_index;
dbiCursor dbc = NULL;
switch (rpmtag) {
case RPMTAG_REQUIRENAME:
headerGet(h, RPMTAG_REQUIREFLAGS, &reqflags, HEADERGET_MINMEM);
- /* fallthrough */
- default:
- headerGet(h, rpmtag, &tagdata, HEADERGET_MINMEM);
+ break;
+ case RPMTAG_FILETRIGGERNAME:
+ headerGet(h, RPMTAG_FILETRIGGERINDEX, &trig_index, HEADERGET_MINMEM);
+ break;
+ case RPMTAG_TRANSFILETRIGGERNAME:
+ headerGet(h, RPMTAG_TRANSFILETRIGGERINDEX, &trig_index, HEADERGET_MINMEM);
break;
}
+ headerGet(h, rpmtag, &tagdata, HEADERGET_MINMEM);
if (rpmtdCount(&tagdata) == 0) {
if (rpmtag != RPMTAG_GROUP)
@@ -2596,15 +2212,29 @@ static int addToIndex(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Heade
tagdata.count = 1;
}
- dbc = dbiCursorInit(dbi, DB_WRITECURSOR);
+ dbc = dbiCursorInit(dbi, DBC_WRITE);
logAddRemove(dbiName(dbi), 0, &tagdata);
while ((i = rpmtdNext(&tagdata)) >= 0) {
- dbiIndexSet set;
- int freedata = 0, j;
- DBT key, data;
- /* Include the tagNum in all indices (only files use though) */
- struct dbiIndexItem rec = { .hdrNum = hdrNum, .tagNum = i };
+ const void * key = NULL;
+ unsigned int keylen = 0;
+ int j;
+ struct dbiIndexItem_s rec;
+
+ switch (rpmtag) {
+ /* Include trigger index in db index for triggers */
+ case RPMTAG_FILETRIGGERNAME:
+ case RPMTAG_TRANSFILETRIGGERNAME:
+ rec.hdrNum = hdrNum;
+ rec.tagNum = *rpmtdNextUint32(&trig_index);
+ break;
+
+ /* Include the tagNum in the others indices (only files use though) */
+ default:
+ rec.hdrNum = hdrNum;
+ rec.tagNum = i;
+ break;
+ }
switch (rpmtag) {
case RPMTAG_REQUIRENAME: {
@@ -2631,107 +2261,90 @@ static int addToIndex(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Heade
break;
}
- memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
-
- if (!td2key(&tagdata, &key, &freedata)) {
+ if ((key = td2key(&tagdata, &keylen)) == NULL)
continue;
- }
-
- /*
- * XXX with duplicates, an accurate data value and
- * DB_GET_BOTH is needed.
- */
-
- set = NULL;
-
- rc = dbiCursorGet(dbc, &key, &data, DB_SET);
- if (rc == 0) { /* success */
- /* With duplicates, cursor is positioned, discard the record. */
- if (!dbi->dbi_permit_dups)
- (void) dbt2set(dbi, &data, &set);
- } else if (rc != DB_NOTFOUND) { /* error */
- rpmlog(RPMLOG_ERR,
- _("error(%d) getting \"%s\" records from %s index\n"),
- rc, (char*)key.data, dbiName(dbi));
- rc += 1;
- goto cont;
- }
-
- if (set == NULL) /* not found or duplicate */
- set = xcalloc(1, sizeof(*set));
- (void) dbiAppendSet(set, &rec, 1, sizeof(rec), 0);
-
- (void) set2dbt(dbi, &data, set);
- rc = dbiCursorPut(dbc, &key, &data, DB_KEYLAST);
-
- if (rc) {
- rpmlog(RPMLOG_ERR,
- _("error(%d) storing record %s into %s\n"),
- rc, (char*)key.data, dbiName(dbi));
- rc += 1;
- }
- data.data = _free(data.data);
- data.size = 0;
- set = dbiIndexSetFree(set);
-cont:
- if (freedata) {
- free(key.data);
+ rc += idxupdate(dbi, dbc, key, keylen, &rec);
+
+ if (*(char *)key == '(') {
+ switch (rpmtag) {
+ case RPMTAG_REQUIRENAME:
+ case RPMTAG_CONFLICTNAME:
+ case RPMTAG_SUGGESTNAME:
+ case RPMTAG_SUPPLEMENTNAME:
+ case RPMTAG_RECOMMENDNAME:
+ case RPMTAG_ENHANCENAME:
+ if (rpmtdType(&tagdata) == RPM_STRING_ARRAY_TYPE) {
+ rc += updateRichDep(dbi, dbc, rpmtdGetString(&tagdata),
+ &rec, idxupdate);
+ }
+ default:
+ break;
+ }
}
}
- dbiCursorFree(dbc);
- dbiSync(dbi, 0);
+ dbiCursorFree(dbi, dbc);
exit:
rpmtdFreeData(&tagdata);
- return rc;
+ return (rc == 0) ? RPMRC_OK : RPMRC_FAIL;
+}
+
+static rpmRC indexPut(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h)
+{
+ return tag2index(dbi, rpmtag, hdrNum, h, idxdbPut);
}
int rpmdbAdd(rpmdb db, Header h)
{
- DBT hdr;
- sigset_t signalMask;
- dbiIndex dbi;
+ dbiIndex dbi = NULL;
+ dbiCursor dbc = NULL;
unsigned int hdrNum = 0;
+ unsigned int hdrLen = 0;
+ unsigned char *hdrBlob = NULL;
int ret = 0;
- int hdrOk;
if (db == NULL)
return 0;
- memset(&hdr, 0, sizeof(hdr));
-
- hdr.data = headerExport(h, &hdr.size);
- hdrOk = (hdr.data != NULL && hdr.size > 0);
-
- if (!hdrOk) {
+ hdrBlob = headerExport(h, &hdrLen);
+ if (hdrBlob == NULL || hdrLen == 0) {
ret = -1;
goto exit;
}
- (void) blockSignals(&signalMask);
-
- dbi = rpmdbOpenIndex(db, RPMDBI_PACKAGES, 0);
- hdrNum = pkgInstance(dbi, 1);
+ ret = pkgdbOpen(db, 0, &dbi);
+ if (ret)
+ goto exit;
+
+ rpmsqBlock(SIG_BLOCK);
+ dbCtrl(db, DB_CTRL_LOCK_RW);
/* Add header to primary index */
- ret = updatePackages(dbi, hdrNum, &hdr);
+ dbc = dbiCursorInit(dbi, DBC_WRITE);
+ ret = pkgdbNew(dbi, dbc, &hdrNum);
+ if (ret == 0)
+ ret = pkgdbPut(dbi, dbc, hdrNum, hdrBlob, hdrLen);
+ dbiCursorFree(dbi, dbc);
/* Add associated data to secondary indexes */
if (ret == 0) {
- for (int dbix = 1; dbix < dbiTagsMax; dbix++) {
- rpmDbiTag rpmtag = dbiTags[dbix];
+ for (int dbix = 0; dbix < db->db_ndbi; dbix++) {
+ rpmDbiTag rpmtag = db->db_tags[dbix];
- if (!(dbi = rpmdbOpenIndex(db, rpmtag, 0)))
+ if (indexOpen(db, rpmtag, 0, &dbi))
continue;
- ret += addToIndex(dbi, rpmtag, hdrNum, h);
+ ret += indexPut(dbi, rpmtag, hdrNum, h);
}
}
- /* If everthing ok, mark header as installed now */
+ dbCtrl(db, DB_CTRL_INDEXSYNC);
+ dbCtrl(db, DB_CTRL_UNLOCK_RW);
+ rpmsqBlock(SIG_UNBLOCK);
+
+ /* If everything ok, mark header as installed now */
if (ret == 0) {
headerSetInstance(h, hdrNum);
/* Purge our verification cache on added public keys */
@@ -2741,24 +2354,15 @@ int rpmdbAdd(rpmdb db, Header h)
}
exit:
- free(hdr.data);
- (void) unblockSignals(&signalMask);
+ free(hdrBlob);
return ret;
}
-/*
- * Remove DB4 environment (and lock), ie the equivalent of
- * rm -f <prefix>/<dbpath>/__db.???
- * Environment files not existing is not an error, failure to unlink is,
- * return zero on success.
- * TODO/FIX: push this down to db3.c where it belongs
- */
-static int cleanDbenv(const char *prefix, const char *dbpath)
+static int rpmdbRemoveFiles(char * pattern)
{
+ int rc = 0;
ARGV_t paths = NULL, p;
- int rc = 0;
- char *pattern = rpmGetPath(prefix, "/", dbpath, "/__db.???", NULL);
if (rpmGlob(pattern, NULL, &paths) == 0) {
for (p = paths; *p; p++) {
@@ -2766,86 +2370,114 @@ static int cleanDbenv(const char *prefix, const char *dbpath)
}
argvFree(paths);
}
+ return rc;
+}
+
+static int rpmdbRemoveDatabase(const char *dbpath)
+{
+ int rc = 0;
+ char *pattern;
+
+ pattern = rpmGetPath(dbpath, "/*", NULL);
+ rc += rpmdbRemoveFiles(pattern);
+ free(pattern);
+ pattern = rpmGetPath(dbpath, "/.??*", NULL);
+ rc += rpmdbRemoveFiles(pattern);
free(pattern);
+
+ rc += rmdir(dbpath);
return rc;
}
-static int rpmdbRemoveDatabase(const char * prefix, const char * dbpath)
-{
- char *path;
- int xx = 0;
+static int rpmdbMoveDatabase(const char * prefix, const char * srcdbpath,
+ const char * dbpath, const char * tmppath)
+{
+ int rc = -1;
+ int xx;
+ char *src = rpmGetPath(prefix, "/", srcdbpath, NULL);
+ char *old = rpmGetPath(prefix, "/", tmppath, NULL);
+ char *dest = rpmGetPath(prefix, "/", dbpath, NULL);
+
+ char * oldkeys = rpmGetPath(old, "/", "pubkeys", NULL);
+ char * destkeys = rpmGetPath(dest, "/", "pubkeys", NULL);
- for (int i = 0; i < dbiTagsMax; i++) {
- const char * base = rpmTagGetName(dbiTags[i]);
- path = rpmGetPath(prefix, "/", dbpath, "/", base, NULL);
- if (access(path, F_OK) == 0)
- xx += unlink(path);
- free(path);
+ xx = rename(dest, old);
+ if (xx) {
+ goto exit;
+ }
+ xx = rename(src, dest);
+ if (xx) {
+ rpmlog(RPMLOG_ERR, _("could not move new database in place\n"));
+ xx = rename(old, dest);
+ if (xx) {
+ rpmlog(RPMLOG_ERR, _("could also not restore old database from %s\n"),
+ old);
+ rpmlog(RPMLOG_ERR, _("replace files in %s with files from %s "
+ "to recover\n"), dest, old);
+ }
+ goto exit;
+ }
+
+ if (access(oldkeys, F_OK ) != -1) {
+ xx = rename(oldkeys, destkeys);
+ if (xx) {
+ rpmlog(RPMLOG_ERR, _("Could not get public keys from %s\n"), oldkeys);
+ goto exit;
+ }
+ }
+
+ xx = rpmdbRemoveDatabase(old);
+ if (xx) {
+ rpmlog(RPMLOG_ERR, _("could not delete old database at %s\n"), old);
}
- cleanDbenv(prefix, dbpath);
- path = rpmGetPath(prefix, "/", dbpath, NULL);
- xx += rmdir(path);
- free(path);
+ rc = 0;
- return (xx != 0);
+ exit:
+ _free(src);
+ _free(old);
+ _free(dest);
+ _free(oldkeys);
+ _free(destkeys);
+ return rc;
}
-static int rpmdbMoveDatabase(const char * prefix,
- const char * olddbpath, const char * newdbpath)
+static int rpmdbSetPermissions(char * src, char * dest)
{
- int i;
+ struct dirent *dp;
+ DIR *dfd;
+
struct stat st;
- int rc = 0;
- int xx;
- int selinux = is_selinux_enabled() && (matchpathcon_init(NULL) != -1);
- sigset_t sigMask;
-
- blockSignals(&sigMask);
- for (i = 0; i < dbiTagsMax; i++) {
- rpmDbiTag rpmtag = dbiTags[i];
- const char *base = rpmTagGetName(rpmtag);
- char *src = rpmGetPath(prefix, "/", olddbpath, "/", base, NULL);
- char *dest = rpmGetPath(prefix, "/", newdbpath, "/", base, NULL);
-
- if (access(src, F_OK) != 0)
- goto cont;
-
- /*
- * Restore uid/gid/mode/security context if possible.
- */
- if (stat(dest, &st) < 0)
- if (stat(src, &st) < 0)
- goto cont;
-
- if ((xx = rename(src, dest)) != 0) {
- rc = 1;
- goto cont;
+ int xx, rc = -1;
+ char * filepath;
+
+ if (stat(dest, &st) < 0)
+ goto exit;
+ if (stat(src, &st) < 0)
+ goto exit;
+
+ if ((dfd = opendir(dest)) == NULL) {
+ goto exit;
+ }
+
+ rc = 0;
+ while ((dp = readdir(dfd)) != NULL) {
+ if (!strcmp(dp->d_name, "..")) {
+ continue;
}
- xx = chown(dest, st.st_uid, st.st_gid);
- xx = chmod(dest, (st.st_mode & 07777));
-
- if (selinux) {
- security_context_t scon = NULL;
- if (matchpathcon(dest, st.st_mode, &scon) != -1) {
- (void) setfilecon(dest, scon);
- freecon(scon);
- }
+ filepath = rpmGetPath(dest, "/", dp->d_name, NULL);
+ xx = chown(filepath, st.st_uid, st.st_gid);
+ rc += xx;
+ if (!strcmp(dp->d_name, ".")) {
+ xx = chmod(filepath, (st.st_mode & 07777));
+ } else {
+ xx = chmod(filepath, (st.st_mode & 07666));
}
-
-cont:
- free(src);
- free(dest);
+ rc += xx;
+ _free(filepath);
}
- cleanDbenv(prefix, olddbpath);
- cleanDbenv(prefix, newdbpath);
-
- unblockSignals(&sigMask);
-
- if (selinux) {
- (void) matchpathcon_fini();
- }
+ exit:
return rc;
}
@@ -2855,12 +2487,12 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
rpmdb olddb;
char * dbpath = NULL;
char * rootdbpath = NULL;
+ char * tmppath = NULL;
rpmdb newdb;
char * newdbpath = NULL;
char * newrootdbpath = NULL;
int nocleanup = 1;
int failed = 0;
- int removedir = 0;
int rc = 0;
dbpath = rpmGetPath("%{?_dbpath}", NULL);
@@ -2888,7 +2520,6 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
rc = 1;
goto exit;
}
- removedir = 1;
if (openDatabase(prefix, dbpath, &olddb,
O_RDONLY, 0644, RPMDB_FLAG_REBUILD)) {
@@ -2900,10 +2531,13 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
rc = 1;
goto exit;
}
+ if (rpmdbOpenAll(newdb)) {
+ rc = 1;
+ goto exit;
+ }
{ Header h = NULL;
rpmdbMatchIterator mi;
-#define _RECNUM rpmdbGetIteratorOffset(mi)
mi = rpmdbInitIterator(olddb, RPMDBI_PACKAGES, NULL, 0);
if (ts && hdrchk)
@@ -2919,20 +2553,22 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
{
rpmlog(RPMLOG_ERR,
_("header #%u in the database is bad -- skipping.\n"),
- _RECNUM);
+ rpmdbGetIteratorOffset(mi));
continue;
}
/* Deleted entries are eliminated in legacy headers by copy. */
- { Header nh = (headerIsEntry(h, RPMTAG_HEADERIMAGE)
- ? headerCopy(h) : NULL);
- rc = rpmdbAdd(newdb, (nh ? nh : h));
+ if (headerIsEntry(h, RPMTAG_HEADERIMAGE)) {
+ Header nh = headerReload(headerCopy(h), RPMTAG_HEADERIMAGE);
+ rc = rpmdbAdd(newdb, h);
headerFree(nh);
+ } else {
+ rc = rpmdbAdd(newdb, h);
}
if (rc) {
- rpmlog(RPMLOG_ERR,
- _("cannot add record originally at %u\n"), _RECNUM);
+ rpmlog(RPMLOG_ERR, _("cannot add record originally at %u\n"),
+ rpmdbGetIteratorOffset(mi));
failed = 1;
break;
}
@@ -2950,15 +2586,20 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
_("failed to rebuild database: original database "
"remains in place\n"));
- rpmdbRemoveDatabase(prefix, newdbpath);
+ rpmdbRemoveDatabase(newrootdbpath);
rc = 1;
goto exit;
- } else if (!nocleanup) {
- if (rpmdbMoveDatabase(prefix, newdbpath, dbpath)) {
+ } else {
+ rpmdbSetPermissions(dbpath, newdbpath);
+ }
+
+ if (!nocleanup) {
+ rasprintf(&tmppath, "%sold.%d", dbpath, (int) getpid());
+ if (rpmdbMoveDatabase(prefix, newdbpath, dbpath, tmppath)) {
rpmlog(RPMLOG_ERR, _("failed to replace old database with new "
"database!\n"));
rpmlog(RPMLOG_ERR, _("replace files in %s with files from %s "
- "to recover"), dbpath, newdbpath);
+ "to recover\n"), dbpath, newdbpath);
rc = 1;
goto exit;
}
@@ -2966,15 +2607,35 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
rc = 0;
exit:
- if (removedir && !(rc == 0 && nocleanup)) {
- if (rmdir(newrootdbpath))
- rpmlog(RPMLOG_ERR, _("failed to remove directory %s: %s\n"),
- newrootdbpath, strerror(errno));
- }
free(newdbpath);
free(dbpath);
+ free(tmppath);
free(newrootdbpath);
free(rootdbpath);
return rc;
}
+
+int rpmdbCtrl(rpmdb db, rpmdbCtrlOp ctrl)
+{
+ dbCtrlOp dbctrl = 0;
+ switch (ctrl) {
+ case RPMDB_CTRL_LOCK_RO:
+ dbctrl = DB_CTRL_LOCK_RO;
+ break;
+ case RPMDB_CTRL_UNLOCK_RO:
+ dbctrl = DB_CTRL_UNLOCK_RO;
+ break;
+ case RPMDB_CTRL_LOCK_RW:
+ dbctrl = DB_CTRL_LOCK_RW;
+ break;
+ case RPMDB_CTRL_UNLOCK_RW:
+ dbctrl = DB_CTRL_UNLOCK_RW;
+ break;
+ case RPMDB_CTRL_INDEXSYNC:
+ dbctrl = DB_CTRL_INDEXSYNC;
+ break;
+ }
+ return dbctrl ? dbCtrl(db, dbctrl) : 1;
+}
+
diff --git a/lib/rpmdb.h b/lib/rpmdb.h
index 3c7aac2c8..78765bb15 100644
--- a/lib/rpmdb.h
+++ b/lib/rpmdb.h
@@ -3,7 +3,7 @@
/** \ingroup rpmdb dbi
* \file lib/rpmdb.h
- * Access RPM indices using Berkeley DB interface(s).
+ * RPM database API.
*/
#include <rpm/rpmtypes.h>
@@ -30,6 +30,14 @@ typedef enum rpmdbOpX_e {
RPMDB_OP_MAX = 4
} rpmdbOpX;
+typedef enum rpmdbCtrlOp_e {
+ RPMDB_CTRL_LOCK_RO = 1,
+ RPMDB_CTRL_UNLOCK_RO = 2,
+ RPMDB_CTRL_LOCK_RW = 3,
+ RPMDB_CTRL_UNLOCK_RW = 4,
+ RPMDB_CTRL_INDEXSYNC = 5
+} rpmdbCtrlOp;
+
/** \ingroup rpmdb
* Retrieve operation timestamp from rpm database.
* @param db rpm database
@@ -79,7 +87,7 @@ unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
* @return 0 on success, 1 on failure (bad args)
*/
int rpmdbAppendIterator(rpmdbMatchIterator mi,
- const int * hdrNums, int nHdrNums);
+ const unsigned int * hdrNums, unsigned int nHdrNums);
/** \ingroup rpmdb
* Add pattern to iterator selector.
@@ -138,21 +146,6 @@ rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
Header rpmdbNextIterator(rpmdbMatchIterator mi);
/** \ingroup rpmdb
- * Check for and exit on termination signals.
- */
-int rpmdbCheckSignals(void);
-
-/** \ingroup rpmdb
- * Check rpmdb signal handler for trapped signal and/or requested exit,
- * clean up any open iterators and databases on termination condition.
- * On non-zero exit any open references to rpmdb are invalid and cannot
- * be accessed anymore, calling process should terminate immediately.
- * @param terminate 0 to only check for signals, 1 to terminate anyway
- * @return 0 to continue, 1 if termination cleanup was done.
- */
-int rpmdbCheckTerminate(int terminate);
-
-/** \ingroup rpmdb
* Destroy rpm database iterator.
* @param mi rpm database iterator
* @return NULL always
@@ -171,13 +164,23 @@ rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag);
* Get the next key - Warning! Keys are not zero terminated!
* Binary tags may even contain zero bytes
* @param ii index iterator
- * @param key adress to save the pointer to the key
- * @param keylen adress to save the length of the key to
+ * @param key address to save the pointer to the key
+ * @param keylen address to save the length of the key to
* @return 0 on success; != 0 on error or end of index
*/
int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen);
/** \ingroup rpmdb
+ * Get the next key into a tag data container.
+ * Caller is responsible for calling rpmtdFreeData() to freeing the
+ * data returned in keytd once done with it.
+ * @param ii index iterator
+ * @param keytd tag container to store the key in
+ * @return 0 on success; != 0 on error or end of index
+ */
+int rpmdbIndexIteratorNextTd(rpmdbIndexIterator ii, rpmtd keytd);
+
+/** \ingroup rpmdb
* Get number of entries for current key
* @param ii index iterator
* @return number of entries. 0 on error.
@@ -207,6 +210,13 @@ unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr);
*/
rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii);
+/** \ingroup rpmdb
+ * manipulate the rpm database
+ * @param db rpm database
+ * @param ctrl operation
+ * @return 0 on success; != 0 on error
+ */
+int rpmdbCtrl(rpmdb db, rpmdbCtrlOp ctrl);
#ifdef __cplusplus
}
diff --git a/lib/rpmdb_internal.h b/lib/rpmdb_internal.h
index ce95ce1b4..92848ab37 100644
--- a/lib/rpmdb_internal.h
+++ b/lib/rpmdb_internal.h
@@ -2,7 +2,6 @@
#define H_RPMDB_INTERNAL
#include <assert.h>
-#include <db.h>
#include <rpm/rpmsw.h>
#include <rpm/rpmtypes.h>
@@ -16,7 +15,7 @@ extern "C" {
#undef HASHTYPE
#undef HTKEYTYPE
#undef HTDATATYPE
-#define HASHTYPE removedHash
+#define HASHTYPE packageHash
#define HTKEYTYPE unsigned int
#define HTDATATYPE struct rpmte_s *
#include "rpmhash.H"
@@ -60,14 +59,6 @@ RPM_GNUC_INTERNAL
int rpmdbClose (rpmdb db);
/** \ingroup rpmdb
- * Sync all database indices.
- * @param db rpm database
- * @return 0 on success
- */
-RPM_GNUC_INTERNAL
-int rpmdbSync (rpmdb db);
-
-/** \ingroup rpmdb
* Rebuild database indices from package headers.
* @param prefix path to top of install tree
* @param ts transaction set (or NULL)
@@ -130,13 +121,31 @@ int rpmdbExtendIterator(rpmdbMatchIterator mi,
void rpmdbSortIterator(rpmdbMatchIterator mi);
/** \ingroup rpmdb
+ * uniq the iterator by recnum
+ * Return database iterator.
+ * @param mi rpm database iterator
+ */
+void rpmdbUniqIterator(rpmdbMatchIterator mi);
+
+/** \ingroup rpmdb
+ * If neg equals to zero then it leaves in iterator only packages that
+ * header numbers are in hdrNums. If neg is not zero then removes from iterator
+ * all packages that header numbers are in hdrNums.
+ * @param mi rpm database iterator
+ * @param hdrNums hash of package numbers
+ * @param neg mode
+ * return 0 on success, 1 on failure (bad args)
+ */
+int rpmdbFilterIterator(rpmdbMatchIterator mi, packageHash hdrNums, int neg);
+
+/** \ingroup rpmdb
* Remove items from set of package instances to iterate.
* @note Sorted hdrNums are always passed in rpmlib.
* @param mi rpm database iterator
* @param hdrNums hash of package instances
* @return 0 on success, 1 on failure (bad args)
*/
-int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums);
+int rpmdbPruneIterator(rpmdbMatchIterator mi, packageHash hdrNums);
/** \ingroup rpmdb
* Create a new, empty match iterator (for purposes of extending it
@@ -148,16 +157,59 @@ int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums);
RPM_GNUC_INTERNAL
rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag);
-#ifndef __APPLE__
-/**
- * * Mergesort, same arguments as qsort(2).
- * */
+/** \ingroup rpmdb
+ * Return database iterator that iterates over database items
+ * starting with pfx.
+ * @param db rpm database
+ * @param rpmtag database index tag
+ * @param pfx prefix data
+ * @param plen prefix data length (0 will use strlen(keyp))
+ * @return NULL on failure
+ */
+RPM_GNUC_INTERNAL
+rpmdbMatchIterator rpmdbInitPrefixIterator(rpmdb db, rpmDbiTagVal rpmtag,
+ const void * pfx, size_t plen);
+/** \ingroup rpmdb
+ * Get package offsets of entries
+ * @param ii index iterator
+ * @return db offsets of pkgs
+ */
+RPM_GNUC_INTERNAL
+unsigned int *rpmdbIndexIteratorPkgOffsets(rpmdbIndexIterator ii);
+
+/** \ingroup rpmdb
+ * Return current index (position) in iterator.
+ * @param mi rpm database iterator
+ * @return current index
+ */
+RPM_GNUC_INTERNAL
+int rpmdbGetIteratorIndex(rpmdbMatchIterator mi);
+
+/** \ingroup rpmdb
+ * Set iterator index.
+ * @param mi rpm database iterator
+ * @param ix index
+ */
+RPM_GNUC_INTERNAL
+void rpmdbSetIteratorIndex(rpmdbMatchIterator mi, unsigned int ix);
+
+/** \ingroup rpmdb
+ * Return offset of package with given index.
+ * @param mi rpm database iterator
+ * @param ix index
+ * @return package offset
+ */
+RPM_GNUC_INTERNAL
+unsigned int rpmdbGetIteratorOffsetFor(rpmdbMatchIterator mi, unsigned int ix);
+
+/** \ingroup rpmdb
+ * Return header located in rpmdb at given offset.
+ * @param db rpm database
+ * @param offset database offset
+ * @return header at given offset
+ */
RPM_GNUC_INTERNAL
-int mergesort(void *base, size_t nmemb, size_t size,
- int (*cmp) (const void *, const void *));
-#else
-/* mergesort is defined in stdlib.h on Mac OS X */
-#endif /* __APPLE__ */
+Header rpmdbGetHeaderAt(rpmdb db, unsigned int offset);
#ifdef __cplusplus
}
diff --git a/lib/rpmds.c b/lib/rpmds.c
index 1e6798648..823c722e8 100644
--- a/lib/rpmds.c
+++ b/lib/rpmds.c
@@ -32,19 +32,20 @@ struct rpmds_s {
int32_t Count; /*!< No. of elements */
unsigned int instance; /*!< From rpmdb instance? */
int i; /*!< Element index. */
- unsigned l; /*!< Low element (bsearch). */
- unsigned u; /*!< High element (bsearch). */
int nopromote; /*!< Don't promote Epoch: in rpmdsCompare()? */
int nrefs; /*!< Reference count. */
+ int *ti; /*!< Trigger index. */
};
static int dsType(rpmTagVal tag,
- const char ** Type, rpmTagVal * tagEVR, rpmTagVal * tagF)
+ const char ** Type, rpmTagVal * tagEVR, rpmTagVal * tagF,
+ rpmTagVal * tagTi)
{
int rc = 0;
const char *t = NULL;
rpmTagVal evr = RPMTAG_NOT_FOUND;
rpmTagVal f = RPMTAG_NOT_FOUND;
+ rpmTagVal ti = RPMTAG_NOT_FOUND;
if (tag == RPMTAG_PROVIDENAME) {
t = "Provides";
@@ -54,6 +55,22 @@ static int dsType(rpmTagVal tag,
t = "Requires";
evr = RPMTAG_REQUIREVERSION;
f = RPMTAG_REQUIREFLAGS;
+ } else if (tag == RPMTAG_SUPPLEMENTNAME) {
+ t = "Supplements";
+ evr = RPMTAG_SUPPLEMENTVERSION;
+ f = RPMTAG_SUPPLEMENTFLAGS;
+ } else if (tag == RPMTAG_ENHANCENAME) {
+ t = "Enhances";
+ evr = RPMTAG_ENHANCEVERSION;
+ f = RPMTAG_ENHANCEFLAGS;
+ } else if (tag == RPMTAG_RECOMMENDNAME) {
+ t = "Recommends";
+ evr = RPMTAG_RECOMMENDVERSION;
+ f = RPMTAG_RECOMMENDFLAGS;
+ } else if (tag == RPMTAG_SUGGESTNAME) {
+ t = "Suggests";
+ evr = RPMTAG_SUGGESTVERSION;
+ f = RPMTAG_SUGGESTFLAGS;
} else if (tag == RPMTAG_CONFLICTNAME) {
t = "Conflicts";
evr = RPMTAG_CONFLICTVERSION;
@@ -70,19 +87,103 @@ static int dsType(rpmTagVal tag,
t = "Trigger";
evr = RPMTAG_TRIGGERVERSION;
f = RPMTAG_TRIGGERFLAGS;
- } else if (tag == RPMTAG_ENHANCESNAME) {
- t = "Enhances";
- evr = RPMTAG_ENHANCESVERSION;
- f = RPMTAG_ENHANCESFLAGS;
+ ti = RPMTAG_TRIGGERINDEX;
+ } else if (tag == RPMTAG_OLDSUGGESTSNAME) {
+ t = "Oldsuggests";
+ evr = RPMTAG_OLDSUGGESTSVERSION;
+ f = RPMTAG_OLDSUGGESTSFLAGS;
+ } else if (tag == RPMTAG_OLDENHANCESNAME) {
+ t = "Oldenhances";
+ evr = RPMTAG_OLDENHANCESVERSION;
+ f = RPMTAG_OLDENHANCESFLAGS;
+ } else if (tag == RPMTAG_FILETRIGGERNAME) {
+ t = "FileTrigger";
+ evr = RPMTAG_FILETRIGGERVERSION;
+ f = RPMTAG_FILETRIGGERFLAGS;
+ ti = RPMTAG_FILETRIGGERINDEX;
+ } else if (tag == RPMTAG_TRANSFILETRIGGERNAME) {
+ t = "TransFileTrigger";
+ evr = RPMTAG_TRANSFILETRIGGERVERSION;
+ f = RPMTAG_TRANSFILETRIGGERFLAGS;
+ ti = RPMTAG_TRANSFILETRIGGERINDEX;
} else {
rc = 1;
}
if (Type) *Type = t;
if (tagEVR) *tagEVR = evr;
if (tagF) *tagF = f;
+ if (tagTi) *tagTi = ti;
return rc;
}
+static char tagNToChar(rpmTagVal tagN)
+{
+ switch (tagN) {
+ default:
+ return 'R';
+ break;
+ case RPMTAG_REQUIRENAME:
+ return 'R';
+ break;
+ case RPMTAG_PROVIDENAME:
+ return 'P';
+ break;
+ case RPMTAG_RECOMMENDNAME:
+ return 'r';
+ break;
+ case RPMTAG_SUGGESTNAME:
+ return 's';
+ break;
+ case RPMTAG_SUPPLEMENTNAME:
+ return 'S';
+ break;
+ case RPMTAG_ENHANCENAME:
+ return 'e';
+ break;
+ case RPMTAG_CONFLICTNAME:
+ return 'C';
+ break;
+ case RPMTAG_OBSOLETENAME:
+ return 'O';
+ break;
+ }
+}
+
+rpmTagVal rpmdsDToTagN(char deptype)
+{
+ rpmTagVal tagN = RPMTAG_REQUIRENAME;
+ switch (deptype) {
+ default:
+ tagN = RPMTAG_NOT_FOUND;
+ break;
+ case 'P':
+ tagN = RPMTAG_PROVIDENAME;
+ break;
+ case 'R':
+ tagN = RPMTAG_REQUIRENAME;
+ break;
+ case 'r':
+ tagN = RPMTAG_RECOMMENDNAME;
+ break;
+ case 's':
+ tagN = RPMTAG_SUGGESTNAME;
+ break;
+ case 'S':
+ tagN = RPMTAG_SUPPLEMENTNAME;
+ break;
+ case 'e':
+ tagN = RPMTAG_ENHANCENAME;
+ break;
+ case 'C':
+ tagN = RPMTAG_CONFLICTNAME;
+ break;
+ case 'O':
+ tagN = RPMTAG_OBSOLETENAME;
+ break;
+ }
+ return tagN;
+}
+
rpmsid rpmdsNIdIndex(rpmds ds, int i)
{
rpmsid id = 0;
@@ -122,6 +223,14 @@ rpmsenseFlags rpmdsFlagsIndex(rpmds ds, int i)
return Flags;
}
+int rpmdsTiIndex(rpmds ds, int i)
+{
+ int ti = -1;
+ if (ds != NULL && i >= 0 && i < ds->Count && ds->ti != NULL)
+ ti = ds->ti[i];
+ return ti;
+}
+
rpm_color_t rpmdsColorIndex(rpmds ds, int i)
{
rpm_color_t Color = 0;
@@ -145,7 +254,7 @@ rpmds rpmdsLink(rpmds ds)
rpmds rpmdsFree(rpmds ds)
{
- rpmTagVal tagEVR, tagF;
+ rpmTagVal tagEVR, tagF, tagTi;
if (ds == NULL)
return NULL;
@@ -153,13 +262,14 @@ rpmds rpmdsFree(rpmds ds)
if (ds->nrefs > 1)
return rpmdsUnlink(ds);
- if (dsType(ds->tagN, NULL, &tagEVR, &tagF))
+ if (dsType(ds->tagN, NULL, &tagEVR, &tagF, &tagTi))
return NULL;
if (ds->Count > 0) {
ds->N = _free(ds->N);
ds->EVR = _free(ds->EVR);
ds->Flags = _free(ds->Flags);
+ ds->ti = _free(ds->ti);
}
ds->pool = rpmstrPoolFree(ds->pool);
@@ -191,24 +301,46 @@ static rpmds rpmdsCreate(rpmstrPool pool,
rpmds rpmdsNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, int flags)
{
- rpmTagVal tagEVR, tagF;
+ rpmTagVal tagEVR, tagF, tagTi;
rpmds ds = NULL;
const char * Type;
struct rpmtd_s names;
- if (dsType(tagN, &Type, &tagEVR, &tagF))
+ if (dsType(tagN, &Type, &tagEVR, &tagF, &tagTi))
goto exit;
if (headerGet(h, tagN, &names, HEADERGET_MINMEM)) {
- struct rpmtd_s evr, flags;
+ struct rpmtd_s evr, flags, tindices;
+ rpm_count_t count = rpmtdCount(&names);
- ds = rpmdsCreate(pool, tagN, Type,
- rpmtdCount(&names), headerGetInstance(h));
-
- ds->N = rpmtdToPool(&names, ds->pool);
headerGet(h, tagEVR, &evr, HEADERGET_MINMEM);
- ds->EVR = rpmtdToPool(&evr, ds->pool);
+ if (evr.count && evr.count != count) {
+ rpmtdFreeData(&evr);
+ return NULL;
+ }
+
headerGet(h, tagF, &flags, HEADERGET_ALLOC);
+ if (flags.count && flags.count != count) {
+ rpmtdFreeData(&flags);
+ return NULL;
+ }
+
+ if (tagTi != RPMTAG_NOT_FOUND) {
+ headerGet(h, tagTi, &tindices, HEADERGET_ALLOC);
+ if (tindices.count && tindices.count != count) {
+ rpmtdFreeData(&tindices);
+ return NULL;
+ }
+ }
+
+ ds = rpmdsCreate(pool, tagN, Type, count, headerGetInstance(h));
+
+ ds->N = names.count ? rpmtdToPool(&names, ds->pool) : NULL;
+ ds->EVR = evr.count ? rpmtdToPool(&evr, ds->pool): NULL;
ds->Flags = flags.data;
+ if (tagTi != RPMTAG_NOT_FOUND) {
+ ds->ti = tindices.data;
+ }
+
/* ensure rpmlib() requires always have RPMSENSE_RPMLIB flag set */
if (tagN == RPMTAG_REQUIRENAME && ds->Flags) {
for (int i = 0; i < ds->Count; i++) {
@@ -285,12 +417,14 @@ char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds)
static rpmds singleDSPool(rpmstrPool pool, rpmTagVal tagN,
rpmsid N, rpmsid EVR, rpmsenseFlags Flags,
- unsigned int instance, rpm_color_t Color)
+ unsigned int instance, rpm_color_t Color,
+ int triggerIndex)
{
rpmds ds = NULL;
const char * Type;
+ rpmTagVal tagTi;
- if (dsType(tagN, &Type, NULL, NULL))
+ if (dsType(tagN, &Type, NULL, NULL, &tagTi))
goto exit;
ds = rpmdsCreate(pool, tagN, Type, 1, instance);
@@ -301,6 +435,10 @@ static rpmds singleDSPool(rpmstrPool pool, rpmTagVal tagN,
ds->EVR[0] = EVR;
ds->Flags = xmalloc(sizeof(*ds->Flags));
ds->Flags[0] = Flags;
+ if (tagTi != RPMTAG_NOT_FOUND) {
+ ds->ti = xmalloc(sizeof(*ds->ti));
+ ds->ti[0] = triggerIndex;
+ }
ds->i = 0;
if (Color)
rpmdsSetColor(ds, Color);
@@ -312,9 +450,10 @@ exit:
static rpmds singleDS(rpmstrPool pool, rpmTagVal tagN,
const char * N, const char * EVR,
rpmsenseFlags Flags, unsigned int instance,
- rpm_color_t Color)
+ rpm_color_t Color, int triggerIndex)
{
- rpmds ds = singleDSPool(pool, tagN, 0, 0, Flags, instance, Color);
+ rpmds ds = singleDSPool(pool, tagN, 0, 0, Flags, instance, Color,
+ triggerIndex);
if (ds) {
/* now that we have a pool, we can insert our N & EVR strings */
ds->N[0] = rpmstrPoolId(ds->pool, N ? N : "", 1);
@@ -331,7 +470,7 @@ rpmds rpmdsThisPool(rpmstrPool pool,
{
char *evr = headerGetAsString(h, RPMTAG_EVR);
rpmds ds = singleDS(pool, tagN, headerGetString(h, RPMTAG_NAME),
- evr, Flags, headerGetInstance(h), 0);
+ evr, Flags, headerGetInstance(h), 0, 0);
free(evr);
return ds;
}
@@ -344,7 +483,14 @@ rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags)
rpmds rpmdsSinglePool(rpmstrPool pool,rpmTagVal tagN,
const char * N, const char * EVR, rpmsenseFlags Flags)
{
- return singleDS(pool, tagN, N, EVR, Flags, 0, 0);
+ return singleDS(pool, tagN, N, EVR, Flags, 0, 0, 0);
+}
+
+rpmds rpmdsSinglePoolTix(rpmstrPool pool,rpmTagVal tagN,
+ const char * N, const char * EVR,
+ rpmsenseFlags Flags, int triggerIndex)
+{
+ return singleDS(pool, tagN, N, EVR, Flags, 0, 0, triggerIndex);
}
rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags)
@@ -355,14 +501,78 @@ rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlag
rpmds rpmdsCurrent(rpmds ds)
{
rpmds cds = NULL;
+ int ti = -1;
if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
+ if (ds->ti)
+ ti = ds->ti[ds->i];
/* Using parent's pool so we can just use the same id's */
cds = singleDSPool(ds->pool, ds->tagN, ds->N[ds->i], ds->EVR[ds->i],
- rpmdsFlags(ds), ds->instance, rpmdsColor(ds));
+ rpmdsFlags(ds), ds->instance, rpmdsColor(ds), ti);
}
return cds;
}
+rpmds rpmdsFilterTi(rpmds ds, int ti)
+{
+ int i, i2, tiCount = 0;
+ rpmds fds;
+
+ if (ds == NULL || !ds->ti || !ds->Count)
+ return NULL;
+
+ for (i = 0; i < ds->Count; i++) {
+ if (ds->ti[i] == ti)
+ tiCount++;
+ }
+
+ if (!tiCount)
+ return NULL;
+
+ fds = rpmdsCreate(ds->pool, ds->tagN, ds->Type, tiCount, ds->instance);
+
+ fds->N = xmalloc(tiCount * sizeof(*fds->N));
+ fds->EVR = xmalloc(tiCount * sizeof(*fds->EVR));
+ fds->Flags = xmalloc(tiCount * sizeof(*fds->Flags));
+ fds->ti = xmalloc(tiCount * sizeof(*fds->ti));
+ fds->i = -1;
+
+ i2 = 0;
+ for (i = 0; i < ds->Count; i++) {
+ if (ds->ti[i] == ti) {
+ fds->N[i2] = ds->N[i];
+ fds->EVR[i2] = ds->EVR[i];
+ fds->Flags[i2] = ds->Flags[i];
+ fds->ti[i2] = ds->ti[i];
+ i2++;
+ }
+ }
+
+ return fds;
+}
+
+int rpmdsPutToHeader(rpmds ds, Header h)
+{
+ rpmTagVal tagN = rpmdsTagN(ds);
+ rpmTagVal tagEVR = rpmdsTagEVR(ds);
+ rpmTagVal tagF = rpmdsTagF(ds);
+ rpmTagVal tagTi = rpmdsTagTi(ds);
+ if (!tagN)
+ return -1;
+
+ rpmds pi = rpmdsInit(ds);
+ while (rpmdsNext(pi) >= 0) {
+ rpmsenseFlags flags = rpmdsFlags(pi);
+ uint32_t index = rpmdsTi(pi);
+ headerPutString(h, tagN, rpmdsN(pi));
+ headerPutString(h, tagEVR, rpmdsEVR(pi));
+ headerPutUint32(h, tagF, &flags, 1);
+ if (tagTi != RPMTAG_NOT_FOUND) {
+ headerPutUint32(h, tagTi, &index, 1);
+ }
+ }
+ return 0;
+}
+
int rpmdsCount(const rpmds ds)
{
return (ds != NULL ? ds->Count : 0);
@@ -385,13 +595,22 @@ int rpmdsSetIx(rpmds ds, int ix)
return i;
}
+char rpmdsD(const rpmds ds)
+{
+ if (ds != NULL) {
+ return tagNToChar(ds->tagN);
+ } else {
+ return '\0';
+ }
+}
+
const char * rpmdsDNEVR(const rpmds ds)
{
const char * DNEVR = NULL;
if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
if (ds->DNEVR == NULL) {
- char t[2] = { ds->Type[0], '\0' };
+ char t[2] = { tagNToChar(ds->tagN), '\0' };
ds->DNEVR = rpmdsNewDNEVR(t, ds);
}
DNEVR = ds->DNEVR;
@@ -424,6 +643,11 @@ rpmsenseFlags rpmdsFlags(const rpmds ds)
return (ds != NULL) ? rpmdsFlagsIndex(ds, ds->i) : 0;
}
+int rpmdsTi(const rpmds ds)
+{
+ return (ds != NULL) ? rpmdsTiIndex(ds, ds->i) : 0;
+}
+
rpmTagVal rpmdsTagN(const rpmds ds)
{
rpmTagVal tagN = RPMTAG_NOT_FOUND;
@@ -433,6 +657,33 @@ rpmTagVal rpmdsTagN(const rpmds ds)
return tagN;
}
+rpmTagVal rpmdsTagEVR(const rpmds ds)
+{
+ rpmTagVal tagEVR = RPMTAG_NOT_FOUND;
+
+ if (ds != NULL)
+ dsType(ds->tagN, NULL, &tagEVR, NULL, NULL);
+ return tagEVR;
+}
+
+rpmTagVal rpmdsTagF(const rpmds ds)
+{
+ rpmTagVal tagF = RPMTAG_NOT_FOUND;
+
+ if (ds != NULL)
+ dsType(ds->tagN, NULL, NULL, &tagF, NULL);
+ return tagF;
+}
+
+rpmTagVal rpmdsTagTi(const rpmds ds)
+{
+ rpmTagVal tagTi = RPMTAG_NOT_FOUND;
+
+ if (ds != NULL)
+ dsType(ds->tagN, NULL, NULL, NULL, &tagTi);
+ return tagTi;
+}
+
unsigned int rpmdsInstance(rpmds ds)
{
return (ds != NULL) ? ds->instance : 0;
@@ -529,8 +780,6 @@ static rpmds rpmdsDup(const rpmds ods)
size_t nb;
ds->i = ods->i;
- ds->l = ods->l;
- ds->u = ods->u;
ds->nopromote = ods->nopromote;
nb = ds->Count * sizeof(*ds->N);
@@ -547,58 +796,77 @@ static rpmds rpmdsDup(const rpmds ods)
ds->Flags = memcpy(xmalloc(nb), ods->Flags, nb);
}
+ if (ods->ti) {
+ nb = ds->Count * sizeof(*ds->ti);
+ ds->ti = memcpy(xmalloc(nb), ods->ti, nb);
+ }
+
return ds;
}
-int rpmdsFind(rpmds ds, const rpmds ods)
+static int doFind(rpmds ds, const rpmds ods, unsigned int *he)
{
int comparison;
const char *N, *ON = rpmdsN(ods);
const char *EVR, *OEVR = rpmdsEVR(ods);
rpmsenseFlags Flags, OFlags = rpmdsFlags(ods);
+ int index, Oindex = rpmdsTi(ods);
int rc = -1; /* assume not found */
if (ds == NULL || ods == NULL)
return -1;
- ds->l = 0;
- ds->u = ds->Count;
- while (ds->l < ds->u) {
- ds->i = (ds->l + ds->u) / 2;
+ unsigned int l = 0;
+ unsigned int u = ds->Count;
+ while (l < u) {
+ ds->i = (l + u) / 2;
N = rpmdsN(ds);
EVR = rpmdsEVR(ds);
Flags = rpmdsFlags(ds);
+ index = rpmdsTi(ds);
comparison = strcmp(ON, N);
/* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */
if (comparison == 0 && OEVR && EVR)
comparison = strcmp(OEVR, EVR);
- if (comparison == 0 && OFlags && Flags)
+ if (comparison == 0)
comparison = OFlags - Flags;
+ if (comparison == 0)
+ comparison = Oindex - index;
if (comparison < 0)
- ds->u = ds->i;
+ u = ds->i;
else if (comparison > 0)
- ds->l = ds->i + 1;
+ l = ds->i + 1;
else {
rc = ds->i;
break;
}
}
+ if (he)
+ *he = u;
return rc;
}
+int rpmdsFind(rpmds ds, const rpmds ods)
+{
+ return doFind(ds, ods, NULL);
+}
+
int rpmdsMerge(rpmds * dsp, rpmds ods)
{
rpmds ds;
int save;
+ int ocount;
if (dsp == NULL || ods == NULL)
return -1;
+ ocount = rpmdsCount(*dsp);
+
/* If not initialized yet, dup the 1st entry. */
if (*dsp == NULL) {
save = ods->Count;
@@ -615,6 +883,12 @@ int rpmdsMerge(rpmds * dsp, rpmds ods)
ds->EVR = xcalloc(ds->Count, sizeof(*ds->EVR));
if (ds->Flags == NULL)
ds->Flags = xcalloc(ds->Count, sizeof(*ds->Flags));
+ if (ds->ti == NULL && ods->ti) {
+ int i;
+ ds->ti = xcalloc(ds->Count, sizeof(*ds->ti));
+ for (i = 0; i < ds->Count; i++)
+ ds->ti[i] = -1;
+ }
/*
* Add new entries.
@@ -623,10 +897,11 @@ int rpmdsMerge(rpmds * dsp, rpmds ods)
ods = rpmdsInit(ods);
while (rpmdsNext(ods) >= 0) {
const char *OEVR;
+ unsigned int u;
/*
* If this entry is already present, don't bother.
*/
- if (rpmdsFind(ds, ods) >= 0)
+ if (doFind(ds, ods, &u) >= 0)
continue;
/*
@@ -634,33 +909,42 @@ int rpmdsMerge(rpmds * dsp, rpmds ods)
*/
rpmstrPoolUnfreeze(ds->pool);
ds->N = xrealloc(ds->N, (ds->Count+1) * sizeof(*ds->N));
- if (ds->u < ds->Count) {
- memmove(ds->N + ds->u + 1, ds->N + ds->u,
- (ds->Count - ds->u) * sizeof(*ds->N));
+ if (u < ds->Count) {
+ memmove(ds->N + u + 1, ds->N + u,
+ (ds->Count - u) * sizeof(*ds->N));
}
- ds->N[ds->u] = rpmstrPoolId(ds->pool, rpmdsN(ods), 1);
+ ds->N[u] = rpmstrPoolId(ds->pool, rpmdsN(ods), 1);
ds->EVR = xrealloc(ds->EVR, (ds->Count+1) * sizeof(*ds->EVR));
- if (ds->u < ds->Count) {
- memmove(ds->EVR + ds->u + 1, ds->EVR + ds->u,
- (ds->Count - ds->u) * sizeof(*ds->EVR));
+ if (u < ds->Count) {
+ memmove(ds->EVR + u + 1, ds->EVR + u,
+ (ds->Count - u) * sizeof(*ds->EVR));
}
OEVR = rpmdsEVR(ods);
- ds->EVR[ds->u] = rpmstrPoolId(ds->pool, OEVR ? OEVR : "", 1);
+ ds->EVR[u] = rpmstrPoolId(ds->pool, OEVR ? OEVR : "", 1);
ds->Flags = xrealloc(ds->Flags, (ds->Count+1) * sizeof(*ds->Flags));
- if (ds->u < ds->Count) {
- memmove(ds->Flags + ds->u + 1, ds->Flags + ds->u,
- (ds->Count - ds->u) * sizeof(*ds->Flags));
+ if (u < ds->Count) {
+ memmove(ds->Flags + u + 1, ds->Flags + u,
+ (ds->Count - u) * sizeof(*ds->Flags));
+ }
+ ds->Flags[u] = rpmdsFlags(ods);
+
+ if (ds->ti || ods->ti) {
+ ds->ti = xrealloc(ds->ti, (ds->Count+1) * sizeof(*ds->ti));
+ if (u < ds->Count) {
+ memmove(ds->ti + u + 1, ds->ti + u,
+ (ds->Count - u) * sizeof(*ds->ti));
+ }
+ ds->ti[u] = rpmdsTi(ods);
}
- ds->Flags[ds->u] = rpmdsFlags(ods);
ds->i = ds->Count;
ds->Count++;
}
ods->i = save;
- return 0;
+ return (ds->Count - ocount);
}
@@ -988,6 +1272,17 @@ static const struct rpmlibProvides_s rpmlibProvides[] = {
{ "rpmlib(TildeInVersions)", "4.10.0-1",
( RPMSENSE_EQUAL),
N_("dependency comparison supports versions with tilde.") },
+ { "rpmlib(LargeFiles)", "4.12.0-1",
+ ( RPMSENSE_EQUAL),
+ N_("support files larger than 4GB") },
+ { "rpmlib(RichDependencies)", "4.12.0-1",
+ ( RPMSENSE_EQUAL),
+ N_("support for rich dependencies.") },
+#ifdef HAVE_ZSTD
+ { "rpmlib(PayloadIsZstd)", "5.4.18-1",
+ (RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
+ N_("package payload can be compressed using zstd.") },
+#endif
{ NULL, NULL, 0, NULL }
};
@@ -1001,7 +1296,7 @@ int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp)
if (rltblp == NULL)
rltblp = rpmlibProvides;
- for (rlp = rltblp; rlp->featureName != NULL && rc == 0; rlp++) {
+ for (rlp = rltblp; rlp->featureName != NULL && rc >= 0; rlp++) {
rpmds ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME, rlp->featureName,
rlp->featureEVR, rlp->featureFlags);
rc = rpmdsMerge(dsp, ds);
@@ -1010,7 +1305,7 @@ int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp)
/* freeze the pool to save memory, but only if private pool */
if (*dsp && (*dsp)->pool != pool)
rpmstrPoolFreeze((*dsp)->pool, 0);
- return rc;
+ return (rc < 0) ? -1 : 0;
}
int rpmdsRpmlib(rpmds * dsp, const void * tblp)
@@ -1022,3 +1317,392 @@ rpmstrPool rpmdsPool(rpmds ds)
{
return (ds != NULL) ? ds->pool : NULL;
}
+
+rpmsenseFlags rpmSanitizeDSFlags(rpmTagVal tagN, rpmsenseFlags Flags)
+{
+ rpmsenseFlags extra = RPMSENSE_ANY;
+ switch (tagN) {
+ case RPMTAG_PROVIDENAME:
+ extra = Flags & RPMSENSE_FIND_PROVIDES;
+ break;
+ case RPMTAG_TRIGGERNAME:
+ case RPMTAG_FILETRIGGERNAME:
+ case RPMTAG_TRANSFILETRIGGERNAME:
+ extra = Flags & RPMSENSE_TRIGGER;
+ break;
+ case RPMTAG_RECOMMENDNAME:
+ case RPMTAG_SUGGESTNAME:
+ case RPMTAG_SUPPLEMENTNAME:
+ case RPMTAG_ENHANCENAME:
+ case RPMTAG_REQUIRENAME:
+ extra = Flags & (_ALL_REQUIRES_MASK);
+ break;
+ case RPMTAG_CONFLICTNAME:
+ extra = Flags;
+ break;
+ default:
+ break;
+ }
+ return (Flags & RPMSENSE_SENSEMASK) | extra;
+}
+
+static struct ReqComp {
+const char * token;
+ rpmsenseFlags sense;
+} const ReqComparisons[] = {
+ { "<=", RPMSENSE_LESS | RPMSENSE_EQUAL},
+ { "=<", RPMSENSE_LESS | RPMSENSE_EQUAL},
+ { "<", RPMSENSE_LESS},
+
+ { "==", RPMSENSE_EQUAL},
+ { "=", RPMSENSE_EQUAL},
+
+ { ">=", RPMSENSE_GREATER | RPMSENSE_EQUAL},
+ { "=>", RPMSENSE_GREATER | RPMSENSE_EQUAL},
+ { ">", RPMSENSE_GREATER},
+
+ { NULL, 0 },
+};
+
+rpmsenseFlags rpmParseDSFlags(const char *str, size_t len)
+{
+ const struct ReqComp *rc;
+ for (rc = ReqComparisons; rc->token != NULL; rc++)
+ if (len == strlen(rc->token) && rstreqn(str, rc->token, len))
+ return rc->sense;
+ return 0;
+}
+
+static struct RichOpComp {
+ const char * token;
+ rpmrichOp op;
+} const RichOps[] = {
+ { "and", RPMRICHOP_AND},
+ { "or", RPMRICHOP_OR},
+ { "if", RPMRICHOP_IF},
+ { "unless", RPMRICHOP_UNLESS},
+ { "else", RPMRICHOP_ELSE},
+ { "with", RPMRICHOP_WITH},
+ { "without", RPMRICHOP_WITHOUT},
+ { NULL, 0 },
+};
+
+int rpmdsIsRich(rpmds dep)
+{
+ const char * n = rpmdsN(dep);
+ return (n && n[0] == '(');
+}
+
+static rpmRC parseRichDepOp(const char **dstrp, rpmrichOp *opp, char **emsg)
+{
+ const char *p = *dstrp, *pe = p;
+ const struct RichOpComp *ro;
+
+ while (*pe && !risspace(*pe) && *pe != ')')
+ pe++;
+ for (ro = RichOps; ro->token != NULL; ro++)
+ if (pe - p == strlen(ro->token) && rstreqn(p, ro->token, pe - p)) {
+ *opp = ro->op;
+ *dstrp = pe;
+ return RPMRC_OK;
+ }
+ if (emsg)
+ rasprintf(emsg, _("Unknown rich dependency op '%.*s'"), (int)(pe - p), p);
+ return RPMRC_FAIL;
+}
+
+const char *rpmrichOpStr(rpmrichOp op)
+{
+ if (op == RPMRICHOP_SINGLE)
+ return "SINGLE";
+ if (op == RPMRICHOP_AND)
+ return "and";
+ if (op == RPMRICHOP_OR)
+ return "or";
+ if (op == RPMRICHOP_IF)
+ return "if";
+ if (op == RPMRICHOP_UNLESS)
+ return "unless";
+ if (op == RPMRICHOP_ELSE)
+ return "else";
+ if (op == RPMRICHOP_WITH)
+ return "with";
+ if (op == RPMRICHOP_WITHOUT)
+ return "without";
+ return NULL;
+}
+
+
+#define SKIPWHITE(_x) {while (*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;}
+#define SKIPNONWHITEX(_x){int bl = 0; while (*(_x) &&!(risspace(*_x) || *(_x) == ',' || (*(_x) == ')' && bl-- <= 0))) if (*(_x)++ == '(') bl++;}
+
+static rpmRC parseSimpleDep(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata)
+{
+ const char *p = *dstrp;
+ const char *n, *e = 0;
+ int nl, el = 0;
+ rpmsenseFlags sense = 0;
+
+ n = p;
+ SKIPNONWHITEX(p);
+ nl = p - n;
+ if (nl == 0) {
+ if (emsg)
+ rasprintf(emsg, _("Name required"));
+ return RPMRC_FAIL;
+ }
+ SKIPWHITE(p);
+ if (*p) {
+ const char *pe = p;
+
+ SKIPNONWHITEX(pe);
+ sense = rpmParseDSFlags(p, pe - p);
+ if (sense) {
+ p = pe;
+ SKIPWHITE(p);
+ e = p;
+ SKIPNONWHITEX(p);
+ el = p - e;
+ }
+ }
+ if (e && el == 0) {
+ if (emsg)
+ rasprintf(emsg, _("Version required"));
+ return RPMRC_FAIL;
+ }
+ if (cb && cb(cbdata, RPMRICH_PARSE_SIMPLE, n, nl, e, el, sense, RPMRICHOP_SINGLE, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ *dstrp = p;
+ return RPMRC_OK;
+}
+
+#define RICHPARSE_CHECK (1 << 0)
+#define RICHPARSE_NO_WITH (1 << 1)
+#define RICHPARSE_NO_AND (1 << 2)
+#define RICHPARSE_NO_OR (1 << 3)
+
+static rpmRC rpmrichParseCheck(rpmrichOp op, int check, char **emsg)
+{
+ if ((op == RPMRICHOP_WITH || op == RPMRICHOP_WITHOUT) && (check & RICHPARSE_NO_WITH) != 0) {
+ if (emsg)
+ rasprintf(emsg, _("Illegal ops in with/without"));
+ return RPMRC_FAIL;
+ }
+ if ((check & RICHPARSE_CHECK) == 0)
+ return RPMRC_OK;
+ if ((op == RPMRICHOP_AND || op == RPMRICHOP_IF) && (check & RICHPARSE_NO_AND) != 0) {
+ if (emsg)
+ rasprintf(emsg, _("Illegal context for 'unless', please use 'or' instead"));
+ return RPMRC_FAIL;
+ }
+ if ((op == RPMRICHOP_OR || op == RPMRICHOP_UNLESS) && (check & RICHPARSE_NO_OR) != 0) {
+ if (emsg)
+ rasprintf(emsg, _("Illegal context for 'if', please use 'and' instead"));
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static rpmRC rpmrichParseInternal(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata, int *checkp)
+{
+ const char *p = *dstrp, *pe;
+ rpmrichOp op = RPMRICHOP_SINGLE, firstop = RPMRICHOP_SINGLE, chainop = 0;
+ int check = checkp ? *checkp : 0;
+
+ if (cb && cb(cbdata, RPMRICH_PARSE_ENTER, p, 0, 0, 0, 0, op, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ if (*p++ != '(') {
+ if (emsg)
+ rasprintf(emsg, _("Rich dependency does not start with '('"));
+ return RPMRC_FAIL;
+ }
+ for (;;) {
+ SKIPWHITE(p);
+ if (*p == ')') {
+ if (emsg) {
+ if (chainop)
+ rasprintf(emsg, _("Missing argument to rich dependency op"));
+ else
+ rasprintf(emsg, _("Empty rich dependency"));
+ }
+ return RPMRC_FAIL;
+ }
+ if (*p == '(') {
+ int subcheck = check & RICHPARSE_CHECK;
+ if (rpmrichParseInternal(&p, emsg, cb, cbdata, &subcheck) != RPMRC_OK)
+ return RPMRC_FAIL;
+ if (op == RPMRICHOP_IF || op == RPMRICHOP_UNLESS)
+ subcheck &= ~(RICHPARSE_NO_AND | RICHPARSE_NO_OR);
+ check |= subcheck;
+ } else {
+ if (parseSimpleDep(&p, emsg, cb, cbdata) != RPMRC_OK)
+ return RPMRC_FAIL;
+ }
+ SKIPWHITE(p);
+ if (!*p) {
+ if (emsg)
+ rasprintf(emsg, _("Unterminated rich dependency: %s"), *dstrp);
+ return RPMRC_FAIL;
+ }
+ if (*p == ')')
+ break;
+ pe = p;
+ if (parseRichDepOp(&pe, &op, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ if (firstop == RPMRICHOP_SINGLE)
+ firstop = op;
+
+ if (op == RPMRICHOP_ELSE && (chainop == RPMRICHOP_IF || chainop == RPMRICHOP_UNLESS))
+ chainop = 0;
+ if (chainop && op != chainop) {
+ if (emsg)
+ rasprintf(emsg, _("Cannot chain different ops"));
+ return RPMRC_FAIL;
+ }
+ if (chainop && op != RPMRICHOP_AND && op != RPMRICHOP_OR && op != RPMRICHOP_WITH) {
+ if (emsg)
+ rasprintf(emsg, _("Can only chain and/or/with ops"));
+ return RPMRC_FAIL;
+ }
+ if (cb && cb(cbdata, RPMRICH_PARSE_OP, p, pe - p, 0, 0, 0, op, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ chainop = op;
+ p = pe;
+ }
+
+ /* check for illegal combinations */
+ if (rpmrichParseCheck(firstop, check, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+
+ /* update check data */
+ if (firstop == RPMRICHOP_IF)
+ check |= RICHPARSE_NO_OR;
+ if (firstop == RPMRICHOP_UNLESS)
+ check |= RICHPARSE_NO_AND;
+ if (op == RPMRICHOP_AND || op == RPMRICHOP_OR)
+ check &= ~(RICHPARSE_NO_AND | RICHPARSE_NO_OR);
+ if (op != RPMRICHOP_SINGLE && op != RPMRICHOP_WITH && op != RPMRICHOP_WITHOUT && op != RPMRICHOP_OR)
+ check |= RICHPARSE_NO_WITH;
+
+ p++;
+ if (cb && cb(cbdata, RPMRICH_PARSE_LEAVE, *dstrp, p - *dstrp , 0, 0, 0, op, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ *dstrp = p;
+ if (checkp)
+ *checkp |= check;
+ return RPMRC_OK;
+}
+
+rpmRC rpmrichParse(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata)
+{
+ return rpmrichParseInternal(dstrp, emsg, cb, cbdata, NULL);
+}
+
+rpmRC rpmrichParseForTag(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata, rpmTagVal tagN)
+{
+ int check = RICHPARSE_CHECK;
+ if (rpmrichParseInternal(dstrp, emsg, cb, cbdata, &check) != RPMRC_OK)
+ return RPMRC_FAIL;
+ switch (tagN) {
+ case RPMTAG_CONFLICTNAME:
+ case RPMTAG_SUPPLEMENTNAME:
+ case RPMTAG_ENHANCENAME:
+ if (rpmrichParseCheck(RPMRICHOP_OR, check, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ break;
+ default:
+ if (rpmrichParseCheck(RPMRICHOP_AND, check, emsg) != RPMRC_OK)
+ return RPMRC_FAIL;
+ break;
+ }
+ return RPMRC_OK;
+}
+
+struct rpmdsParseRichDepData {
+ rpmds dep;
+ rpmsenseFlags depflags;
+
+ rpmds leftds;
+ rpmds rightds;
+ rpmrichOp op;
+
+ int depth;
+ const char *rightstart;
+ int dochain;
+};
+
+static rpmRC rpmdsParseRichDepCB(void *cbdata, rpmrichParseType type,
+ const char *n, int nl, const char *e, int el, rpmsenseFlags sense,
+ rpmrichOp op, char **emsg) {
+ struct rpmdsParseRichDepData *data = cbdata;
+ rpmds ds = 0;
+
+ if (type == RPMRICH_PARSE_ENTER)
+ data->depth++;
+ else if (type == RPMRICH_PARSE_LEAVE) {
+ if (--data->depth == 0 && data->dochain && data->rightstart) {
+ /* chain op hack, construct a sub-ds from the right side of the chain */
+ char *right = xmalloc(n + nl - data->rightstart + 2);
+ right[0] = '(';
+ strncpy(right + 1, data->rightstart, n + nl - data->rightstart);
+ right[n + nl - data->rightstart + 1] = 0;
+ data->rightds = rpmdsFree(data->rightds);
+ ds = singleDS(data->dep->pool, data->dep->tagN, 0, 0, data->depflags, 0, 0, 0);
+ ds->N[0] = rpmstrPoolId(ds->pool, right, 1);
+ ds->EVR[0] = rpmstrPoolId(ds->pool, "", 1);
+ data->rightds = ds;
+ free(right);
+ }
+ }
+ if (data->depth != 1)
+ return RPMRC_OK; /* we're only interested in top-level parsing */
+ if ((type == RPMRICH_PARSE_SIMPLE || type == RPMRICH_PARSE_LEAVE) && !data->dochain) {
+ if (type == RPMRICH_PARSE_SIMPLE && data->dep->tagN == RPMTAG_REQUIRENAME && nl > 7 &&
+ rstreqn(n, "rpmlib(", sizeof("rpmlib(")-1))
+ sense |= RPMSENSE_RPMLIB;
+ ds = singleDS(data->dep->pool, data->dep->tagN, 0, 0, sense | data->depflags, 0, 0, 0);
+ ds->N[0] = rpmstrPoolIdn(ds->pool, n, nl, 1);
+ ds->EVR[0] = rpmstrPoolIdn(ds->pool, e ? e : "", el, 1);
+ if (!data->leftds)
+ data->leftds = ds;
+ else {
+ data->rightds = ds;
+ data->rightstart = n;
+ }
+ }
+ if (type == RPMRICH_PARSE_OP) {
+ if (data->op != RPMRICHOP_SINGLE)
+ data->dochain = 1; /* this is a chained op */
+ else
+ data->op = op;
+ }
+ return RPMRC_OK;
+}
+
+
+rpmRC rpmdsParseRichDep(rpmds dep, rpmds *leftds, rpmds *rightds, rpmrichOp *op, char **emsg)
+{
+ rpmRC rc;
+ struct rpmdsParseRichDepData data;
+ const char *depstr = rpmdsN(dep);
+ memset(&data, 0, sizeof(data));
+ data.dep = dep;
+ data.op = RPMRICHOP_SINGLE;
+ data.depflags = rpmdsFlags(dep) & ~(RPMSENSE_SENSEMASK | RPMSENSE_MISSINGOK);
+ rc = rpmrichParse(&depstr, emsg, rpmdsParseRichDepCB, &data);
+ if (rc == RPMRC_OK && *depstr) {
+ if (emsg)
+ rasprintf(emsg, _("Junk after rich dependency"));
+ rc = RPMRC_FAIL;
+ }
+ if (rc != RPMRC_OK) {
+ rpmdsFree(data.leftds);
+ rpmdsFree(data.rightds);
+ } else {
+ *leftds = data.leftds;
+ *rightds = data.rightds;
+ *op = data.op;
+ }
+ return rc;
+}
+
diff --git a/lib/rpmds.h b/lib/rpmds.h
index bceed0081..463a82a96 100644
--- a/lib/rpmds.h
+++ b/lib/rpmds.h
@@ -86,6 +86,24 @@ typedef rpmFlags rpmsenseFlags;
#define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
#define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
+
+
+/** \ingroup rpmds
+ * Return only those flags allowed for given type of dependencies
+ * @param tagN type of dependency
+ * @param Flags flags
+ * @return flags filtered to allowed bits
+ */
+rpmsenseFlags rpmSanitizeDSFlags(rpmTagVal tagN, rpmsenseFlags Flags);
+
+/** \ingroup rpmds
+ * Convert a string to the sense flags
+ * @param str the string
+ * @param len length of the string
+ * @return flags, zero for unknown relations
+ */
+rpmsenseFlags rpmParseDSFlags(const char *str, size_t len);
+
/** \ingroup rpmds
* Reference a dependency set instance.
* @param ds dependency set
@@ -144,6 +162,14 @@ rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlag
rpmds rpmdsCurrent(rpmds ds);
/** \ingroup rpmds
+ * Write content of the dependency set to the header
+ * @param ds dependency set
+ * @param h header
+ * @return 0 on success
+ */
+int rpmdsPutToHeader(rpmds ds, Header h);
+
+/** \ingroup rpmds
* Return dependency set count.
* @param ds dependency set
* @return current count
@@ -173,6 +199,20 @@ int rpmdsSetIx(rpmds ds, int ix);
const char * rpmdsDNEVR(const rpmds ds);
/** \ingroup rpmds
+ * Return one char indicating the type of the dependency.
+ * @param ds dependency set
+ * @return character
+ */
+char rpmdsD(const rpmds ds);
+
+/** \ingroup rpmds
+ * Return matching tagN for one char dependency type description.
+ * @param deptype character
+ * @return type of dependency
+ */
+rpmTagVal rpmdsDToTagN(char deptype);
+
+/** \ingroup rpmds
* Return current dependency name.
* @param ds dependency set
* @return current dependency name, NULL on invalid
@@ -187,6 +227,13 @@ const char * rpmdsN(const rpmds ds);
const char * rpmdsEVR(const rpmds ds);
/** \ingroup rpmds
+ * Return current dependency triggerindex.
+ * @param ds dependency set
+ * @return current dependency trigger index, 0 on invalid
+ */
+int rpmdsTi(const rpmds ds);
+
+/** \ingroup rpmds
* Return current dependency flags.
* @param ds dependency set
* @return current dependency flags, 0 on invalid
@@ -201,6 +248,27 @@ rpmsenseFlags rpmdsFlags(const rpmds ds);
rpmTagVal rpmdsTagN(const rpmds ds);
/** \ingroup rpmds
+ * Return current dependency type.
+ * @param ds dependency set
+ * @return current dependency type version tag, 0 on invalid
+ */
+rpmTagVal rpmdsTagEVR(const rpmds ds);
+
+/** \ingroup rpmds
+ * Return current dependency type.
+ * @param ds dependency set
+ * @return current dependency type flags tag, 0 on invalid
+ */
+rpmTagVal rpmdsTagF(const rpmds ds);
+
+/** \ingroup rpmds
+ * Return current dependency type.
+ * @param ds dependency set
+ * @return current dependency type trigger index tag, 0 on invalid
+ */
+rpmTagVal rpmdsTagTi(const rpmds ds);
+
+/** \ingroup rpmds
* Return dependency header instance, ie whether the dependency comes from
* an installed header or not.
* @param ds dependency set
@@ -247,15 +315,6 @@ rpm_color_t rpmdsColor(const rpmds ds);
rpm_color_t rpmdsSetColor(const rpmds ds, rpm_color_t color);
/** \ingroup rpmds
- * Notify of results of dependency match.
- * @param ds dependency set
- * @param where where dependency was resolved (or NULL)
- * @param rc 0 == YES, otherwise NO
- */
-/* FIX: rpmMessage annotation is a lie */
-void rpmdsNotify(rpmds ds, const char * where, int rc);
-
-/** \ingroup rpmds
* Return next dependency set iterator index.
* @param ds dependency set
* @return dependency set iterator index, -1 on termination
@@ -281,7 +340,7 @@ int rpmdsFind(rpmds ds, const rpmds ods);
* Merge a dependency set maintaining (N,EVR,Flags) sorted order.
* @retval *dsp (merged) dependency set
* @param ods dependency set to merge
- * @return (merged) dependency index
+ * @return number of merged dependencies, -1 on error
*/
int rpmdsMerge(rpmds * dsp, rpmds ods);
@@ -333,12 +392,138 @@ int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote);
/**
* Load rpmlib provides into a dependency set.
- * @retval *dsp (loaded) depedency set
+ * @retval *dsp (loaded) dependency set
* @param tblp rpmlib provides table (NULL uses internal table)
* @return 0 on success
*/
int rpmdsRpmlib(rpmds * dsp, const void * tblp);
+/** \ingroup rpmds
+ * Create and load a dependency set.
+ * @param pool shared string pool (or NULL for private pool)
+ * @param h header
+ * @param tagN type of dependency
+ * @param flags unused
+ * @return new dependency set
+ */
+rpmds rpmdsNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, int flags);
+
+/** \ingroup rpmds
+ * Create, load and initialize a dependency for this header.
+ * @param pool string pool (or NULL for private pool)
+ * @param h header
+ * @param tagN type of dependency
+ * @param Flags comparison flags
+ * @return new dependency set
+ */
+rpmds rpmdsThisPool(rpmstrPool pool,
+ Header h, rpmTagVal tagN, rpmsenseFlags Flags);
+
+/** \ingroup rpmds
+ * Create, load and initialize a dependency set of size 1.
+ * @param pool string pool (or NULL for private pool)
+ * @param tagN type of dependency
+ * @param N name
+ * @param EVR epoch:version-release
+ * @param Flags comparison flags
+ * @return new dependency set
+ */
+rpmds rpmdsSinglePool(rpmstrPool pool, rpmTagVal tagN,
+ const char * N, const char * EVR, rpmsenseFlags Flags);
+
+/** \ingroup rpmds
+ * Create, load and initialize a trigger dependency set of size 1.
+ * @param pool string pool (or NULL for private pool)
+ * @param tagN type of dependency
+ * @param N name
+ * @param EVR epoch:version-release
+ * @param Flags comparison flags
+ * @param triggerIndex trigger index
+ * @return new dependency set
+ */
+rpmds rpmdsSinglePoolTix(rpmstrPool pool, rpmTagVal tagN,
+ const char * N, const char * EVR,
+ rpmsenseFlags Flags, int triggerIndex);
+
+/**
+ * Load rpmlib provides into a dependency set.
+ * @param pool shared string pool (or NULL for private pool)
+ * @retval *dsp (loaded) dependency set
+ * @param tblp rpmlib provides table (NULL uses internal table)
+ * @return 0 on success
+ */
+int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp);
+
+
+typedef enum rpmrichOp_e {
+ RPMRICHOP_SINGLE = 1,
+ RPMRICHOP_AND = 2,
+ RPMRICHOP_OR = 3,
+ RPMRICHOP_IF = 4,
+ RPMRICHOP_ELSE = 5,
+ RPMRICHOP_WITH = 6,
+ RPMRICHOP_WITHOUT = 7,
+ RPMRICHOP_UNLESS = 8
+} rpmrichOp;
+
+typedef enum rpmrichParseType_e {
+ RPMRICH_PARSE_SIMPLE = 1, /* standard N <=> EVR dep */
+ RPMRICH_PARSE_ENTER = 2, /* entering sub-dependency */
+ RPMRICH_PARSE_LEAVE = 3, /* leaving sub-dependency */
+ RPMRICH_PARSE_OP = 4 /* parsed a rich dependency op */
+} rpmrichParseType;
+
+typedef rpmRC (*rpmrichParseFunction) (void *cbdata, rpmrichParseType type,
+ const char *n, int nl, const char *e, int el, rpmsenseFlags sense,
+ rpmrichOp op, char **emsg);
+
+/**
+ * Parse a rich dependency string
+ * @param dstrp pointer to sting, will be updated
+ * @param emsg returns the error string, can be NULL
+ * @param cb callback function
+ * @param cbdata callback function data
+ * @return RPMRC_OK on success
+ */
+rpmRC rpmrichParse(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata);
+
+/**
+ * Parse a rich dependency string for a specific tag
+ * @param dstrp pointer to sting, will be updated
+ * @param emsg returns the error string, can be NULL
+ * @param cb callback function
+ * @param cbdata callback function data
+ * @param tagN type of dependency
+ * @return RPMRC_OK on success
+ */
+rpmRC rpmrichParseForTag(const char **dstrp, char **emsg, rpmrichParseFunction cb, void *cbdata, rpmTagVal tagN);
+
+
+/**
+ * Return if current depenency is rich
+ * @param dep the dependency
+ * @return 1 is dependency is a rich 0 otherwise
+ */
+int rpmdsIsRich(rpmds dep);
+
+/**
+ * Return a string representation of the rich dependency op
+ * @param op the dependency op
+ * @return constant string, do not free
+ */
+const char *rpmrichOpStr(rpmrichOp op);
+
+/**
+ * Parse a rich dependency string
+ * @param dep the dependency
+ * @param leftds returns the left dependency
+ * @param rightds returns the right dependency
+ * @param op returns the rich dep op
+ * @param emsg returns the error string
+ * @return RPMRC_OK on success
+ */
+rpmRC rpmdsParseRichDep(rpmds dep, rpmds *leftds, rpmds *rightds, rpmrichOp *op, char **emsg);
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmds_internal.h b/lib/rpmds_internal.h
index edd5a0268..6861fba0f 100644
--- a/lib/rpmds_internal.h
+++ b/lib/rpmds_internal.h
@@ -8,52 +8,6 @@ extern "C" {
#endif
/** \ingroup rpmds
- * Create and load a dependency set.
- * @param pool shared string pool (or NULL for private pool)
- * @param h header
- * @param tagN type of dependency
- * @param flags unused
- * @return new dependency set
- */
-RPM_GNUC_INTERNAL
-rpmds rpmdsNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, int flags);
-
-/** \ingroup rpmds
- * Create, load and initialize a dependency for this header.
- * @param pool string pool (or NULL for private pool)
- * @param h header
- * @param tagN type of dependency
- * @param Flags comparison flags
- * @return new dependency set
- */
-RPM_GNUC_INTERNAL
-rpmds rpmdsThisPool(rpmstrPool pool,
- Header h, rpmTagVal tagN, rpmsenseFlags Flags);
-
-/** \ingroup rpmds
- * Create, load and initialize a dependency set of size 1.
- * @param pool string pool (or NULL for private pool)
- * @param tagN type of dependency
- * @param N name
- * @param EVR epoch:version-release
- * @param Flags comparison flags
- * @return new dependency set
- */
-RPM_GNUC_INTERNAL
-rpmds rpmdsSinglePool(rpmstrPool pool, rpmTagVal tagN,
- const char * N, const char * EVR, rpmsenseFlags Flags);
-
-/**
- * Load rpmlib provides into a dependency set.
- * @param pool shared string pool (or NULL for private pool)
- * @retval *dsp (loaded) depedency set
- * @param tblp rpmlib provides table (NULL uses internal table)
- * @return 0 on success
- */
-RPM_GNUC_INTERNAL
-int rpmdsRpmlibPool(rpmstrPool pool, rpmds * dsp, const void * tblp);
-
-/** \ingroup rpmds
* Swiss army knife dependency matching function.
* @param pool string pool (or NULL for private pool)
* @param h header
@@ -68,6 +22,15 @@ int rpmdsMatches(rpmstrPool pool, Header h, int prix,
rpmds req, int selfevr, int nopromote);
/** \ingroup rpmds
+ * Notify of results of dependency match.
+ * @param ds dependency set
+ * @param where where dependency was resolved (or NULL)
+ * @param rc 0 == YES, otherwise NO
+ */
+RPM_GNUC_INTERNAL
+void rpmdsNotify(rpmds ds, const char * where, int rc);
+
+/** \ingroup rpmds
* Return current dependency name pool id.
* @param ds dependency set
* @return current dependency name id, 0 on invalid
@@ -107,11 +70,23 @@ RPM_GNUC_INTERNAL
rpmsenseFlags rpmdsFlagsIndex(rpmds ds, int i);
RPM_GNUC_INTERNAL
+int rpmdsTiIndex(rpmds ds, int i);
+
+RPM_GNUC_INTERNAL
rpm_color_t rpmdsColorIndex(rpmds ds, int i);
RPM_GNUC_INTERNAL
int rpmdsCompareIndex(rpmds A, int aix, rpmds B, int bix);
+/** \ingroup rpmds
+ * Filter dependency set and return new dependency set containing only items
+ * with given trigger index.
+ * @param ds dependency set
+ * @param ti trigger index
+ * @return new filtered dependency set
+ */
+RPM_GNUC_INTERNAL
+rpmds rpmdsFilterTi(rpmds ds, int ti);
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
index 7f7ef2a7f..beb2ae72b 100644
--- a/lib/rpmfi.c
+++ b/lib/rpmfi.c
@@ -11,13 +11,137 @@
#include <rpm/rpmstring.h>
#include <rpm/rpmmacro.h> /* XXX rpmCleanPath */
#include <rpm/rpmds.h>
+#include <errno.h>
#include "lib/rpmfi_internal.h"
#include "lib/rpmte_internal.h" /* relocations */
#include "lib/cpio.h" /* XXX CPIO_FOO */
+#include "lib/fsm.h" /* rpmpsm stuff for now */
+#include "lib/rpmug.h"
+#include "rpmio/rpmio_internal.h" /* fdInit/FiniDigest */
#include "debug.h"
+struct hardlinks_s {
+ int nlink;
+ int files[];
+};
+
+typedef struct hardlinks_s * hardlinks_t;
+
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+#define HASHTYPE nlinkHash
+#define HTKEYTYPE int
+#define HTDATATYPE struct hardlinks_s *
+#include "lib/rpmhash.H"
+#include "lib/rpmhash.C"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+
+typedef int (*iterfunc)(rpmfi fi);
+
+struct rpmfi_s {
+ int i; /*!< Current file index. */
+ int j; /*!< Current directory index. */
+ iterfunc next; /*!< Iterator function. */
+ char * fn; /*!< File name buffer. */
+ char * ofn; /*!< Original file name buffer. */
+
+ int intervalStart; /*!< Start of iterating interval. */
+ int intervalEnd; /*!< End of iterating interval. */
+
+ rpmfiles files; /*!< File info set */
+ rpmcpio_t archive; /*!< Archive with payload */
+ unsigned char * found; /*!< Bit field of files found in the archive */
+ int nrefs; /*!< Reference count */
+};
+
+struct rpmfn_s {
+ rpm_count_t dc; /*!< No. of directories. */
+ rpm_count_t fc; /*!< No. of files. */
+
+ rpmsid * bnid; /*!< Index to base name(s) (pool) */
+ rpmsid * dnid; /*!< Index to directory name(s) (pool) */
+ uint32_t * dil; /*!< Directory indice(s) (from header) */
+};
+
+typedef struct rpmfn_s * rpmfn;
+
+/**
+ * A package filename set.
+ */
+struct rpmfiles_s {
+ Header h; /*!< Header for file info set (or NULL) */
+ rpmstrPool pool; /*!< String pool of this file info set */
+
+ struct rpmfn_s fndata; /*!< File name data */
+ struct rpmfn_s *ofndata; /*!< Original file name data */
+
+ rpmsid * flinks; /*!< Index to file link(s) (pool) */
+
+ rpm_flag_t * fflags; /*!< File flag(s) (from header) */
+ rpm_off_t * fsizes; /*!< File size(s) (from header) */
+ rpm_loff_t * lfsizes; /*!< File size(s) (from header) */
+ rpm_time_t * fmtimes; /*!< File modification time(s) (from header) */
+ rpm_mode_t * fmodes; /*!< File mode(s) (from header) */
+ rpm_rdev_t * frdevs; /*!< File rdev(s) (from header) */
+ rpm_ino_t * finodes; /*!< File inodes(s) (from header) */
+
+ rpmsid * fuser; /*!< Index to file owner(s) (misc pool) */
+ rpmsid * fgroup; /*!< Index to file group(s) (misc pool) */
+ rpmsid * flangs; /*!< Index to file lang(s) (misc pool) */
+
+ char * fstates; /*!< File state(s) (from header) */
+
+ rpm_color_t * fcolors; /*!< File color bits (header) */
+ char ** fcaps; /*!< File capability strings (header) */
+
+ char ** cdict; /*!< File class dictionary (header) */
+ rpm_count_t ncdict; /*!< No. of class entries. */
+ uint32_t * fcdictx; /*!< File class dictionary index (header) */
+
+ uint32_t * ddict; /*!< File depends dictionary (header) */
+ rpm_count_t nddict; /*!< No. of depends entries. */
+ uint32_t * fddictx; /*!< File depends dictionary start (header) */
+ uint32_t * fddictn; /*!< File depends dictionary count (header) */
+ rpm_flag_t * vflags; /*!< File verify flag(s) (from header) */
+
+ rpmfiFlags fiflags; /*!< file info set control flags */
+
+ struct fingerPrint_s * fps; /*!< File fingerprint(s). */
+
+ int digestalgo; /*!< File digest algorithm */
+ int signaturelength; /*!< File signature length */
+ unsigned char * digests; /*!< File digests in binary. */
+ unsigned char * signatures; /*!< File signatures in binary. */
+
+ struct nlinkHash_s * nlinks;/*!< Files connected by hardlinks */
+ rpm_off_t * replacedSizes; /*!< (TR_ADDED) */
+ rpm_loff_t * replacedLSizes;/*!< (TR_ADDED) */
+ int magic;
+ int nrefs; /*!< Reference count. */
+};
+
+static int indexSane(rpmtd xd, rpmtd yd, rpmtd zd);
+static int cmpPoolFn(rpmstrPool pool, rpmfn files, int ix, const char * fn);
+
+static rpmfiles rpmfilesUnlink(rpmfiles fi)
+{
+ if (fi)
+ fi->nrefs--;
+ return NULL;
+}
+
+rpmfiles rpmfilesLink(rpmfiles fi)
+{
+ if (fi)
+ fi->nrefs++;
+ return fi;
+}
+
static rpmfi rpmfiUnlink(rpmfi fi)
{
if (fi)
@@ -32,14 +156,146 @@ rpmfi rpmfiLink(rpmfi fi)
return fi;
}
+/*
+ * Collect and validate file path data from header.
+ * Return the number of files found (could be none) or -1 on error.
+ */
+static int rpmfnInit(rpmfn fndata, rpmTagVal bntag, Header h, rpmstrPool pool)
+{
+ struct rpmtd_s bn, dn, dx;
+ rpmTagVal dntag, ditag;
+ int rc = 0;
+
+ if (bntag == RPMTAG_BASENAMES) {
+ dntag = RPMTAG_DIRNAMES;
+ ditag = RPMTAG_DIRINDEXES;
+ } else if (bntag == RPMTAG_ORIGBASENAMES) {
+ dntag = RPMTAG_ORIGDIRNAMES;
+ ditag = RPMTAG_ORIGDIRINDEXES;
+ } else {
+ return -1;
+ }
+
+ /* Grab and validate file triplet data (if there is any) */
+ if (headerGet(h, bntag, &bn, HEADERGET_MINMEM)) {
+ headerGet(h, dntag, &dn, HEADERGET_MINMEM);
+ headerGet(h, ditag, &dx, HEADERGET_ALLOC);
+
+ if (indexSane(&bn, &dn, &dx)) {
+ /* Init the file triplet data */
+ fndata->fc = rpmtdCount(&bn);
+ fndata->dc = rpmtdCount(&dn);
+ fndata->bnid = rpmtdToPool(&bn, pool);
+ fndata->dnid = rpmtdToPool(&dn, pool);
+ /* Steal index data from the td (pooh...) */
+ fndata->dil = dx.data;
+ dx.data = NULL;
+ rc = fndata->fc;
+ } else {
+ memset(fndata, 0, sizeof(*fndata));
+ rc = -1;
+ }
+ rpmtdFreeData(&bn);
+ rpmtdFreeData(&dn);
+ rpmtdFreeData(&dx);
+ }
+
+ return rc;
+}
+
+static void rpmfnClear(rpmfn fndata)
+{
+ if (fndata) {
+ free(fndata->bnid);
+ free(fndata->dnid);
+ free(fndata->dil);
+ memset(fndata, 0, sizeof(*fndata));
+ }
+}
+
+static rpm_count_t rpmfnFC(rpmfn fndata)
+{
+ return (fndata != NULL) ? fndata->fc :0;
+}
+
+static rpm_count_t rpmfnDC(rpmfn fndata)
+{
+ return (fndata != NULL) ? fndata->dc : 0;
+}
+
+static int rpmfnDI(rpmfn fndata, int ix)
+{
+ int j = -1;
+ if (ix >= 0 && ix < rpmfnFC(fndata)) {
+ if (fndata->dil != NULL)
+ j = fndata->dil[ix];
+ }
+ return j;
+}
+
+static rpmsid rpmfnBNId(rpmfn fndata, int ix)
+{
+ rpmsid id = 0;
+ if (ix >= 0 && ix < rpmfnFC(fndata)) {
+ if (fndata->bnid != NULL)
+ id = fndata->bnid[ix];
+ }
+ return id;
+}
+
+static rpmsid rpmfnDNId(rpmfn fndata, int ix)
+{
+ rpmsid id = 0;
+ if (ix >= 0 && ix < rpmfnDC(fndata)) {
+ if (fndata->dnid != NULL)
+ id = fndata->dnid[ix];
+ }
+ return id;
+}
+
+static const char * rpmfnBN(rpmstrPool pool, rpmfn fndata, int ix)
+{
+ return rpmstrPoolStr(pool, rpmfnBNId(fndata, ix));
+}
+
+static const char * rpmfnDN(rpmstrPool pool, rpmfn fndata, int ix)
+{
+ return rpmstrPoolStr(pool, rpmfnDNId(fndata, ix));
+}
+
+static char * rpmfnFN(rpmstrPool pool, rpmfn fndata, int ix)
+{
+ char *fn = NULL;
+ if (ix >= 0 && ix < rpmfnFC(fndata)) {
+ fn = rstrscat(NULL, rpmfnDN(pool, fndata, rpmfnDI(fndata, ix)),
+ rpmfnBN(pool, fndata, ix), NULL);
+ }
+ return fn;
+}
+
+rpm_count_t rpmfilesFC(rpmfiles fi)
+{
+ return (fi != NULL ? rpmfnFC(&fi->fndata) : 0);
+}
+
+rpm_count_t rpmfilesDC(rpmfiles fi)
+{
+ return (fi != NULL ? rpmfnDC(&fi->fndata) : 0);
+}
+
+int rpmfilesDigestAlgo(rpmfiles fi)
+{
+ return (fi != NULL) ? fi->digestalgo : 0;
+}
+
rpm_count_t rpmfiFC(rpmfi fi)
{
- return (fi != NULL ? fi->fc : 0);
+ return (fi != NULL ? rpmfilesFC(fi->files) : 0);
}
rpm_count_t rpmfiDC(rpmfi fi)
{
- return (fi != NULL ? fi->dc : 0);
+ return (fi != NULL ? rpmfilesDC(fi->files) : 0);
}
#ifdef NOTYET
@@ -57,10 +313,10 @@ int rpmfiSetFX(rpmfi fi, int fx)
{
int i = -1;
- if (fi != NULL && fx >= 0 && fx < fi->fc) {
+ if (fi != NULL && fx >= 0 && fx < rpmfilesFC(fi->files)) {
i = fi->i;
fi->i = fx;
- fi->j = fi->dil[fi->i];
+ fi->j = rpmfilesDI(fi->files, fi->i);
}
return i;
}
@@ -74,138 +330,222 @@ int rpmfiSetDX(rpmfi fi, int dx)
{
int j = -1;
- if (fi != NULL && dx >= 0 && dx < fi->dc) {
+ if (fi != NULL && dx >= 0 && dx < rpmfiDC(fi)) {
j = fi->j;
fi->j = dx;
}
return j;
}
-int rpmfiDIIndex(rpmfi fi, int dx)
+int rpmfilesDI(rpmfiles fi, int ix)
{
- int j = -1;
- if (fi != NULL && dx >= 0 && dx < fi->fc) {
- if (fi->dil != NULL)
- j = fi->dil[dx];
- }
- return j;
+ return (fi != NULL) ? rpmfnDI(&fi->fndata, ix) : -1;
}
-rpmsid rpmfiBNIdIndex(rpmfi fi, int ix)
+int rpmfilesODI(rpmfiles fi, int ix)
{
- rpmsid id = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
- if (fi->bnid != NULL)
- id = fi->bnid[ix];
- }
- return id;
+ return (fi != NULL) ? rpmfnDI(fi->ofndata, ix) : -1;
}
-rpmsid rpmfiDNIdIndex(rpmfi fi, int jx)
+rpmsid rpmfilesBNId(rpmfiles fi, int ix)
{
- rpmsid id = 0;
- if (fi != NULL && jx >= 0 && jx < fi->fc) {
- if (fi->dnid != NULL)
- id = fi->dnid[jx];
- }
- return id;
+ return (fi != NULL) ? rpmfnBNId(&fi->fndata, ix) : 0;
+}
+
+rpmsid rpmfilesOBNId(rpmfiles fi, int ix)
+{
+ return (fi != NULL) ? rpmfnBNId(fi->ofndata, ix) : 0;
+}
+
+rpmsid rpmfilesDNId(rpmfiles fi, int jx)
+{
+ return (fi != NULL) ? rpmfnDNId(&fi->fndata, jx) : 0;
+}
+
+rpmsid rpmfilesODNId(rpmfiles fi, int jx)
+{
+ return (fi != NULL) ? rpmfnDNId(fi->ofndata, jx) : 0;
+}
+
+const char * rpmfilesBN(rpmfiles fi, int ix)
+{
+ return (fi != NULL) ? rpmfnBN(fi->pool, &fi->fndata, ix) : NULL;
+}
+
+const char * rpmfilesOBN(rpmfiles fi, int ix)
+{
+ return (fi != NULL) ? rpmstrPoolStr(fi->pool, rpmfilesOBNId(fi, ix)) : NULL;
+}
+
+const char * rpmfilesDN(rpmfiles fi, int jx)
+{
+ return (fi != NULL) ? rpmfnDN(fi->pool, &fi->fndata, jx) : NULL;
+}
+
+const char * rpmfilesODN(rpmfiles fi, int jx)
+{
+ return (fi != NULL) ? rpmstrPoolStr(fi->pool, rpmfilesODNId(fi, jx)) : NULL;
+}
+
+char * rpmfilesFN(rpmfiles fi, int ix)
+{
+ return (fi != NULL) ? rpmfnFN(fi->pool, &fi->fndata, ix) : NULL;
+}
+
+char * rpmfilesOFN(rpmfiles fi, int ix)
+{
+ return (fi != NULL) ? rpmfnFN(fi->pool, fi->ofndata, ix) : NULL;
+}
+
+/* Fn is expected to be relative path, convert directory to relative too */
+static int cmpPoolFn(rpmstrPool pool, rpmfn files, int ix, const char * fn)
+{
+ rpmsid dnid = rpmfnDNId(files, rpmfnDI(files, ix));
+ const char *dn = rpmstrPoolStr(pool, dnid);
+ const char *reldn = (dn[0] == '/') ? dn + 1 : dn;
+ size_t l = strlen(reldn);
+ int cmp = strncmp(reldn, fn, l);
+ if (cmp == 0)
+ cmp = strcmp(rpmfnBN(pool, files, ix), fn + l);
+ return cmp;
}
-const char * rpmfiBNIndex(rpmfi fi, int ix)
+static int rpmfnFindFN(rpmstrPool pool, rpmfn files, const char * fn)
{
- const char * BN = NULL;
+ int fc = rpmfnFC(files);
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
- if (fi->bnid != NULL)
- BN = rpmstrPoolStr(fi->pool, fi->bnid[ix]);
+ /*
+ * Skip payload prefix, turn absolute paths into relative. This
+ * allows handling binary rpm payloads with and without ./ prefix and
+ * srpm payloads which only contain basenames.
+ */
+ if (fn[0] == '.' && fn[1] == '/')
+ fn += 2;
+ if (fn[0] == '/')
+ fn += 1;
+
+ /* try binary search */
+
+ int lo = 0;
+ int hi = fc;
+ int mid, cmp;
+
+ while (hi > lo) {
+ mid = (hi + lo) / 2 ;
+ cmp = cmpPoolFn(pool, files, mid, fn);
+ if (cmp < 0) {
+ lo = mid+1;
+ } else if (cmp > 0) {
+ hi = mid;
+ } else {
+ return mid;
+ }
+ }
+
+ /* not found: try linear search */
+ for (int i=0; i < fc; i++) {
+ if (cmpPoolFn(pool, files, i, fn) == 0)
+ return i;
}
- return BN;
+ return -1;
+}
+
+int rpmfilesFindFN(rpmfiles files, const char * fn)
+{
+ return (files && fn) ? rpmfnFindFN(files->pool, &files->fndata, fn) : -1;
+}
+
+int rpmfilesFindOFN(rpmfiles files, const char * fn)
+{
+ return (files && fn) ? rpmfnFindFN(files->pool, files->ofndata, fn) : -1;
}
-const char * rpmfiDNIndex(rpmfi fi, int jx)
+int rpmfiFindFN(rpmfi fi, const char * fn)
{
- const char * DN = NULL;
+ int ix = -1;
- if (fi != NULL && jx >= 0 && jx < fi->dc) {
- if (fi->dnid != NULL)
- DN = rpmstrPoolStr(fi->pool, fi->dnid[jx]);
+ if (fi != NULL) {
+ ix = rpmfilesFindFN(fi->files, fn);
}
- return DN;
+ return ix;
}
-char * rpmfiFNIndex(rpmfi fi, int ix)
+int rpmfiFindOFN(rpmfi fi, const char * fn)
{
- char *fn = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
- fn = rstrscat(NULL, rpmstrPoolStr(fi->pool, fi->dnid[fi->dil[ix]]),
- rpmstrPoolStr(fi->pool, fi->bnid[ix]), NULL);
+ int ix = -1;
+
+ if (fi != NULL) {
+ ix = rpmfilesFindOFN(fi->files, fn);
}
- return fn;
+ return ix;
}
-rpmfileAttrs rpmfiFFlagsIndex(rpmfi fi, int ix)
+/*
+ * Dirnames are not sorted when separated from basenames, we need to assemble
+ * the whole path for search (binary or otherwise) purposes.
+ */
+static int cmpPfx(rpmfiles files, int ix, const char *pfx, size_t plen)
+{
+ char *fn = rpmfilesFN(files, ix);
+ int rc = strncmp(pfx, fn, plen);
+ free(fn);
+ return rc;
+}
+
+rpmfileAttrs rpmfilesFFlags(rpmfiles fi, int ix)
{
rpmfileAttrs FFlags = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fflags != NULL)
FFlags = fi->fflags[ix];
}
return FFlags;
}
-rpmVerifyAttrs rpmfiVFlagsIndex(rpmfi fi, int ix)
+rpmVerifyAttrs rpmfilesVFlags(rpmfiles fi, int ix)
{
rpmVerifyAttrs VFlags = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->vflags != NULL)
VFlags = fi->vflags[ix];
}
return VFlags;
}
-rpm_mode_t rpmfiFModeIndex(rpmfi fi, int ix)
+rpm_mode_t rpmfilesFMode(rpmfiles fi, int ix)
{
rpm_mode_t fmode = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fmodes != NULL)
fmode = fi->fmodes[ix];
}
return fmode;
}
-rpmfileState rpmfiFStateIndex(rpmfi fi, int ix)
+rpmfileState rpmfilesFState(rpmfiles fi, int ix)
{
rpmfileState fstate = RPMFILE_STATE_MISSING;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fstates != NULL)
fstate = fi->fstates[ix];
}
return fstate;
}
-const unsigned char * rpmfiMD5(rpmfi fi)
-{
- const unsigned char *digest;
- int algo = 0;
-
- digest = rpmfiFDigest(fi, &algo, NULL);
- return (algo == PGPHASHALGO_MD5) ? digest : NULL;
-}
-
int rpmfiDigestAlgo(rpmfi fi)
{
- return fi ? fi->digestalgo : 0;
+ return fi ? rpmfilesDigestAlgo(fi->files) : 0;
}
-const unsigned char * rpmfiFDigestIndex(rpmfi fi, int ix, int *algo, size_t *len)
+const unsigned char * rpmfilesFDigest(rpmfiles fi, int ix, int *algo, size_t *len)
{
const unsigned char *digest = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
size_t diglen = rpmDigestLength(fi->digestalgo);
if (fi->digests != NULL)
digest = fi->digests + (diglen * ix);
@@ -228,68 +568,89 @@ char * rpmfiFDigestHex(rpmfi fi, int *algo)
return fdigest;
}
-const char * rpmfiFLinkIndex(rpmfi fi, int ix)
+const unsigned char * rpmfilesFSignature(rpmfiles fi, int ix, size_t *len)
+{
+ const unsigned char *signature = NULL;
+
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
+ if (fi->signatures != NULL)
+ signature = fi->signatures + (fi->signaturelength * ix);
+ if (len)
+ *len = fi->signaturelength;
+ }
+ return signature;
+}
+
+const char * rpmfilesFLink(rpmfiles fi, int ix)
{
const char * flink = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->flinks != NULL)
flink = rpmstrPoolStr(fi->pool, fi->flinks[ix]);
}
return flink;
}
-rpm_loff_t rpmfiFSizeIndex(rpmfi fi, int ix)
+rpm_loff_t rpmfilesFSize(rpmfiles fi, int ix)
{
rpm_loff_t fsize = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fsizes != NULL)
fsize = fi->fsizes[ix];
+ else if (fi->lfsizes != NULL)
+ fsize = fi->lfsizes[ix];
}
return fsize;
}
-rpm_rdev_t rpmfiFRdevIndex(rpmfi fi, int ix)
+rpm_rdev_t rpmfilesFRdev(rpmfiles fi, int ix)
{
rpm_rdev_t frdev = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->frdevs != NULL)
frdev = fi->frdevs[ix];
}
return frdev;
}
-rpm_ino_t rpmfiFInodeIndex(rpmfi fi, int ix)
+rpm_ino_t rpmfilesFInode(rpmfiles fi, int ix)
{
rpm_ino_t finode = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->finodes != NULL)
finode = fi->finodes[ix];
}
return finode;
}
-rpm_color_t rpmfiColor(rpmfi fi)
+rpm_color_t rpmfilesColor(rpmfiles files)
{
rpm_color_t color = 0;
- if (fi != NULL && fi->fcolors != NULL) {
- for (int i = 0; i < fi->fc; i++)
- color |= fi->fcolors[i];
+ if (files != NULL && files->fcolors != NULL) {
+ int fc = rpmfilesFC(files);
+ for (int i = 0; i < fc; i++)
+ color |= files->fcolors[i];
/* XXX ignore all but lsnibble for now. */
color &= 0xf;
}
return color;
}
-rpm_color_t rpmfiFColorIndex(rpmfi fi, int ix)
+rpm_color_t rpmfiColor(rpmfi fi)
+{
+ return (fi != NULL) ? rpmfilesColor(fi->files) : 0;
+}
+
+rpm_color_t rpmfilesFColor(rpmfiles fi, int ix)
{
rpm_color_t fcolor = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fcolors != NULL)
/* XXX ignore all but lsnibble for now. */
fcolor = (fi->fcolors[ix] & 0x0f);
@@ -297,12 +658,12 @@ rpm_color_t rpmfiFColorIndex(rpmfi fi, int ix)
return fcolor;
}
-const char * rpmfiFClassIndex(rpmfi fi, int ix)
+const char * rpmfilesFClass(rpmfiles fi, int ix)
{
const char * fclass = NULL;
int cdictx;
- if (fi != NULL && fi->fcdictx != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && fi->fcdictx != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
cdictx = fi->fcdictx[ix];
if (fi->cdict != NULL && cdictx >= 0 && cdictx < fi->ncdict)
fclass = fi->cdict[cdictx];
@@ -310,13 +671,13 @@ const char * rpmfiFClassIndex(rpmfi fi, int ix)
return fclass;
}
-uint32_t rpmfiFDependsIndex(rpmfi fi, int ix, const uint32_t ** fddictp)
+uint32_t rpmfilesFDepends(rpmfiles fi, int ix, const uint32_t ** fddictp)
{
int fddictx = -1;
int fddictn = 0;
const uint32_t * fddict = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fddictn != NULL)
fddictn = fi->fddictn[ix];
if (fddictn > 0 && fi->fddictx != NULL)
@@ -329,102 +690,189 @@ uint32_t rpmfiFDependsIndex(rpmfi fi, int ix, const uint32_t ** fddictp)
return fddictn;
}
-uint32_t rpmfiFNlinkIndex(rpmfi fi, int ix)
+uint32_t rpmfilesFLinks(rpmfiles fi, int ix, const int ** files)
{
uint32_t nlink = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
- /* XXX rpm-2.3.12 has not RPMTAG_FILEINODES */
- if (fi->finodes && fi->frdevs) {
- rpm_ino_t finode = fi->finodes[ix];
- rpm_rdev_t frdev = fi->frdevs[ix];
- int j;
-
- for (j = 0; j < fi->fc; j++) {
- if (fi->frdevs[j] == frdev && fi->finodes[j] == finode)
- nlink++;
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
+ nlink = 1;
+ if (fi->nlinks) {
+ struct hardlinks_s ** hardlinks = NULL;
+ nlinkHashGetEntry(fi->nlinks, ix, &hardlinks, NULL, NULL);
+ if (hardlinks) {
+ nlink = hardlinks[0]->nlink;
+ if (files) {
+ *files = hardlinks[0]->files;
+ }
+ } else if (files){
+ *files = NULL;
}
}
}
return nlink;
}
-rpm_time_t rpmfiFMtimeIndex(rpmfi fi, int ix)
+uint32_t rpmfiFLinks(rpmfi fi, const int ** files)
+{
+ return rpmfilesFLinks(fi->files, fi ? fi->i : -1, files);
+}
+
+uint32_t rpmfilesFNlink(rpmfiles fi, int ix)
+{
+ return rpmfilesFLinks(fi, ix, NULL);
+}
+
+rpm_time_t rpmfilesFMtime(rpmfiles fi, int ix)
{
rpm_time_t fmtime = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fmtimes != NULL)
fmtime = fi->fmtimes[ix];
}
return fmtime;
}
-const char * rpmfiFUserIndex(rpmfi fi, int ix)
+const char * rpmfilesFUser(rpmfiles fi, int ix)
{
const char * fuser = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fuser != NULL)
fuser = rpmstrPoolStr(fi->pool, fi->fuser[ix]);
}
return fuser;
}
-const char * rpmfiFGroupIndex(rpmfi fi, int ix)
+const char * rpmfilesFGroup(rpmfiles fi, int ix)
{
const char * fgroup = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->fgroup != NULL)
fgroup = rpmstrPoolStr(fi->pool, fi->fgroup[ix]);
}
return fgroup;
}
-const char * rpmfiFCapsIndex(rpmfi fi, int ix)
+const char * rpmfilesFCaps(rpmfiles fi, int ix)
{
const char *fcaps = NULL;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
fcaps = fi->fcaps ? fi->fcaps[ix] : "";
}
return fcaps;
}
-const char * rpmfiFLangsIndex(rpmfi fi, int ix)
+const char * rpmfilesFLangs(rpmfiles fi, int ix)
{
const char *flangs = NULL;
- if (fi != NULL && fi->flangs != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && fi->flangs != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
flangs = rpmstrPoolStr(fi->pool, fi->flangs[ix]);
}
return flangs;
}
-struct fingerPrint_s *rpmfiFps(rpmfi fi)
+int rpmfilesStat(rpmfiles fi, int ix, int flags, struct stat *sb)
+{
+ int rc = -1;
+ if (fi && sb) {
+ /* XXX FIXME define proper flags with sane semantics... */
+ int warn = flags & 0x1;
+ const char *user = rpmfilesFUser(fi, ix);
+ const char *group = rpmfilesFGroup(fi, ix);
+ const int * hardlinks = NULL;
+ uint32_t nlinks = rpmfilesFLinks(fi, ix, &hardlinks);
+
+ memset(sb, 0, sizeof(*sb));
+ sb->st_nlink = nlinks;
+ sb->st_ino = rpmfilesFInode(fi, ix);
+ sb->st_rdev = rpmfilesFRdev(fi, ix);
+ sb->st_mode = rpmfilesFMode(fi, ix);
+ sb->st_mtime = rpmfilesFMtime(fi, ix);
+
+ /* Only regular files and symlinks have a size */
+ if (S_ISREG(sb->st_mode)) {
+ /* Content and thus size comes with last hardlink */
+ if (!(nlinks > 1 && hardlinks[nlinks-1] != ix))
+ sb->st_size = rpmfilesFSize(fi, ix);
+ } else if (S_ISLNK(sb->st_mode)) {
+ /*
+ * Normally rpmfilesFSize() is correct for symlinks too, this is
+ * only needed for glob()'ed links from fakechroot environment.
+ */
+ sb->st_size = strlen(rpmfilesFLink(fi, ix));
+ }
+
+ if (user && rpmugUid(user, &sb->st_uid)) {
+ if (warn)
+ rpmlog(RPMLOG_WARNING,
+ _("user %s does not exist - using %s\n"), user, UID_0_USER);
+ sb->st_mode &= ~S_ISUID; /* turn off suid bit */
+ }
+
+ if (group && rpmugGid(group, &sb->st_gid)) {
+ if (warn)
+ rpmlog(RPMLOG_WARNING,
+ _("group %s does not exist - using %s\n"), group, GID_0_GROUP);
+ sb->st_mode &= ~S_ISGID; /* turn off sgid bit */
+ }
+
+ rc = 0;
+ }
+ return rc;
+}
+
+struct fingerPrint_s *rpmfilesFps(rpmfiles fi)
{
return (fi != NULL) ? fi->fps : NULL;
}
+static int iterFwd(rpmfi fi)
+{
+ return fi->i + 1;
+}
+
+static int iterBack(rpmfi fi)
+{
+ return fi->i - 1;
+}
+
+static int iterInterval(rpmfi fi)
+{
+ if (fi->i == -1)
+ return fi->intervalStart;
+ else if (fi->i + 1 < fi->intervalEnd)
+ return fi->i + 1;
+ else
+ return RPMERR_ITER_END;
+}
+
int rpmfiNext(rpmfi fi)
{
- int i = -1;
+ int next = -1;
+ if (fi != NULL) {
+ do {
+ next = fi->next(fi);
+ } while (next == RPMERR_ITER_SKIP);
- if (fi != NULL && ++fi->i >= 0) {
- if (fi->i < fi->fc) {
- i = fi->i;
- if (fi->dil != NULL)
- fi->j = fi->dil[fi->i];
- } else
+ if (next >= 0 && next < rpmfilesFC(fi->files)) {
+ fi->i = next;
+ fi->j = rpmfilesDI(fi->files, fi->i);
+ } else {
fi->i = -1;
+ if (next >= 0) {
+ next = -1;
+ }
+ }
}
-
- return i;
+ return next;
}
rpmfi rpmfiInit(rpmfi fi, int fx)
{
if (fi != NULL) {
- if (fx >= 0 && fx < fi->fc) {
+ if (fx >= 0 && fx < rpmfilesFC(fi->files)) {
fi->i = fx - 1;
fi->j = -1;
}
@@ -438,7 +886,7 @@ int rpmfiNextD(rpmfi fi)
int j = -1;
if (fi != NULL && ++fi->j >= 0) {
- if (fi->j < fi->dc)
+ if (fi->j < rpmfilesDC(fi->files))
j = fi->j;
else
fi->j = -1;
@@ -450,7 +898,7 @@ int rpmfiNextD(rpmfi fi)
rpmfi rpmfiInitD(rpmfi fi, int dx)
{
if (fi != NULL) {
- if (dx >= 0 && dx < fi->fc)
+ if (dx >= 0 && dx < rpmfilesFC(fi->files))
fi->j = dx - 1;
else
fi = NULL;
@@ -459,26 +907,6 @@ rpmfi rpmfiInitD(rpmfi fi, int dx)
return fi;
}
-/**
- * Identify a file type.
- * @param ft file type
- * @return string to identify a file type
- */
-static
-const char * ftstring (rpmFileTypes ft)
-{
- switch (ft) {
- case XDIR: return "directory";
- case CDEV: return "char dev";
- case BDEV: return "block dev";
- case LINK: return "link";
- case SOCK: return "sock";
- case PIPE: return "fifo/pipe";
- case REG: return "file";
- default: return "unknown file type";
- }
-}
-
rpmFileTypes rpmfiWhatis(rpm_mode_t mode)
{
if (S_ISDIR(mode)) return XDIR;
@@ -490,30 +918,32 @@ rpmFileTypes rpmfiWhatis(rpm_mode_t mode)
return REG;
}
-int rpmfiCompareIndex(rpmfi afi, int aix, rpmfi bfi, int bix)
+int rpmfilesCompare(rpmfiles afi, int aix, rpmfiles bfi, int bix)
{
- mode_t amode = rpmfiFModeIndex(afi, aix);
- mode_t bmode = rpmfiFModeIndex(bfi, bix);
+ mode_t amode = rpmfilesFMode(afi, aix);
+ mode_t bmode = rpmfilesFMode(bfi, bix);
rpmFileTypes awhat = rpmfiWhatis(amode);
- if ((rpmfiFFlagsIndex(afi, aix) & RPMFILE_GHOST) ||
- (rpmfiFFlagsIndex(bfi, bix) & RPMFILE_GHOST)) return 0;
+ if ((rpmfilesFFlags(afi, aix) & RPMFILE_GHOST) ||
+ (rpmfilesFFlags(bfi, bix) & RPMFILE_GHOST)) return 0;
- if (amode != bmode) return 1;
+ /* Mode difference is a conflict, except for symlinks */
+ if (!(awhat == LINK && rpmfiWhatis(bmode) == LINK) && amode != bmode)
+ return 1;
if (awhat == LINK || awhat == REG) {
- if (rpmfiFSizeIndex(afi, aix) != rpmfiFSizeIndex(bfi, bix))
+ if (rpmfilesFSize(afi, aix) != rpmfilesFSize(bfi, bix))
return 1;
}
- if (!rstreq(rpmfiFUserIndex(afi, aix), rpmfiFUserIndex(bfi, bix)))
+ if (!rstreq(rpmfilesFUser(afi, aix), rpmfilesFUser(bfi, bix)))
return 1;
- if (!rstreq(rpmfiFGroupIndex(afi, aix), rpmfiFGroupIndex(bfi, bix)))
+ if (!rstreq(rpmfilesFGroup(afi, aix), rpmfilesFGroup(bfi, bix)))
return 1;
if (awhat == LINK) {
- const char * alink = rpmfiFLinkIndex(afi, aix);
- const char * blink = rpmfiFLinkIndex(bfi, bix);
+ const char * alink = rpmfilesFLink(afi, aix);
+ const char * blink = rpmfilesFLink(bfi, bix);
if (alink == blink) return 0;
if (alink == NULL) return 1;
if (blink == NULL) return -1;
@@ -522,8 +952,8 @@ int rpmfiCompareIndex(rpmfi afi, int aix, rpmfi bfi, int bix)
size_t adiglen, bdiglen;
int aalgo, balgo;
const unsigned char * adigest, * bdigest;
- adigest = rpmfiFDigestIndex(afi, aix, &aalgo, &adiglen);
- bdigest = rpmfiFDigestIndex(bfi, bix, &balgo, &bdiglen);
+ adigest = rpmfilesFDigest(afi, aix, &aalgo, &adiglen);
+ bdigest = rpmfilesFDigest(bfi, bix, &balgo, &bdiglen);
if (adigest == bdigest) return 0;
if (adigest == NULL) return 1;
if (bdigest == NULL) return -1;
@@ -531,18 +961,88 @@ int rpmfiCompareIndex(rpmfi afi, int aix, rpmfi bfi, int bix)
if (aalgo != balgo || adiglen != bdiglen) return -1;
return memcmp(adigest, bdigest, adiglen);
} else if (awhat == CDEV || awhat == BDEV) {
- if (rpmfiFRdevIndex(afi, aix) != rpmfiFRdevIndex(bfi, bix))
+ if (rpmfilesFRdev(afi, aix) != rpmfilesFRdev(bfi, bix))
return 1;
}
return 0;
}
-rpmFileAction rpmfiDecideFateIndex(rpmfi ofi, int oix, rpmfi nfi, int nix,
+int rpmfileContentsEqual(rpmfiles ofi, int oix, rpmfiles nfi, int nix)
+{
+ char * fn = rpmfilesFN(nfi, nix);
+ rpmFileTypes diskWhat, newWhat, oldWhat;
+ struct stat sb;
+ int equal = 0;
+
+ if (fn == NULL || (lstat(fn, &sb))) {
+ goto exit; /* The file doesn't exist on the disk */
+ }
+
+ if (rpmfilesFSize(nfi, nix) != sb.st_size) {
+ goto exit;
+ }
+
+ diskWhat = rpmfiWhatis((rpm_mode_t)sb.st_mode);
+ newWhat = rpmfiWhatis(rpmfilesFMode(nfi, nix));
+ oldWhat = rpmfiWhatis(rpmfilesFMode(ofi, oix));
+ if ((diskWhat != newWhat) || (diskWhat != oldWhat)) {
+ goto exit;
+ }
+
+ if (diskWhat == REG) {
+ int oalgo, nalgo;
+ size_t odiglen, ndiglen;
+ const unsigned char * odigest, * ndigest;
+ char buffer[1024];
+
+ odigest = rpmfilesFDigest(ofi, oix, &oalgo, &odiglen);
+ ndigest = rpmfilesFDigest(nfi, nix, &nalgo, &ndiglen);
+ /* See if the file in old pkg is identical to the one in new pkg */
+ if ((oalgo != nalgo) || (odiglen != ndiglen) || (!ndigest) ||
+ (memcmp(odigest, ndigest, ndiglen) != 0)) {
+ goto exit;
+ }
+
+ if (rpmDoDigest(nalgo, fn, 0, (unsigned char *)buffer, NULL) != 0) {
+ goto exit; /* assume file has been removed */
+ }
+
+ /* See if the file on disk is identical to the one in new pkg */
+ if (memcmp(ndigest, buffer, ndiglen) == 0) {
+ equal = 1;
+ goto exit;
+ }
+ } else if (diskWhat == LINK) {
+ const char * nFLink;
+ char buffer[1024];
+ ssize_t link_len;
+
+ nFLink = rpmfilesFLink(nfi, nix);
+ link_len = readlink(fn, buffer, sizeof(buffer) - 1);
+ if (link_len == -1) {
+ goto exit; /* assume file has been removed */
+ }
+ buffer[link_len] = '\0';
+ /* See if the link on disk is identical to the one in new pkg */
+ if (nFLink && rstreq(nFLink, buffer)) {
+ equal = 1;
+ goto exit;
+ }
+ }
+
+exit:
+ free(fn);
+ return equal;
+}
+
+
+rpmFileAction rpmfilesDecideFate(rpmfiles ofi, int oix,
+ rpmfiles nfi, int nix,
int skipMissing)
{
- char * fn = rpmfiFNIndex(nfi, nix);
- rpmfileAttrs newFlags = rpmfiFFlagsIndex(nfi, nix);
+ char * fn = rpmfilesFN(nfi, nix);
+ rpmfileAttrs newFlags = rpmfilesFFlags(nfi, nix);
char buffer[1024];
rpmFileTypes dbWhat, newWhat, diskWhat;
struct stat sb;
@@ -571,39 +1071,47 @@ rpmFileAction rpmfiDecideFateIndex(rpmfi ofi, int oix, rpmfi nfi, int nix,
}
diskWhat = rpmfiWhatis((rpm_mode_t)sb.st_mode);
- dbWhat = rpmfiWhatis(rpmfiFModeIndex(ofi, oix));
- newWhat = rpmfiWhatis(rpmfiFModeIndex(nfi, nix));
+ dbWhat = rpmfiWhatis(rpmfilesFMode(ofi, oix));
+ newWhat = rpmfiWhatis(rpmfilesFMode(nfi, nix));
/*
- * This order matters - we'd prefer to CREATE the file if at all
+ * This order matters - we'd prefer to TOUCH the file if at all
* possible in case something else (like the timestamp) has changed.
* Only regular files and symlinks might need a backup, everything
* else falls through here with FA_CREATE.
*/
- memset(buffer, 0, sizeof(buffer));
if (dbWhat == REG) {
int oalgo, nalgo;
size_t odiglen, ndiglen;
const unsigned char * odigest, * ndigest;
+ /* See if the file on disk is identical to the one in new pkg */
+ ndigest = rpmfilesFDigest(nfi, nix, &nalgo, &ndiglen);
+ if (diskWhat == REG && newWhat == REG) {
+ if (rpmDoDigest(nalgo, fn, 0, (unsigned char *)buffer, NULL))
+ goto exit; /* assume file has been removed */
+ if (ndigest && memcmp(ndigest, buffer, ndiglen) == 0) {
+ action = FA_TOUCH;
+ goto exit; /* unmodified config file, touch it. */
+ }
+ }
+
/* See if the file on disk is identical to the one in old pkg */
- odigest = rpmfiFDigestIndex(ofi, oix, &oalgo, &odiglen);
+ odigest = rpmfilesFDigest(ofi, oix, &oalgo, &odiglen);
if (diskWhat == REG) {
- if (rpmDoDigest(oalgo, fn, 0, (unsigned char *)buffer, NULL))
- goto exit; /* assume file has been removed */
+ /* hash algo changed or digest was not computed, recalculate it */
+ if ((oalgo != nalgo) || (newWhat != REG)) {
+ if (rpmDoDigest(oalgo, fn, 0, (unsigned char *)buffer, NULL))
+ goto exit; /* assume file has been removed */
+ }
if (odigest && memcmp(odigest, buffer, odiglen) == 0)
goto exit; /* unmodified config file, replace. */
}
- /* See if the file on disk is identical to the one in new pkg */
- ndigest = rpmfiFDigestIndex(nfi, nix, &nalgo, &ndiglen);
- if (diskWhat == REG && newWhat == REG) {
- /* hash algo changed in new, recalculate digest */
- if (oalgo != nalgo)
- if (rpmDoDigest(nalgo, fn, 0, (unsigned char *)buffer, NULL))
- goto exit; /* assume file has been removed */
- if (ndigest && memcmp(ndigest, buffer, ndiglen) == 0)
- goto exit; /* file identical in new, replace. */
+ /* if new file is no longer config, backup it and replace it */
+ if (!(newFlags & RPMFILE_CONFIG)) {
+ action = FA_SAVE;
+ goto exit;
}
/* If file can be determined identical in old and new pkg, let it be */
@@ -619,24 +1127,36 @@ rpmFileAction rpmfiDecideFateIndex(rpmfi ofi, int oix, rpmfi nfi, int nix,
} else if (dbWhat == LINK) {
const char * oFLink, * nFLink;
- /* See if the link on disk is identical to the one in old pkg */
- oFLink = rpmfiFLinkIndex(ofi, oix);
if (diskWhat == LINK) {
+ /* Read link from the disk */
ssize_t link_len = readlink(fn, buffer, sizeof(buffer) - 1);
if (link_len == -1)
goto exit; /* assume file has been removed */
buffer[link_len] = '\0';
- if (oFLink && rstreq(oFLink, buffer))
- goto exit; /* unmodified config file, replace. */
}
/* See if the link on disk is identical to the one in new pkg */
- nFLink = rpmfiFLinkIndex(nfi, nix);
+ nFLink = rpmfilesFLink(nfi, nix);
if (diskWhat == LINK && newWhat == LINK) {
- if (nFLink && rstreq(nFLink, buffer))
+ if (nFLink && rstreq(nFLink, buffer)) {
+ action = FA_TOUCH;
+ goto exit; /* unmodified config file, touch it. */
+ }
+ }
+
+ /* See if the link on disk is identical to the one in old pkg */
+ oFLink = rpmfilesFLink(ofi, oix);
+ if (diskWhat == LINK) {
+ if (oFLink && rstreq(oFLink, buffer))
goto exit; /* unmodified config file, replace. */
}
+ /* if new file is no longer config, backup it and replace it */
+ if (!(newFlags & RPMFILE_CONFIG)) {
+ action = FA_SAVE;
+ goto exit;
+ }
+
/* If link is identical in old and new pkg, let it be */
if (newWhat == LINK && oFLink && nFLink && rstreq(oFLink, nFLink)) {
action = FA_SKIP; /* identical file, don't bother. */
@@ -652,10 +1172,10 @@ exit:
return action;
}
-int rpmfiConfigConflictIndex(rpmfi fi, int ix)
+int rpmfilesConfigConflict(rpmfiles fi, int ix)
{
char * fn = NULL;
- rpmfileAttrs flags = rpmfiFFlagsIndex(fi, ix);
+ rpmfileAttrs flags = rpmfilesFFlags(fi, ix);
char buffer[1024];
rpmFileTypes newWhat, diskWhat;
struct stat sb;
@@ -667,12 +1187,12 @@ int rpmfiConfigConflictIndex(rpmfi fi, int ix)
/* Only links and regular files can be %config, this is kinda moot */
/* XXX: Why are we returning 1 here? */
- newWhat = rpmfiWhatis(rpmfiFModeIndex(fi, ix));
+ newWhat = rpmfiWhatis(rpmfilesFMode(fi, ix));
if (newWhat != LINK && newWhat != REG)
return 1;
/* If it's not on disk, there's nothing to be saved */
- fn = rpmfiFNIndex(fi, ix);
+ fn = rpmfilesFN(fi, ix);
if (lstat(fn, &sb))
goto exit;
@@ -697,7 +1217,7 @@ int rpmfiConfigConflictIndex(rpmfi fi, int ix)
}
/* Files of different sizes obviously are not identical */
- if (rpmfiFSizeIndex(fi, ix) != sb.st_size) {
+ if (rpmfilesFSize(fi, ix) != sb.st_size) {
rc = 1;
goto exit;
}
@@ -706,7 +1226,7 @@ int rpmfiConfigConflictIndex(rpmfi fi, int ix)
if (newWhat == REG) {
int algo;
size_t diglen;
- const unsigned char *ndigest = rpmfiFDigestIndex(fi,ix, &algo, &diglen);
+ const unsigned char *ndigest = rpmfilesFDigest(fi,ix, &algo, &diglen);
if (rpmDoDigest(algo, fn, 0, (unsigned char *)buffer, NULL))
goto exit; /* assume file has been removed */
if (ndigest && memcmp(ndigest, buffer, diglen) == 0)
@@ -717,7 +1237,7 @@ int rpmfiConfigConflictIndex(rpmfi fi, int ix)
if (link_len == -1)
goto exit; /* assume file has been removed */
buffer[link_len] = '\0';
- nFLink = rpmfiFLinkIndex(fi, ix);
+ nFLink = rpmfilesFLink(fi, ix);
if (nFLink && rstreq(nFLink, buffer))
goto exit; /* unmodified config file */
}
@@ -729,334 +1249,24 @@ exit:
return rc;
}
-static char **duparray(char ** src, int size)
-{
- char **dest = xmalloc((size+1) * sizeof(*dest));
- for (int i = 0; i < size; i++) {
- dest[i] = xstrdup(src[i]);
- }
- free(src);
- return dest;
-}
-
-static int addPrefixes(Header h, rpmRelocation *relocations, int numRelocations)
-{
- struct rpmtd_s validRelocs;
- const char *validprefix;
- const char ** actualRelocations;
- int numActual = 0;
-
- headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM);
- /*
- * If no relocations are specified (usually the case), then return the
- * original header. If there are prefixes, however, then INSTPREFIXES
- * should be added for RPM_INSTALL_PREFIX environ variables in scriptlets,
- * but, since relocateFileList() can be called more than once for
- * the same header, don't bother if already present.
- */
- if (relocations == NULL || numRelocations == 0) {
- if (rpmtdCount(&validRelocs) > 0) {
- if (!headerIsEntry(h, RPMTAG_INSTPREFIXES)) {
- rpmtdSetTag(&validRelocs, RPMTAG_INSTPREFIXES);
- headerPut(h, &validRelocs, HEADERPUT_DEFAULT);
- }
- rpmtdFreeData(&validRelocs);
- }
- return 0;
- }
-
- actualRelocations = xmalloc(rpmtdCount(&validRelocs) * sizeof(*actualRelocations));
- rpmtdInit(&validRelocs);
- while ((validprefix = rpmtdNextString(&validRelocs))) {
- int j;
- for (j = 0; j < numRelocations; j++) {
- if (relocations[j].oldPath == NULL || /* XXX can't happen */
- !rstreq(validprefix, relocations[j].oldPath))
- continue;
- /* On install, a relocate to NULL means skip the path. */
- if (relocations[j].newPath) {
- actualRelocations[numActual] = relocations[j].newPath;
- numActual++;
- }
- break;
- }
- if (j == numRelocations) {
- actualRelocations[numActual] = validprefix;
- numActual++;
- }
- }
- rpmtdFreeData(&validRelocs);
-
- if (numActual) {
- headerPutStringArray(h, RPMTAG_INSTPREFIXES, actualRelocations, numActual);
- }
- free(actualRelocations);
- return numActual;
-}
-
-static void saveRelocs(Header h, rpmtd bnames, rpmtd dnames, rpmtd dindexes)
-{
- struct rpmtd_s td;
- headerGet(h, RPMTAG_BASENAMES, &td, HEADERGET_MINMEM);
- rpmtdSetTag(&td, RPMTAG_ORIGBASENAMES);
- headerPut(h, &td, HEADERPUT_DEFAULT);
- rpmtdFreeData(&td);
-
- headerGet(h, RPMTAG_DIRNAMES, &td, HEADERGET_MINMEM);
- rpmtdSetTag(&td, RPMTAG_ORIGDIRNAMES);
- headerPut(h, &td, HEADERPUT_DEFAULT);
- rpmtdFreeData(&td);
-
- headerGet(h, RPMTAG_DIRINDEXES, &td, HEADERGET_MINMEM);
- rpmtdSetTag(&td, RPMTAG_ORIGDIRINDEXES);
- headerPut(h, &td, HEADERPUT_DEFAULT);
- rpmtdFreeData(&td);
-
- headerMod(h, bnames);
- headerMod(h, dnames);
- headerMod(h, dindexes);
-}
-
-void rpmRelocateFileList(rpmRelocation *relocations, int numRelocations,
- rpmfs fs, Header h)
-{
- static int _printed = 0;
- char ** baseNames;
- char ** dirNames;
- uint32_t * dirIndexes;
- rpm_count_t fileCount, dirCount;
- int nrelocated = 0;
- int fileAlloced = 0;
- char * fn = NULL;
- int haveRelocatedBase = 0;
- size_t maxlen = 0;
- int i, j;
- struct rpmtd_s bnames, dnames, dindexes, fmodes;
-
- addPrefixes(h, relocations, numRelocations);
-
- if (!_printed) {
- _printed = 1;
- rpmlog(RPMLOG_DEBUG, "========== relocations\n");
- for (i = 0; i < numRelocations; i++) {
- if (relocations[i].oldPath == NULL) continue; /* XXX can't happen */
- if (relocations[i].newPath == NULL)
- rpmlog(RPMLOG_DEBUG, "%5d exclude %s\n",
- i, relocations[i].oldPath);
- else
- rpmlog(RPMLOG_DEBUG, "%5d relocate %s -> %s\n",
- i, relocations[i].oldPath, relocations[i].newPath);
- }
- }
-
- for (i = 0; i < numRelocations; i++) {
- if (relocations[i].newPath == NULL) continue;
- size_t len = strlen(relocations[i].newPath);
- if (len > maxlen) maxlen = len;
- }
-
- headerGet(h, RPMTAG_BASENAMES, &bnames, HEADERGET_MINMEM);
- headerGet(h, RPMTAG_DIRINDEXES, &dindexes, HEADERGET_ALLOC);
- headerGet(h, RPMTAG_DIRNAMES, &dnames, HEADERGET_MINMEM);
- headerGet(h, RPMTAG_FILEMODES, &fmodes, HEADERGET_MINMEM);
- /* TODO XXX ugh.. use rpmtd iterators & friends instead */
- baseNames = bnames.data;
- dirIndexes = dindexes.data;
- fileCount = rpmtdCount(&bnames);
- dirCount = rpmtdCount(&dnames);
- /* XXX TODO: use rpmtdDup() instead */
- dirNames = dnames.data = duparray(dnames.data, dirCount);
- dnames.flags |= RPMTD_PTR_ALLOCED;
-
- /*
- * For all relocations, we go through sorted file/relocation lists
- * backwards so that /usr/local relocations take precedence over /usr
- * ones.
- */
-
- /* Relocate individual paths. */
-
- for (i = fileCount - 1; i >= 0; i--) {
- rpmFileTypes ft;
- int fnlen;
-
- size_t len = maxlen +
- strlen(dirNames[dirIndexes[i]]) + strlen(baseNames[i]) + 1;
- if (len >= fileAlloced) {
- fileAlloced = len * 2;
- fn = xrealloc(fn, fileAlloced);
- }
-
-assert(fn != NULL); /* XXX can't happen */
- *fn = '\0';
- fnlen = stpcpy( stpcpy(fn, dirNames[dirIndexes[i]]), baseNames[i]) - fn;
-
- /*
- * See if this file path needs relocating.
- */
- /*
- * XXX FIXME: Would a bsearch of the (already sorted)
- * relocation list be a good idea?
- */
- for (j = numRelocations - 1; j >= 0; j--) {
- if (relocations[j].oldPath == NULL) /* XXX can't happen */
- continue;
- len = !rstreq(relocations[j].oldPath, "/")
- ? strlen(relocations[j].oldPath)
- : 0;
-
- if (fnlen < len)
- continue;
- /*
- * Only subdirectories or complete file paths may be relocated. We
- * don't check for '\0' as our directory names all end in '/'.
- */
- if (!(fn[len] == '/' || fnlen == len))
- continue;
-
- if (!rstreqn(relocations[j].oldPath, fn, len))
- continue;
- break;
- }
- if (j < 0) continue;
-
- rpmtdSetIndex(&fmodes, i);
- ft = rpmfiWhatis(rpmtdGetNumber(&fmodes));
-
- /* On install, a relocate to NULL means skip the path. */
- if (relocations[j].newPath == NULL) {
- if (ft == XDIR) {
- /* Start with the parent, looking for directory to exclude. */
- for (j = dirIndexes[i]; j < dirCount; j++) {
- len = strlen(dirNames[j]) - 1;
- while (len > 0 && dirNames[j][len-1] == '/') len--;
- if (fnlen != len)
- continue;
- if (!rstreqn(fn, dirNames[j], fnlen))
- continue;
- break;
- }
- }
- rpmfsSetAction(fs, i, FA_SKIPNSTATE);
- rpmlog(RPMLOG_DEBUG, "excluding %s %s\n",
- ftstring(ft), fn);
- continue;
- }
-
- /* Relocation on full paths only, please. */
- if (fnlen != len) continue;
-
- rpmlog(RPMLOG_DEBUG, "relocating %s to %s\n",
- fn, relocations[j].newPath);
- nrelocated++;
-
- strcpy(fn, relocations[j].newPath);
- { char * te = strrchr(fn, '/');
- if (te) {
- if (te > fn) te++; /* root is special */
- fnlen = te - fn;
- } else
- te = fn + strlen(fn);
- if (!rstreq(baseNames[i], te)) { /* basename changed too? */
- if (!haveRelocatedBase) {
- /* XXX TODO: use rpmtdDup() instead */
- bnames.data = baseNames = duparray(baseNames, fileCount);
- bnames.flags |= RPMTD_PTR_ALLOCED;
- haveRelocatedBase = 1;
- }
- free(baseNames[i]);
- baseNames[i] = xstrdup(te);
- }
- *te = '\0'; /* terminate new directory name */
- }
-
- /* Does this directory already exist in the directory list? */
- for (j = 0; j < dirCount; j++) {
- if (fnlen != strlen(dirNames[j]))
- continue;
- if (!rstreqn(fn, dirNames[j], fnlen))
- continue;
- break;
- }
-
- if (j < dirCount) {
- dirIndexes[i] = j;
- continue;
- }
-
- /* Creating new paths is a pita */
- dirNames = dnames.data = xrealloc(dnames.data,
- sizeof(*dirNames) * (dirCount + 1));
-
- dirNames[dirCount] = xstrdup(fn);
- dirIndexes[i] = dirCount;
- dirCount++;
- dnames.count++;
- }
-
- /* Finish off by relocating directories. */
- for (i = dirCount - 1; i >= 0; i--) {
- for (j = numRelocations - 1; j >= 0; j--) {
-
- if (relocations[j].oldPath == NULL) /* XXX can't happen */
- continue;
- size_t len = !rstreq(relocations[j].oldPath, "/")
- ? strlen(relocations[j].oldPath)
- : 0;
-
- if (len && !rstreqn(relocations[j].oldPath, dirNames[i], len))
- continue;
-
- /*
- * Only subdirectories or complete file paths may be relocated. We
- * don't check for '\0' as our directory names all end in '/'.
- */
- if (dirNames[i][len] != '/')
- continue;
-
- if (relocations[j].newPath) { /* Relocate the path */
- char *t = NULL;
- rstrscat(&t, relocations[j].newPath, (dirNames[i] + len), NULL);
- /* Unfortunatly rpmCleanPath strips the trailing slash.. */
- (void) rpmCleanPath(t);
- rstrcat(&t, "/");
-
- rpmlog(RPMLOG_DEBUG,
- "relocating directory %s to %s\n", dirNames[i], t);
- free(dirNames[i]);
- dirNames[i] = t;
- nrelocated++;
- }
- }
- }
-
- /* Save original filenames in header and replace (relocated) filenames. */
- if (nrelocated) {
- saveRelocs(h, &bnames, &dnames, &dindexes);
- }
-
- rpmtdFreeData(&bnames);
- rpmtdFreeData(&dnames);
- rpmtdFreeData(&dindexes);
- rpmtdFreeData(&fmodes);
- free(fn);
-}
-
-rpmfi rpmfiFree(rpmfi fi)
+rpmfiles rpmfilesFree(rpmfiles fi)
{
if (fi == NULL) return NULL;
if (fi->nrefs > 1)
- return rpmfiUnlink(fi);
+ return rpmfilesUnlink(fi);
- if (fi->fc > 0) {
- fi->bnid = _free(fi->bnid);
- fi->dnid = _free(fi->dnid);
- fi->dil = _free(fi->dil);
+ if (rpmfilesFC(fi) > 0) {
+ if (fi->ofndata != &fi->fndata) {
+ rpmfnClear(fi->ofndata);
+ free(fi->ofndata);
+ }
+ rpmfnClear(&fi->fndata);
fi->flinks = _free(fi->flinks);
fi->flangs = _free(fi->flangs);
fi->digests = _free(fi->digests);
+ fi->signatures = _free(fi->signatures);
fi->fcaps = _free(fi->fcaps);
fi->cdict = _free(fi->cdict);
@@ -1067,8 +1277,6 @@ rpmfi rpmfiFree(rpmfi fi)
fi->fstates = _free(fi->fstates);
fi->fps = _free(fi->fps);
- fi->pool = rpmstrPoolFree(fi->pool);
-
/* these point to header memory if KEEPHEADER is used, dont free */
if (!(fi->fiflags & RPMFI_KEEPHEADER) && fi->h == NULL) {
fi->fmtimes = _free(fi->fmtimes);
@@ -1076,6 +1284,7 @@ rpmfi rpmfiFree(rpmfi fi)
fi->fflags = _free(fi->fflags);
fi->vflags = _free(fi->vflags);
fi->fsizes = _free(fi->fsizes);
+ fi->lfsizes = _free(fi->lfsizes);
fi->frdevs = _free(fi->frdevs);
fi->finodes = _free(fi->finodes);
@@ -1088,26 +1297,46 @@ rpmfi rpmfiFree(rpmfi fi)
}
}
- fi->fn = _free(fi->fn);
- fi->apath = _free(fi->apath);
-
fi->replacedSizes = _free(fi->replacedSizes);
+ fi->replacedLSizes = _free(fi->replacedLSizes);
fi->h = headerFree(fi->h);
+ fi->pool = rpmstrPoolFree(fi->pool);
+
+ fi->nlinks = nlinkHashFree(fi->nlinks);
- (void) rpmfiUnlink(fi);
+ (void) rpmfilesUnlink(fi);
memset(fi, 0, sizeof(*fi)); /* XXX trash and burn */
fi = _free(fi);
return NULL;
}
-static rpmsid * tag2pool(rpmstrPool pool, Header h, rpmTag tag)
+rpmfi rpmfiFree(rpmfi fi)
+{
+ if (fi == NULL) return NULL;
+
+ if (fi->nrefs > 1)
+ return rpmfiUnlink(fi);
+
+ fi->files = rpmfilesFree(fi->files);
+ fi->fn = _free(fi->fn);
+ fi->ofn = _free(fi->ofn);
+ fi->found = _free(fi->found);
+ fi->archive = rpmcpioFree(fi->archive);
+
+ free(fi);
+ return NULL;
+}
+
+static rpmsid * tag2pool(rpmstrPool pool, Header h, rpmTag tag, rpm_count_t size)
{
rpmsid *sids = NULL;
struct rpmtd_s td;
if (headerGet(h, tag, &td, HEADERGET_MINMEM)) {
- sids = rpmtdToPool(&td, pool);
+ if ((size >= 0) && (rpmtdCount(&td) == size)) { /* ensure right size */
+ sids = rpmtdToPool(&td, pool);
+ }
rpmtdFreeData(&td);
}
return sids;
@@ -1122,30 +1351,182 @@ static int indexSane(rpmtd xd, rpmtd yd, rpmtd zd)
uint32_t zc = rpmtdCount(zd);
/* check that the amount of data in each is sane */
- if (xc > 0 && yc > 0 && yc <= xc && zc == xc) {
- uint32_t * i;
+ /* normally yc <= xc but larger values are not fatal (RhBug:1001553) */
+ if (xc > 0 && yc > 0 && zc == xc) {
+ uint32_t * i, nvalid = 0;
/* ...and that the indexes are within bounds */
while ((i = rpmtdNextUint32(zd))) {
if (*i >= yc)
break;
+ nvalid++;
}
/* unless the loop runs to finish, the data is broken */
- sane = (i == NULL);
+ sane = (nvalid == zc);
}
return sane;
}
+/* Get file data from header */
+/* Requires totalfc to be set and label err: to goto on error */
#define _hgfi(_h, _tag, _td, _flags, _data) \
- if (headerGet((_h), (_tag), (_td), (_flags))) \
- _data = (td.data)
+ if (headerGet((_h), (_tag), (_td), (_flags))) { \
+ if (rpmtdCount(_td) != totalfc) { \
+ rpmlog(RPMLOG_ERR, _("Wrong number of entries for tag %s: %u found but %u expected.\n"), rpmTagGetName(_tag), rpmtdCount(_td), totalfc); \
+ goto err; \
+ } \
+ if (rpmTagGetTagType(_tag) != RPM_STRING_ARRAY_TYPE && rpmTagGetTagType(_tag) != RPM_I18NSTRING_TYPE && \
+ (_td)->size < totalfc * sizeof(*(_data))) { \
+ rpmlog(RPMLOG_ERR, _("Malformed data for tag %s: %u bytes found but %u expected.\n"), rpmTagGetName(_tag), (_td)->size, totalfc * sizeof(*(_data))); \
+ goto err; \
+ } \
+ _data = ((_td)->data); \
+ }
+/* Get file data from header without checking number of entries */
+#define _hgfinc(_h, _tag, _td, _flags, _data) \
+ if (headerGet((_h), (_tag), (_td), (_flags))) {\
+ _data = ((_td)->data); \
+ }
+
+/*** Hard link handling ***/
+
+struct fileid_s {
+ rpm_dev_t id_dev;
+ rpm_ino_t id_ino;
+};
+
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+#define HASHTYPE fileidHash
+#define HTKEYTYPE struct fileid_s
+#define HTDATATYPE int
+#include "lib/rpmhash.H"
+#include "lib/rpmhash.C"
+#undef HASHTYPE
+#undef HTKEYTYPE
+#undef HTDATATYPE
+
+static unsigned int fidHashFunc(struct fileid_s a)
+{
+ return a.id_ino + (a.id_dev<<16) + (a.id_dev>>16);
+}
+
+static int fidCmp(struct fileid_s a, struct fileid_s b)
+{
+ return !((a.id_dev == b.id_dev) && (a.id_ino == b.id_ino));
+}
+
+static unsigned int intHash(int a)
+{
+ return a < 0 ? UINT_MAX-a : a;
+}
+
+static int intCmp(int a, int b)
+{
+ return a != b;
+}
+
+static struct hardlinks_s * freeNLinks(struct hardlinks_s * nlinks)
+{
+ nlinks->nlink--;
+ if (!nlinks->nlink) {
+ nlinks = _free(nlinks);
+ }
+ return nlinks;
+}
-static int rpmfiPopulate(rpmfi fi, Header h, rpmfiFlags flags)
+static void rpmfilesBuildNLink(rpmfiles fi, Header h)
+{
+ struct fileid_s f_id;
+ fileidHash files;
+ rpm_dev_t * fdevs = NULL;
+ struct rpmtd_s td;
+ int fc = 0;
+ int totalfc = rpmfilesFC(fi);
+
+ if (!fi->finodes)
+ return;
+
+ _hgfi(h, RPMTAG_FILEDEVICES, &td, HEADERGET_ALLOC, fdevs);
+ if (!fdevs)
+ return;
+
+ files = fileidHashCreate(totalfc, fidHashFunc, fidCmp, NULL, NULL);
+ for (int i=0; i < totalfc; i++) {
+ if (!S_ISREG(rpmfilesFMode(fi, i)) ||
+ (rpmfilesFFlags(fi, i) & RPMFILE_GHOST) ||
+ fi->finodes[i] <= 0) {
+ continue;
+ }
+ fc++;
+ f_id.id_dev = fdevs[i];
+ f_id.id_ino = fi->finodes[i];
+ fileidHashAddEntry(files, f_id, i);
+ }
+ if (fileidHashNumKeys(files) != fc) {
+ /* Hard links */
+ fi->nlinks = nlinkHashCreate(2*(totalfc - fileidHashNumKeys(files)),
+ intHash, intCmp, NULL, freeNLinks);
+ for (int i=0; i < totalfc; i++) {
+ int fcnt;
+ int * data;
+ if (!S_ISREG(rpmfilesFMode(fi, i)) ||
+ (rpmfilesFFlags(fi, i) & RPMFILE_GHOST)) {
+ continue;
+ }
+ f_id.id_dev = fdevs[i];
+ f_id.id_ino = fi->finodes[i];
+ fileidHashGetEntry(files, f_id, &data, &fcnt, NULL);
+ if (fcnt > 1 && !nlinkHashHasEntry(fi->nlinks, i)) {
+ struct hardlinks_s * hlinks;
+ hlinks = xmalloc(sizeof(struct hardlinks_s)+
+ fcnt*sizeof(hlinks->files[0]));
+ hlinks->nlink = fcnt;
+ for (int j=0; j<fcnt; j++) {
+ hlinks->files[j] = data[j];
+ nlinkHashAddEntry(fi->nlinks, data[j], hlinks);
+ }
+ }
+ }
+ }
+ _free(fdevs);
+ files = fileidHashFree(files);
+err:
+ return;
+}
+
+/* Convert a tag of hex strings to binary presentation */
+static uint8_t *hex2bin(Header h, rpmTagVal tag, rpm_count_t num, size_t len)
+{
+ struct rpmtd_s td;
+ uint8_t *bin = NULL;
+
+ if (headerGet(h, tag, &td, HEADERGET_MINMEM) && rpmtdCount(&td) == num) {
+ uint8_t *t = bin = xmalloc(num * len);
+ const char *s;
+
+ while ((s = rpmtdNextString(&td))) {
+ if (*s == '\0') {
+ memset(t, 0, len);
+ t += len;
+ continue;
+ }
+ for (int j = 0; j < len; j++, t++, s += 2)
+ *t = (rnibble(s[0]) << 4) | rnibble(s[1]);
+ }
+ }
+ rpmtdFreeData(&td);
+
+ return bin;
+}
+
+static int rpmfilesPopulate(rpmfiles fi, Header h, rpmfiFlags flags)
{
headerGetFlags scareFlags = (flags & RPMFI_KEEPHEADER) ?
HEADERGET_MINMEM : HEADERGET_ALLOC;
headerGetFlags defFlags = HEADERGET_ALLOC;
- struct rpmtd_s fdigests, digalgo, td;
- unsigned char * t;
+ struct rpmtd_s digalgo, td;
+ rpm_count_t totalfc = rpmfilesFC(fi);
/* XXX TODO: all these should be sanity checked, ugh... */
if (!(flags & RPMFI_NOFILEMODES))
@@ -1154,22 +1535,23 @@ static int rpmfiPopulate(rpmfi fi, Header h, rpmfiFlags flags)
_hgfi(h, RPMTAG_FILEFLAGS, &td, scareFlags, fi->fflags);
if (!(flags & RPMFI_NOFILEVERIFYFLAGS))
_hgfi(h, RPMTAG_FILEVERIFYFLAGS, &td, scareFlags, fi->vflags);
- if (!(flags & RPMFI_NOFILESIZES))
+ if (!(flags & RPMFI_NOFILESIZES)) {
_hgfi(h, RPMTAG_FILESIZES, &td, scareFlags, fi->fsizes);
-
+ _hgfi(h, RPMTAG_LONGFILESIZES, &td, scareFlags, fi->lfsizes);
+ }
if (!(flags & RPMFI_NOFILECOLORS))
_hgfi(h, RPMTAG_FILECOLORS, &td, scareFlags, fi->fcolors);
if (!(flags & RPMFI_NOFILECLASS)) {
- _hgfi(h, RPMTAG_CLASSDICT, &td, scareFlags, fi->cdict);
+ _hgfinc(h, RPMTAG_CLASSDICT, &td, scareFlags, fi->cdict);
fi->ncdict = rpmtdCount(&td);
_hgfi(h, RPMTAG_FILECLASS, &td, scareFlags, fi->fcdictx);
}
if (!(flags & RPMFI_NOFILEDEPS)) {
- _hgfi(h, RPMTAG_DEPENDSDICT, &td, scareFlags, fi->ddict);
+ _hgfinc(h, RPMTAG_DEPENDSDICT, &td, scareFlags, fi->ddict);
fi->nddict = rpmtdCount(&td);
- _hgfi(h, RPMTAG_FILEDEPENDSX, &td, scareFlags, fi->fddictx);
- _hgfi(h, RPMTAG_FILEDEPENDSN, &td, scareFlags, fi->fddictn);
+ _hgfinc(h, RPMTAG_FILEDEPENDSX, &td, scareFlags, fi->fddictx);
+ _hgfinc(h, RPMTAG_FILEDEPENDSN, &td, scareFlags, fi->fddictn);
}
if (!(flags & RPMFI_NOFILESTATES))
@@ -1179,10 +1561,10 @@ static int rpmfiPopulate(rpmfi fi, Header h, rpmfiFlags flags)
_hgfi(h, RPMTAG_FILECAPS, &td, defFlags, fi->fcaps);
if (!(flags & RPMFI_NOFILELINKTOS))
- fi->flinks = tag2pool(fi->pool, h, RPMTAG_FILELINKTOS);
+ fi->flinks = tag2pool(fi->pool, h, RPMTAG_FILELINKTOS, totalfc);
/* FILELANGS are only interesting when installing */
if ((headerGetInstance(h) == 0) && !(flags & RPMFI_NOFILELANGS))
- fi->flangs = tag2pool(fi->pool, h, RPMTAG_FILELANGS);
+ fi->flangs = tag2pool(fi->pool, h, RPMTAG_FILELANGS, totalfc);
/* See if the package has non-md5 file digests */
fi->digestalgo = PGPHASHALGO_MD5;
@@ -1196,22 +1578,17 @@ static int rpmfiPopulate(rpmfi fi, Header h, rpmfiFlags flags)
fi->digests = NULL;
/* grab hex digests from header and store in binary format */
- if (!(flags & RPMFI_NOFILEDIGESTS) &&
- headerGet(h, RPMTAG_FILEDIGESTS, &fdigests, HEADERGET_MINMEM)) {
- const char *fdigest;
+ if (!(flags & RPMFI_NOFILEDIGESTS)) {
size_t diglen = rpmDigestLength(fi->digestalgo);
- fi->digests = t = xmalloc(rpmtdCount(&fdigests) * diglen);
+ fi->digests = hex2bin(h, RPMTAG_FILEDIGESTS, totalfc, diglen);
+ }
- while ((fdigest = rpmtdNextString(&fdigests))) {
- if (!(fdigest && *fdigest != '\0')) {
- memset(t, 0, diglen);
- t += diglen;
- continue;
- }
- for (int j = 0; j < diglen; j++, t++, fdigest += 2)
- *t = (rnibble(fdigest[0]) << 4) | rnibble(fdigest[1]);
- }
- rpmtdFreeData(&fdigests);
+ fi->signatures = NULL;
+ /* grab hex signatures from header and store in binary format */
+ if (!(flags & RPMFI_NOFILESIGNATURES)) {
+ fi->signaturelength = headerGetNumber(h, RPMTAG_FILESIGNATURELENGTH);
+ fi->signatures = hex2bin(h, RPMTAG_FILESIGNATURES,
+ totalfc, fi->signaturelength);
}
/* XXX TR_REMOVED doesn;t need fmtimes, frdevs, finodes */
@@ -1219,67 +1596,170 @@ static int rpmfiPopulate(rpmfi fi, Header h, rpmfiFlags flags)
_hgfi(h, RPMTAG_FILEMTIMES, &td, scareFlags, fi->fmtimes);
if (!(flags & RPMFI_NOFILERDEVS))
_hgfi(h, RPMTAG_FILERDEVS, &td, scareFlags, fi->frdevs);
- if (!(flags & RPMFI_NOFILEINODES))
+ if (!(flags & RPMFI_NOFILEINODES)) {
_hgfi(h, RPMTAG_FILEINODES, &td, scareFlags, fi->finodes);
-
- if (!(flags & RPMFI_NOFILEUSER))
- fi->fuser = tag2pool(fi->pool, h, RPMTAG_FILEUSERNAME);
- if (!(flags & RPMFI_NOFILEGROUP))
- fi->fgroup = tag2pool(fi->pool, h, RPMTAG_FILEGROUPNAME);
-
+ rpmfilesBuildNLink(fi, h);
+ }
+ if (!(flags & RPMFI_NOFILEUSER)) {
+ fi->fuser = tag2pool(fi->pool, h, RPMTAG_FILEUSERNAME, totalfc);
+ if (!fi->fuser) goto err;
+ }
+ if (!(flags & RPMFI_NOFILEGROUP)) {
+ fi->fgroup = tag2pool(fi->pool, h, RPMTAG_FILEGROUPNAME, totalfc);
+ if (!fi->fgroup) goto err;
+ }
/* TODO: validate and return a real error */
return 0;
+ err:
+ return -1;
}
-rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags)
+rpmfiles rpmfilesNew(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags)
{
- rpmfi fi = xcalloc(1, sizeof(*fi));
- struct rpmtd_s bn, dn, dx;
+ rpmfiles fi = xcalloc(1, sizeof(*fi));
+ int fc;
fi->magic = RPMFIMAGIC;
- fi->i = -1;
fi->fiflags = flags;
+ /* private or shared pool? */
+ fi->pool = (pool != NULL) ? rpmstrPoolLink(pool) : rpmstrPoolCreate();
/*
* Grab and validate file triplet data. Headers with no files simply
* fall through here and an empty file set is returned.
*/
- if (headerGet(h, RPMTAG_BASENAMES, &bn, HEADERGET_MINMEM)) {
- headerGet(h, RPMTAG_DIRNAMES, &dn, HEADERGET_MINMEM);
- headerGet(h, RPMTAG_DIRINDEXES, &dx, HEADERGET_ALLOC);
+ fc = rpmfnInit(&fi->fndata, RPMTAG_BASENAMES, h, fi->pool);
+
+ /* Broken data, bail out */
+ if (fc < 0)
+ goto err;
+
+ /* populate the rest of the stuff if we have files */
+ if (fc > 0) {
+ if (headerIsEntry(h, RPMTAG_ORIGBASENAMES)) {
+ /* For relocated packages, grab the original paths too */
+ int ofc;
+ fi->ofndata = xmalloc(sizeof(*fi->ofndata));
+ ofc = rpmfnInit(fi->ofndata, RPMTAG_ORIGBASENAMES, h, fi->pool);
+
+ if (ofc != 0 && ofc != fc)
+ goto err;
+ } else {
+ /* In the normal case, orig is the same as actual path data */
+ fi->ofndata = &fi->fndata;
+ }
+
+ if (rpmfilesPopulate(fi, h, flags))
+ goto err;
+ }
- if (indexSane(&bn, &dn, &dx)) {
- /* private or shared pool? */
- fi->pool = (pool != NULL) ? rpmstrPoolLink(pool) :
- rpmstrPoolCreate();
-
- /* init the file triplet data */
- fi->fc = rpmtdCount(&bn);
- fi->dc = rpmtdCount(&dn);
- fi->bnid = rpmtdToPool(&bn, fi->pool);
- fi->dnid = rpmtdToPool(&dn, fi->pool);
- /* steal index data from the td (pooh...) */
- fi->dil = dx.data;
- dx.data = NULL;
+ /* freeze the pool to save memory, but only if private pool */
+ if (fi->pool != pool)
+ rpmstrPoolFreeze(fi->pool, 0);
- /* populate the rest of the stuff */
- rpmfiPopulate(fi, h, flags);
+ fi->h = (fi->fiflags & RPMFI_KEEPHEADER) ? headerLink(h) : NULL;
- /* freeze the pool to save memory, but only if private pool */
- if (fi->pool != pool)
- rpmstrPoolFreeze(fi->pool, 0);
+ return rpmfilesLink(fi);
- fi->h = (fi->fiflags & RPMFI_KEEPHEADER) ? headerLink(h) : NULL;
- } else {
- /* broken data, free and return NULL */
- fi = _free(fi);
+err:
+ rpmfilesFree(fi);
+ return NULL;
+}
+
+static int iterWriteArchiveNext(rpmfi fi);
+static int iterReadArchiveNext(rpmfi fi);
+static int iterReadArchiveNextContentFirst(rpmfi fi);
+static int iterReadArchiveNextOmitHardlinks(rpmfi fi);
+
+static int (*nextfuncs[])(rpmfi fi) = {
+ iterFwd,
+ iterBack,
+ iterWriteArchiveNext,
+ iterReadArchiveNext,
+ iterReadArchiveNextContentFirst,
+ iterReadArchiveNextOmitHardlinks,
+ iterInterval,
+};
+
+
+static rpmfi initIter(rpmfiles files, int itype, int link)
+{
+ rpmfi fi = NULL;
+
+ if (files && itype>=0 && itype<=RPMFILEITERMAX) {
+ fi = xcalloc(1, sizeof(*fi));
+ fi->i = -1;
+ fi->files = link ? rpmfilesLink(files) : files;
+ fi->next = nextfuncs[itype];
+ fi->i = -1;
+ if (itype == RPMFI_ITER_BACK) {
+ fi->i = rpmfilesFC(fi->files);
+ } else if (itype >=RPMFI_ITER_READ_ARCHIVE
+ && itype <= RPMFI_ITER_READ_ARCHIVE_OMIT_HARDLINKS) {
+
+ fi->found = xcalloc(1, (rpmfiFC(fi)>>3) + 1);
}
- rpmtdFreeData(&bn);
- rpmtdFreeData(&dn);
- rpmtdFreeData(&dx);
+ rpmfiLink(fi);
+ }
+ return fi;
+}
+
+rpmfi rpmfilesIter(rpmfiles files, int itype)
+{
+ /* standalone iterators need to bump our refcount */
+ return initIter(files, itype, 1);
+}
+
+rpmfi rpmfilesFindPrefix(rpmfiles fi, const char *pfx)
+{
+ int l, u, c, comparison;
+ rpmfi iterator = NULL;
+
+ if (!fi || !pfx)
+ return NULL;
+
+ size_t plen = strlen(pfx);
+ l = 0;
+ u = rpmfilesFC(fi);
+ while (l < u) {
+ c = (l + u) / 2;
+
+ comparison = cmpPfx(fi, c, pfx, plen);
+
+ if (comparison < 0)
+ u = c;
+ else if (comparison > 0)
+ l = c + 1;
+ else {
+ if (cmpPfx(fi, l, pfx, plen))
+ l = c;
+ while (l > 0 && !cmpPfx(fi, l - 1, pfx, plen))
+ l--;
+ if ( u >= rpmfilesFC(fi) || cmpPfx(fi, u, pfx, plen))
+ u = c;
+ while (++u < rpmfilesFC(fi)) {
+ if (cmpPfx(fi, u, pfx, plen))
+ break;
+ }
+ break;
+ }
+
+ }
+
+ if (l < u) {
+ iterator = initIter(fi, RPMFI_ITER_INTERVAL, 1);
+ iterator->intervalStart = l;
+ iterator->intervalEnd = u;
}
- return rpmfiLink(fi);
+ return iterator;
+}
+
+rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags)
+{
+ rpmfiles files = rpmfilesNew(pool, h, tagN, flags);
+ /* we already own rpmfiles, avoid extra refcount on it */
+ return initIter(files, RPMFI_ITER_FWD, 0);
}
rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags)
@@ -1287,36 +1767,52 @@ rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags)
return rpmfiNewPool(NULL, h, tagN, flags);
}
-void rpmfiSetFReplacedSizeIndex(rpmfi fi, int ix, rpm_loff_t newsize)
+void rpmfilesSetFReplacedSize(rpmfiles fi, int ix, rpm_loff_t newsize)
{
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
- if (fi->replacedSizes == NULL) {
- fi->replacedSizes = xcalloc(fi->fc, sizeof(*fi->replacedSizes));
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
+ /* Switch over to 64 bit variant */
+ int fc = rpmfilesFC(fi);
+ if (newsize > UINT32_MAX && fi->replacedLSizes == NULL) {
+ fi->replacedLSizes = xcalloc(fc, sizeof(*fi->replacedLSizes));
+ /* copy 32 bit data */
+ if (fi->replacedSizes) {
+ for (int i=0; i < fc; i++)
+ fi->replacedLSizes[i] = fi->replacedSizes[i];
+ fi->replacedSizes = _free(fi->replacedSizes);
+ }
+ }
+ if (fi->replacedLSizes != NULL) {
+ fi->replacedLSizes[ix] = newsize;
+ } else {
+ if (fi->replacedSizes == NULL)
+ fi->replacedSizes = xcalloc(fc, sizeof(*fi->replacedSizes));
+ fi->replacedSizes[ix] = (rpm_off_t) newsize;
}
- /* XXX watch out, replacedSizes is not rpm_loff_t (yet) */
- fi->replacedSizes[ix] = (rpm_off_t) newsize;
}
}
-rpm_loff_t rpmfiFReplacedSizeIndex(rpmfi fi, int ix)
+rpm_loff_t rpmfilesFReplacedSize(rpmfiles fi, int ix)
{
rpm_loff_t rsize = 0;
- if (fi != NULL && ix >= 0 && ix < fi->fc) {
+ if (fi != NULL && ix >= 0 && ix < rpmfilesFC(fi)) {
if (fi->replacedSizes) {
rsize = fi->replacedSizes[ix];
+ } else if (fi->replacedLSizes) {
+ rsize = fi->replacedLSizes[ix];
}
}
return rsize;
}
-void rpmfiFpLookup(rpmfi fi, fingerPrintCache fpc)
+void rpmfilesFpLookup(rpmfiles fi, fingerPrintCache fpc)
{
/* This can get called twice (eg yum), scratch former results and redo */
- if (fi->fc > 0) {
+ if (rpmfilesFC(fi) > 0) {
+ rpmfn fn = &fi->fndata;
if (fi->fps)
free(fi->fps);
fi->fps = fpLookupList(fpc, fi->pool,
- fi->dnid, fi->bnid, fi->dil, fi->fc);
+ fn->dnid, fn->bnid, fn->dil, fn->fc);
}
}
@@ -1326,12 +1822,14 @@ void rpmfiFpLookup(rpmfi fi, fingerPrintCache fpc)
*/
#define RPMFI_ITERFUNC(TYPE, NAME, IXV) \
- TYPE rpmfi ## NAME(rpmfi fi) { return rpmfi ## NAME ## Index(fi, fi ? fi->IXV : -1); }
+ TYPE rpmfi ## NAME(rpmfi fi) { return rpmfiles ## NAME(fi ? fi->files : NULL, fi ? fi->IXV : -1); }
RPMFI_ITERFUNC(rpmsid, BNId, i)
RPMFI_ITERFUNC(rpmsid, DNId, j)
RPMFI_ITERFUNC(const char *, BN, i)
RPMFI_ITERFUNC(const char *, DN, j)
+RPMFI_ITERFUNC(const char *, OBN, i)
+RPMFI_ITERFUNC(const char *, ODN, j)
RPMFI_ITERFUNC(const char *, FLink, i)
RPMFI_ITERFUNC(const char *, FUser, i)
RPMFI_ITERFUNC(const char *, FGroup, i)
@@ -1354,41 +1852,545 @@ const char * rpmfiFN(rpmfi fi)
const char *fn = ""; /* preserve behavior on errors */
if (fi != NULL) {
free(fi->fn);
- fi->fn = rpmfiFNIndex(fi, fi->i);
+ fi->fn = rpmfilesFN(fi->files, fi->i);
if (fi->fn != NULL)
fn = fi->fn;
}
return fn;
}
+const char * rpmfiOFN(rpmfi fi)
+{
+ const char *fn = ""; /* preserve behavior on errors */
+ if (fi != NULL) {
+ free(fi->ofn);
+ fi->ofn = rpmfilesOFN(fi->files, fi->i);
+ if (fi->ofn != NULL)
+ fn = fi->ofn;
+ }
+ return fn;
+}
+
const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *len)
{
- return rpmfiFDigestIndex(fi, fi ? fi->i : -1, algo, len);
+ return rpmfilesFDigest(fi->files, fi ? fi->i : -1, algo, len);
+}
+
+const unsigned char * rpmfiFSignature(rpmfi fi, size_t *len)
+{
+ return rpmfilesFSignature(fi->files, fi ? fi->i : -1, len);
}
uint32_t rpmfiFDepends(rpmfi fi, const uint32_t ** fddictp)
{
- return rpmfiFDependsIndex(fi, fi ? fi->i : -1, fddictp);
+ return rpmfilesFDepends(fi->files, fi ? fi->i : -1, fddictp);
}
-int rpmfiCompare(const rpmfi afi, const rpmfi bfi)
+int rpmfiStat(rpmfi fi, int flags, struct stat *sb)
{
- return rpmfiCompareIndex(afi, afi ? afi->i : -1, bfi, bfi ? bfi->i : -1);
+ return rpmfilesStat(fi->files, fi->i, flags, sb);
}
-rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing)
+int rpmfiCompare(const rpmfi afi, const rpmfi bfi)
{
- return rpmfiDecideFateIndex(ofi, ofi ? ofi->i : -1,
- nfi, nfi ? nfi->i : -1,
- skipMissing);
+ return rpmfilesCompare(afi->files, afi ? afi->i : -1, bfi->files, bfi ? bfi->i : -1);
}
-int rpmfiConfigConflict(const rpmfi fi)
+rpmVerifyAttrs rpmfiVerify(rpmfi fi, rpmVerifyAttrs omitMask)
{
- return rpmfiConfigConflictIndex(fi, fi ? fi->i : -1);
+ return rpmfilesVerify(fi->files, fi->i, omitMask);
}
-rpmstrPool rpmfiPool(rpmfi fi)
+rpmstrPool rpmfilesPool(rpmfiles fi)
{
return (fi != NULL) ? fi->pool : NULL;
}
+
+rpmfiles rpmfiFiles(rpmfi fi)
+{
+ return (fi != NULL) ? fi->files : NULL;
+}
+
+/******************************************************/
+/*** Archive handling *********************************/
+/******************************************************/
+
+rpmfi rpmfiNewArchiveReader(FD_t fd, rpmfiles files, int itype)
+{
+ rpmcpio_t archive = rpmcpioOpen(fd, O_RDONLY);
+ rpmfi fi = NULL;
+ if (archive && itype >= RPMFI_ITER_READ_ARCHIVE) {
+ fi = rpmfilesIter(files, itype);
+ }
+ if (fi) {
+ fi->archive = archive;
+ } else {
+ rpmcpioFree(archive);
+ }
+ return fi;
+}
+
+rpmfi rpmfiNewArchiveWriter(FD_t fd, rpmfiles files)
+{
+ rpmcpio_t archive = rpmcpioOpen(fd, O_WRONLY);
+ rpmfi fi = NULL;
+ if (archive) {
+ fi = rpmfilesIter(files, RPMFI_ITER_WRITE_ARCHIVE);
+ }
+ if (fi) {
+ fi->archive = archive;
+ } else {
+ rpmcpioFree(archive);
+ }
+ return fi;
+}
+
+int rpmfiArchiveClose(rpmfi fi)
+{
+ if (fi == NULL)
+ return -1;
+ int rc = rpmcpioClose(fi->archive);
+ return rc;
+}
+
+rpm_loff_t rpmfiArchiveTell(rpmfi fi)
+{
+ if (fi == NULL || fi->archive == NULL)
+ return 0;
+ return (rpm_loff_t) rpmcpioTell(fi->archive);
+}
+
+static int rpmfiArchiveWriteHeader(rpmfi fi)
+{
+ int rc;
+ struct stat st;
+
+ if (rpmfiStat(fi, 0, &st))
+ return -1;
+
+ rpmfiles files = fi->files;
+
+ if (files->lfsizes) {
+ return rpmcpioStrippedHeaderWrite(fi->archive, rpmfiFX(fi), st.st_size);
+ } else {
+ const char * dn = rpmfiDN(fi);
+ char * path = rstrscat(NULL, (dn[0] == '/' && !rpmExpandNumeric("%{_noPayloadPrefix}")) ? "." : "",
+ dn, rpmfiBN(fi), NULL);
+ rc = rpmcpioHeaderWrite(fi->archive, path, &st);
+ free(path);
+ }
+
+ return rc;
+}
+
+static int iterWriteArchiveNextFile(rpmfi fi)
+{
+ rpmfiles files = rpmfiFiles(fi);
+ int fx = rpmfiFX(fi);
+ int fc = rpmfiFC(fi);
+ const int * hardlinks;
+ int numHardlinks = 0;
+
+ /* already processing hard linked files */
+ if (rpmfiFNlink(fi) > 1) {
+ /* search next hard linked file */
+ fi->i = -1;
+ for (int i=fx+1; i<fc; i++) {
+ /* no ghosts */
+ if (rpmfilesFFlags(files, i) & RPMFILE_GHOST)
+ continue;
+ numHardlinks = rpmfilesFLinks(files, i, &hardlinks);
+ if (numHardlinks > 1 && hardlinks[0] == i) {
+ rpmfiSetFX(fi, i);
+ break;
+ }
+ }
+ } else {
+ fi->i = -1;
+ /* search next non hardlinked file */
+ for (int i=fx+1; i<fc; i++) {
+ /* no ghosts */
+ if (rpmfilesFFlags(files, i) & RPMFILE_GHOST)
+ continue;
+ if (rpmfilesFNlink(files, i) < 2) {
+ rpmfiSetFX(fi, i);
+ break;
+ }
+ }
+ if (rpmfiFX(fi) == -1) {
+ /* continue with first hard linked file */
+ for (int i=0; i<fc; i++) {
+ /* no ghosts */
+ if (rpmfilesFFlags(files, i) & RPMFILE_GHOST)
+ continue;
+ numHardlinks = rpmfilesFLinks(files, i, &hardlinks);
+ if (numHardlinks > 1) {
+ rpmfiSetFX(fi, i);
+ break;
+ }
+ }
+ }
+ }
+ if (rpmfiFX(fi) == -1)
+ return -1;
+
+ /* write header(s) */
+ if (numHardlinks>1) {
+ for (int i=0; i<numHardlinks; i++) {
+ rpmfiSetFX(fi, hardlinks[i]);
+ int rc = rpmfiArchiveWriteHeader(fi);
+ if (rc) {
+ return rc;
+ }
+ }
+ rpmfiSetFX(fi, hardlinks[0]);
+ } else {
+ int rc = rpmfiArchiveWriteHeader(fi);
+ if (rc) {
+ return rc;
+ }
+ }
+ return rpmfiFX(fi);
+}
+
+static int iterWriteArchiveNext(rpmfi fi)
+{
+ int fx;
+ /* loop over the files we can handle ourself */
+ do {
+ fx = iterWriteArchiveNextFile(fi);
+ if (S_ISLNK(rpmfiFMode(fi))) {
+ /* write symlink target */
+ const char *lnk = rpmfiFLink(fi);
+ size_t len = strlen(lnk);
+ if (rpmfiArchiveWrite(fi, lnk, len) != len) {
+ return RPMERR_WRITE_FAILED;
+ }
+ } else if (S_ISREG(rpmfiFMode(fi)) && rpmfiFSize(fi)) {
+ /* this file actually needs some content */
+ return fx;
+ }
+ /* go on for special files, directories and empty files */
+ } while (fx >= 0);
+ return fx;
+}
+
+size_t rpmfiArchiveWrite(rpmfi fi, const void * buf, size_t size)
+{
+ if (fi == NULL || fi->archive == NULL)
+ return -1;
+ return rpmcpioWrite(fi->archive, buf, size);
+}
+
+int rpmfiArchiveWriteFile(rpmfi fi, FD_t fd)
+{
+ rpm_loff_t left;
+ int rc = 0;
+ size_t len;
+ char buf[BUFSIZ*4];
+
+ if (fi == NULL || fi->archive == NULL || fd == NULL)
+ return -1;
+
+ left = rpmfiFSize(fi);
+
+ while (left) {
+ len = (left > sizeof(buf) ? sizeof(buf) : left);
+ if (Fread(buf, sizeof(*buf), len, fd) != len || Ferror(fd)) {
+ rc = RPMERR_READ_FAILED;
+ break;
+ }
+
+ if (rpmcpioWrite(fi->archive, buf, len) != len) {
+ rc = RPMERR_WRITE_FAILED;
+ break;
+ }
+ left -= len;
+ }
+ return rc;
+}
+
+static void rpmfiSetFound(rpmfi fi, int ix)
+{
+ fi->found[ix >> 3] |= (1 << (ix % 8));
+}
+
+static int rpmfiFound(rpmfi fi, int ix)
+{
+ return fi->found[ix >> 3] & (1 << (ix % 8));
+}
+
+static int iterReadArchiveNext(rpmfi fi)
+{
+ int rc;
+ int fx = -1;
+ int fc = rpmfilesFC(fi->files);
+ char * path = NULL;
+
+ if (fi->archive == NULL)
+ return -1;
+
+ /* Read next payload header. */
+ rc = rpmcpioHeaderRead(fi->archive, &path, &fx);
+
+ /* if archive ended, check if we found all files */
+ if (rc == RPMERR_ITER_END) {
+ for (int i=0; i<fc; i++) {
+ if (!rpmfiFound(fi, i) &&
+ !(rpmfilesFFlags(fi->files, i) & RPMFILE_GHOST)) {
+ rc = RPMERR_MISSING_FILE;
+ break;
+ }
+ }
+ }
+ if (rc) {
+ return rc;
+ }
+
+ if (path) {
+ /* Regular cpio archive, identify mapping index. */
+ fx = rpmfilesFindOFN(fi->files, path);
+ free(path);
+ }
+
+ if (fx >= 0 && fx < fc) {
+ rpm_loff_t fsize = 0;
+ rpm_mode_t mode = rpmfilesFMode(fi->files, fx);
+
+ /* %ghost in payload, should not be there but rpm < 4.11 sometimes did this */
+ if (rpmfilesFFlags(fi->files, fx) & RPMFILE_GHOST)
+ return RPMERR_ITER_SKIP;
+
+ if (S_ISREG(mode)) {
+ const int * links;
+ uint32_t numlinks = rpmfilesFLinks(fi->files, fx, &links);
+ if (!(numlinks > 1 && links[numlinks-1] != fx))
+ fsize = rpmfilesFSize(fi->files, fx);
+ } else if (S_ISLNK(mode)) {
+ /* Skip over symlink target data in payload */
+ rpm_loff_t lsize = rpmfilesFSize(fi->files, fx);
+ char *buf = xmalloc(lsize + 1);
+ if (rpmcpioRead(fi->archive, buf, lsize) != lsize)
+ rc = RPMERR_READ_FAILED;
+ /* XXX should we validate the payload matches? */
+ free(buf);
+ }
+ rpmcpioSetExpectedFileSize(fi->archive, fsize);
+ rpmfiSetFound(fi, fx);
+ } else {
+ /* Mapping error */
+ rc = RPMERR_UNMAPPED_FILE;
+ }
+ return (rc != 0) ? rc : fx;
+}
+
+
+static int iterReadArchiveNextOmitHardlinks(rpmfi fi)
+{
+ int fx;
+ const int * links;
+ int nlink;
+ do {
+ fx = iterReadArchiveNext(fi);
+ nlink = rpmfilesFLinks(fi->files, fx, &links);
+ } while (fx>=0 && nlink>1 && links[nlink-1]!=fx);
+ return fx;
+}
+
+static int iterReadArchiveNextContentFirst(rpmfi fi)
+{
+ int fx = rpmfiFX(fi);
+ const int * links;
+ int nlink;
+ /* decide what to do on the basis of the last entry */
+ nlink = rpmfilesFLinks(fi->files, fx, &links);
+ if (nlink > 1) {
+ /* currently reading through hard links */
+ if (fx == links[nlink-1]) {
+ /* arrived back at last entry, read on */
+ fx = iterReadArchiveNext(fi);
+ } else {
+ /* next hard link */
+ /* scales poorly but shouldn't matter */
+ for (int i=0; i<nlink; i++) {
+ if (links[i] == fx) {
+ fx = links[i+1];
+ return fx;
+ }
+ }
+ /* should never happen */
+ return -1;
+ }
+ } else {
+ fx = iterReadArchiveNext(fi);
+ }
+
+ /* look at the new entry */
+ nlink = rpmfilesFLinks(fi->files, fx, &links);
+ /* arrived at new set of hardlinks? */
+ if (nlink > 1) {
+ /* read over all entries to the last one (containing the content) */
+ do {
+ fx = iterReadArchiveNext(fi);
+ } while (fx >=0 && fx != links[nlink-1]);
+ /* rewind to the first entry */
+ if (fx >= 0) {
+ fx = links[0];
+ }
+ }
+ return fx;
+}
+
+int rpmfiArchiveHasContent(rpmfi fi)
+{
+ int res = 0;
+ if (fi && S_ISREG(rpmfiFMode(fi))) {
+ const int * links;
+ int nlink = rpmfiFLinks(fi, &links);
+ if (nlink > 1) {
+ if (fi->next == iterReadArchiveNext ||
+ fi->next == iterReadArchiveNextOmitHardlinks) {
+ res = rpmfiFX(fi) == links[nlink-1];
+ } else if (fi->next == iterReadArchiveNextContentFirst) {
+ res = rpmfiFX(fi) == links[0];
+ }
+ } else {
+ res = 1;
+ }
+ }
+ return res;
+}
+
+size_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size)
+{
+ if (fi == NULL || fi->archive == NULL)
+ return -1;
+ return rpmcpioRead(fi->archive, buf, size);
+}
+
+int rpmfiArchiveReadToFilePsm(rpmfi fi, FD_t fd, int nodigest, rpmpsm psm)
+{
+ if (fi == NULL || fi->archive == NULL || fd == NULL)
+ return -1;
+
+ rpm_loff_t left = rpmfiFSize(fi);
+ const unsigned char * fidigest = NULL;
+ pgpHashAlgo digestalgo = 0;
+ int rc = 0;
+ char buf[BUFSIZ*4];
+
+ if (!nodigest) {
+ digestalgo = rpmfiDigestAlgo(fi);
+ fidigest = rpmfilesFDigest(fi->files, rpmfiFX(fi), NULL, NULL);
+ fdInitDigest(fd, digestalgo, 0);
+ }
+
+ while (left) {
+ size_t len;
+ len = (left > sizeof(buf) ? sizeof(buf) : left);
+ if (rpmcpioRead(fi->archive, buf, len) != len) {
+ rc = RPMERR_READ_FAILED;
+ goto exit;
+ }
+ if ((Fwrite(buf, sizeof(*buf), len, fd) != len) || Ferror(fd)) {
+ rc = RPMERR_WRITE_FAILED;
+ goto exit;
+ }
+
+ rpmpsmNotify(psm, RPMCALLBACK_INST_PROGRESS, rpmfiArchiveTell(fi));
+ left -= len;
+ }
+
+ if (!nodigest) {
+ void * digest = NULL;
+
+ (void) Fflush(fd);
+ fdFiniDigest(fd, digestalgo, &digest, NULL, 0);
+
+ if (digest != NULL && fidigest != NULL) {
+ size_t diglen = rpmDigestLength(digestalgo);
+ if (memcmp(digest, fidigest, diglen)) {
+ rc = RPMERR_DIGEST_MISMATCH;
+
+ /* ...but in old packages, empty files have zeros for digest */
+ if (rpmfiFSize(fi) == 0 && digestalgo == PGPHASHALGO_MD5) {
+ uint8_t zeros[diglen];
+ memset(&zeros, 0, diglen);
+ if (memcmp(zeros, fidigest, diglen) == 0)
+ rc = 0;
+ }
+ }
+ } else {
+ rc = RPMERR_DIGEST_MISMATCH;
+ }
+ free(digest);
+ }
+
+exit:
+ return rc;
+}
+
+int rpmfiArchiveReadToFile(rpmfi fi, FD_t fd, int nodigest)
+{
+ return rpmfiArchiveReadToFilePsm(fi, fd, nodigest, NULL);
+}
+
+char * rpmfileStrerror(int rc)
+{
+ char *msg = NULL;
+ const char *s = NULL;
+ const char *prefix = "cpio";
+ int myerrno = errno;
+
+ switch (rc) {
+ default:
+ break;
+ case RPMERR_BAD_MAGIC: s = _("Bad magic"); break;
+ case RPMERR_BAD_HEADER: s = _("Bad/unreadable header");break;
+
+ case RPMERR_OPEN_FAILED: s = "open"; break;
+ case RPMERR_CHMOD_FAILED: s = "chmod"; break;
+ case RPMERR_CHOWN_FAILED: s = "chown"; break;
+ case RPMERR_WRITE_FAILED: s = "write"; break;
+ case RPMERR_UTIME_FAILED: s = "utime"; break;
+ case RPMERR_UNLINK_FAILED: s = "unlink"; break;
+ case RPMERR_RENAME_FAILED: s = "rename"; break;
+ case RPMERR_SYMLINK_FAILED: s = "symlink"; break;
+ case RPMERR_STAT_FAILED: s = "stat"; break;
+ case RPMERR_LSTAT_FAILED: s = "lstat"; break;
+ case RPMERR_MKDIR_FAILED: s = "mkdir"; break;
+ case RPMERR_RMDIR_FAILED: s = "rmdir"; break;
+ case RPMERR_MKNOD_FAILED: s = "mknod"; break;
+ case RPMERR_MKFIFO_FAILED: s = "mkfifo"; break;
+ case RPMERR_LINK_FAILED: s = "link"; break;
+ case RPMERR_READLINK_FAILED: s = "readlink"; break;
+ case RPMERR_READ_FAILED: s = "read"; break;
+ case RPMERR_COPY_FAILED: s = "copy"; break;
+ case RPMERR_LSETFCON_FAILED: s = "lsetfilecon"; break;
+ case RPMERR_SETCAP_FAILED: s = "cap_set_file"; break;
+
+ case RPMERR_HDR_SIZE: s = _("Header size too big"); break;
+ case RPMERR_FILE_SIZE: s = _("File too large for archive"); break;
+ case RPMERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break;
+ case RPMERR_MISSING_FILE: s = _("Missing file(s)"); break;
+ case RPMERR_DIGEST_MISMATCH: s = _("Digest mismatch"); break;
+ case RPMERR_INTERNAL: s = _("Internal error"); break;
+ case RPMERR_UNMAPPED_FILE: s = _("Archive file not in header"); break;
+ case RPMERR_ENOENT: s = strerror(ENOENT); break;
+ case RPMERR_ENOTEMPTY: s = strerror(ENOTEMPTY); break;
+ case RPMERR_EXIST_AS_DIR:
+ s = _("File from package already exists as a directory in system");
+ break;
+ }
+
+ if (s != NULL) {
+ rasprintf(&msg, "%s: %s", prefix, s);
+ if ((rc <= RPMERR_CHECK_ERRNO) && myerrno) {
+ rstrscat(&msg, _(" failed - "), strerror(myerrno), NULL);
+ }
+ } else {
+ rasprintf(&msg, _("%s: (error 0x%x)"), prefix, rc);
+ }
+
+ return msg;
+}
diff --git a/lib/rpmfi.h b/lib/rpmfi.h
index b77c82895..cb22acae7 100644
--- a/lib/rpmfi.h
+++ b/lib/rpmfi.h
@@ -1,289 +1,248 @@
#ifndef H_RPMFI
#define H_RPMFI
-/** \ingroup rpmdep rpmtrans
+/** \ingroup rpmfi
* \file lib/rpmfi.h
- * Structure(s) used for file info tag sets.
+ * File info set iterator API.
*/
#include <rpm/rpmtypes.h>
-#include <rpm/rpmvf.h>
-#include <rpm/rpmpgp.h>
+#include <rpm/rpmfiles.h>
+#include <rpm/rpmarchive.h>
#ifdef __cplusplus
extern "C" {
#endif
/** \ingroup rpmfi
- * File types.
- * These are the file types used internally by rpm. The file
- * type is determined by applying stat(2) macros like S_ISDIR to
- * the file mode tag from a header. The values are arbitrary,
- * but are identical to the linux stat(2) file types.
- */
-typedef enum rpmFileTypes_e {
- PIPE = 1, /*!< pipe/fifo */
- CDEV = 2, /*!< character device */
- XDIR = 4, /*!< directory */
- BDEV = 6, /*!< block device */
- REG = 8, /*!< regular file */
- LINK = 10, /*!< hard link */
- SOCK = 12 /*!< socket */
-} rpmFileTypes;
-
-/**
- * File States (when installed).
- */
-typedef enum rpmfileState_e {
- RPMFILE_STATE_MISSING = -1, /* used for unavailable data */
- RPMFILE_STATE_NORMAL = 0,
- RPMFILE_STATE_REPLACED = 1,
- RPMFILE_STATE_NOTINSTALLED = 2,
- RPMFILE_STATE_NETSHARED = 3,
- RPMFILE_STATE_WRONGCOLOR = 4
-} rpmfileState;
-
-#define RPMFILE_IS_INSTALLED(_x) ((_x) == RPMFILE_STATE_NORMAL || (_x) == RPMFILE_STATE_NETSHARED)
-
-/**
- * Exported File Attributes (ie RPMTAG_FILEFLAGS)
- */
-enum rpmfileAttrs_e {
- RPMFILE_NONE = 0,
- RPMFILE_CONFIG = (1 << 0), /*!< from %%config */
- RPMFILE_DOC = (1 << 1), /*!< from %%doc */
- RPMFILE_ICON = (1 << 2), /*!< from %%donotuse. */
- RPMFILE_MISSINGOK = (1 << 3), /*!< from %%config(missingok) */
- RPMFILE_NOREPLACE = (1 << 4), /*!< from %%config(noreplace) */
- RPMFILE_SPECFILE = (1 << 5), /*!< @todo (unnecessary) marks 1st file in srpm. */
- RPMFILE_GHOST = (1 << 6), /*!< from %%ghost */
- RPMFILE_LICENSE = (1 << 7), /*!< from %%license */
- RPMFILE_README = (1 << 8), /*!< from %%readme */
- /* bits 9-10 unused */
- RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */
- RPMFILE_SECMANIFEST = (1 << 12), /*!< from %%manifest */
-};
-
-typedef rpmFlags rpmfileAttrs;
-
-#define RPMFILE_ALL ~(RPMFILE_NONE)
-
-/** \ingroup rpmfi
- * File disposition(s) during package install/erase transaction.
- */
-typedef enum rpmFileAction_e {
- FA_UNKNOWN = 0, /*!< initial action for file ... */
- FA_CREATE, /*!< ... copy in from payload. */
- FA_COPYIN, /*!< ... copy in from payload. */
- FA_COPYOUT, /*!< ... copy out to payload. */
- FA_BACKUP, /*!< ... renamed with ".rpmorig" extension. */
- FA_SAVE, /*!< ... renamed with ".rpmsave" extension. */
- FA_SKIP, /*!< ... already replaced, don't remove. */
- FA_ALTNAME, /*!< ... create with ".rpmnew" extension. */
- FA_ERASE, /*!< ... to be removed. */
- FA_SKIPNSTATE, /*!< ... untouched, state "not installed". */
- FA_SKIPNETSHARED, /*!< ... untouched, state "netshared". */
- FA_SKIPCOLOR /*!< ... untouched, state "wrong color". */
-} rpmFileAction;
-
-#define XFA_SKIPPING(_a) \
- ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
-
-/**
- * We pass these around as an array with a sentinel.
- */
-struct rpmRelocation_s {
- char * oldPath; /*!< NULL here evals to RPMTAG_DEFAULTPREFIX, */
- char * newPath; /*!< NULL means to omit the file completely! */
-};
-
-/** \ingroup rpmfi
- * Reference a file info set instance.
- * @param fi file info set
- * @return new file info set reference
+
+ * Reference a file info set iterator instance.
+ * @param fi file info set iterator
+ * @return new file info set iterator reference
*/
rpmfi rpmfiLink (rpmfi fi);
/** \ingroup rpmfi
- * Return file count from file info set.
- * @param fi file info set
+ * Return file count from file info set iterator.
+ * @param fi file info set iterator
* @return current file count
*/
rpm_count_t rpmfiFC(rpmfi fi);
/** \ingroup rpmfi
- * Return current file index from file info set.
- * @param fi file info set
+ * Return current file index from file info set iterator.
+ * @param fi file info set iterator
* @return current file index
*/
int rpmfiFX(rpmfi fi);
/** \ingroup rpmfi
- * Set current file index in file info set.
- * @param fi file info set
+ * Set current file index in file info set iterator.
+ * @param fi file info set iterator
* @param fx new file index
* @return current file index
*/
int rpmfiSetFX(rpmfi fi, int fx);
/** \ingroup rpmfi
- * Return directory count from file info set.
- * @param fi file info set
+ * Return directory count from file info set iterator.
+ * @param fi file info set iterator
* @return current directory count
*/
rpm_count_t rpmfiDC(rpmfi fi);
/** \ingroup rpmfi
- * Return current directory index from file info set.
- * @param fi file info set
+ * Return current directory index from file info set iterator.
+ * @param fi file info set iterator
* @return current directory index
*/
int rpmfiDX(rpmfi fi);
/** \ingroup rpmfi
- * Set current directory index in file info set.
- * @param fi file info set
+ * Set current directory index in file info set iterator.
+ * @param fi file info set iterator
* @param dx new directory index
* @return current directory index
*/
int rpmfiSetDX(rpmfi fi, int dx);
/** \ingroup rpmfi
- * Return current base name from file info set.
- * @param fi file info set
+ * Return current base name from file info set iterator.
+ * @param fi file info set iterator
* @return current base name, NULL on invalid
*/
const char * rpmfiBN(rpmfi fi);
/** \ingroup rpmfi
- * Return current directory name from file info set.
- * @param fi file info set
+ * Return current directory name from file info set iterator.
+ * @param fi file info set iterator
* @return current directory, NULL on invalid
*/
const char * rpmfiDN(rpmfi fi);
/** \ingroup rpmfi
- * Return current file name from file info set.
- * @param fi file info set
+ * Return current file name from file info set iterator.
+ * @param fi file info set iterator
* @return current file name
*/
const char * rpmfiFN(rpmfi fi);
/** \ingroup rpmfi
- * Return current file flags from file info set.
- * @param fi file info set
+ * Return file index of the given file name or -1 if file is not in the rpmfi.
+ * The file name may have "." prefixed but is then interpreted as a global
+ * path without the prefixing "."
+ * @param fi file info set iterator
+ * @param fn file name
+ * @return file index or -1
+ */
+int rpmfiFindFN(rpmfi fi, const char * fn);
+
+/** \ingroup rpmfi
+ * Return current original base name from file info set iterator.
+ * @param fi file info set iterator
+ * @return current base name, NULL on invalid
+ */
+const char * rpmfiOBN(rpmfi fi);
+
+/** \ingroup rpmfi
+ * Return current original directory name from file info set iterator.
+ * @param fi file info set iterator
+ * @return current directory, NULL on invalid
+ */
+const char * rpmfiODN(rpmfi fi);
+
+/** \ingroup rpmfi
+ * Return current original file name from file info set iterator.
+ * @param fi file info set iterator
+ * @return current file name
+ */
+const char * rpmfiOFN(rpmfi fi);
+
+/** \ingroup rpmfi
+ * Return file index of the given original file name or -1 if file is not
+ * in the rpmfi. The file name may have "." prefixed but is then interpreted
+ * as a global path without the prefixing "."
+ * @param fi file info set iterator
+ * @param fn file name
+ * @return file index or -1
+ */
+int rpmfiFindOFN(rpmfi fi, const char * fn);
+
+/** \ingroup rpmfi
+ * Return current file flags from file info set iterator.
+ * @param fi file info set iterator
* @return current file flags, 0 on invalid
*/
rpmfileAttrs rpmfiFFlags(rpmfi fi);
/** \ingroup rpmfi
- * Return current file verify flags from file info set.
- * @param fi file info set
+ * Return current file verify flags from file info set iterator.
+ * @param fi file info set iterator
* @return current file verify flags, 0 on invalid
*/
rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
/** \ingroup rpmfi
- * Return current file mode from file info set.
- * @param fi file info set
+ * Return current file mode from file info set iterator.
+ * @param fi file info set iterator
* @return current file mode, 0 on invalid
*/
rpm_mode_t rpmfiFMode(rpmfi fi);
/** \ingroup rpmfi
- * Return current file state from file info set.
- * @param fi file info set
+ * Return current file state from file info set iterator.
+ * @param fi file info set iterator
* @return current file state, 0 on invalid
*/
rpmfileState rpmfiFState(rpmfi fi);
/** \ingroup rpmfi
- * Return digest algorithm of a file info set.
- * @param fi file info set
- * @return digest algorithm of file info set, 0 on invalid
+ * Return digest algorithm of a file info set iterator.
+ * @param fi file info set iterator
+ * @return digest algorithm of file info set iterator, 0 on invalid
*/
int rpmfiDigestAlgo(rpmfi fi);
/** \ingroup rpmfi
- * Return current file (binary) digest of file info set.
- * @param fi file info set
- * @retval algo digest hash algoritm used (pass NULL to ignore)
+ * Return current file (binary) digest of file info set iterator.
+ * @param fi file info set iterator
+ * @retval algo digest hash algorithm used (pass NULL to ignore)
* @retval diglen digest hash length (pass NULL to ignore)
* @return current file digest, NULL on invalid
*/
const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen);
/** \ingroup rpmfi
- * Return current file (hex) digest of file info set.
- * The file info set stores file digests in binary format to conserve
+ * Return current file (hex) digest of file info set iterator.
+ * The file info set iterator stores file digests in binary format to conserve
* memory, this converts the binary data back to hex presentation used in
* headers.
- * @param fi file info set
- * @retval algo digest hash algoritm used (pass NULL to ignore)
+ * @param fi file info set iterator
+ * @retval algo digest hash algorithm used (pass NULL to ignore)
* @return current file digest (malloc'ed), NULL on invalid
*/
char * rpmfiFDigestHex(rpmfi fi, int *algo);
/** \ingroup rpmfi
- * Return current file (binary) md5 digest from file info set.
- * @deprecated Use rpmfiFDigest() instead
- * @param fi file info set
- * @return current file md5 digest, NULL on invalid
+ * Return current file (binary) signature of file info set iterator.
+ * @param fi file info set iterator
+ * @retval siglen signature length (pass NULL to ignore)
+ * @return current file signature, NULL on invalid
*/
-const unsigned char * rpmfiMD5(rpmfi fi) RPM_GNUC_DEPRECATED;
+const unsigned char * rpmfiFSignature(rpmfi fi, size_t *siglen);
/** \ingroup rpmfi
- * Return current file linkto (i.e. symlink(2) target) from file info set.
- * @param fi file info set
+ * Return current file linkto (i.e. symlink(2) target) from file info set iterator.
+ * @param fi file info set iterator
* @return current file linkto, NULL on invalid
*/
const char * rpmfiFLink(rpmfi fi);
/** \ingroup rpmfi
- * Return current file size from file info set.
- * @param fi file info set
+ * Return current file size from file info set iterator.
+ * @param fi file info set iterator
* @return current file size, 0 on invalid
*/
rpm_loff_t rpmfiFSize(rpmfi fi);
/** \ingroup rpmfi
- * Return current file rdev from file info set.
- * @param fi file info set
+ * Return current file rdev from file info set iterator.
+ * @param fi file info set iterator
* @return current file rdev, 0 on invalid
*/
rpm_rdev_t rpmfiFRdev(rpmfi fi);
/** \ingroup rpmfi
- * Return current file inode from file info set.
- * @param fi file info set
+ * Return current file inode from file info set iterator.
+ * @param fi file info set iterator
* @return current file inode, 0 on invalid
*/
rpm_ino_t rpmfiFInode(rpmfi fi);
/** \ingroup rpmfi
- * Return union of all file color bits from file info set.
- * @param fi file info set
+ * Return union of all file color bits from file info set iterator.
+ * @param fi file info set iterator
* @return current color
*/
rpm_color_t rpmfiColor(rpmfi fi);
/** \ingroup rpmfi
- * Return current file color bits from file info set.
- * @param fi file info set
+ * Return current file color bits from file info set iterator.
+ * @param fi file info set iterator
* @return current file color
*/
rpm_color_t rpmfiFColor(rpmfi fi);
/** \ingroup rpmfi
- * Return current file class from file info set.
- * @param fi file info set
+ * Return current file class from file info set iterator.
+ * @param fi file info set iterator
* @return current file class, 0 on invalid
*/
const char * rpmfiFClass(rpmfi fi);
/** \ingroup rpmfi
- * Return current file depends dictionary from file info set.
- * @param fi file info set
+ * Return current file depends dictionary from file info set iterator.
+ * @param fi file info set iterator
* @retval *fddictp file depends dictionary array (or NULL)
* @return no. of file depends entries, 0 on invalid
*/
@@ -291,133 +250,121 @@ uint32_t rpmfiFDepends(rpmfi fi,
const uint32_t ** fddictp);
/** \ingroup rpmfi
- * Return (calculated) current file nlink count from file info set.
- * @param fi file info set
+ * Return (calculated) current file nlink count from file info set iterator.
+ * @param fi file info set iterator
* @return current file nlink count, 0 on invalid
*/
uint32_t rpmfiFNlink(rpmfi fi);
+
+/** \ingroup rpmfi
+ * Return (calculated) current file nlink count from file info set iterator.
+ * @param fi file info set iterator
+ * @param files returns array of file ids hardlinked including ix,
+ NULL for nlink count == 1
+ * @return current file nlink count, 0 on invalid
+ */
+uint32_t rpmfiFLinks(rpmfi fi, const int ** files);
+
/** \ingroup rpmfi
- * Return current file modify time from file info set.
- * @param fi file info set
+ * Return current file modify time from file info set iterator.
+ * @param fi file info set iterator
* @return current file modify time, 0 on invalid
*/
rpm_time_t rpmfiFMtime(rpmfi fi);
/** \ingroup rpmfi
- * Return current file owner from file info set.
- * @param fi file info set
+ * Return current file owner from file info set iterator.
+ * @param fi file info set iterator
* @return current file owner, NULL on invalid
*/
const char * rpmfiFUser(rpmfi fi);
/** \ingroup rpmfi
- * Return current file group from file info set.
- * @param fi file info set
+ * Return current file group from file info set iterator.
+ * @param fi file info set iterator
* @return current file group, NULL on invalid
*/
const char * rpmfiFGroup(rpmfi fi);
/** \ingroup rpmfi
* Return textual representation of current file capabilities
- * from file info set. See cap_from_text(3) for details.
- * @param fi file info set
+ * from file info set iterator. See cap_from_text(3) for details.
+ * @param fi file info set iterator
* @return file capability description, "" for no capabilities
* and NULL on invalid
*/
const char * rpmfiFCaps(rpmfi fi);
/** \ingroup rpmfi
- * Return current file language(s) from file info set.
- * @param fi file info set
+ * Return current file language(s) from file info set iterator.
+ * @param fi file info set iterator
* @return current file language(s), NULL on invalid
*/
const char * rpmfiFLangs(rpmfi fi);
/** \ingroup rpmfi
+ * Map file stat(2) info.
+ * @param fi file info iterator
+ * @param flags flags
+ * @retval sb mapped stat(2) data
+ */
+int rpmfiStat(rpmfi fi, int flags, struct stat *sb);
+
+/** \ingroup rpmfi
* Return next file iterator index.
- * @param fi file info set
+ * @param fi file info set iterator
* @return file iterator index, -1 on termination
*/
int rpmfiNext(rpmfi fi);
/** \ingroup rpmfi
* Initialize file iterator index.
- * @param fi file info set
+ * @param fi file info set iterator
* @param fx file iterator index
- * @return file info set
+ * @return file info set iterator
*/
rpmfi rpmfiInit(rpmfi fi, int fx);
/** \ingroup rpmfi
* Return next directory iterator index.
- * @param fi file info set
+ * @param fi file info set iterator
* @return directory iterator index, -1 on termination
*/
int rpmfiNextD(rpmfi fi);
/** \ingroup rpmfi
* Initialize directory iterator index.
- * @param fi file info set
+ * @param fi file info set iterator
* @param dx directory iterator index
- * @return file info set, NULL if dx is out of range
+ * @return file info set iterator, NULL if dx is out of range
*/
rpmfi rpmfiInitD(rpmfi fi, int dx);
/** \ingroup rpmfi
- * Destroy a file info set.
- * @param fi file info set
+ * Destroy a file info set iterator.
+ * @param fi file info set iterator
* @return NULL always
*/
rpmfi rpmfiFree(rpmfi fi);
-enum rpmfiFlags_e {
- RPMFI_NOHEADER = 0,
- RPMFI_KEEPHEADER = (1 << 0),
- RPMFI_NOFILECLASS = (1 << 1),
- RPMFI_NOFILEDEPS = (1 << 2),
- RPMFI_NOFILELANGS = (1 << 3),
- RPMFI_NOFILEUSER = (1 << 4),
- RPMFI_NOFILEGROUP = (1 << 5),
- RPMFI_NOFILEMODES = (1 << 6),
- RPMFI_NOFILESIZES = (1 << 7),
- RPMFI_NOFILECAPS = (1 << 8),
- RPMFI_NOFILELINKTOS = (1 << 9),
- RPMFI_NOFILEDIGESTS = (1 << 10),
- RPMFI_NOFILEMTIMES = (1 << 11),
- RPMFI_NOFILERDEVS = (1 << 12),
- RPMFI_NOFILEINODES = (1 << 13),
- RPMFI_NOFILESTATES = (1 << 14),
- RPMFI_NOFILECOLORS = (1 << 15),
- RPMFI_NOFILEVERIFYFLAGS = (1 << 16),
- RPMFI_NOFILEFLAGS = (1 << 17),
-};
-
-typedef rpmFlags rpmfiFlags;
-
-#define RPMFI_FLAGS_ERASE \
- (RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \
- RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \
- RPMFI_NOFILEVERIFYFLAGS)
-
-#define RPMFI_FLAGS_INSTALL \
- (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
-
-#define RPMFI_FLAGS_VERIFY \
- (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
- RPMFI_NOFILECOLORS)
-
-#define RPMFI_FLAGS_QUERY \
- (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
- RPMFI_NOFILECOLORS | RPMFI_NOFILEVERIFYFLAGS)
-
-/** \ingroup rpmfi
- * Create and load a file info set.
+/** \ingroup rpmfi
+ * Create and load a file info set iterator.
+ * @param pool shared string pool (or NULL for private pool)
+ * @param h header
+ * @param tagN unused
+ * @param flags Flags to control what information is loaded.
+ * @return new file info set iterator
+ */
+rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags);
+
+/** \ingroup rpmfi
+ * Create and load a file info set iterator.
* @param ts unused
* @param h header
* @param tagN unused
* @param flags Flags to control what information is loaded.
- * @return new file info set
+ * @return new file info set iterator
*/
rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
@@ -437,20 +384,12 @@ rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
/** \ingroup rpmfi
- * Return file disposition.
- * @param ofi old file info
- * @param nfi new file info
- * @param skipMissing OK to skip missing files?
- * @return file dispostion
- */
-rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing);
-
-/** \ingroup rpmfi
- * Return whether file is conflicting config
- * @param fi file info
- * @return 1 if config file and file on disk conflicts
+ * Verify file attributes (including digest).
+ * @param fi file info iterator
+ * @param omitMask bit(s) to disable verify checks
+ * @return bit(s) to indicate failure (ie 0 for passed verify)
*/
-int rpmfiConfigConflict(const rpmfi fi);
+rpmVerifyAttrs rpmfiVerify(rpmfi fi, rpmVerifyAttrs omitMask);
#ifdef __cplusplus
}
diff --git a/lib/rpmfi_internal.h b/lib/rpmfi_internal.h
index 19484ec5a..dccc6ccbe 100644
--- a/lib/rpmfi_internal.h
+++ b/lib/rpmfi_internal.h
@@ -5,91 +5,21 @@
#include <rpm/rpmfi.h>
#include <rpm/rpmstrpool.h>
#include "lib/fprint.h"
+#include "lib/cpio.h"
#define RPMFIMAGIC 0x09697923
-/**
- * A package filename set.
- */
-struct rpmfi_s {
- int i; /*!< Current file index. */
- int j; /*!< Current directory index. */
-
- Header h; /*!< Header for file info set (or NULL) */
- rpmstrPool pool; /*!< String pool of this file info set */
-
- rpmsid * bnid; /*!< Index to base name(s) (pool) */
- rpmsid * dnid; /*!< Index to directory name(s) (pool) */
-
- rpmsid * flinks; /*!< Index to file link(s) (pool) */
-
- uint32_t * dil; /*!< Directory indice(s) (from header) */
- rpm_flag_t * fflags; /*!< File flag(s) (from header) */
- rpm_off_t * fsizes; /*!< File size(s) (from header) */
- rpm_time_t * fmtimes; /*!< File modification time(s) (from header) */
- rpm_mode_t * fmodes; /*!< File mode(s) (from header) */
- rpm_rdev_t * frdevs; /*!< File rdev(s) (from header) */
- rpm_ino_t * finodes; /*!< File inodes(s) (from header) */
-
- rpmsid * fuser; /*!< Index to file owner(s) (misc pool) */
- rpmsid * fgroup; /*!< Index to file group(s) (misc pool) */
- rpmsid * flangs; /*!< Index to file lang(s) (misc pool) */
-
- char * fstates; /*!< File state(s) (from header) */
-
- rpm_color_t * fcolors; /*!< File color bits (header) */
- char ** fcaps; /*!< File capability strings (header) */
-
- char ** cdict; /*!< File class dictionary (header) */
- rpm_count_t ncdict; /*!< No. of class entries. */
- uint32_t * fcdictx; /*!< File class dictionary index (header) */
-
- uint32_t * ddict; /*!< File depends dictionary (header) */
- rpm_count_t nddict; /*!< No. of depends entries. */
- uint32_t * fddictx; /*!< File depends dictionary start (header) */
- uint32_t * fddictn; /*!< File depends dictionary count (header) */
- rpm_flag_t * vflags; /*!< File verify flag(s) (from header) */
-
- rpm_count_t dc; /*!< No. of directories. */
- rpm_count_t fc; /*!< No. of files. */
-
- rpmfiFlags fiflags; /*!< file info set control flags */
-
- struct fingerPrint_s * fps; /*!< File fingerprint(s). */
-
- int digestalgo; /*!< File digest algorithm */
- unsigned char * digests; /*!< File digests in binary. */
-
- char * fn; /*!< File name buffer. */
-
- char ** apath;
- rpm_off_t * replacedSizes; /*!< (TR_ADDED) */
- int magic;
- int nrefs; /*!< Reference count. */
-};
-
#ifdef __cplusplus
extern "C" {
#endif
/** \ingroup rpmfi
- * Create and load a file info set.
- * @param pool shared string pool (or NULL for private pool)
- * @param h header
- * @param tagN unused
- * @param flags Flags to control what information is loaded.
- * @return new file info set
- */
-RPM_GNUC_INTERNAL
-rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags);
-
-/** \ingroup rpmfi
* Return file info set string pool handle
* @param fi file info
* @return string pool handle (weak reference)
*/
RPM_GNUC_INTERNAL
-rpmstrPool rpmfiPool(rpmfi fi);
+rpmstrPool rpmfilesPool(rpmfiles fi);
/** \ingroup rpmfi
* Return current base name pool id from file info set.
@@ -108,99 +38,75 @@ RPM_GNUC_INTERNAL
rpmsid rpmfiDNId(rpmfi fi);
RPM_GNUC_INTERNAL
-int rpmfiDIIndex(rpmfi fi, int dx);
-
-RPM_GNUC_INTERNAL
-rpmsid rpmfiBNIdIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpmsid rpmfiDNIdIndex(rpmfi fi, int jx);
-
-RPM_GNUC_INTERNAL
-const char * rpmfiBNIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-const char * rpmfiDNIndex(rpmfi fi, int jx);
-
-RPM_GNUC_INTERNAL
-char * rpmfiFNIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpmVerifyAttrs rpmfiVFlagsIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpmfileState rpmfiFStateIndex(rpmfi fi, int ix);
+rpmsid rpmfilesBNId(rpmfiles fi, int ix);
RPM_GNUC_INTERNAL
-const char * rpmfiFLinkIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpm_loff_t rpmfiFSizeIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpm_color_t rpmfiFColorIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-const char * rpmfiFClassIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-uint32_t rpmfiFDependsIndex(rpmfi fi, int ix, const uint32_t ** fddictp);
-
-RPM_GNUC_INTERNAL
-uint32_t rpmfiFNlinkIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-const char * rpmfiFLangsIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpmfileAttrs rpmfiFFlagsIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-rpm_mode_t rpmfiFModeIndex(rpmfi fi, int ix);
-
-RPM_GNUC_INTERNAL
-const unsigned char * rpmfiFDigestIndex(rpmfi fi, int ix, int *algo, size_t *len);
+rpmsid rpmfilesDNId(rpmfiles fi, int jx);
+/** \ingroup rpmfi
+ * Return current original base name pool id from file info set.
+ * @param fi file info set
+ * @return current base name id, 0 on invalid
+ */
RPM_GNUC_INTERNAL
-rpm_rdev_t rpmfiFRdevIndex(rpmfi fi, int ix);
+rpmsid rpmfiOBNId(rpmfi fi);
+/** \ingroup rpmfi
+ * Return current original directory name pool id from file info set.
+ * @param fi file info set
+ * @return current base name id, 0 on invalid
+ */
RPM_GNUC_INTERNAL
-rpm_ino_t rpmfiFInodeIndex(rpmfi fi, int ix);
+rpmsid rpmfiODNId(rpmfi fi);
RPM_GNUC_INTERNAL
-rpm_time_t rpmfiFMtimeIndex(rpmfi fi, int ix);
+rpmsid rpmfilesOBNId(rpmfiles fi, int ix);
RPM_GNUC_INTERNAL
-const char * rpmfiFUserIndex(rpmfi fi, int ix);
+rpmsid rpmfilesODNId(rpmfiles fi, int jx);
RPM_GNUC_INTERNAL
-const char * rpmfiFGroupIndex(rpmfi fi, int ix);
+struct fingerPrint_s *rpmfilesFps(rpmfiles fi);
+/** \ingroup rpmfi
+ * Check if the file in new package, in old package and on the disk have the same contents.
+ * @param new file info set
+ * @param new file index
+ * @param old file info set
+ * @param old file index
+ * @return 1 if the condition is satisfied, 0 otherwise
+ */
RPM_GNUC_INTERNAL
-const char * rpmfiFCapsIndex(rpmfi fi, int ix);
+int rpmfileContentsEqual(rpmfiles ofi, int oix, rpmfiles nfi, int nix);
-RPM_GNUC_INTERNAL
-struct fingerPrint_s *rpmfiFps(rpmfi fi);
RPM_GNUC_INTERNAL
-rpmFileAction rpmfiDecideFateIndex(rpmfi ofi, int oix, rpmfi nfi, int nix,
+rpmFileAction rpmfilesDecideFate(rpmfiles ofi, int oix,
+ rpmfiles nfi, int nix,
int skipMissing);
RPM_GNUC_INTERNAL
-int rpmfiCompareIndex(rpmfi afi, int aix, rpmfi bfi, int bix);
+int rpmfilesConfigConflict(rpmfiles fi, int ix);
RPM_GNUC_INTERNAL
-int rpmfiConfigConflictIndex(rpmfi fi, int ix);
+void rpmfilesSetFReplacedSize(rpmfiles fi, int ix, rpm_loff_t newsize);
RPM_GNUC_INTERNAL
-void rpmfiSetFReplacedSizeIndex(rpmfi fi, int ix, rpm_loff_t newsize);
+rpm_loff_t rpmfilesFReplacedSize(rpmfiles fi, int ix);
RPM_GNUC_INTERNAL
-rpm_loff_t rpmfiFReplacedSizeIndex(rpmfi fi, int ix);
+void rpmfilesFpLookup(rpmfiles fi, fingerPrintCache fpc);
-RPM_GNUC_INTERNAL
-void rpmfiFpLookup(rpmfi fi, fingerPrintCache fpc);
+rpmfiles rpmfiFiles(rpmfi fi);
+/** \ingroup rpmfi
+ * Return file iterator through files starting with given prefix.
+ * @param fi file info set
+ * @param pfx prefix
+ * @return file iterator
+ */
+RPM_GNUC_INTERNAL
+rpmfi rpmfilesFindPrefix(rpmfiles fi, const char *pfx);
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmfiles.h b/lib/rpmfiles.h
new file mode 100644
index 000000000..4caef973b
--- /dev/null
+++ b/lib/rpmfiles.h
@@ -0,0 +1,519 @@
+#ifndef _RPMFILES_H
+#define _RPMFILES_H
+
+/** \ingroup rpmfilesles
+ * \file lib/rpmfiles.h
+ * File info set API.
+ */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmvf.h>
+#include <rpm/rpmpgp.h>
+
+/** \ingroup rpmfiles
+ * File types.
+ * These are the file types used internally by rpm. The file
+ * type is determined by applying stat(2) macros like S_ISDIR to
+ * the file mode tag from a header. The values are arbitrary,
+ * but are identical to the linux stat(2) file types.
+ */
+typedef enum rpmFileTypes_e {
+ PIPE = 1, /*!< pipe/fifo */
+ CDEV = 2, /*!< character device */
+ XDIR = 4, /*!< directory */
+ BDEV = 6, /*!< block device */
+ REG = 8, /*!< regular file */
+ LINK = 10, /*!< hard link */
+ SOCK = 12 /*!< socket */
+} rpmFileTypes;
+
+/**
+ * File States (when installed).
+ */
+typedef enum rpmfileState_e {
+ RPMFILE_STATE_MISSING = -1, /* used for unavailable data */
+ RPMFILE_STATE_NORMAL = 0,
+ RPMFILE_STATE_REPLACED = 1,
+ RPMFILE_STATE_NOTINSTALLED = 2,
+ RPMFILE_STATE_NETSHARED = 3,
+ RPMFILE_STATE_WRONGCOLOR = 4
+} rpmfileState;
+
+#define RPMFILE_IS_INSTALLED(_x) ((_x) == RPMFILE_STATE_NORMAL || (_x) == RPMFILE_STATE_NETSHARED)
+
+/**
+ * Exported File Attributes (ie RPMTAG_FILEFLAGS)
+ */
+enum rpmfileAttrs_e {
+ RPMFILE_NONE = 0,
+ RPMFILE_CONFIG = (1 << 0), /*!< from %%config */
+ RPMFILE_DOC = (1 << 1), /*!< from %%doc */
+ RPMFILE_ICON = (1 << 2), /*!< from %%donotuse. */
+ RPMFILE_MISSINGOK = (1 << 3), /*!< from %%config(missingok) */
+ RPMFILE_NOREPLACE = (1 << 4), /*!< from %%config(noreplace) */
+ RPMFILE_SPECFILE = (1 << 5), /*!< @todo (unnecessary) marks 1st file in srpm. */
+ RPMFILE_GHOST = (1 << 6), /*!< from %%ghost */
+ RPMFILE_LICENSE = (1 << 7), /*!< from %%license */
+ RPMFILE_README = (1 << 8), /*!< from %%readme */
+ /* bits 9-10 unused */
+ RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */
+ RPMFILE_ARTIFACT = (1 << 12), /*!< from %%artifact */
+ RPMFILE_SECMANIFEST = (1 << 13), /*!< from %%manifest */
+};
+
+typedef rpmFlags rpmfileAttrs;
+
+#define RPMFILE_ALL ~(RPMFILE_NONE)
+
+/** \ingroup rpmfiles
+ * File disposition(s) during package install/erase transaction.
+ */
+typedef enum rpmFileAction_e {
+ FA_UNKNOWN = 0, /*!< initial action for file ... */
+ FA_CREATE = 1, /*!< ... create from payload. */
+ FA_COPYIN = 2, /*!< obsolete, unused. */
+ FA_COPYOUT = 3, /*!< obsolete, unused. */
+ FA_BACKUP = 4, /*!< ... renamed with ".rpmorig" extension. */
+ FA_SAVE = 5, /*!< ... renamed with ".rpmsave" extension. */
+ FA_SKIP = 6, /*!< ... already replaced, don't remove. */
+ FA_ALTNAME = 7, /*!< ... create with ".rpmnew" extension. */
+ FA_ERASE = 8, /*!< ... to be removed. */
+ FA_SKIPNSTATE = 9, /*!< ... untouched, state "not installed". */
+ FA_SKIPNETSHARED = 10, /*!< ... untouched, state "netshared". */
+ FA_SKIPCOLOR = 11, /*!< ... untouched, state "wrong color". */
+ FA_TOUCH = 12, /*!< ... change metadata only. */
+ /* bits 16-31 reserved */
+} rpmFileAction;
+
+#define XFA_SKIPPING(_a) \
+ ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
+
+/**
+ * We pass these around as an array with a sentinel.
+ */
+struct rpmRelocation_s {
+ char * oldPath; /*!< NULL here evals to RPMTAG_DEFAULTPREFIX, */
+ char * newPath; /*!< NULL means to omit the file completely! */
+};
+
+enum rpmfiFlags_e {
+ RPMFI_NOHEADER = 0,
+ RPMFI_KEEPHEADER = (1 << 0),
+ RPMFI_NOFILECLASS = (1 << 1),
+ RPMFI_NOFILEDEPS = (1 << 2),
+ RPMFI_NOFILELANGS = (1 << 3),
+ RPMFI_NOFILEUSER = (1 << 4),
+ RPMFI_NOFILEGROUP = (1 << 5),
+ RPMFI_NOFILEMODES = (1 << 6),
+ RPMFI_NOFILESIZES = (1 << 7),
+ RPMFI_NOFILECAPS = (1 << 8),
+ RPMFI_NOFILELINKTOS = (1 << 9),
+ RPMFI_NOFILEDIGESTS = (1 << 10),
+ RPMFI_NOFILEMTIMES = (1 << 11),
+ RPMFI_NOFILERDEVS = (1 << 12),
+ RPMFI_NOFILEINODES = (1 << 13),
+ RPMFI_NOFILESTATES = (1 << 14),
+ RPMFI_NOFILECOLORS = (1 << 15),
+ RPMFI_NOFILEVERIFYFLAGS = (1 << 16),
+ RPMFI_NOFILEFLAGS = (1 << 17),
+ RPMFI_NOFILESIGNATURES = (1 << 18),
+};
+
+typedef rpmFlags rpmfiFlags;
+
+#define RPMFI_FLAGS_ERASE \
+ (RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \
+ RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \
+ RPMFI_NOFILEVERIFYFLAGS)
+
+#define RPMFI_FLAGS_INSTALL \
+ (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
+
+#define RPMFI_FLAGS_VERIFY \
+ (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+ RPMFI_NOFILECOLORS)
+
+#define RPMFI_FLAGS_QUERY \
+ (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+ RPMFI_NOFILECOLORS | RPMFI_NOFILEVERIFYFLAGS)
+
+#define RPMFI_FLAGS_FILETRIGGER \
+ (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+ RPMFI_NOFILEUSER | RPMFI_NOFILEGROUP | RPMFI_NOFILEMODES | \
+ RPMFI_NOFILESIZES | RPMFI_NOFILECAPS | RPMFI_NOFILELINKTOS | \
+ RPMFI_NOFILEDIGESTS | RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | \
+ RPMFI_NOFILEINODES | RPMFI_NOFILECOLORS | \
+ RPMFI_NOFILEVERIFYFLAGS | RPMFI_NOFILEFLAGS)
+
+#define RPMFI_FLAGS_ONLY_FILENAMES \
+ (RPMFI_FLAGS_FILETRIGGER | RPMFI_NOFILESTATES)
+
+typedef enum rpmFileIter_e {
+ RPMFI_ITER_FWD = 0,
+ RPMFI_ITER_BACK = 1,
+ RPMFI_ITER_WRITE_ARCHIVE = 2,
+ RPMFI_ITER_READ_ARCHIVE = 3,
+ RPMFI_ITER_READ_ARCHIVE_CONTENT_FIRST = 4,
+ RPMFI_ITER_READ_ARCHIVE_OMIT_HARDLINKS = 5,
+ RPMFI_ITER_INTERVAL = 6,
+} rpmFileIter;
+
+#define RPMFILEITERMAX 6
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \ingroup rpmfiles
+ * Create and load a file info set.
+ * @param pool shared string pool (or NULL for private pool)
+ * @param h header
+ * @param tagN unused
+ * @param flags Flags to control what information is loaded.
+ * @return new file info set
+ */
+rpmfiles rpmfilesNew(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags);
+
+/** \ingroup rpmfiles
+ * Reference a file info set instance.
+ * @param fi file info set
+ * @return new file info set reference
+ */
+rpmfiles rpmfilesLink(rpmfiles fi);
+
+/** \ingroup rpmfiles
+ * Destroy a file info set.
+ * @param fi file info set
+ * @return NULL always
+ */
+rpmfiles rpmfilesFree(rpmfiles fi);
+
+/** \ingroup rpmfiles
+ * Return file count from file info set.
+ * @param fi file info set
+ * @return file count
+ */
+rpm_count_t rpmfilesFC(rpmfiles fi);
+
+/** \ingroup rpmfiles
+ * Return directory count from file info set.
+ * @param fi file info set
+ * @return directory count
+ */
+rpm_count_t rpmfilesDC(rpmfiles fi);
+
+/** \ingroup rpmfiles
+ * Return file index of the given file name or -1 if file is not in the rpmfi.
+ * The file name may have "." prefixed but is then interpreted as a global
+ * path without the prefixing "."
+ * @param files file info set
+ * @param fn file name
+ * @return file index or -1
+ */
+int rpmfilesFindFN(rpmfiles files, const char * fn);
+
+/** \ingroup rpmfiles
+ * Return file index of the given original file name or -1 if file is not
+ * in the rpmfi. The file name may have "." prefixed but is then interpreted
+ * as a global path without the prefixing "."
+ * @param files file info set
+ * @param fn file name
+ * @return file index or -1
+ */
+int rpmfilesFindOFN(rpmfiles files, const char * fn);
+
+rpmfi rpmfilesIter(rpmfiles files, int itype);
+
+/** \ingroup rpmfiles
+ * Return digest algorithm of a file info set.
+ * @param fi file info set
+ * @return digest algorithm of file info set, 0 on invalid
+ */
+int rpmfilesDigestAlgo(rpmfiles fi);
+
+/** \ingroup rpmfiles
+ * Return union of all file color bits from file info set.
+ * @param files file info set
+ * @return color
+ */
+rpm_color_t rpmfilesColor(rpmfiles files);
+
+/** \ingroup rpmfiles
+ * Return file info comparison.
+ * @param afi 1st file info
+ * @param aix index of the 1st file
+ * @param bfi 2nd file info
+ * @param bix index of the 2nd file
+ * @return 0 if identical
+ */
+int rpmfilesCompare(rpmfiles afi, int aix, rpmfiles bfi, int bix);
+
+/** \ingroup rpmfiles
+ * Return base name from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return base name, NULL on invalid
+ */
+const char * rpmfilesBN(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return directory name from file info set. Note the index is on
+ * distinct directories within the file set, not a file index. The
+ * directory index associated with a given file index can be retrieved
+ * with rpmfilesDI(). Ie to constuct the full path of file index X
+ * you'd catenate the results of rpmfilesDN(f, rpmfilesDI(f, X)) and
+ * rpmfilesBN(f, X).
+ * @param fi file info set
+ * @param jx directory index
+ * @return directory, NULL on invalid
+ */
+const char * rpmfilesDN(rpmfiles fi, int jx);
+
+/** \ingroup rpmfiles
+ * Return directory index from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return directory index, -1 on invalid
+ */
+int rpmfilesDI(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file name from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file name (malloced)
+ */
+char * rpmfilesFN(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return original directory index from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return directory index, -1 on invalid
+ */
+int rpmfilesODI(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return original base name from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return base name, NULL on invalid
+ */
+const char * rpmfilesOBN(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return original directory name from file info set. Note the index is on
+ * distinct directories within the file set, not a file index. The
+ * directory index associated with a given file index can be retrieved
+ * with rpmfilesODI(). Ie to constuct the full path of file index X
+ * you'd catenate the results of rpmfilesODN(f, rpmfilesODI(f, X)) and
+ * rpmfilesOBN(f, X).
+ * @param fi file info set
+ * @param jx directory index
+ * @return directory, NULL on invalid
+ */
+const char * rpmfilesODN(rpmfiles fi, int jx);
+
+/** \ingroup rpmfiles
+ * Return original file name from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file name
+ */
+char * rpmfilesOFN(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file verify flags from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file verify flags, 0 on invalid
+ */
+rpmVerifyAttrs rpmfilesVFlags(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file state from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file state, 0 on invalid
+ */
+rpmfileState rpmfilesFState(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file linkto (i.e. symlink(2) target) from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file linkto, NULL on invalid
+ */
+const char * rpmfilesFLink(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file size from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file size, 0 on invalid
+ */
+rpm_loff_t rpmfilesFSize(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file color bits from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file color
+ */
+rpm_color_t rpmfilesFColor(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file class from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file class, 0 on invalid
+ */
+const char * rpmfilesFClass(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file depends dictionary from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @retval *fddictp file depends dictionary array (or NULL)
+ * @return no. of file depends entries, 0 on invalid
+ */
+uint32_t rpmfilesFDepends(rpmfiles fi, int ix, const uint32_t ** fddictp);
+
+/** \ingroup rpmfiles
+ * Return (calculated) file nlink count from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file nlink count, 0 on invalid
+ */
+uint32_t rpmfilesFNlink(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return (calculated) file nlink count from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @param files returns array of file ids hardlinked including ix,
+ NULL for nlink count == 1
+ * @return file nlink count, 0 on invalid
+ */
+uint32_t rpmfilesFLinks(rpmfiles fi, int ix, const int ** files);
+
+/** \ingroup rpmfiles
+ * Return file language(s) from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file language(s), NULL on invalid
+ */
+const char * rpmfilesFLangs(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file flags from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file flags, 0 on invalid
+ */
+rpmfileAttrs rpmfilesFFlags(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file mode from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file mode, 0 on invalid
+ */
+rpm_mode_t rpmfilesFMode(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file (binary) digest of file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @retval algo digest hash algorithm used (pass NULL to ignore)
+ * @retval len digest hash length (pass NULL to ignore)
+ * @return file digest, NULL on invalid
+ */
+const unsigned char * rpmfilesFDigest(rpmfiles fi, int ix, int *algo, size_t *len);
+
+/** \ingroup rpmfiles
+ * Return file (binary) digest of file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @retval len signature length (pass NULL to ignore)
+ * @return file signature, NULL on invalid
+ */
+const unsigned char * rpmfilesFSignature(rpmfiles fi, int ix, size_t *len);
+
+/** \ingroup rpmfiles
+ * Return file rdev from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file rdev, 0 on invalid
+ */
+rpm_rdev_t rpmfilesFRdev(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file inode from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file inode, 0 on invalid
+ */
+rpm_ino_t rpmfilesFInode(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file modify time from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file modify time, 0 on invalid
+ */
+rpm_time_t rpmfilesFMtime(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file owner from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file owner, NULL on invalid
+ */
+const char * rpmfilesFUser(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return file group from file info set.
+ * @param fi file info set
+ * @param ix file index
+ * @return file group, NULL on invalid
+ */
+const char * rpmfilesFGroup(rpmfiles fi, int ix);
+
+/** \ingroup rpmfiles
+ * Return textual representation of file capabilities
+ * from file info set. See cap_from_text(3) for details.
+ * @param fi file info set
+ * @param ix file index
+ * @return file capability description, "" for no capabilities
+ * and NULL on invalid
+ */
+const char * rpmfilesFCaps(rpmfiles fi, int ix);
+
+/** \ingroup rpmfi
+ * Map file stat(2) info.
+ * @param fi file info set
+ * @param ix file index
+ * @param flags flags
+ * @retval sb mapped stat(2) data
+ * @return 0 on success
+ */
+int rpmfilesStat(rpmfiles fi, int ix, int flags, struct stat *sb);
+
+/** \ingroup rpmfiles
+ * Verify file attributes (including digest).
+ * @param fi file info set
+ * @param ix file index
+ * @param omitMask bit(s) to disable verify checks
+ * @return bit(s) to indicate failure (ie 0 for passed verify)
+ */
+rpmVerifyAttrs rpmfilesVerify(rpmfiles fi, int ix, rpmVerifyAttrs omitMask);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RPMFILES_H */
diff --git a/lib/rpmfs.c b/lib/rpmfs.c
index 764618d94..7d807e06b 100644
--- a/lib/rpmfs.c
+++ b/lib/rpmfs.c
@@ -18,7 +18,7 @@ rpmfs rpmfsNew(rpm_count_t fc, int initState)
rpmfs fs = xcalloc(1, sizeof(*fs));
fs->fc = fc;
fs->actions = xmalloc(fs->fc * sizeof(*fs->actions));
- memset(fs->actions, FA_UNKNOWN, fs->fc * sizeof(*fs->actions));
+ rpmfsResetActions(fs);
if (initState) {
fs->states = xmalloc(sizeof(*fs->states) * fs->fc);
memset(fs->states, RPMFILE_STATE_NORMAL, fs->fc);
@@ -101,7 +101,7 @@ rpm_fstate_t * rpmfsGetStates(rpmfs fs)
rpmFileAction rpmfsGetAction(rpmfs fs, unsigned int ix)
{
rpmFileAction action;
- if (fs->actions != NULL && ix < fs->fc) {
+ if (fs && fs->actions != NULL && ix < fs->fc) {
action = fs->actions[ix];
} else {
action = FA_UNKNOWN;
@@ -115,3 +115,10 @@ void rpmfsSetAction(rpmfs fs, unsigned int ix, rpmFileAction action)
fs->actions[ix] = action;
}
}
+
+void rpmfsResetActions(rpmfs fs)
+{
+ if (fs && fs->actions) {
+ memset(fs->actions, FA_UNKNOWN, fs->fc * sizeof(*fs->actions));
+ }
+}
diff --git a/lib/rpmfs.h b/lib/rpmfs.h
index 5f747533c..83f99d15a 100644
--- a/lib/rpmfs.h
+++ b/lib/rpmfs.h
@@ -57,6 +57,9 @@ rpmFileAction rpmfsGetAction(rpmfs fs, unsigned int ix);
RPM_GNUC_INTERNAL
void rpmfsSetAction(rpmfs fs, unsigned int ix, rpmFileAction action);
+RPM_GNUC_INTERNAL
+void rpmfsResetActions(rpmfs fs);
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmgi.c b/lib/rpmgi.c
index 89707df64..c6663fde1 100644
--- a/lib/rpmgi.c
+++ b/lib/rpmgi.c
@@ -17,6 +17,8 @@
#include "debug.h"
+#define MANIFEST_RECURSIONS 1000 /* Max. number of allowed manifest recursions */
+
RPM_GNUC_INTERNAL
rpmgiFlags giFlags = RPMGI_NONE;
@@ -31,6 +33,10 @@ struct rpmgi_s {
ARGV_t argv;
int argc;
+
+ int curLvl; /*!< Current recursion level */
+ int recLvls[MANIFEST_RECURSIONS]; /*!< Reversed end index for given level */
+
};
/**
@@ -123,11 +129,24 @@ static Header rpmgiLoadReadHeader(rpmgi gi)
if (gi->argv != NULL && gi->argv[gi->i] != NULL)
do {
char * fn = gi->argv[gi->i];
- int rc = rpmgiReadHeader(gi, fn, &h);
+ int rc;
+
+ while (gi->recLvls[gi->curLvl] > gi->argc - gi->i)
+ gi->curLvl--;
+
+ rc = rpmgiReadHeader(gi, fn, &h);
if (h != NULL || (gi->flags & RPMGI_NOMANIFEST) || rc == 0)
break;
+ if (gi->curLvl == MANIFEST_RECURSIONS - 1) {
+ rpmlog(RPMLOG_ERR,
+ _("Max level of manifest recursion exceeded: %s\n"), fn);
+ break;
+ }
+ gi->curLvl++;
+ gi->recLvls[gi->curLvl] = gi->argc - gi->i;
+
/* Not a header, so try for a manifest. */
gi->argv[gi->i] = NULL; /* Mark the insertion point */
if (rpmgiLoadManifest(gi, fn) != RPMRC_OK) {
@@ -195,11 +214,13 @@ rpmgi rpmgiNew(rpmts ts, rpmgiFlags flags, ARGV_const_t argv)
gi->i = -1;
gi->errors = 0;
- gi->flags = flags;
gi->argv = argvNew();
gi->argc = 0;
rpmgiGlobArgv(gi, argv);
+ gi->curLvl = 0;
+ gi->recLvls[gi->curLvl] = 1;
+
return gi;
}
diff --git a/lib/rpmhash.C b/lib/rpmhash.C
index 98203272d..6875397aa 100644
--- a/lib/rpmhash.C
+++ b/lib/rpmhash.C
@@ -69,8 +69,8 @@ HASHTYPE HASHPREFIX(Create)(int numBuckets,
HASHTYPE ht;
ht = xmalloc(sizeof(*ht));
- ht->numBuckets = numBuckets;
- ht->buckets = xcalloc(numBuckets, sizeof(*ht->buckets));
+ ht->numBuckets = numBuckets > 11 ? numBuckets : 11;
+ ht->buckets = xcalloc(ht->numBuckets, sizeof(*ht->buckets));
ht->freeKey = freeKey;
#ifdef HTDATATYPE
ht->freeData = freeData;
@@ -142,6 +142,8 @@ void HASHPREFIX(AddHEntry)(HASHTYPE ht, HTKEYTYPE key, unsigned int keyHash
}
#ifdef HTDATATYPE
else {
+ if (ht->freeKey)
+ ht->freeKey(key);
// resizing bucket TODO: increase exponentially
// Bucket_s already contains space for one dataset
b = *b_addr = xrealloc(
diff --git a/lib/rpminstall.c b/lib/rpminstall.c
index a3623fd3a..e10392e0f 100644
--- a/lib/rpminstall.c
+++ b/lib/rpminstall.c
@@ -10,6 +10,7 @@
#include <rpm/rpmdb.h>
#include <rpm/rpmds.h>
#include <rpm/rpmts.h>
+#include <rpm/rpmsq.h>
#include <rpm/rpmlog.h>
#include <rpm/rpmfileutil.h>
@@ -22,6 +23,7 @@ static int rpmcliHashesCurrent = 0;
static int rpmcliHashesTotal = 0;
static int rpmcliProgressCurrent = 0;
static int rpmcliProgressTotal = 0;
+static int rpmcliProgressState = 0;
/**
* Print a CLI progress bar.
@@ -103,7 +105,6 @@ void * rpmShowProgress(const void * arg,
void * rc = NULL;
const char * filename = (const char *)key;
static FD_t fd = NULL;
- static int state = -1;
switch (what) {
case RPMCALLBACK_INST_OPEN_FILE:
@@ -134,8 +135,8 @@ void * rpmShowProgress(const void * arg,
case RPMCALLBACK_INST_START:
case RPMCALLBACK_UNINST_START:
- if (state != what) {
- state = what;
+ if (rpmcliProgressState != what) {
+ rpmcliProgressState = what;
if (flags & INSTALL_HASH) {
if (what == RPMCALLBACK_INST_START) {
fprintf(stdout, _("Updating / installing...\n"));
@@ -185,7 +186,7 @@ void * rpmShowProgress(const void * arg,
rpmcliProgressTotal = 1;
rpmcliProgressCurrent = 0;
rpmcliPackagesTotal = total;
- state = what;
+ rpmcliProgressState = what;
if (!(flags & INSTALL_LABEL))
break;
if (flags & INSTALL_HASH)
@@ -290,8 +291,8 @@ static int rpmcliTransaction(rpmts ts, struct rpmInstallArguments_s * ia,
ps = rpmtsProblems(ts);
- if ((rpmpsNumProblems(ps) > 0) && (eflags? 1 : (rc > 0)))
- rpmpsPrint((eflags? NULL : stderr), ps);
+ if (rpmpsNumProblems(ps) > 0 && (eflags || rc > 0))
+ rpmpsPrint(NULL, ps);
ps = rpmpsFree(ps);
}
@@ -311,7 +312,8 @@ static int tryReadManifest(struct rpmEIU * eiu)
Fclose(fd);
fd = NULL;
}
- eiu->numFailed++; *eiu->fnp = NULL;
+ eiu->numFailed++;
+ *eiu->fnp = NULL;
return RPMRC_FAIL;
}
@@ -323,8 +325,10 @@ static int tryReadManifest(struct rpmEIU * eiu)
Fclose(fd);
fd = NULL;
- if (rc != RPMRC_OK)
- eiu->numFailed++; *eiu->fnp = NULL;
+ if (rc != RPMRC_OK) {
+ eiu->numFailed++;
+ *eiu->fnp = NULL;
+ }
return rc;
}
@@ -340,7 +344,8 @@ static int tryReadHeader(rpmts ts, struct rpmEIU * eiu, Header * hdrp)
Fclose(fd);
fd = NULL;
}
- eiu->numFailed++; *eiu->fnp = NULL;
+ eiu->numFailed++;
+ *eiu->fnp = NULL;
return RPMRC_FAIL;
}
@@ -353,9 +358,10 @@ static int tryReadHeader(rpmts ts, struct rpmEIU * eiu, Header * hdrp)
if (eiu->rpmrc == RPMRC_NOTFOUND && (giFlags & RPMGI_NOMANIFEST))
eiu->rpmrc = RPMRC_FAIL;
- if(eiu->rpmrc == RPMRC_FAIL) {
+ if (eiu->rpmrc == RPMRC_FAIL) {
rpmlog(RPMLOG_ERR, _("%s cannot be installed\n"), *eiu->fnp);
- eiu->numFailed++; *eiu->fnp = NULL;
+ eiu->numFailed++;
+ *eiu->fnp = NULL;
}
return RPMRC_OK;
@@ -385,6 +391,19 @@ static int checkFreshenStatus(rpmts ts, Header h)
return (oldH != NULL);
}
+static int rpmNoGlob(const char *fn, int *argcPtr, ARGV_t * argvPtr)
+{
+ struct stat sb;
+ int rc = stat(fn, &sb);
+ if (rc == 0) {
+ argvAdd(argvPtr, fn);
+ *argcPtr = 1;
+ } else {
+ *argcPtr = 0;
+ }
+ return rc;
+}
+
/** @todo Generalize --freshen policies. */
int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv)
{
@@ -417,13 +436,20 @@ int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv)
for (eiu->fnp = fileArgv; *eiu->fnp != NULL; eiu->fnp++) {
ARGV_t av = NULL;
int ac = 0;
- char * fn;
- fn = rpmEscapeSpaces(*eiu->fnp);
- rc = rpmGlob(fn, &ac, &av);
- fn = _free(fn);
+ if (giFlags & RPMGI_NOGLOB) {
+ rc = rpmNoGlob(*eiu->fnp, &ac, &av);
+ } else {
+ char * fn = rpmEscapeSpaces(*eiu->fnp);
+ rc = rpmGlob(fn, &ac, &av);
+ fn = _free(fn);
+ }
if (rc || ac == 0) {
- rpmlog(RPMLOG_ERR, _("File not found by glob: %s\n"), *eiu->fnp);
+ if (giFlags & RPMGI_NOGLOB) {
+ rpmlog(RPMLOG_ERR, _("File not found: %s\n"), *eiu->fnp);
+ } else {
+ rpmlog(RPMLOG_ERR, _("File not found by glob: %s\n"), *eiu->fnp);
+ }
eiu->numFailed++;
continue;
}
@@ -520,6 +546,10 @@ restart:
}
if (headerIsSource(h)) {
+ if (ia->installInterfaceFlags & INSTALL_FRESHEN) {
+ headerFree(h);
+ continue;
+ }
rpmlog(RPMLOG_DEBUG, "\tadded source package [%d]\n",
eiu->numSRPMS);
eiu->sourceURL = xrealloc(eiu->sourceURL,
@@ -552,7 +582,10 @@ restart:
continue;
}
- rc = rpmtsAddInstallElement(ts, h, (fnpyKey)fileName,
+ if (ia->installInterfaceFlags & INSTALL_REINSTALL)
+ rc = rpmtsAddReinstallElement(ts, h, (fnpyKey)fileName);
+ else
+ rc = rpmtsAddInstallElement(ts, h, (fnpyKey)fileName,
(ia->installInterfaceFlags & INSTALL_UPGRADE) != 0,
relocations);
@@ -560,7 +593,7 @@ restart:
if (eiu->relocations)
eiu->relocations->oldPath = _free(eiu->relocations->oldPath);
- switch(rc) {
+ switch (rc) {
case 0:
rpmlog(RPMLOG_DEBUG, "\tadded binary package [%d]\n",
eiu->numRPMS);
@@ -594,8 +627,11 @@ restart:
}
if (eiu->numSRPMS && (eiu->sourceURL != NULL)) {
+ rpmcliProgressState = 0;
+ rpmcliProgressTotal = 0;
+ rpmcliProgressCurrent = 0;
for (i = 0; i < eiu->numSRPMS; i++) {
- rpmdbCheckSignals();
+ rpmsqPoll();
if (eiu->sourceURL[i] != NULL) {
rc = RPMRC_OK;
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_TEST))
diff --git a/lib/rpmlead.c b/lib/rpmlead.c
index 8e56bfc38..981bc8f60 100644
--- a/lib/rpmlead.c
+++ b/lib/rpmlead.c
@@ -17,6 +17,9 @@
#include "debug.h"
+/* A long time ago in a galaxy far far away, signatures were not in a header */
+#define RPMSIGTYPE_HEADERSIG 5
+
static unsigned char const lead_magic[] = {
RPMLEAD_MAGIC0, RPMLEAD_MAGIC1, RPMLEAD_MAGIC2, RPMLEAD_MAGIC3
};
@@ -39,10 +42,8 @@ struct rpmlead_s {
char reserved[16]; /*!< Pad to 96 bytes -- 8 byte aligned! */
};
-rpmlead rpmLeadFromHeader(Header h)
+static int rpmLeadFromHeader(Header h, struct rpmlead_s *l)
{
- rpmlead l = NULL;
-
if (h != NULL) {
int archnum, osnum;
char * nevr = headerGetAsString(h, RPMTAG_NEVR);
@@ -51,7 +52,7 @@ rpmlead rpmLeadFromHeader(Header h)
rpmGetArchInfo(NULL, &archnum);
rpmGetOsInfo(NULL, &osnum);
- l = xcalloc(1, sizeof(*l));
+ memset(l, 0, sizeof(*l));
l->major = 3;
l->minor = 0;
l->archnum = archnum;
@@ -65,36 +66,30 @@ rpmlead rpmLeadFromHeader(Header h)
free(nevr);
}
- return l;
-}
-
-rpmlead rpmLeadFree(rpmlead lead)
-{
- free(lead);
- return NULL;
+ return (h != NULL);
}
/* The lead needs to be 8 byte aligned */
-rpmRC rpmLeadWrite(FD_t fd, rpmlead lead)
+rpmRC rpmLeadWrite(FD_t fd, Header h)
{
rpmRC rc = RPMRC_FAIL;
+ struct rpmlead_s l;
- if (lead != NULL) {
- struct rpmlead_s l;
- memcpy(&l, lead, sizeof(l));
+ if (rpmLeadFromHeader(h, &l)) {
- l.type = htons(lead->type);
- l.archnum = htons(lead->archnum);
- l.osnum = htons(lead->osnum);
- l.signature_type = htons(lead->signature_type);
+ l.type = htons(l.type);
+ l.archnum = htons(l.archnum);
+ l.osnum = htons(l.osnum);
+ l.signature_type = htons(l.signature_type);
if (Fwrite(&l, 1, sizeof(l), fd) == sizeof(l))
rc = RPMRC_OK;
}
+
return rc;
}
-static rpmRC rpmLeadCheck(rpmlead lead, char **msg)
+static rpmRC rpmLeadCheck(struct rpmlead_s *lead, char **msg)
{
if (memcmp(lead->magic, lead_magic, sizeof(lead_magic))) {
*msg = xstrdup(_("not an rpm package"));
@@ -111,7 +106,7 @@ static rpmRC rpmLeadCheck(rpmlead lead, char **msg)
return RPMRC_OK;
}
-rpmRC rpmLeadRead(FD_t fd, rpmlead *lead, int *type, char **emsg)
+rpmRC rpmLeadRead(FD_t fd, int *type, char **emsg)
{
rpmRC rc = RPMRC_OK;
struct rpmlead_s l;
@@ -135,10 +130,6 @@ rpmRC rpmLeadRead(FD_t fd, rpmlead *lead, int *type, char **emsg)
}
if (rc == RPMRC_OK) {
- if (lead != NULL) {
- *lead = xmalloc(sizeof(l));
- memcpy(*lead, &l, sizeof(l));
- }
if (type != NULL)
*type = l.type;
} else {
diff --git a/lib/rpmlead.h b/lib/rpmlead.h
index a7f4730ad..48d4df287 100644
--- a/lib/rpmlead.h
+++ b/lib/rpmlead.h
@@ -19,39 +19,22 @@ extern "C" {
#define RPMLEAD_SIZE 96 /*!< Don't rely on sizeof(struct) */
-typedef struct rpmlead_s * rpmlead;
-
-/** \ingroup lead
- * Initialize a lead structure from header
- * param h Header
- * @return Pointer to populated lead structure (malloced)
- */
-rpmlead rpmLeadFromHeader(Header h);
-
-/** \ingroup lead
- * Free a lead structure
- * @param lead Pointer to lead structure
- * @return NULL always
- */
-rpmlead rpmLeadFree(rpmlead lead);
-
/** \ingroup lead
* Write lead to file handle.
* @param fd file handle
- * @param lead package lead
+ * @param h package header
* @return RPMRC_OK on success, RPMRC_FAIL on error
*/
-rpmRC rpmLeadWrite(FD_t fd, rpmlead lead);
+rpmRC rpmLeadWrite(FD_t fd, Header h);
/** \ingroup lead
* Read lead from file handle.
* @param fd file handle
- * @retval lead pointer to package lead (malloced)
* @retval type RPMLEAD_BINARY or RPMLEAD_SOURCE on success
* @retval emsg failure message on error (malloced)
* @return RPMRC_OK on success, RPMRC_FAIL/RPMRC_NOTFOUND on error
*/
-rpmRC rpmLeadRead(FD_t fd, rpmlead *lead, int *type, char **emsg);
+rpmRC rpmLeadRead(FD_t fd, int *type, char **emsg);
#ifdef __cplusplus
}
diff --git a/lib/rpmlib.h b/lib/rpmlib.h
index 41a285d04..2e1da831a 100644
--- a/lib/rpmlib.h
+++ b/lib/rpmlib.h
@@ -15,8 +15,9 @@
#include <rpm/rpmtag.h>
#include <rpm/rpmds.h> /* XXX move rpmlib provides to rpmds instead */
#include <rpm/rpmpgp.h>
+
#ifdef _RPM_4_4_COMPAT
-#include <rpm/rpmlegacy.h> /* legacy compat definitions if enabled */
+#warning RPM 4.4.x compatibility layer has been removed in RPM >= 4.14
#endif
#ifdef __cplusplus
@@ -137,7 +138,7 @@ rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg);
/** \ingroup header
* Return checked and loaded header.
- * @param ts transaction set
+ * @param ts unused
* @param fd file handle
* @retval hdrp address of header (or NULL)
* @retval *msg verification error message (or NULL)
diff --git a/lib/rpmlock.c b/lib/rpmlock.c
index cf9947ea5..f27d8d9b3 100644
--- a/lib/rpmlock.c
+++ b/lib/rpmlock.c
@@ -12,18 +12,15 @@
/* Internal interface */
-enum {
- RPMLOCK_READ = 1 << 0,
- RPMLOCK_WRITE = 1 << 1,
- RPMLOCK_WAIT = 1 << 2,
-};
-
struct rpmlock_s {
int fd;
int openmode;
+ char *path;
+ char *descr;
+ int fdrefs;
};
-static rpmlock rpmlock_new(const char *lock_path)
+static rpmlock rpmlock_new(const char *lock_path, const char *descr)
{
rpmlock lock = (rpmlock) malloc(sizeof(*lock));
@@ -33,7 +30,8 @@ static rpmlock rpmlock_new(const char *lock_path)
(void) umask(oldmask);
if (lock->fd == -1) {
- lock->fd = open(lock_path, O_RDONLY);
+ if (errno == EACCES)
+ lock->fd = open(lock_path, O_RDONLY);
if (lock->fd == -1) {
free(lock);
lock = NULL;
@@ -43,13 +41,20 @@ static rpmlock rpmlock_new(const char *lock_path)
} else {
lock->openmode = RPMLOCK_WRITE | RPMLOCK_READ;
}
+ if (lock) {
+ lock->path = xstrdup(lock_path);
+ lock->descr = xstrdup(descr);
+ lock->fdrefs = 1;
+ }
}
return lock;
}
static void rpmlock_free(rpmlock lock)
{
- if (lock) {
+ if (--lock->fdrefs == 0) {
+ free(lock->path);
+ free(lock->descr);
(void) close(lock->fd);
free(lock);
}
@@ -58,7 +63,13 @@ static void rpmlock_free(rpmlock lock)
static int rpmlock_acquire(rpmlock lock, int mode)
{
int res = 0;
- if (lock && (mode & lock->openmode)) {
+
+ if (!(mode & lock->openmode))
+ return res;
+
+ if (lock->fdrefs > 1) {
+ res = 1;
+ } else {
struct flock info;
int cmd;
if (mode & RPMLOCK_WAIT)
@@ -76,12 +87,19 @@ static int rpmlock_acquire(rpmlock lock, int mode)
if (fcntl(lock->fd, cmd, &info) != -1)
res = 1;
}
+
+ lock->fdrefs += res;
+
return res;
}
static void rpmlock_release(rpmlock lock)
{
- if (lock) {
+ /* if not locked then we must not release */
+ if (lock->fdrefs <= 1)
+ return;
+
+ if (--lock->fdrefs == 1) {
struct flock info;
info.l_type = F_UNLCK;
info.l_whence = SEEK_SET;
@@ -94,31 +112,56 @@ static void rpmlock_release(rpmlock lock)
/* External interface */
-
-rpmlock rpmlockAcquire(const char *lock_path, const char *descr)
+rpmlock rpmlockNew(const char *lock_path, const char *descr)
{
- rpmlock lock = rpmlock_new(lock_path);
+ rpmlock lock = rpmlock_new(lock_path, descr);
if (!lock) {
rpmlog(RPMLOG_ERR, _("can't create %s lock on %s (%s)\n"),
descr, lock_path, strerror(errno));
- } else if (!rpmlock_acquire(lock, RPMLOCK_WRITE)) {
- if (lock->openmode & RPMLOCK_WRITE)
+ }
+ return lock;
+}
+
+int rpmlockAcquire(rpmlock lock)
+{
+ int locked = 0; /* assume failure */
+ int maywait = isatty(STDIN_FILENO); /* dont wait within scriptlets */
+
+ if (lock) {
+ locked = rpmlock_acquire(lock, RPMLOCK_WRITE);
+ if (!locked && (lock->openmode & RPMLOCK_WRITE) && maywait) {
rpmlog(RPMLOG_WARNING, _("waiting for %s lock on %s\n"),
- descr, lock_path);
- if (!rpmlock_acquire(lock, RPMLOCK_WRITE|RPMLOCK_WAIT)) {
+ lock->descr, lock->path);
+ locked = rpmlock_acquire(lock, (RPMLOCK_WRITE|RPMLOCK_WAIT));
+ }
+ if (!locked) {
rpmlog(RPMLOG_ERR, _("can't create %s lock on %s (%s)\n"),
- descr, lock_path, strerror(errno));
- rpmlock_free(lock);
- lock = NULL;
+ lock->descr, lock->path, strerror(errno));
}
}
+ return locked;
+}
+
+void rpmlockRelease(rpmlock lock)
+{
+ if (lock)
+ rpmlock_release(lock);
+}
+
+rpmlock rpmlockNewAcquire(const char *lock_path, const char *descr)
+{
+ rpmlock lock = rpmlockNew(lock_path, descr);
+ if (!rpmlockAcquire(lock))
+ lock = rpmlockFree(lock);
return lock;
}
rpmlock rpmlockFree(rpmlock lock)
{
- rpmlock_release(lock); /* Not really needed here. */
- rpmlock_free(lock);
+ if (lock) {
+ rpmlock_release(lock);
+ rpmlock_free(lock);
+ }
return NULL;
}
diff --git a/lib/rpmlock.h b/lib/rpmlock.h
index aa85451d6..308794fea 100644
--- a/lib/rpmlock.h
+++ b/lib/rpmlock.h
@@ -5,12 +5,27 @@
typedef struct rpmlock_s * rpmlock;
+enum {
+ RPMLOCK_READ = 1 << 0,
+ RPMLOCK_WRITE = 1 << 1,
+ RPMLOCK_WAIT = 1 << 2,
+};
+
#ifdef __cplusplus
extern "C" {
#endif
RPM_GNUC_INTERNAL
-rpmlock rpmlockAcquire(const char *lock_path, const char *descr);
+rpmlock rpmlockNew(const char *lock_path, const char *descr);
+
+RPM_GNUC_INTERNAL
+rpmlock rpmlockNewAcquire(const char *lock_path, const char *descr);
+
+RPM_GNUC_INTERNAL
+int rpmlockAcquire(rpmlock lock);
+
+RPM_GNUC_INTERNAL
+void rpmlockRelease(rpmlock lock);
RPM_GNUC_INTERNAL
rpmlock rpmlockFree(rpmlock lock);
diff --git a/lib/rpmplugin.h b/lib/rpmplugin.h
new file mode 100644
index 000000000..d3cdecee2
--- /dev/null
+++ b/lib/rpmplugin.h
@@ -0,0 +1,145 @@
+#ifndef _RPMPLUGIN_H
+#define _RPMPLUGIN_H
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmfi.h>
+
+/** \ingroup rpmplugin
+ * Rpm plugin API
+ */
+
+/* indicates if a directory is part of rpm package or created by rpm itself */
+typedef enum rpmPluginDirType_e {
+ DIR_TYPE_NONE = 0,
+ DIR_TYPE_NORMAL = 1 << 0,
+ DIR_TYPE_UNOWNED = 1 << 1
+} rpmPluginDirType;
+
+
+/* indicates the way the scriptlet is executed */
+typedef enum rpmScriptletExecutionFlow_e {
+ RPMSCRIPTLET_NONE = 0,
+ RPMSCRIPTLET_FORK = 1 << 0,
+ RPMSCRIPTLET_EXEC = 1 << 1
+} rpmScriptletExecutionFlow;
+
+
+/** \ingroup rpmfi
+ * File disposition flags during package install/erase transaction.
+ * XXX: Move these to rpmfi.h once things stabilize.
+ */
+enum rpmFileActionFlags_e {
+ /* bits 0-15 reserved for actions */
+ FAF_UNOWNED = (1 << 31)
+};
+typedef rpmFlags rpmFileActionFlags;
+
+/** \ingroup rpmfi
+ * File action and associated flags on install/erase
+ */
+typedef rpmFlags rpmFsmOp;
+
+#define XFA_MASK 0x0000ffff
+#define XFAF_MASK ~(XFA_MASK)
+#define XFO_ACTION(_a) ((_a) & XFA_MASK) /*!< File op action part */
+#define XFO_FLAGS(_a) ((_a) & XFAF_MASK) /*!< File op flags part */
+
+/* plugin hook typedefs */
+typedef rpmRC (*plugin_init_func)(rpmPlugin plugin, rpmts ts);
+typedef void (*plugin_cleanup_func)(rpmPlugin plugin);
+typedef rpmRC (*plugin_tsm_pre_func)(rpmPlugin plugin, rpmts ts);
+typedef rpmRC (*plugin_tsm_post_func)(rpmPlugin plugin, rpmts ts, int res);
+typedef rpmRC (*plugin_psm_pre_func)(rpmPlugin plugin, rpmte te);
+typedef rpmRC (*plugin_psm_post_func)(rpmPlugin plugin, rpmte te, int res);
+typedef rpmRC (*plugin_psm_verify_func)(rpmKeyring keyring, rpmtd sigtd, pgpDigParams sig, DIGEST_CTX ctx, int res);
+
+typedef rpmRC (*plugin_scriptlet_pre_func)(rpmPlugin plugin,
+ const char *s_name, int type);
+typedef rpmRC (*plugin_scriptlet_fork_post_func)(rpmPlugin plugin,
+ const char *path, int type);
+typedef rpmRC (*plugin_scriptlet_post_func)(rpmPlugin plugin,
+ const char *s_name, int type,
+ int res);
+typedef rpmRC (*plugin_fsm_file_pre_func)(rpmPlugin plugin, rpmfi fi,
+ const char* path, mode_t file_mode,
+ rpmFsmOp op);
+typedef rpmRC (*plugin_fsm_file_post_func)(rpmPlugin plugin, rpmfi fi,
+ const char* path, mode_t file_mode,
+ rpmFsmOp op, int res);
+typedef rpmRC (*plugin_fsm_file_prepare_func)(rpmPlugin plugin, rpmfi fi,
+ const char* path,
+ const char *dest,
+ mode_t file_mode, rpmFsmOp op);
+typedef rpmRC (*plugin_fsm_file_init_func)(const char* path, mode_t mode);
+typedef rpmRC (*plugin_fsm_file_commit_func)(const char* path, mode_t mode, int type);
+typedef rpmRC (*plugin_fsm_file_conflict_func)(rpmts ts, char* path, Header oldHeader, rpmfi oldFi, int rpmrc);
+
+typedef struct rpmPluginHooks_s * rpmPluginHooks;
+struct rpmPluginHooks_s {
+ /* plugin constructor and destructor hooks */
+ plugin_init_func init;
+ plugin_cleanup_func cleanup;
+ /* per transaction plugin hooks */
+ plugin_tsm_pre_func tsm_pre;
+ plugin_tsm_post_func tsm_post;
+ /* per transaction element hooks */
+ plugin_psm_pre_func psm_pre;
+ plugin_psm_post_func psm_post;
+ plugin_psm_verify_func psm_verify;
+ /* per scriptlet hooks */
+ plugin_scriptlet_pre_func scriptlet_pre;
+ plugin_scriptlet_fork_post_func scriptlet_fork_post;
+ plugin_scriptlet_post_func scriptlet_post;
+ /* per file hooks */
+ plugin_fsm_file_pre_func fsm_file_pre;
+ plugin_fsm_file_post_func fsm_file_post;
+ plugin_fsm_file_prepare_func fsm_file_prepare;
+ plugin_fsm_file_init_func fsm_file_init;
+ plugin_fsm_file_commit_func fsm_file_commit;
+ plugin_fsm_file_conflict_func fsm_file_conflict;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \ingroup rpmplugin
+ * Return plugin name
+ * @param plugin plugin handle
+ * @return plugin name string
+ */
+const char *rpmPluginName(rpmPlugin plugin);
+
+/** \ingroup rpmplugin
+ * Return plugin options
+ * @param plugin plugin handle
+ * @return plugin options string (or NULL if none)
+ */
+const char *rpmPluginOpts(rpmPlugin plugin);
+
+/** \ingroup rpmplugin
+ * Set plugin private data
+ * @param plugin plugin handle
+ * @param data pointer to plugin private data
+ */
+void rpmPluginSetData(rpmPlugin plugin, void *data);
+
+/** \ingroup rpmplugin
+ * Get plugin private data
+ * @param plugin plugin handle
+ * @return pointer to plugin private data
+ */
+void * rpmPluginGetData(rpmPlugin plugin);
+
+/** \ingroup rpmplugin
+ * Get plugin count
+ * @param plugins plugins handle
+ * @return count of plugins in the plugins handle
+ */
+int rpmPluginsGetCount(rpmPlugins plugin);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _RPMPLUGIN_H */
diff --git a/lib/rpmplugins.c b/lib/rpmplugins.c
index 2d4fb01cd..4892bb18a 100644
--- a/lib/rpmplugins.c
+++ b/lib/rpmplugins.c
@@ -12,34 +12,37 @@
#define STR1(x) #x
#define STR(x) STR1(x)
+static rpmRC rpmpluginsCallInit(rpmPlugin plugin, rpmts ts);
+
+struct rpmPlugin_s {
+ char *name;
+ char *opts;
+ void *handle;
+ void *priv;
+ rpmPluginHooks hooks;
+};
+
struct rpmPlugins_s {
- void **handles;
- ARGV_t names;
+ rpmPlugin *plugins;
int count;
rpmts ts;
};
-static int rpmpluginsGetPluginIndex(rpmPlugins plugins, const char *name)
+static rpmPlugin rpmpluginsGetPlugin(rpmPlugins plugins, const char *name)
{
int i;
for (i = 0; i < plugins->count; i++) {
- if (rstreq(plugins->names[i], name)) {
- return i;
+ rpmPlugin plugin = plugins->plugins[i];
+ if (rstreq(plugin->name, name)) {
+ return plugin;
}
}
- return -1;
-}
-
-static int rpmpluginsHookIsSupported(void *handle, rpmPluginHook hook)
-{
- rpmPluginHook *supportedHooks =
- (rpmPluginHook *) dlsym(handle, STR(PLUGIN_HOOKS));
- return (*supportedHooks & hook);
+ return NULL;
}
int rpmpluginsPluginAdded(rpmPlugins plugins, const char *name)
{
- return (rpmpluginsGetPluginIndex(plugins, name) >= 0);
+ return (rpmpluginsGetPlugin(plugins, name) != NULL);
}
rpmPlugins rpmpluginsNew(rpmts ts)
@@ -49,31 +52,100 @@ rpmPlugins rpmpluginsNew(rpmts ts)
return plugins;
}
-rpmRC rpmpluginsAdd(rpmPlugins plugins, const char *name, const char *path,
- const char *opts)
+static rpmPlugin rpmPluginNew(const char *name, const char *path,
+ const char *opts)
{
+ rpmPlugin plugin = NULL;
+ rpmPluginHooks hooks = NULL;
char *error;
+ char *hooks_name = NULL;
void *handle = dlopen(path, RTLD_LAZY);
if (!handle) {
rpmlog(RPMLOG_ERR, _("Failed to dlopen %s %s\n"), path, dlerror());
- return RPMRC_FAIL;
+ return NULL;
}
/* make sure the plugin has the supported hooks flag */
- (void) dlsym(handle, STR(PLUGIN_HOOKS));
+ hooks_name = rstrscat(NULL, name, "_hooks", NULL);
+ hooks = dlsym(handle, hooks_name);
if ((error = dlerror()) != NULL) {
rpmlog(RPMLOG_ERR, _("Failed to resolve symbol %s: %s\n"),
- STR(PLUGIN_HOOKS), error);
- return RPMRC_FAIL;
+ hooks_name, error);
+ } else {
+ plugin = xcalloc(1, sizeof(*plugin));
+ plugin->name = xstrdup(name);
+ plugin->handle = handle;
+ plugin->hooks = hooks;
+ if (opts)
+ plugin->opts = xstrdup(opts);
}
+ free(hooks_name);
- argvAdd(&plugins->names, name);
- plugins->handles = xrealloc(plugins->handles, (plugins->count + 1) * sizeof(*plugins->handles));
- plugins->handles[plugins->count] = handle;
- plugins->count++;
+ return plugin;
+}
- return rpmpluginsCallInit(plugins, name, opts);
+static rpmPlugin rpmPluginFree(rpmPlugin plugin)
+{
+ if (plugin) {
+ rpmPluginHooks hooks = plugin->hooks;
+ if (hooks->cleanup)
+ hooks->cleanup(plugin);
+ dlclose(plugin->handle);
+ free(plugin->name);
+ free(plugin->opts);
+ free(plugin);
+ }
+ return NULL;
+}
+
+const char *rpmPluginName(rpmPlugin plugin)
+{
+ return (plugin != NULL) ? plugin->name : NULL;
+}
+
+const char *rpmPluginOpts(rpmPlugin plugin)
+{
+ return (plugin != NULL) ? plugin->opts : NULL;
+}
+
+void * rpmPluginGetData(rpmPlugin plugin)
+{
+ return (plugin != NULL) ? plugin->priv : NULL;
+}
+
+int rpmPluginsGetCount(rpmPlugins plugins)
+{
+ return (plugins != NULL) ? plugins->count : 0;
+}
+
+void rpmPluginSetData(rpmPlugin plugin, void *data)
+{
+ if (plugin)
+ plugin->priv = data;
+}
+
+rpmRC rpmpluginsAdd(rpmPlugins plugins, const char *name, const char *path,
+ const char *opts)
+{
+ rpmRC rc;
+ rpmPlugin plugin = rpmPluginNew(name, path, opts);
+
+ if (plugin == NULL)
+ return RPMRC_FAIL;
+
+ rc = rpmpluginsCallInit(plugin, plugins->ts);
+
+ if (rc == RPMRC_OK) {
+ plugins->plugins = xrealloc(plugins->plugins,
+ (plugins->count + 1) * sizeof(*plugins->plugins));
+ plugins->plugins[plugins->count] = plugin;
+ plugins->count++;
+ } else {
+ rpmPluginFree(plugin);
+ }
+
+ return rc;
}
rpmRC rpmpluginsAddPlugin(rpmPlugins plugins, const char *type, const char *name)
@@ -83,9 +155,11 @@ rpmRC rpmpluginsAddPlugin(rpmPlugins plugins, const char *type, const char *name
rpmRC rc = RPMRC_FAIL;
path = rpmExpand("%{?__", type, "_", name, "}", NULL);
+ //rpmlog(RPMLOG_WARNING, "rpmpluginsAddPlugin, path:%s\n", path);
if (!path || rstreq(path, "")) {
- rpmlog(RPMLOG_ERR, _("Failed to expand %%__%s_%s macro\n"),
+ rpmlog(RPMLOG_DEBUG, _("Plugin %%__%s_%s not configured\n"),
type, name);
+ rc = RPMRC_NOTFOUND;
goto exit;
}
@@ -112,222 +186,245 @@ rpmRC rpmpluginsAddPlugin(rpmPlugins plugins, const char *type, const char *name
rpmPlugins rpmpluginsFree(rpmPlugins plugins)
{
- int i;
- for (i = 0; i < plugins->count; i++) {
- rpmpluginsCallCleanup(plugins, plugins->names[i]);
- dlclose(plugins->handles[i]);
+ if (plugins) {
+ for (int i = 0; i < plugins->count; i++) {
+ rpmPlugin plugin = plugins->plugins[i];
+ rpmPluginFree(plugin);
+ }
+ plugins->plugins = _free(plugins->plugins);
+ plugins->ts = NULL;
+ _free(plugins);
}
- plugins->handles = _free(plugins->handles);
- plugins->names = argvFree(plugins->names);
- plugins->ts = NULL;
- _free(plugins);
return NULL;
}
+#define RPMPLUGINS_GET_PLUGIN(name) \
+ plugin = rpmpluginsGetPlugin(plugins, name); \
+ if (plugin == NULL || plugin->handle == NULL) { \
+ rpmlog(RPMLOG_ERR, _("Plugin %s not loaded\n"), name); \
+ return RPMRC_FAIL; \
+ }
/* Common define for all rpmpluginsCall* hook functions */
#define RPMPLUGINS_SET_HOOK_FUNC(hook) \
- void *handle = NULL; \
- int index; \
- char * error; \
- index = rpmpluginsGetPluginIndex(plugins, name); \
- if (index < 0) { \
- rpmlog(RPMLOG_ERR, _("Plugin %s not loaded\n"), name); \
- return RPMRC_FAIL; \
- } \
- handle = plugins->handles[index]; \
- if (!handle) { \
- rpmlog(RPMLOG_ERR, _("Plugin %s not loaded\n"), name); \
- return RPMRC_FAIL; \
- } \
- if (!rpmpluginsHookIsSupported(handle, hook)) { \
- return RPMRC_OK; \
- } \
- *(void **)(&hookFunc) = dlsym(handle, STR(hook##_FUNC)); \
- if ((error = dlerror()) != NULL) { \
- rpmlog(RPMLOG_ERR, _("Failed to resolve %s plugin symbol %s: %s\n"), name, STR(hook##_FUNC), error); \
- return RPMRC_FAIL; \
- } \
- if (rpmtsFlags(plugins->ts) & (RPMTRANS_FLAG_TEST | RPMTRANS_FLAG_JUSTDB)) { \
- return RPMRC_OK; \
- } \
- rpmlog(RPMLOG_DEBUG, "Plugin: calling hook %s in %s plugin\n", STR(hook##_FUNC), name);
+ rpmPluginHooks hooks = (plugin != NULL) ? plugin->hooks : NULL; \
+ hookFunc = (hooks != NULL) ? hooks->hook : NULL; \
+ if (hookFunc) { \
+ rpmlog(RPMLOG_DEBUG, "Plugin: calling hook %s in %s plugin\n", \
+ STR(hook), plugin->name); \
+ }
-rpmRC rpmpluginsCallInit(rpmPlugins plugins, const char *name, const char *opts)
+static rpmRC rpmpluginsCallInit(rpmPlugin plugin, rpmts ts)
{
- rpmRC (*hookFunc)(rpmts, const char *, const char *);
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_INIT);
- return hookFunc(plugins->ts, name, opts);
+ rpmRC rc = RPMRC_OK;
+ plugin_init_func hookFunc;
+ RPMPLUGINS_SET_HOOK_FUNC(init);
+ if (hookFunc) {
+ rc = hookFunc(plugin, ts);
+ if (rc != RPMRC_OK && rc != RPMRC_NOTFOUND)
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook init failed\n", plugin->name);
+ }
+ return rc;
}
-rpmRC rpmpluginsCallCleanup(rpmPlugins plugins, const char *name)
+rpmRC rpmpluginsCallTsmPre(rpmPlugins plugins, rpmts ts)
{
- rpmRC (*hookFunc)(void);
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_CLEANUP);
- return hookFunc();
-}
+ plugin_tsm_pre_func hookFunc;
+ int i;
+ rpmRC rc = RPMRC_OK;
-rpmRC rpmpluginsCallOpenTE(rpmPlugins plugins, const char *name, rpmte te)
-{
- rpmRC (*hookFunc)(rpmte);
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_OPENTE);
- return hookFunc(te);
-}
+ for (i = 0; i < plugins->count; i++) {
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(tsm_pre);
+ if (hookFunc && hookFunc(plugin, ts) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook tsm_pre failed\n", plugin->name);
+ rc = RPMRC_FAIL;
+ }
+ }
-rpmRC rpmpluginsCallCollectionPostAdd(rpmPlugins plugins, const char *name)
-{
- rpmRC (*hookFunc)(void);
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_COLL_POST_ADD);
- return hookFunc();
+ return rc;
}
-rpmRC rpmpluginsCallCollectionPostAny(rpmPlugins plugins, const char *name)
+rpmRC rpmpluginsCallTsmPost(rpmPlugins plugins, rpmts ts, int res)
{
- rpmRC (*hookFunc)(void);
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_COLL_POST_ANY);
- return hookFunc();
+ plugin_tsm_post_func hookFunc;
+ int i;
+ rpmRC rc = RPMRC_OK;
+
+ for (i = 0; i < plugins->count; i++) {
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(tsm_post);
+ if (hookFunc && hookFunc(plugin, ts, res) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_WARNING, "Plugin %s: hook tsm_post failed\n", plugin->name);
+ }
+ }
+
+ return rc;
}
-rpmRC rpmpluginsCallCollectionPreRemove(rpmPlugins plugins, const char *name)
+rpmRC rpmpluginsCallPsmPre(rpmPlugins plugins, rpmte te)
{
- rpmRC (*hookFunc)(void);
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_COLL_PRE_REMOVE);
- return hookFunc();
+ plugin_psm_pre_func hookFunc;
+ int i;
+ rpmRC rc = RPMRC_OK;
+
+ for (i = 0; i < plugins->count; i++) {
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(psm_pre);
+ if (hookFunc && hookFunc(plugin, te) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook psm_pre failed\n", plugin->name);
+ rc = RPMRC_FAIL;
+ }
+ }
+
+ return rc;
}
-rpmRC rpmpluginsCallTsmPre(rpmPlugins plugins, rpmts ts)
+rpmRC rpmpluginsCallPsmPost(rpmPlugins plugins, rpmte te, int res)
{
- rpmRC (*hookFunc)(rpmts);
+ plugin_psm_post_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_TSM_PRE);
- if (hookFunc(ts) == RPMRC_FAIL)
- rc = RPMRC_FAIL;
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(psm_post);
+ if (hookFunc && hookFunc(plugin, te, res) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_WARNING, "Plugin %s: hook psm_post failed\n", plugin->name);
+ }
}
return rc;
}
-rpmRC rpmpluginsCallTsmPost(rpmPlugins plugins, rpmts ts, int res)
+rpmRC rpmpluginsCallScriptletPre(rpmPlugins plugins, const char *s_name, int type)
{
- rpmRC (*hookFunc)(rpmts, int);
+ plugin_scriptlet_pre_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_TSM_POST);
- if (hookFunc(ts, res) == RPMRC_FAIL)
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(scriptlet_pre);
+ if (hookFunc && hookFunc(plugin, s_name, type) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook scriplet_pre failed\n", plugin->name);
rc = RPMRC_FAIL;
+ }
}
return rc;
}
-rpmRC rpmpluginsCallPsmPre(rpmPlugins plugins, rpmte te)
+rpmRC rpmpluginsCallScriptletForkPost(rpmPlugins plugins, const char *path, int type)
{
- rpmRC (*hookFunc)(rpmte);
+ plugin_scriptlet_fork_post_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_PSM_PRE);
- if (hookFunc(te) == RPMRC_FAIL)
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(scriptlet_fork_post);
+ if (hookFunc && hookFunc(plugin, path, type) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook scriplet_fork_post failed\n", plugin->name);
rc = RPMRC_FAIL;
+ }
}
return rc;
}
-rpmRC rpmpluginsCallPsmPost(rpmPlugins plugins, rpmte te, int res)
+rpmRC rpmpluginsCallScriptletPost(rpmPlugins plugins, const char *s_name, int type, int res)
{
- rpmRC (*hookFunc)(rpmte, int);
+ plugin_scriptlet_post_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_PSM_POST);
- if (hookFunc(te, res) == RPMRC_FAIL)
- rc = RPMRC_FAIL;
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(scriptlet_post);
+ if (hookFunc && hookFunc(plugin, s_name, type, res) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_WARNING, "Plugin %s: hook scriplet_post failed\n", plugin->name);
+ }
}
return rc;
}
-rpmRC rpmpluginsCallScriptletPre(rpmPlugins plugins, const char *s_name, int type)
+rpmRC rpmpluginsCallFsmFilePre(rpmPlugins plugins, rpmfi fi, const char *path,
+ mode_t file_mode, rpmFsmOp op)
{
- rpmRC (*hookFunc)(const char*, int);
+ plugin_fsm_file_pre_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_SCRIPTLET_PRE);
- if (hookFunc(s_name, type) == RPMRC_FAIL)
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(fsm_file_pre);
+ if (hookFunc && hookFunc(plugin, fi, path, file_mode, op) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook fsm_file_pre failed\n", plugin->name);
rc = RPMRC_FAIL;
+ }
}
return rc;
}
-rpmRC rpmpluginsCallScriptletForkPost(rpmPlugins plugins, const char *path, int type)
+rpmRC rpmpluginsCallFsmFilePost(rpmPlugins plugins, rpmfi fi, const char *path,
+ mode_t file_mode, rpmFsmOp op, int res)
{
- rpmRC (*hookFunc)(const char*, int);
+ plugin_fsm_file_post_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_SCRIPTLET_FORK_POST);
- if (hookFunc(path, type) == RPMRC_FAIL)
- rc = RPMRC_FAIL;
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(fsm_file_post);
+ if (hookFunc && hookFunc(plugin, fi, path, file_mode, op, res) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_WARNING, "Plugin %s: hook fsm_file_post failed\n", plugin->name);
+ }
}
return rc;
}
-rpmRC rpmpluginsCallScriptletPost(rpmPlugins plugins, const char *s_name, int type, int res)
+rpmRC rpmpluginsCallFsmFilePrepare(rpmPlugins plugins, rpmfi fi,
+ const char *path, const char *dest,
+ mode_t file_mode, rpmFsmOp op)
{
- rpmRC (*hookFunc)(const char*, int, int);
+ plugin_fsm_file_prepare_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_SCRIPTLET_POST);
- if (hookFunc(s_name, type, res) == RPMRC_FAIL)
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(fsm_file_prepare);
+ if (hookFunc && hookFunc(plugin, fi, path, dest, file_mode, op) == RPMRC_FAIL) {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook fsm_file_prepare failed\n", plugin->name);
rc = RPMRC_FAIL;
+ }
}
return rc;
}
-rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, rpmtd sigtd,
+rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, int sigTagId,
pgpDigParams sig, DIGEST_CTX ctx, int res)
{
- rpmRC (*hookFunc)(rpmKeyring, rpmtd, pgpDigParams, DIGEST_CTX, int);
+ plugin_psm_verify_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
+
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_VERIFY);
- if (hookFunc(keyring, sigtd, sig, ctx, res) == RPMRC_FAIL)
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(psm_verify);
+
+ if (hookFunc && hookFunc(keyring, sigTagId, sig, ctx, res) == RPMRC_FAIL)
+ {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook psm_verify failed\n", plugin->name);
rc = RPMRC_FAIL;
+ }
}
return rc;
@@ -336,16 +433,21 @@ rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, rpmtd sigtd,
rpmRC rpmpluginsCallFsmInit(rpmPlugins plugins, const char* path,
mode_t mode)
{
- rpmRC (*hookFunc)(const char*, mode_t);
+ plugin_fsm_file_init_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
+
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_FSM_INIT);
- if (hookFunc(path, mode) == RPMRC_FAIL)
- rc = RPMRC_FAIL;
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(fsm_file_init);
+
+ if (hookFunc && hookFunc(path, mode) == RPMRC_FAIL)
+ {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook fsm_file_init failed\n", plugin->name);
+ rc = RPMRC_FAIL;
+
+ }
}
return rc;
@@ -354,16 +456,19 @@ rpmRC rpmpluginsCallFsmInit(rpmPlugins plugins, const char* path,
rpmRC rpmpluginsCallFsmCommit(rpmPlugins plugins, const char* path,
mode_t mode, int type)
{
- rpmRC (*hookFunc)(const char*, mode_t, int);
+ plugin_fsm_file_commit_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_FSM_COMMIT);
- if (hookFunc(path, mode, type) == RPMRC_FAIL)
- rc = RPMRC_FAIL;
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(fsm_file_commit);
+
+ if (hookFunc && hookFunc(path, mode, type) == RPMRC_FAIL)
+ {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook fsm_file_commit failed\n", plugin->name);
+ rc = RPMRC_FAIL;
+ }
}
return rc;
@@ -372,17 +477,22 @@ rpmRC rpmpluginsCallFsmCommit(rpmPlugins plugins, const char* path,
rpmRC rpmpluginsCallFileConflict(rpmPlugins plugins, rpmts ts, char* path,
Header oldHeader, rpmfi oldFi, int res)
{
- rpmRC (*hookFunc)(rpmts, char*, Header, rpmfi, int);
+ plugin_fsm_file_conflict_func hookFunc;
int i;
rpmRC rc = RPMRC_OK;
- const char *name = NULL;
for (i = 0; i < plugins->count; i++) {
- name = plugins->names[i];
- RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_FILE_CONFLICT);
- if (hookFunc(ts, path, oldHeader, oldFi, res) == RPMRC_FAIL)
- rc = RPMRC_FAIL;
+ rpmPlugin plugin = plugins->plugins[i];
+ RPMPLUGINS_SET_HOOK_FUNC(psm_verify);
+
+ if (hookFunc && hookFunc(ts, path, oldHeader, oldFi, res) == RPMRC_FAIL)
+ {
+ rpmlog(RPMLOG_ERR, "Plugin %s: hook psm_verify failed\n", plugin->name);
+ rc = RPMRC_FAIL;
+ }
}
return rc;
}
+
+
diff --git a/lib/rpmplugins.h b/lib/rpmplugins.h
index 8e35d81ab..0ef6e3eb4 100644
--- a/lib/rpmplugins.h
+++ b/lib/rpmplugins.h
@@ -2,79 +2,19 @@
#define _PLUGINS_H
#include <rpm/rpmtypes.h>
+#include <rpm/rpmfi.h>
+#include "lib/rpmplugin.h"
#ifdef __cplusplus
extern "C" {
#endif
-#define PLUGIN_HOOKS plugin_hooks
-
-#define PLUGINHOOK_INIT_FUNC pluginhook_init
-#define PLUGINHOOK_CLEANUP_FUNC pluginhook_cleanup
-
-#define PLUGINHOOK_OPENTE_FUNC pluginhook_opente
-#define PLUGINHOOK_COLL_POST_ADD_FUNC pluginhook_coll_post_add
-#define PLUGINHOOK_COLL_POST_ANY_FUNC pluginhook_coll_post_any
-#define PLUGINHOOK_COLL_PRE_REMOVE_FUNC pluginhook_coll_pre_remove
-
-#define PLUGINHOOK_TSM_PRE_FUNC pluginhook_tsm_pre
-#define PLUGINHOOK_TSM_POST_FUNC pluginhook_tsm_post
-
-#define PLUGINHOOK_PSM_PRE_FUNC pluginhook_psm_pre
-#define PLUGINHOOK_PSM_POST_FUNC pluginhook_psm_post
-#define PLUGINHOOK_VERIFY_FUNC pluginhook_verify
-
-#define PLUGINHOOK_SCRIPTLET_PRE_FUNC pluginhook_scriptlet_pre
-#define PLUGINHOOK_SCRIPTLET_FORK_POST_FUNC pluginhook_scriptlet_fork_post
-#define PLUGINHOOK_SCRIPTLET_POST_FUNC pluginhook_scriptlet_post
-
-#define PLUGINHOOK_FSM_INIT_FUNC pluginhook_fsm_init
-#define PLUGINHOOK_FSM_COMMIT_FUNC pluginhook_fsm_commit
-#define PLUGINHOOK_FILE_CONFLICT pluginhook_file_conflict
-
-enum rpmPluginHook_e {
- PLUGINHOOK_NONE = 0,
- PLUGINHOOK_INIT = 1 << 0,
- PLUGINHOOK_CLEANUP = 1 << 1,
- PLUGINHOOK_OPENTE = 1 << 2,
- PLUGINHOOK_COLL_POST_ADD = 1 << 3,
- PLUGINHOOK_COLL_POST_ANY = 1 << 4,
- PLUGINHOOK_COLL_PRE_REMOVE = 1 << 5,
- PLUGINHOOK_TSM_PRE = 1 << 6,
- PLUGINHOOK_TSM_POST = 1 << 7,
- PLUGINHOOK_PSM_PRE = 1 << 8,
- PLUGINHOOK_PSM_POST = 1 << 9,
- PLUGINHOOK_SCRIPTLET_PRE = 1 << 10,
- PLUGINHOOK_SCRIPTLET_FORK_POST = 1 << 11,
- PLUGINHOOK_SCRIPTLET_POST = 1 << 12,
- PLUGINHOOK_VERIFY = 1 << 13,
- PLUGINHOOK_FSM_INIT = 1 << 14,
- PLUGINHOOK_FSM_COMMIT = 1 << 15,
- PLUGINHOOK_FILE_CONFLICT = 1 << 16
-
-};
-
-/* indicates if a directory is part of rpm package or created by rpm itself */
-typedef enum rpmPluginDirType_e {
- DIR_TYPE_NONE = 0,
- DIR_TYPE_NORMAL = 1 << 0,
- DIR_TYPE_UNOWNED = 1 << 1
-} rpmPluginDirType;
-
-/* indicates the way the scriptlet is executed */
-typedef enum rpmScriptletExecutionFlow_e {
- RPMSCRIPTLET_NONE = 0,
- RPMSCRIPTLET_FORK = 1 << 0,
- RPMSCRIPTLET_EXEC = 1 << 1
-} rpmScriptletExecutionFlow;
-
-typedef rpmFlags rpmPluginHook;
-
/** \ingroup rpmplugins
* Create a new plugins structure
* @param ts transaction set
* @return new plugin structure
*/
+RPM_GNUC_INTERNAL
rpmPlugins rpmpluginsNew(rpmts ts);
/** \ingroup rpmplugins
@@ -82,6 +22,7 @@ rpmPlugins rpmpluginsNew(rpmts ts);
* @param plugins plugins structure to destroy
* @return NULL always
*/
+RPM_GNUC_INTERNAL
rpmPlugins rpmpluginsFree(rpmPlugins plugins);
/** \ingroup rpmplugins
@@ -92,15 +33,17 @@ rpmPlugins rpmpluginsFree(rpmPlugins plugins);
* @param opts options to pass to the plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsAdd(rpmPlugins plugins, const char *name, const char *path, const char *opts);
/** \ingroup rpmplugins
* Add and open a rpm plugin
- * @param plugins plugins structure to add a collection plugin to
+ * @param plugins plugins structure to add a plugin to
* @param type type of plugin
* @param name name of plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsAddPlugin(rpmPlugins plugins, const char *type, const char *name);
/** \ingroup rpmplugins
@@ -109,65 +52,16 @@ rpmRC rpmpluginsAddPlugin(rpmPlugins plugins, const char *type, const char *name
* @param name name of plugin to check
* @return 1 if plugin name has already been added, 0 otherwise
*/
+RPM_GNUC_INTERNAL
int rpmpluginsPluginAdded(rpmPlugins plugins, const char *name);
-
-/** \ingroup rpmplugins
- * Call the init plugin hook
- * @param plugins plugins structure
- * @param name name of plugin
- * @param opts plugin options
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmpluginsCallInit(rpmPlugins plugins, const char *name, const char *opts);
-
-/** \ingroup rpmplugins
- * Call the cleanup plugin hook
- * @param plugins plugins structure
- * @param name name of plugin
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmpluginsCallCleanup(rpmPlugins plugins, const char *name);
-
-/** \ingroup rpmplugins
- * Call the open te plugin hook
- * @param plugins plugins structure
- * @param name name of plugin
- * @param te transaction element opened
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmpluginsCallOpenTE(rpmPlugins plugins, const char *name, rpmte te);
-
-/** \ingroup rpmplugins
- * Call the collection post add plugin hook
- * @param plugins plugins structure
- * @param name name of plugin
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmpluginsCallCollectionPostAdd(rpmPlugins plugins, const char *name);
-
-/** \ingroup rpmplugins
- * Call the collection post any plugin hook
- * @param plugins plugins structure
- * @param name name of plugin
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmpluginsCallCollectionPostAny(rpmPlugins plugins, const char *name);
-
-/** \ingroup rpmplugins
- * Call the collection pre remove plugin hook
- * @param plugins plugins structure
- * @param name name of plugin
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmpluginsCallCollectionPreRemove(rpmPlugins plugins, const char *name);
-
/** \ingroup rpmplugins
* Call the pre transaction plugin hook
* @param plugins plugins structure
* @param ts processed transaction
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallTsmPre(rpmPlugins plugins, rpmts ts);
/** \ingroup rpmplugins
@@ -177,6 +71,7 @@ rpmRC rpmpluginsCallTsmPre(rpmPlugins plugins, rpmts ts);
* @param res transaction result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallTsmPost(rpmPlugins plugins, rpmts ts, int res);
/** \ingroup rpmplugins
@@ -185,6 +80,7 @@ rpmRC rpmpluginsCallTsmPost(rpmPlugins plugins, rpmts ts, int res);
* @param te processed transaction element
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallPsmPre(rpmPlugins plugins, rpmte te);
/** \ingroup rpmplugins
@@ -194,6 +90,7 @@ rpmRC rpmpluginsCallPsmPre(rpmPlugins plugins, rpmte te);
* @param res transaction element result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallPsmPost(rpmPlugins plugins, rpmte te, int res);
/** \ingroup rpmplugins
@@ -203,6 +100,7 @@ rpmRC rpmpluginsCallPsmPost(rpmPlugins plugins, rpmte te, int res);
* @param type indicates the scriptlet execution flow, see rpmScriptletExecutionFlow
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallScriptletPre(rpmPlugins plugins, const char *s_name, int type);
/** \ingroup rpmplugins
@@ -212,6 +110,7 @@ rpmRC rpmpluginsCallScriptletPre(rpmPlugins plugins, const char *s_name, int typ
* @param type indicates the scriptlet execution flow, see rpmScriptletExecutionFlow
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallScriptletForkPost(rpmPlugins plugins, const char *path, int type);
/** \ingroup rpmplugins
@@ -222,9 +121,52 @@ rpmRC rpmpluginsCallScriptletForkPost(rpmPlugins plugins, const char *path, int
* @param res scriptlet execution result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallScriptletPost(rpmPlugins plugins, const char *s_name, int type, int res);
/** \ingroup rpmplugins
+ * Call the fsm file pre plugin hook
+ * @param plugins plugins structure
+ * @param fi file info iterator (or NULL)
+ * @param path file object path
+ * @param file_mode file object mode
+ * @param op file operation + associated flags
+ * @return RPMRC_OK on success, RPMRC_FAIL otherwise
+ */
+RPM_GNUC_INTERNAL
+rpmRC rpmpluginsCallFsmFilePre(rpmPlugins plugins, rpmfi fi, const char* path,
+ mode_t file_mode, rpmFsmOp op);
+
+/** \ingroup rpmplugins
+ * Call the fsm file post plugin hook
+ * @param plugins plugins structure
+ * @param fi file info iterator (or NULL)
+ * @param path file object path
+ * @param file_mode file object mode
+ * @param op file operation + associated flags
+ * @param res fsm result code
+ * @return RPMRC_OK on success, RPMRC_FAIL otherwise
+ */
+RPM_GNUC_INTERNAL
+rpmRC rpmpluginsCallFsmFilePost(rpmPlugins plugins, rpmfi fi, const char* path,
+ mode_t file_mode, rpmFsmOp op, int res);
+
+/** \ingroup rpmplugins
+ * Call the fsm file prepare plugin hook. Called after setting
+ * permissions etc, but before committing file to destination path.
+ * @param plugins plugins structure
+ * @param fi file info iterator (or NULL)
+ * @param path file object current path
+ * @param dest file object destination path
+ * @param mode file object mode
+ * @param op file operation + associated flags
+ * @return RPMRC_OK on success, RPMRC_FAIL otherwise
+ */
+RPM_GNUC_INTERNAL
+rpmRC rpmpluginsCallFsmFilePrepare(rpmPlugins plugins, rpmfi fi,
+ const char *path, const char *dest,
+ mode_t mode, rpmFsmOp op);
+/** \ingroup rpmplugins
* Call the verify hook
* @param plugins plugins structure
* @param keyring RPM keyring
@@ -233,7 +175,8 @@ rpmRC rpmpluginsCallScriptletPost(rpmPlugins plugins, const char *s_name, int ty
* @param res scriptlet execution result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
-rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, rpmtd sigtd,
+RPM_GNUC_INTERNAL
+rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, int sigTagId,
pgpDigParams sig, DIGEST_CTX ctx, int res);
/** \ingroup rpmplugins
@@ -243,8 +186,9 @@ rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, rpmtd sigtd,
* @param mode file mode
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallFsmInit(rpmPlugins plugins, const char* path, mode_t mode);
-
+
/** \ingroup rpmplugins
* Call the fsm commit hook
* @param plugins plugins structure
@@ -253,6 +197,7 @@ rpmRC rpmpluginsCallFsmInit(rpmPlugins plugins, const char* path, mode_t mode);
* @param type file type
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallFsmCommit(rpmPlugins plugins, const char* path, mode_t mode, int type);
/** \ingroup rpmplugins
@@ -265,8 +210,10 @@ rpmRC rpmpluginsCallFsmCommit(rpmPlugins plugins, const char* path, mode_t mode,
* @param res return code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
+RPM_GNUC_INTERNAL
rpmRC rpmpluginsCallFileConflict(rpmPlugins plugins, rpmts ts, char* path, Header oldHeader, rpmfi oldFi, int res);
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmprob.h b/lib/rpmprob.h
index 2b89f15ef..ac57885c6 100644
--- a/lib/rpmprob.h
+++ b/lib/rpmprob.h
@@ -43,7 +43,7 @@ typedef enum rpmProblemType_e {
RPMPROB_BADRELOCATE,/*!< path ... is not relocatable for package ... */
RPMPROB_REQUIRES, /*!< package ... has unsatisfied Requires: ... */
RPMPROB_CONFLICT, /*!< package ... has unsatisfied Conflicts: ... */
- RPMPROB_NEW_FILE_CONFLICT, /*!< file ... conflicts between attemped installs of ... */
+ RPMPROB_NEW_FILE_CONFLICT, /*!< file ... conflicts between attempted installs of ... */
RPMPROB_FILE_CONFLICT,/*!< file ... from install of ... conflicts with file from package ... */
RPMPROB_OLDPACKAGE, /*!< package ... (which is newer than ...) is already installed */
RPMPROB_DISKSPACE, /*!< installing package ... needs ... on the ... filesystem */
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
index 7638e8114..cada3f788 100644
--- a/lib/rpmrc.c
+++ b/lib/rpmrc.c
@@ -1,6 +1,7 @@
#include "system.h"
#include <stdarg.h>
+#include <pthread.h>
#if defined(__linux__)
#include <elf.h>
@@ -11,7 +12,6 @@
#if HAVE_SYS_UTSNAME_H
#include <sys/utsname.h>
#endif
-#include <netdb.h>
#include <ctype.h> /* XXX for /etc/rpm/platform contents */
#if HAVE_SYS_SYSTEMCFG_H
@@ -20,32 +20,32 @@
#define __power_pc() 0
#endif
+#ifdef HAVE_SYS_AUXV_H
+#include <sys/auxv.h>
+#endif
+
#include <rpm/rpmlib.h> /* RPM_MACTABLE*, Rc-prototypes */
#include <rpm/rpmmacro.h>
#include <rpm/rpmfileutil.h>
#include <rpm/rpmstring.h>
#include <rpm/rpmlog.h>
+#include <rpm/argv.h>
#include "rpmio/rpmlua.h"
#include "rpmio/rpmio_internal.h" /* XXX for rpmioSlurp */
#include "lib/misc.h"
#include "lib/rpmliblua.h"
+#include "lib/rpmug.h"
#include "debug.h"
static const char * defrcfiles = NULL;
const char * macrofiles = NULL;
-static const char * const platform = SYSCONFDIR "/rpm/platform";
-static char ** platpat = NULL;
-static int nplatpat = 0;
-
-typedef char * cptr_t;
-
typedef struct machCacheEntry_s {
char * name;
int count;
- cptr_t * equivs;
+ char ** equivs;
int visited;
} * machCacheEntry;
@@ -111,13 +111,6 @@ typedef struct tableType_s {
int canonsLength;
} * tableType;
-static struct tableType_s tables[RPM_MACHTABLE_COUNT] = {
- { "arch", 1, 0 },
- { "os", 1, 0 },
- { "buildarch", 0, 1 },
- { "buildos", 0, 1 }
-};
-
/* XXX get rid of this stuff... */
/* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
#define RPMVAR_OPTFLAGS 3
@@ -142,23 +135,58 @@ static const size_t optionTableSize = sizeof(optionTable) / sizeof(*optionTable)
#define OS 0
#define ARCH 1
-static cptr_t current[2];
+typedef struct rpmrcCtx_s * rpmrcCtx;
+struct rpmrcCtx_s {
+ ARGV_t platpat;
+ char *current[2];
+ int currTables[2];
+ struct rpmvarValue values[RPMVAR_NUM];
+ struct tableType_s tables[RPM_MACHTABLE_COUNT];
+ int machDefaults;
+ int pathDefaults;
+ pthread_rwlock_t lock;
+};
-static int currTables[2] = { RPM_MACHTABLE_INSTOS, RPM_MACHTABLE_INSTARCH };
+/* prototypes */
+static rpmRC doReadRC(rpmrcCtx ctx, const char * urlfn);
-static struct rpmvarValue values[RPMVAR_NUM];
+static void rpmSetVarArch(rpmrcCtx ctx,
+ int var, const char * val, const char * arch);
-static int defaultsInitialized = 0;
+static void rebuildCompatTables(rpmrcCtx ctx, int type, const char * name);
-/* prototypes */
-static rpmRC doReadRC(const char * urlfn);
+static void rpmRebuildTargetVars(rpmrcCtx ctx, const char **target, const char ** canontarget);
-static void rpmSetVarArch(int var, const char * val,
- const char * arch);
+/* Force context (lock) acquisition through a function */
+static rpmrcCtx rpmrcCtxAcquire(int write)
+{
+ static struct rpmrcCtx_s _globalCtx = {
+ .lock = PTHREAD_RWLOCK_INITIALIZER,
+ .currTables = { RPM_MACHTABLE_INSTOS, RPM_MACHTABLE_INSTARCH },
+ .tables = {
+ { "arch", 1, 0 },
+ { "os", 1, 0 },
+ { "buildarch", 0, 1 },
+ { "buildos", 0, 1 }
+ },
+ };
+ rpmrcCtx ctx = &_globalCtx;
+
+ /* XXX: errors should be handled */
+ if (write)
+ pthread_rwlock_wrlock(&ctx->lock);
+ else
+ pthread_rwlock_rdlock(&ctx->lock);
-static void rebuildCompatTables(int type, const char * name);
+ return ctx;
+}
-static void rpmRebuildTargetVars(const char **target, const char ** canontarget);
+/* Release context (lock) */
+static rpmrcCtx rpmrcCtxRelease(rpmrcCtx ctx)
+{
+ pthread_rwlock_unlock(&ctx->lock);
+ return NULL;
+}
static int optionCompare(const void * a, const void * b)
{
@@ -452,7 +480,7 @@ static void setDefaults(void)
}
/* FIX: se usage inconsistent, W2DO? */
-static rpmRC doReadRC(const char * urlfn)
+static rpmRC doReadRC(rpmrcCtx ctx, const char * urlfn)
{
char *s;
char *se, *next, *buf = NULL, *fn;
@@ -519,7 +547,7 @@ static rpmRC doReadRC(const char * urlfn)
while (*se && !risspace(*se)) se++;
if (*se != '\0') *se = '\0';
- if (doReadRC(s)) {
+ if (doReadRC(ctx, s)) {
rpmlog(RPMLOG_ERR, _("cannot open %s at %s:%d: %m\n"),
s, fn, linenum);
goto exit;
@@ -551,48 +579,49 @@ static rpmRC doReadRC(const char * urlfn)
/* Only add macros if appropriate for this arch */
if (option->macroize &&
- (arch == NULL || rstreq(arch, current[ARCH]))) {
+ (arch == NULL || rstreq(arch, ctx->current[ARCH]))) {
char *n, *name;
n = name = xmalloc(strlen(option->name)+2);
if (option->localize)
*n++ = '_';
strcpy(n, option->name);
- addMacro(NULL, name, NULL, val, RMIL_RPMRC);
+ rpmPushMacro(NULL, name, NULL, val, RMIL_RPMRC);
free(name);
}
- rpmSetVarArch(option->var, val, arch);
+ rpmSetVarArch(ctx, option->var, val, arch);
fn = _free(fn);
- } else { /* For arch/os compatibilty tables ... */
+ } else { /* For arch/os compatibility tables ... */
int gotit;
int i;
gotit = 0;
for (i = 0; i < RPM_MACHTABLE_COUNT; i++) {
- if (rstreqn(tables[i].key, s, strlen(tables[i].key)))
+ if (rstreqn(ctx->tables[i].key, s, strlen(ctx->tables[i].key)))
break;
}
if (i < RPM_MACHTABLE_COUNT) {
- const char *rest = s + strlen(tables[i].key);
+ const char *rest = s + strlen(ctx->tables[i].key);
if (*rest == '_') rest++;
if (rstreq(rest, "compat")) {
if (machCompatCacheAdd(se, fn, linenum,
- &tables[i].cache))
+ &ctx->tables[i].cache))
goto exit;
gotit = 1;
- } else if (tables[i].hasTranslate &&
+ } else if (ctx->tables[i].hasTranslate &&
rstreq(rest, "translate")) {
- if (addDefault(&tables[i].defaults,
- &tables[i].defaultsLength,
+ if (addDefault(&ctx->tables[i].defaults,
+ &ctx->tables[i].defaultsLength,
se, fn, linenum))
goto exit;
gotit = 1;
- } else if (tables[i].hasCanon &&
+ } else if (ctx->tables[i].hasCanon &&
rstreq(rest, "canon")) {
- if (addCanon(&tables[i].canons, &tables[i].canonsLength,
+ if (addCanon(&ctx->tables[i].canons,
+ &ctx->tables[i].canonsLength,
se, fn, linenum))
goto exit;
gotit = 1;
@@ -618,7 +647,7 @@ exit:
/**
*/
-static rpmRC rpmPlatform(const char * platform)
+static rpmRC rpmPlatform(rpmrcCtx ctx, const char * platform)
{
const char *cpu = NULL, *vendor = NULL, *os = NULL, *gnu = NULL;
uint8_t * b = NULL;
@@ -651,10 +680,7 @@ static rpmRC rpmPlatform(const char * platform)
while (--t > p && isspace(*t))
*t = '\0';
if (t > p) {
- platpat = xrealloc(platpat, (nplatpat + 2) * sizeof(*platpat));
- platpat[nplatpat] = xstrdup(p);
- nplatpat++;
- platpat[nplatpat] = NULL;
+ argvAdd(&ctx->platpat, p);
}
continue;
}
@@ -690,14 +716,14 @@ static rpmRC rpmPlatform(const char * platform)
if (*p != '\0') *p = '\0';
}
- addMacro(NULL, "_host_cpu", NULL, cpu, -1);
- addMacro(NULL, "_host_vendor", NULL, vendor, -1);
- addMacro(NULL, "_host_os", NULL, os, -1);
+ rpmPushMacro(NULL, "_host_cpu", NULL, cpu, -1);
+ rpmPushMacro(NULL, "_host_vendor", NULL, vendor, -1);
+ rpmPushMacro(NULL, "_host_os", NULL, os, -1);
- platpat = xrealloc(platpat, (nplatpat + 2) * sizeof(*platpat));
- platpat[nplatpat] = rpmExpand("%{_host_cpu}-%{_host_vendor}-%{_host_os}", (gnu && *gnu ? "-" : NULL), gnu, NULL);
- nplatpat++;
- platpat[nplatpat] = NULL;
+ char *plat = rpmExpand("%{_host_cpu}-%{_host_vendor}-%{_host_os}",
+ (gnu && *gnu ? "-" : NULL), gnu, NULL);
+ argvAdd(&ctx->platpat, plat);
+ free(plat);
init_platform++;
}
@@ -789,8 +815,21 @@ static inline int RPMClass(void)
cpu = (tfms>>8)&15;
+ if (cpu == 5
+ && cpuid_ecx(0) == '68xM'
+ && cpuid_edx(0) == 'Teni'
+ && (cpuid_edx(1) & ((1<<8)|(1<<15))) == ((1<<8)|(1<<15))) {
+ sigaction(SIGILL, &oldsa, NULL);
+ return 6; /* has CX8 and CMOV */
+ }
+
sigaction(SIGILL, &oldsa, NULL);
+#define USER686 ((1<<4) | (1<<8) | (1<<15))
+ /* Transmeta Crusoe CPUs say that their CPU family is "5" but they have enough features for i686. */
+ if (cpu == 5 && (cap & USER686) == USER686)
+ return 6;
+
if (cpu < 6)
return cpu;
@@ -912,13 +951,19 @@ static int is_geode(void)
#if defined(__linux__)
/**
- * Populate rpmat structure with parsed info from /proc/self/auxv
+ * Populate rpmat structure with auxv values
*/
-static void parse_auxv(void)
+static void read_auxv(void)
{
static int oneshot = 1;
if (oneshot) {
+#ifdef HAVE_GETAUXVAL
+ rpmat.platform = (char *) getauxval(AT_PLATFORM);
+ if (!rpmat.platform)
+ rpmat.platform = "";
+ rpmat.hwcap = getauxval(AT_HWCAP);
+#else
rpmat.platform = "";
int fd = open("/proc/self/auxv", O_RDONLY);
@@ -943,6 +988,7 @@ static void parse_auxv(void)
}
close(fd);
}
+#endif
oneshot = 0; /* only try once even if it fails */
}
return;
@@ -951,22 +997,21 @@ static void parse_auxv(void)
/**
*/
-static void defaultMachine(const char ** arch,
- const char ** os)
+static void defaultMachine(rpmrcCtx ctx, const char ** arch, const char ** os)
{
+ const char * const platform_path = SYSCONFDIR "/rpm/platform";
static struct utsname un;
- static int gotDefaults = 0;
char * chptr;
canonEntry canon;
int rc;
#if defined(__linux__)
/* Populate rpmat struct with hw info */
- parse_auxv();
+ read_auxv();
#endif
- while (!gotDefaults) {
- if (!rpmPlatform(platform)) {
+ while (!ctx->machDefaults) {
+ if (!rpmPlatform(ctx, platform_path)) {
char * s = rpmExpand("%{_host_cpu}", NULL);
if (s) {
rstrlcpy(un.machine, s, sizeof(un.machine));
@@ -977,7 +1022,7 @@ static void defaultMachine(const char ** arch,
rstrlcpy(un.sysname, s, sizeof(un.sysname));
free(s);
}
- gotDefaults = 1;
+ ctx->machDefaults = 1;
break;
}
rc = uname(&un);
@@ -988,11 +1033,15 @@ static void defaultMachine(const char ** arch,
strcpy(un.machine, __power_pc() ? "ppc" : "rs6000");
sprintf(un.sysname,"aix%s.%s", un.version, un.release);
}
- else if(rstreq(un.sysname, "Darwin")) {
-#ifdef __ppc__
+ else if (rstreq(un.sysname, "Darwin")) {
+#if defined(__ppc__)
strcpy(un.machine, "ppc");
-#else ifdef __i386__
+#elif defined(__i386__)
strcpy(un.machine, "i386");
+#elif defined(__x86_64__)
+ strcpy(un.machine, "x86_64");
+#else
+ #warning "No architecture defined! Automatic detection may not work!"
#endif
}
else if (rstreq(un.sysname, "SunOS")) {
@@ -1020,12 +1069,54 @@ static void defaultMachine(const char ** arch,
# if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL)
/* little endian */
- strcpy(un.machine, "mipsel");
+# if defined(__mips64)
+ /* 64-bit */
+# if !defined(__mips_isa_rev) || __mips_isa_rev < 6
+ /* r1-r5 */
+ strcpy(un.machine, "mips64el");
+# else
+ /* r6 */
+ strcpy(un.machine, "mips64r6el");
+# endif
+# else
+ /* 32-bit */
+# if !defined(__mips_isa_rev) || __mips_isa_rev < 6
+ /* r1-r5 */
+ strcpy(un.machine, "mipsel");
+# else
+ /* r6 */
+ strcpy(un.machine, "mipsr6el");
+# endif
+# endif
# elif defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB)
/* big endian */
- strcpy(un.machine, "mips");
+# if defined(__mips64)
+ /* 64-bit */
+# if !defined(__mips_isa_rev) || __mips_isa_rev < 6
+ /* r1-r5 */
+ strcpy(un.machine, "mips64");
+# else
+ /* r6 */
+ strcpy(un.machine, "mips64r6");
+# endif
+# else
+ /* 32-bit */
+# if !defined(__mips_isa_rev) || __mips_isa_rev < 6
+ /* r1-r5 */
+ strcpy(un.machine, "mips");
+# else
+ /* r6 */
+ strcpy(un.machine, "mipsr6");
+# endif
+# endif
# endif
+#if defined(__linux__)
+ /* in linux, lets rename parisc to hppa */
+ if (rstreq(un.machine, "parisc"))
+ strcpy(un.machine, "hppa");
+#endif
+
# if defined(__hpux) && defined(_SC_CPU_VERSION)
{
# if !defined(CPU_PA_RISC1_2)
@@ -1069,6 +1160,9 @@ static void defaultMachine(const char ** arch,
# endif /* hpux */
# if defined(__linux__) && defined(__sparc__)
+# if !defined(HWCAP_SPARC_BLKINIT)
+# define HWCAP_SPARC_BLKINIT 0x00000040
+# endif
if (rstreq(un.machine, "sparc")) {
#define PERS_LINUX 0x00000000
#define PERS_LINUX_32BIT 0x00800000
@@ -1088,10 +1182,20 @@ static void defaultMachine(const char ** arch,
}
personality(oldpers);
}
+
+ /* This is how glibc detects Niagara so... */
+ if (rpmat.hwcap & HWCAP_SPARC_BLKINIT) {
+ if (rstreq(un.machine, "sparcv9") || rstreq(un.machine, "sparc")) {
+ strcpy(un.machine, "sparcv9v");
+ } else if (rstreq(un.machine, "sparc64")) {
+ strcpy(un.machine, "sparc64v");
+ }
+ }
}
# endif /* sparc*-linux */
# if defined(__linux__) && defined(__powerpc__)
+# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
{
int powerlvl;
if (!rstreq(un.machine, "ppc") &&
@@ -1100,8 +1204,43 @@ static void defaultMachine(const char ** arch,
strcpy(un.machine, "ppc64p7");
}
}
+# endif /* __ORDER_BIG_ENDIAN__ */
# endif /* ppc64*-linux */
+# if defined(__linux__) && defined(__arm__) && defined(__ARM_PCS_VFP)
+# if !defined(HWCAP_ARM_VFP)
+# define HWCAP_ARM_VFP (1 << 6)
+# endif
+# if !defined(HWCAP_ARM_NEON)
+# define HWCAP_ARM_NEON (1 << 12)
+# endif
+# if !defined(HWCAP_ARM_VFPv3)
+# define HWCAP_ARM_VFPv3 (1 << 13)
+# endif
+ if (rstreq(un.machine, "armv7l")) {
+ if (rpmat.hwcap & HWCAP_ARM_VFPv3) {
+ if (rpmat.hwcap & HWCAP_ARM_NEON)
+ strcpy(un.machine, "armv7hnl");
+ else
+ strcpy(un.machine, "armv7hl");
+ }
+ } else if (rstreq(un.machine, "armv6l")) {
+ if (rpmat.hwcap & HWCAP_ARM_VFP)
+ strcpy(un.machine, "armv6hl");
+ }
+# endif /* arm*-linux */
+
+# if defined(__linux__) && defined(__riscv__)
+ if (rstreq(un.machine, "riscv")) {
+ if (sizeof(long) == 4)
+ strcpy(un.machine, "riscv32");
+ else if (sizeof(long) == 8)
+ strcpy(un.machine, "riscv64");
+ else if (sizeof(long) == 16)
+ strcpy(un.machine, "riscv128");
+ }
+# endif /* riscv */
+
# if defined(__GNUC__) && defined(__alpha__)
{
unsigned long amask, implver;
@@ -1147,17 +1286,17 @@ static void defaultMachine(const char ** arch,
/* the uname() result goes through the arch_canon table */
canon = lookupInCanonTable(un.machine,
- tables[RPM_MACHTABLE_INSTARCH].canons,
- tables[RPM_MACHTABLE_INSTARCH].canonsLength);
+ ctx->tables[RPM_MACHTABLE_INSTARCH].canons,
+ ctx->tables[RPM_MACHTABLE_INSTARCH].canonsLength);
if (canon)
rstrlcpy(un.machine, canon->short_name, sizeof(un.machine));
canon = lookupInCanonTable(un.sysname,
- tables[RPM_MACHTABLE_INSTOS].canons,
- tables[RPM_MACHTABLE_INSTOS].canonsLength);
+ ctx->tables[RPM_MACHTABLE_INSTOS].canons,
+ ctx->tables[RPM_MACHTABLE_INSTOS].canonsLength);
if (canon)
rstrlcpy(un.sysname, canon->short_name, sizeof(un.sysname));
- gotDefaults = 1;
+ ctx->machDefaults = 1;
break;
}
@@ -1166,34 +1305,30 @@ static void defaultMachine(const char ** arch,
}
static
-const char * rpmGetVarArch(int var, const char * arch)
+const char * rpmGetVarArch(rpmrcCtx ctx, int var, const char * arch)
{
const struct rpmvarValue * next;
- if (arch == NULL) arch = current[ARCH];
+ if (arch == NULL) arch = ctx->current[ARCH];
if (arch) {
- next = &values[var];
+ next = &ctx->values[var];
while (next) {
if (next->arch && rstreq(next->arch, arch)) return next->value;
next = next->next;
}
}
- next = values + var;
+ next = ctx->values + var;
while (next && next->arch) next = next->next;
return next ? next->value : NULL;
}
-static const char *rpmGetVar(int var)
-{
- return rpmGetVarArch(var, NULL);
-}
-
-static void rpmSetVarArch(int var, const char * val, const char * arch)
+static void rpmSetVarArch(rpmrcCtx ctx,
+ int var, const char * val, const char * arch)
{
- struct rpmvarValue * next = values + var;
+ struct rpmvarValue * next = ctx->values + var;
if (next->value) {
if (arch) {
@@ -1225,39 +1360,23 @@ static void rpmSetVarArch(int var, const char * val, const char * arch)
next->arch = (arch ? xstrdup(arch) : NULL);
}
-static void rpmSetTables(int archTable, int osTable)
+static void rpmSetTables(rpmrcCtx ctx, int archTable, int osTable)
{
const char * arch, * os;
- defaultMachine(&arch, &os);
+ defaultMachine(ctx, &arch, &os);
- if (currTables[ARCH] != archTable) {
- currTables[ARCH] = archTable;
- rebuildCompatTables(ARCH, arch);
+ if (ctx->currTables[ARCH] != archTable) {
+ ctx->currTables[ARCH] = archTable;
+ rebuildCompatTables(ctx, ARCH, arch);
}
- if (currTables[OS] != osTable) {
- currTables[OS] = osTable;
- rebuildCompatTables(OS, os);
+ if (ctx->currTables[OS] != osTable) {
+ ctx->currTables[OS] = osTable;
+ rebuildCompatTables(ctx, OS, os);
}
}
-int rpmMachineScore(int type, const char * name)
-{
- machEquivInfo info = NULL;
- if (name)
- info = machEquivSearch(&tables[type].equiv, name);
- return info ? info->score : 0;
-}
-
-int rpmIsKnownArch(const char *name)
-{
- canonEntry canon = lookupInCanonTable(name,
- tables[RPM_MACHTABLE_INSTARCH].canons,
- tables[RPM_MACHTABLE_INSTARCH].canonsLength);
- return (canon != NULL || rstreq(name, "noarch"));
-}
-
/** \ingroup rpmrc
* Set current arch/os names.
* NULL as argument is set to the default value (munged uname())
@@ -1265,43 +1384,44 @@ int rpmIsKnownArch(const char *name)
* @deprecated Use addMacro to set _target_* macros.
* @todo Eliminate
*
+ * @param ctx rpmrc context
* @param arch arch name (or NULL)
* @param os os name (or NULL)
* */
-static void rpmSetMachine(const char * arch, const char * os)
+static void rpmSetMachine(rpmrcCtx ctx, const char * arch, const char * os)
{
const char * host_cpu, * host_os;
- defaultMachine(&host_cpu, &host_os);
+ defaultMachine(ctx, &host_cpu, &host_os);
if (arch == NULL) {
arch = host_cpu;
- if (tables[currTables[ARCH]].hasTranslate)
+ if (ctx->tables[ctx->currTables[ARCH]].hasTranslate)
arch = lookupInDefaultTable(arch,
- tables[currTables[ARCH]].defaults,
- tables[currTables[ARCH]].defaultsLength);
+ ctx->tables[ctx->currTables[ARCH]].defaults,
+ ctx->tables[ctx->currTables[ARCH]].defaultsLength);
}
if (arch == NULL) return; /* XXX can't happen */
if (os == NULL) {
os = host_os;
- if (tables[currTables[OS]].hasTranslate)
+ if (ctx->tables[ctx->currTables[OS]].hasTranslate)
os = lookupInDefaultTable(os,
- tables[currTables[OS]].defaults,
- tables[currTables[OS]].defaultsLength);
+ ctx->tables[ctx->currTables[OS]].defaults,
+ ctx->tables[ctx->currTables[OS]].defaultsLength);
}
if (os == NULL) return; /* XXX can't happen */
- if (!current[ARCH] || !rstreq(arch, current[ARCH])) {
- current[ARCH] = _free(current[ARCH]);
- current[ARCH] = xstrdup(arch);
- rebuildCompatTables(ARCH, host_cpu);
+ if (!ctx->current[ARCH] || !rstreq(arch, ctx->current[ARCH])) {
+ ctx->current[ARCH] = _free(ctx->current[ARCH]);
+ ctx->current[ARCH] = xstrdup(arch);
+ rebuildCompatTables(ctx, ARCH, host_cpu);
}
- if (!current[OS] || !rstreq(os, current[OS])) {
+ if (!ctx->current[OS] || !rstreq(os, ctx->current[OS])) {
char * t = xstrdup(os);
- current[OS] = _free(current[OS]);
+ ctx->current[OS] = _free(ctx->current[OS]);
/*
* XXX Capitalizing the 'L' is needed to insure that old
* XXX os-from-uname (e.g. "Linux") is compatible with the new
@@ -1312,79 +1432,49 @@ static void rpmSetMachine(const char * arch, const char * os)
*/
if (rstreq(t, "linux"))
*t = 'L';
- current[OS] = t;
+ ctx->current[OS] = t;
- rebuildCompatTables(OS, host_os);
+ rebuildCompatTables(ctx, OS, host_os);
}
}
-static void rebuildCompatTables(int type, const char * name)
+static void rebuildCompatTables(rpmrcCtx ctx, int type, const char * name)
{
- machFindEquivs(&tables[currTables[type]].cache,
- &tables[currTables[type]].equiv,
+ machFindEquivs(&ctx->tables[ctx->currTables[type]].cache,
+ &ctx->tables[ctx->currTables[type]].equiv,
name);
}
-static void getMachineInfo(int type, const char ** name,
- int * num)
+static void getMachineInfo(rpmrcCtx ctx,
+ int type, const char ** name, int * num)
{
canonEntry canon;
- int which = currTables[type];
+ int which = ctx->currTables[type];
/* use the normal canon tables, even if we're looking up build stuff */
if (which >= 2) which -= 2;
- canon = lookupInCanonTable(current[type],
- tables[which].canons,
- tables[which].canonsLength);
+ canon = lookupInCanonTable(ctx->current[type],
+ ctx->tables[which].canons,
+ ctx->tables[which].canonsLength);
if (canon) {
if (num) *num = canon->num;
if (name) *name = canon->short_name;
} else {
if (num) *num = 255;
- if (name) *name = current[type];
+ if (name) *name = ctx->current[type];
- if (tables[currTables[type]].hasCanon) {
- rpmlog(RPMLOG_WARNING, _("Unknown system: %s\n"), current[type]);
+ if (ctx->tables[ctx->currTables[type]].hasCanon) {
+ rpmlog(RPMLOG_WARNING, _("Unknown system: %s\n"),
+ ctx->current[type]);
rpmlog(RPMLOG_WARNING, _("Please contact %s\n"), PACKAGE_BUGREPORT);
}
}
}
-void rpmGetArchInfo(const char ** name, int * num)
-{
- getMachineInfo(ARCH, name, num);
-}
-
-int rpmGetArchColor(const char *arch)
-{
- const char *color;
- char *e;
- int color_i;
-
- arch = lookupInDefaultTable(arch,
- tables[currTables[ARCH]].defaults,
- tables[currTables[ARCH]].defaultsLength);
- color = rpmGetVarArch(RPMVAR_ARCHCOLOR, arch);
- if (color == NULL) {
- return -1;
- }
-
- color_i = strtol(color, &e, 10);
- if (!(e && *e == '\0')) {
- return -1;
- }
-
- return color_i;
-}
-
-void rpmGetOsInfo(const char ** name, int * num)
-{
- getMachineInfo(OS, name, num);
-}
-
-static void rpmRebuildTargetVars(const char ** target, const char ** canontarget)
+static void rpmRebuildTargetVars(rpmrcCtx ctx,
+ const char ** target, const char ** canontarget)
{
char *ca = NULL, *co = NULL, *ct = NULL;
@@ -1392,9 +1482,9 @@ static void rpmRebuildTargetVars(const char ** target, const char ** canontarget
/* Rebuild the compat table to recalculate the current target arch. */
- rpmSetMachine(NULL, NULL);
- rpmSetTables(RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS);
- rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
+ rpmSetMachine(ctx, NULL, NULL);
+ rpmSetTables(ctx, RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS);
+ rpmSetTables(ctx, RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
if (target && *target) {
char *c;
@@ -1419,16 +1509,16 @@ static void rpmRebuildTargetVars(const char ** target, const char ** canontarget
const char *a = NULL;
const char *o = NULL;
/* Set build target from rpm arch and os */
- rpmGetArchInfo(&a, NULL);
+ getMachineInfo(ctx, ARCH, &a, NULL);
ca = (a) ? xstrdup(a) : NULL;
- rpmGetOsInfo(&o, NULL);
+ getMachineInfo(ctx, OS, &o, NULL);
co = (o) ? xstrdup(o) : NULL;
}
/* If still not set, Set target arch/os from default uname(2) values */
if (ca == NULL) {
const char *a = NULL;
- defaultMachine(&a, NULL);
+ defaultMachine(ctx, &a, NULL);
ca = xstrdup(a ? a : "(arch)");
}
for (x = 0; ca[x] != '\0'; x++)
@@ -1436,7 +1526,7 @@ static void rpmRebuildTargetVars(const char ** target, const char ** canontarget
if (co == NULL) {
const char *o = NULL;
- defaultMachine(NULL, &o);
+ defaultMachine(ctx, NULL, &o);
co = xstrdup(o ? o : "(os)");
}
for (x = 0; co[x] != '\0'; x++)
@@ -1451,19 +1541,19 @@ static void rpmRebuildTargetVars(const char ** target, const char ** canontarget
* XXX All this macro pokery/jiggery could be achieved by doing a delayed
* rpmInitMacros(NULL, PER-PLATFORM-MACRO-FILE-NAMES);
*/
- delMacro(NULL, "_target");
- addMacro(NULL, "_target", NULL, ct, RMIL_RPMRC);
- delMacro(NULL, "_target_cpu");
- addMacro(NULL, "_target_cpu", NULL, ca, RMIL_RPMRC);
- delMacro(NULL, "_target_os");
- addMacro(NULL, "_target_os", NULL, co, RMIL_RPMRC);
+ rpmPopMacro(NULL, "_target");
+ rpmPushMacro(NULL, "_target", NULL, ct, RMIL_RPMRC);
+ rpmPopMacro(NULL, "_target_cpu");
+ rpmPushMacro(NULL, "_target_cpu", NULL, ca, RMIL_RPMRC);
+ rpmPopMacro(NULL, "_target_os");
+ rpmPushMacro(NULL, "_target_os", NULL, co, RMIL_RPMRC);
/*
* XXX Make sure that per-arch optflags is initialized correctly.
*/
- { const char *optflags = rpmGetVarArch(RPMVAR_OPTFLAGS, ca);
+ { const char *optflags = rpmGetVarArch(ctx, RPMVAR_OPTFLAGS, ca);
if (optflags != NULL) {
- delMacro(NULL, "optflags");
- addMacro(NULL, "optflags", NULL, optflags, RMIL_RPMRC);
+ rpmPopMacro(NULL, "optflags");
+ rpmPushMacro(NULL, "optflags", NULL, optflags, RMIL_RPMRC);
}
}
@@ -1475,97 +1565,20 @@ static void rpmRebuildTargetVars(const char ** target, const char ** canontarget
free(co);
}
-void rpmFreeRpmrc(void)
-{
- int i, j, k;
-
- if (platpat)
- for (i = 0; i < nplatpat; i++)
- platpat[i] = _free(platpat[i]);
- platpat = _free(platpat);
- nplatpat = 0;
-
- for (i = 0; i < RPM_MACHTABLE_COUNT; i++) {
- tableType t;
- t = tables + i;
- if (t->equiv.list) {
- for (j = 0; j < t->equiv.count; j++)
- t->equiv.list[j].name = _free(t->equiv.list[j].name);
- t->equiv.list = _free(t->equiv.list);
- t->equiv.count = 0;
- }
- if (t->cache.cache) {
- for (j = 0; j < t->cache.size; j++) {
- machCacheEntry e;
- e = t->cache.cache + j;
- if (e == NULL)
- continue;
- e->name = _free(e->name);
- if (e->equivs) {
- for (k = 0; k < e->count; k++)
- e->equivs[k] = _free(e->equivs[k]);
- e->equivs = _free(e->equivs);
- }
- }
- t->cache.cache = _free(t->cache.cache);
- t->cache.size = 0;
- }
- if (t->defaults) {
- for (j = 0; j < t->defaultsLength; j++) {
- t->defaults[j].name = _free(t->defaults[j].name);
- t->defaults[j].defName = _free(t->defaults[j].defName);
- }
- t->defaults = _free(t->defaults);
- t->defaultsLength = 0;
- }
- if (t->canons) {
- for (j = 0; j < t->canonsLength; j++) {
- t->canons[j].name = _free(t->canons[j].name);
- t->canons[j].short_name = _free(t->canons[j].short_name);
- }
- t->canons = _free(t->canons);
- t->canonsLength = 0;
- }
- }
-
- for (i = 0; i < RPMVAR_NUM; i++) {
- struct rpmvarValue * vp;
- while ((vp = values[i].next) != NULL) {
- values[i].next = vp->next;
- vp->value = _free(vp->value);
- vp->arch = _free(vp->arch);
- vp = _free(vp);
- }
- values[i].value = _free(values[i].value);
- values[i].arch = _free(values[i].arch);
- }
- current[OS] = _free(current[OS]);
- current[ARCH] = _free(current[ARCH]);
- defaultsInitialized = 0;
-/* FIX: platpat/current may be NULL */
-
- /* XXX doesn't really belong here but... */
- rpmFreeCrypto();
-#ifdef WITH_LUA
- rpmLuaFree();
-#endif
-
- return;
-}
-
/** \ingroup rpmrc
* Read rpmrc (and macro) configuration file(s).
+ * @param ctx rpmrc context
* @param rcfiles colon separated files to read (NULL uses default)
* @return RPMRC_OK on success
*/
-static rpmRC rpmReadRC(const char * rcfiles)
+static rpmRC rpmReadRC(rpmrcCtx ctx, const char * rcfiles)
{
ARGV_t p, globs = NULL, files = NULL;
rpmRC rc = RPMRC_FAIL;
- if (!defaultsInitialized) {
+ if (!ctx->pathDefaults) {
setDefaults();
- defaultsInitialized = 1;
+ ctx->pathDefaults = 1;
}
if (rcfiles == NULL)
@@ -1592,29 +1605,47 @@ static rpmRC rpmReadRC(const char * rcfiles)
goto exit;
break;
} else {
- rc = doReadRC(*p);
+ rc = doReadRC(ctx, *p);
}
}
rc = RPMRC_OK;
- rpmSetMachine(NULL, NULL); /* XXX WTFO? Why bother? */
+ rpmSetMachine(ctx, NULL, NULL); /* XXX WTFO? Why bother? */
exit:
argvFree(files);
return rc;
}
+static void register_atexit(void)
+{
+ if (atexit(rpmAtExit) != 0)
+ rpmlog(RPMLOG_WARNING, _("failed to register exit handler"));
+}
+
+/* External interfaces */
+
int rpmReadConfigFiles(const char * file, const char * target)
{
+ static pthread_once_t atexit_registered = PTHREAD_ONCE_INIT;
+ int rc = -1; /* assume failure */
+ rpmrcCtx ctx = rpmrcCtxAcquire(1);
+
+ pthread_once(&atexit_registered, register_atexit);
+
/* Force preloading of dlopen()'ed libraries in case we go chrooting */
- (void) gethostbyname("localhost");
- (void) rpmInitCrypto();
+ if (rpmugInit())
+ goto exit;
+
+ if (rpmInitCrypto())
+ goto exit;
/* Preset target macros */
/* FIX: target can be NULL */
- rpmRebuildTargetVars(&target, NULL);
+ rpmRebuildTargetVars(ctx, &target, NULL);
/* Read the files */
- if (rpmReadRC(file)) return -1;
+ if (rpmReadRC(ctx, file))
+ goto exit;
if (macrofiles != NULL) {
char *mf = rpmGetPath(macrofiles, NULL);
@@ -1623,12 +1654,12 @@ int rpmReadConfigFiles(const char * file, const char * target)
}
/* Reset target macros */
- rpmRebuildTargetVars(&target, NULL);
+ rpmRebuildTargetVars(ctx, &target, NULL);
/* Finally set target platform */
{ char *cpu = rpmExpand("%{_target_cpu}", NULL);
char *os = rpmExpand("%{_target_os}", NULL);
- rpmSetMachine(cpu, os);
+ rpmSetMachine(ctx, cpu, os);
free(cpu);
free(os);
}
@@ -1637,12 +1668,93 @@ int rpmReadConfigFiles(const char * file, const char * target)
/* Force Lua state initialization */
rpmLuaInit();
#endif
+ rc = 0;
- return 0;
+exit:
+ rpmrcCtxRelease(ctx);
+ return rc;
+}
+
+void rpmFreeRpmrc(void)
+{
+ rpmrcCtx ctx = rpmrcCtxAcquire(1);
+ int i, j, k;
+
+ ctx->platpat = argvFree(ctx->platpat);
+
+ for (i = 0; i < RPM_MACHTABLE_COUNT; i++) {
+ tableType t;
+ t = ctx->tables + i;
+ if (t->equiv.list) {
+ for (j = 0; j < t->equiv.count; j++)
+ t->equiv.list[j].name = _free(t->equiv.list[j].name);
+ t->equiv.list = _free(t->equiv.list);
+ t->equiv.count = 0;
+ }
+ if (t->cache.cache) {
+ for (j = 0; j < t->cache.size; j++) {
+ machCacheEntry e;
+ e = t->cache.cache + j;
+ if (e == NULL)
+ continue;
+ e->name = _free(e->name);
+ if (e->equivs) {
+ for (k = 0; k < e->count; k++)
+ e->equivs[k] = _free(e->equivs[k]);
+ e->equivs = _free(e->equivs);
+ }
+ }
+ t->cache.cache = _free(t->cache.cache);
+ t->cache.size = 0;
+ }
+ if (t->defaults) {
+ for (j = 0; j < t->defaultsLength; j++) {
+ t->defaults[j].name = _free(t->defaults[j].name);
+ t->defaults[j].defName = _free(t->defaults[j].defName);
+ }
+ t->defaults = _free(t->defaults);
+ t->defaultsLength = 0;
+ }
+ if (t->canons) {
+ for (j = 0; j < t->canonsLength; j++) {
+ t->canons[j].name = _free(t->canons[j].name);
+ t->canons[j].short_name = _free(t->canons[j].short_name);
+ }
+ t->canons = _free(t->canons);
+ t->canonsLength = 0;
+ }
+ }
+
+ for (i = 0; i < RPMVAR_NUM; i++) {
+ struct rpmvarValue * vp;
+ while ((vp = ctx->values[i].next) != NULL) {
+ ctx->values[i].next = vp->next;
+ vp->value = _free(vp->value);
+ vp->arch = _free(vp->arch);
+ vp = _free(vp);
+ }
+ ctx->values[i].value = _free(ctx->values[i].value);
+ ctx->values[i].arch = _free(ctx->values[i].arch);
+ }
+ ctx->current[OS] = _free(ctx->current[OS]);
+ ctx->current[ARCH] = _free(ctx->current[ARCH]);
+ ctx->machDefaults = 0;
+ ctx->pathDefaults = 0;
+
+ /* XXX doesn't really belong here but... */
+ rpmFreeCrypto();
+#ifdef WITH_LUA
+ rpmLuaFree();
+#endif
+
+ rpmrcCtxRelease(ctx);
+ return;
}
int rpmShowRC(FILE * fp)
{
+ /* Write-context necessary as this calls rpmSetTables(), ugh */
+ rpmrcCtx ctx = rpmrcCtxAcquire(1);
const struct rpmOption *opt;
rpmds ds = NULL;
int i;
@@ -1650,43 +1762,43 @@ int rpmShowRC(FILE * fp)
/* the caller may set the build arch which should be printed here */
fprintf(fp, "ARCHITECTURE AND OS:\n");
- fprintf(fp, "build arch : %s\n", current[ARCH]);
+ fprintf(fp, "build arch : %s\n", ctx->current[ARCH]);
fprintf(fp, "compatible build archs:");
- equivTable = &tables[RPM_MACHTABLE_BUILDARCH].equiv;
+ equivTable = &ctx->tables[RPM_MACHTABLE_BUILDARCH].equiv;
for (i = 0; i < equivTable->count; i++)
fprintf(fp," %s", equivTable->list[i].name);
fprintf(fp, "\n");
- fprintf(fp, "build os : %s\n", current[OS]);
+ fprintf(fp, "build os : %s\n", ctx->current[OS]);
fprintf(fp, "compatible build os's :");
- equivTable = &tables[RPM_MACHTABLE_BUILDOS].equiv;
+ equivTable = &ctx->tables[RPM_MACHTABLE_BUILDOS].equiv;
for (i = 0; i < equivTable->count; i++)
fprintf(fp," %s", equivTable->list[i].name);
fprintf(fp, "\n");
- rpmSetTables(RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS);
- rpmSetMachine(NULL, NULL); /* XXX WTFO? Why bother? */
+ rpmSetTables(ctx, RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS);
+ rpmSetMachine(ctx, NULL, NULL); /* XXX WTFO? Why bother? */
- fprintf(fp, "install arch : %s\n", current[ARCH]);
- fprintf(fp, "install os : %s\n", current[OS]);
+ fprintf(fp, "install arch : %s\n", ctx->current[ARCH]);
+ fprintf(fp, "install os : %s\n", ctx->current[OS]);
fprintf(fp, "compatible archs :");
- equivTable = &tables[RPM_MACHTABLE_INSTARCH].equiv;
+ equivTable = &ctx->tables[RPM_MACHTABLE_INSTARCH].equiv;
for (i = 0; i < equivTable->count; i++)
fprintf(fp," %s", equivTable->list[i].name);
fprintf(fp, "\n");
fprintf(fp, "compatible os's :");
- equivTable = &tables[RPM_MACHTABLE_INSTOS].equiv;
+ equivTable = &ctx->tables[RPM_MACHTABLE_INSTOS].equiv;
for (i = 0; i < equivTable->count; i++)
fprintf(fp," %s", equivTable->list[i].name);
fprintf(fp, "\n");
fprintf(fp, "\nRPMRC VALUES:\n");
for (i = 0, opt = optionTable; i < optionTableSize; i++, opt++) {
- const char *s = rpmGetVar(opt->var);
+ const char *s = rpmGetVarArch(ctx, opt->var, NULL);
if (s != NULL || rpmIsVerbose())
fprintf(fp, "%-21s : %s\n", opt->name, s ? s : "(not set)");
}
@@ -1703,7 +1815,74 @@ int rpmShowRC(FILE * fp)
ds = rpmdsFree(ds);
fprintf(fp, "\n");
+ fprintf(fp, "Macro path: %s\n", macrofiles);
+ fprintf(fp, "\n");
+
rpmDumpMacroTable(NULL, fp);
+ /* XXX: Move this earlier eventually... */
+ rpmrcCtxRelease(ctx);
+
return 0;
}
+
+int rpmMachineScore(int type, const char * name)
+{
+ int score = 0;
+ if (name) {
+ rpmrcCtx ctx = rpmrcCtxAcquire(0);
+ machEquivInfo info = machEquivSearch(&ctx->tables[type].equiv, name);
+ if (info)
+ score = info->score;
+ rpmrcCtxRelease(ctx);
+ }
+ return score;
+}
+
+int rpmIsKnownArch(const char *name)
+{
+ rpmrcCtx ctx = rpmrcCtxAcquire(0);
+ canonEntry canon = lookupInCanonTable(name,
+ ctx->tables[RPM_MACHTABLE_INSTARCH].canons,
+ ctx->tables[RPM_MACHTABLE_INSTARCH].canonsLength);
+ int known = (canon != NULL || rstreq(name, "noarch"));
+ rpmrcCtxRelease(ctx);
+ return known;
+}
+
+void rpmGetArchInfo(const char ** name, int * num)
+{
+ rpmrcCtx ctx = rpmrcCtxAcquire(0);
+ getMachineInfo(ctx, ARCH, name, num);
+ rpmrcCtxRelease(ctx);
+}
+
+int rpmGetArchColor(const char *arch)
+{
+ rpmrcCtx ctx = rpmrcCtxAcquire(0);
+ const char *color;
+ char *e;
+ int color_i = -1; /* assume failure */
+
+ arch = lookupInDefaultTable(arch,
+ ctx->tables[ctx->currTables[ARCH]].defaults,
+ ctx->tables[ctx->currTables[ARCH]].defaultsLength);
+ color = rpmGetVarArch(ctx, RPMVAR_ARCHCOLOR, arch);
+ if (color) {
+ color_i = strtol(color, &e, 10);
+ if (!(e && *e == '\0')) {
+ color_i = -1;
+ }
+ }
+ rpmrcCtxRelease(ctx);
+
+ return color_i;
+}
+
+void rpmGetOsInfo(const char ** name, int * num)
+{
+ rpmrcCtx ctx = rpmrcCtxAcquire(0);
+ getMachineInfo(ctx, OS, name, num);
+ rpmrcCtxRelease(ctx);
+}
+
diff --git a/lib/rpmscript.c b/lib/rpmscript.c
index a27251c9a..cc98c4885 100644
--- a/lib/rpmscript.c
+++ b/lib/rpmscript.c
@@ -10,6 +10,7 @@
#include <rpm/rpmio.h>
#include <rpm/rpmlog.h>
#include <rpm/header.h>
+#include <rpm/rpmds.h>
#include "rpmio/rpmlua.h"
#include "lib/rpmscript.h"
@@ -18,20 +19,73 @@
#include "debug.h"
+struct scriptNextFileFunc_s {
+ char *(*func)(void *); /* function producing input for script */
+ void *param; /* parameter for func */
+};
+
+typedef struct scriptNextFileFunc_s *scriptNextFileFunc;
+
struct rpmScript_s {
+ rpmscriptTypes type; /* script type */
rpmTagVal tag; /* script tag */
char **args; /* scriptlet call arguments */
char *body; /* script body */
char *descr; /* description for logging */
rpmscriptFlags flags; /* flags to control operation */
+ struct scriptNextFileFunc_s nextFileFunc; /* input function */
+};
+
+struct scriptInfo_s {
+ rpmscriptTypes type;
+ const char *desc;
+ rpmsenseFlags sense;
+ rpmTagVal tag;
+ rpmTagVal progtag;
+ rpmTagVal flagtag;
+};
+
+static const struct scriptInfo_s scriptInfo[] = {
+ { RPMSCRIPT_PREIN, "%prein", 0,
+ RPMTAG_PREIN, RPMTAG_PREINPROG, RPMTAG_PREINFLAGS },
+ { RPMSCRIPT_PREUN, "%preun", 0,
+ RPMTAG_PREUN, RPMTAG_PREUNPROG, RPMTAG_PREUNFLAGS },
+ { RPMSCRIPT_POSTIN, "%post", 0,
+ RPMTAG_POSTIN, RPMTAG_POSTINPROG, RPMTAG_POSTINFLAGS },
+ { RPMSCRIPT_POSTUN, "%postun", 0,
+ RPMTAG_POSTUN, RPMTAG_POSTUNPROG, RPMTAG_POSTUNFLAGS },
+ { RPMSCRIPT_PRETRANS, "%pretrans", 0,
+ RPMTAG_PRETRANS, RPMTAG_PRETRANSPROG, RPMTAG_PRETRANSFLAGS },
+ { RPMSCRIPT_POSTTRANS, "%posttrans", 0,
+ RPMTAG_POSTTRANS, RPMTAG_POSTTRANSPROG, RPMTAG_POSTTRANSFLAGS },
+ { RPMSCRIPT_TRIGGERPREIN, "%triggerprein", RPMSENSE_TRIGGERPREIN,
+ RPMTAG_TRIGGERPREIN, 0, 0 },
+ { RPMSCRIPT_TRIGGERUN, "%triggerun", RPMSENSE_TRIGGERUN,
+ RPMTAG_TRIGGERUN, 0, 0 },
+ { RPMSCRIPT_TRIGGERIN, "%triggerin", RPMSENSE_TRIGGERIN,
+ RPMTAG_TRIGGERIN, 0, 0 },
+ { RPMSCRIPT_TRIGGERPOSTUN, "%triggerpostun", RPMSENSE_TRIGGERPOSTUN,
+ RPMTAG_TRIGGERPOSTUN, 0, 0 },
+ { RPMSCRIPT_VERIFY, "%verify", 0,
+ RPMTAG_VERIFYSCRIPT, RPMTAG_VERIFYSCRIPTPROG, RPMTAG_VERIFYSCRIPTFLAGS},
+ { 0, "unknown", 0,
+ RPMTAG_NOT_FOUND, RPMTAG_NOT_FOUND, RPMTAG_NOT_FOUND }
};
+static const struct scriptInfo_s * findTag(rpmTagVal tag)
+{
+ const struct scriptInfo_s * si = scriptInfo;
+ while (si->type && si->tag != tag)
+ si++;
+ return si;
+}
/**
* Run internal Lua script.
*/
-static rpmRC runLuaScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes,
+static rpmRC runLuaScript(rpmPlugins plugins, ARGV_const_t prefixes,
const char *sname, rpmlogLvl lvl, FD_t scriptFd,
- ARGV_t * argvp, const char *script, int arg1, int arg2)
+ ARGV_t * argvp, const char *script, int arg1, int arg2,
+ scriptNextFileFunc nextFileFunc)
{
rpmRC rc = RPMRC_FAIL;
#ifdef WITH_LUA
@@ -45,6 +99,7 @@ static rpmRC runLuaScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes
/* Create arg variable */
rpmluaPushTable(lua, "arg");
rpmluavSetListMode(var, 1);
+ rpmluaSetNextFileFunc(nextFileFunc->func, nextFileFunc->param);
if (argv) {
char **p;
for (p = argv; *p; p++) {
@@ -68,10 +123,16 @@ static rpmRC runLuaScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes
if (cwd != -1) {
mode_t oldmask = umask(0);
umask(oldmask);
+ pid_t pid = getpid();
if (chdir("/") == 0 && rpmluaRunScript(lua, script, sname) == 0) {
rc = RPMRC_OK;
}
+ if (pid != getpid()) {
+ /* Terminate child process forked in lua scriptlet */
+ rpmlog(RPMLOG_ERR, _("No exec() called after fork() in lua scriptlet\n"));
+ _exit(EXIT_FAILURE);
+ }
/* This failing would be fatal, return something different for it... */
if (fchdir(cwd)) {
rpmlog(RPMLOG_ERR, _("Unable to restore current directory: %m"));
@@ -93,22 +154,16 @@ static rpmRC runLuaScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes
static const char * const SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin";
-static void doScriptExec(int selinux, ARGV_const_t argv, ARGV_const_t prefixes,
+static void doScriptExec(ARGV_const_t argv, ARGV_const_t prefixes,
FD_t scriptFd, FD_t out)
{
- int pipes[2];
int flag;
int fdno;
int xx;
int open_max;
+ /* SIGPIPE is ignored in rpm, reset to default for the scriptlet */
(void) signal(SIGPIPE, SIG_DFL);
- pipes[0] = pipes[1] = 0;
- /* make stdin inaccessible */
- xx = pipe(pipes);
- xx = close(pipes[1]);
- xx = dup2(pipes[0], STDIN_FILENO);
- xx = close(pipes[0]);
/* XXX Force FD_CLOEXEC on all inherited fdno's. */
open_max = sysconf(_SC_OPEN_MAX);
@@ -165,11 +220,6 @@ static void doScriptExec(int selinux, ARGV_const_t argv, ARGV_const_t prefixes,
/* XXX Don't mtrace into children. */
unsetenv("MALLOC_CHECK_");
- /* Permit libselinux to do the scriptlet exec. */
- if (selinux == 1) {
- xx = rpm_execcon(0, argv[0], argv, environ);
- }
-
if (xx == 0) {
xx = execv(argv[0], argv);
}
@@ -204,14 +254,19 @@ exit:
/**
* Run an external script.
*/
-static rpmRC runExtScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes,
+static rpmRC runExtScript(rpmPlugins plugins, ARGV_const_t prefixes,
const char *sname, rpmlogLvl lvl, FD_t scriptFd,
- ARGV_t * argvp, const char *script, int arg1, int arg2)
+ ARGV_t * argvp, const char *script, int arg1, int arg2,
+ scriptNextFileFunc nextFileFunc)
{
FD_t out = NULL;
char * fn = NULL;
pid_t pid, reaped;
int status;
+ int inpipe[2];
+ FILE *in = NULL;
+ const char *line;
+ char *mline = NULL;
rpmRC rc = RPMRC_FAIL;
rpmlog(RPMLOG_DEBUG, "%s: scriptlet start\n", sname);
@@ -234,6 +289,14 @@ static rpmRC runExtScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes
}
}
+ if (pipe(inpipe) < 0) {
+ rpmlog(RPMLOG_ERR,
+ ("Couldn't create pipe: %s\n"), strerror(errno));
+ goto exit;
+ }
+ in = fdopen(inpipe[1], "w");
+ inpipe[1] = 0;
+
if (scriptFd != NULL) {
if (rpmIsVerbose()) {
out = fdDup(Fileno(scriptFd));
@@ -261,13 +324,41 @@ static rpmRC runExtScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes
rpmlog(RPMLOG_DEBUG, "%s: execv(%s) pid %d\n",
sname, *argvp[0], (unsigned)getpid());
+ fclose(in);
+ dup2(inpipe[0], STDIN_FILENO);
+
/* Run scriptlet post fork hook for all plugins */
if (rpmpluginsCallScriptletForkPost(plugins, *argvp[0], RPMSCRIPTLET_FORK | RPMSCRIPTLET_EXEC) != RPMRC_FAIL) {
- doScriptExec(selinux, *argvp, prefixes, scriptFd, out);
+ doScriptExec(*argvp, prefixes, scriptFd, out);
} else {
_exit(126); /* exit 126 for compatibility with bash(1) */
}
}
+ close(inpipe[0]);
+ inpipe[0] = 0;
+
+ if (nextFileFunc->func) {
+ while ((line = nextFileFunc->func(nextFileFunc->param)) != NULL) {
+ size_t size = strlen(line);
+ size_t ret_size;
+ mline = xstrdup(line);
+ mline[size] = '\n';
+
+ ret_size = fwrite(mline, size + 1, 1, in);
+ mline = _free(mline);
+ if (ret_size != 1) {
+ if (errno == EPIPE) {
+ break;
+ } else {
+ rpmlog(RPMLOG_ERR, _("Fwrite failed: %s"), strerror(errno));
+ rc = RPMRC_FAIL;
+ goto exit;
+ }
+ }
+ }
+ }
+ fclose(in);
+ in = NULL;
do {
reaped = waitpid(pid, &status, 0);
@@ -293,6 +384,12 @@ static rpmRC runExtScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes
}
exit:
+ if (in)
+ fclose(in);
+
+ if (inpipe[0])
+ close(inpipe[0]);
+
if (out)
Fclose(out); /* XXX dup'd STDOUT_FILENO */
@@ -301,11 +398,13 @@ exit:
unlink(fn);
free(fn);
}
+ free(mline);
+
return rc;
}
rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
- ARGV_const_t prefixes, int warn_only, int selinux, rpmPlugins plugins)
+ ARGV_const_t prefixes, int warn_only, rpmPlugins plugins)
{
ARGV_t args = NULL;
rpmlogLvl lvl = warn_only ? RPMLOG_WARNING : RPMLOG_ERR;
@@ -329,9 +428,9 @@ rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
if (rc != RPMRC_FAIL) {
if (script_type & RPMSCRIPTLET_EXEC) {
- rc = runExtScript(plugins, selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2);
+ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
} else {
- rc = runLuaScript(plugins, selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2);
+ rc = runLuaScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
}
}
@@ -343,54 +442,24 @@ rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
return rc;
}
+static rpmscriptTypes getScriptType(rpmTagVal scriptTag)
+{
+ return findTag(scriptTag)->type;
+}
+
static rpmTagVal getProgTag(rpmTagVal scriptTag)
{
- switch (scriptTag) {
- case RPMTAG_PREIN: return RPMTAG_PREINPROG;
- case RPMTAG_POSTIN: return RPMTAG_POSTINPROG;
- case RPMTAG_PREUN: return RPMTAG_PREUNPROG;
- case RPMTAG_POSTUN: return RPMTAG_POSTUNPROG;
- case RPMTAG_PRETRANS: return RPMTAG_PRETRANSPROG;
- case RPMTAG_POSTTRANS: return RPMTAG_POSTTRANSPROG;
- case RPMTAG_VERIFYSCRIPT: return RPMTAG_VERIFYSCRIPTPROG;
- default: return RPMTAG_NOT_FOUND;
- }
+ return findTag(scriptTag)->progtag;
}
static rpmTagVal getFlagTag(rpmTagVal scriptTag)
{
- switch (scriptTag) {
- case RPMTAG_PRETRANS: return RPMTAG_PRETRANSFLAGS;
- case RPMTAG_POSTTRANS: return RPMTAG_POSTTRANSFLAGS;
- case RPMTAG_PREUN: return RPMTAG_PREUNFLAGS;
- case RPMTAG_POSTUN: return RPMTAG_POSTUNFLAGS;
- case RPMTAG_PREIN: return RPMTAG_PREINFLAGS;
- case RPMTAG_POSTIN: return RPMTAG_POSTINFLAGS;
- case RPMTAG_VERIFYSCRIPT: return RPMTAG_VERIFYSCRIPTFLAGS;
- case RPMTAG_TRIGGERSCRIPTS: return RPMTAG_TRIGGERSCRIPTFLAGS;
- default:
- break;
- }
- return RPMTAG_NOT_FOUND;
+ return findTag(scriptTag)->flagtag;
}
static const char * tag2sln(rpmTagVal tag)
{
- switch (tag) {
- case RPMTAG_PRETRANS: return "%pretrans";
- case RPMTAG_TRIGGERPREIN: return "%triggerprein";
- case RPMTAG_PREIN: return "%pre";
- case RPMTAG_POSTIN: return "%post";
- case RPMTAG_TRIGGERIN: return "%triggerin";
- case RPMTAG_TRIGGERUN: return "%triggerun";
- case RPMTAG_PREUN: return "%preun";
- case RPMTAG_POSTUN: return "%postun";
- case RPMTAG_POSTTRANS: return "%posttrans";
- case RPMTAG_TRIGGERPOSTUN: return "%triggerpostun";
- case RPMTAG_VERIFYSCRIPT: return "%verify";
- default: break;
- }
- return "%unknownscript";
+ return findTag(tag)->desc;
}
static rpmScript rpmScriptNew(Header h, rpmTagVal tag, const char *body,
@@ -399,6 +468,7 @@ static rpmScript rpmScriptNew(Header h, rpmTagVal tag, const char *body,
char *nevra = headerGetAsString(h, RPMTAG_NEVRA);
rpmScript script = xcalloc(1, sizeof(*script));
script->tag = tag;
+ script->type = getScriptType(tag);
script->flags = flags;
script->body = (body != NULL) ? xstrdup(body) : NULL;
rasprintf(&script->descr, "%s(%s)", tag2sln(tag), nevra);
@@ -416,20 +486,101 @@ static rpmScript rpmScriptNew(Header h, rpmTagVal tag, const char *body,
script->body = body;
}
+ script->nextFileFunc.func = NULL;
+ script->nextFileFunc.param = NULL;
+
free(nevra);
return script;
}
-rpmScript rpmScriptFromTriggerTag(Header h, rpmTagVal triggerTag, uint32_t ix)
+void rpmScriptSetNextFileFunc(rpmScript script, char *(*func)(void *),
+ void *param)
+{
+ script->nextFileFunc.func = func;
+ script->nextFileFunc.param = param;
+}
+
+rpmTagVal triggerDsTag(rpmscriptTriggerModes tm)
+{
+ rpmTagVal tag = RPMTAG_NOT_FOUND;
+ switch (tm) {
+ case RPMSCRIPT_NORMALTRIGGER:
+ tag = RPMTAG_TRIGGERNAME;
+ break;
+ case RPMSCRIPT_FILETRIGGER:
+ tag = RPMTAG_FILETRIGGERNAME;
+ break;
+ case RPMSCRIPT_TRANSFILETRIGGER:
+ tag = RPMTAG_TRANSFILETRIGGERNAME;
+ break;
+ }
+ return tag;
+}
+
+rpmscriptTriggerModes triggerMode(rpmTagVal tag)
+{
+ rpmscriptTriggerModes tm = 0;
+ switch (tag) {
+ case RPMTAG_TRIGGERNAME:
+ tm = RPMSCRIPT_NORMALTRIGGER;
+ break;
+ case RPMTAG_FILETRIGGERNAME:
+ tm = RPMSCRIPT_FILETRIGGER;
+ break;
+ case RPMTAG_TRANSFILETRIGGERNAME:
+ tm = RPMSCRIPT_TRANSFILETRIGGER;
+ break;
+ }
+ return tm;
+}
+
+rpmTagVal triggertag(rpmsenseFlags sense)
+{
+ rpmTagVal tag = RPMTAG_NOT_FOUND;
+ switch (sense) {
+ case RPMSENSE_TRIGGERIN:
+ tag = RPMTAG_TRIGGERIN;
+ break;
+ case RPMSENSE_TRIGGERUN:
+ tag = RPMTAG_TRIGGERUN;
+ break;
+ case RPMSENSE_TRIGGERPOSTUN:
+ tag = RPMTAG_TRIGGERPOSTUN;
+ break;
+ case RPMSENSE_TRIGGERPREIN:
+ tag = RPMTAG_TRIGGERPREIN;
+ break;
+ default:
+ break;
+ }
+ return tag;
+}
+
+rpmScript rpmScriptFromTriggerTag(Header h, rpmTagVal triggerTag,
+ rpmscriptTriggerModes tm, uint32_t ix)
{
rpmScript script = NULL;
struct rpmtd_s tscripts, tprogs, tflags;
headerGetFlags hgflags = HEADERGET_MINMEM;
- headerGet(h, RPMTAG_TRIGGERSCRIPTS, &tscripts, hgflags);
- headerGet(h, RPMTAG_TRIGGERSCRIPTPROG, &tprogs, hgflags);
- headerGet(h, RPMTAG_TRIGGERSCRIPTFLAGS, &tflags, hgflags);
-
+ switch (tm) {
+ case RPMSCRIPT_NORMALTRIGGER:
+ headerGet(h, RPMTAG_TRIGGERSCRIPTS, &tscripts, hgflags);
+ headerGet(h, RPMTAG_TRIGGERSCRIPTPROG, &tprogs, hgflags);
+ headerGet(h, RPMTAG_TRIGGERSCRIPTFLAGS, &tflags, hgflags);
+ break;
+ case RPMSCRIPT_FILETRIGGER:
+ headerGet(h, RPMTAG_FILETRIGGERSCRIPTS, &tscripts, hgflags);
+ headerGet(h, RPMTAG_FILETRIGGERSCRIPTPROG, &tprogs, hgflags);
+ headerGet(h, RPMTAG_FILETRIGGERSCRIPTFLAGS, &tflags, hgflags);
+ break;
+ case RPMSCRIPT_TRANSFILETRIGGER:
+ headerGet(h, RPMTAG_TRANSFILETRIGGERSCRIPTS, &tscripts, hgflags);
+ headerGet(h, RPMTAG_TRANSFILETRIGGERSCRIPTPROG, &tprogs, hgflags);
+ headerGet(h, RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS, &tflags, hgflags);
+ break;
+ }
+
if (rpmtdSetIndex(&tscripts, ix) >= 0 && rpmtdSetIndex(&tprogs, ix) >= 0) {
rpmscriptFlags sflags = 0;
const char *prog = rpmtdGetString(&tprogs);
@@ -487,3 +638,8 @@ rpmTagVal rpmScriptTag(rpmScript script)
{
return (script != NULL) ? script->tag : RPMTAG_NOT_FOUND;
}
+
+rpmscriptTypes rpmScriptType(rpmScript script)
+{
+ return (script != NULL) ? script->type : 0;
+}
diff --git a/lib/rpmscript.h b/lib/rpmscript.h
index 852735b8d..3768077c7 100644
--- a/lib/rpmscript.h
+++ b/lib/rpmscript.h
@@ -3,6 +3,33 @@
#include <rpm/rpmtypes.h>
#include <rpm/argv.h>
+#include <rpm/rpmds.h>
+
+/* Rpm scriptlet types */
+enum rpmscriptTypes_e {
+ RPMSCRIPT_PREIN = (1 << 0),
+ RPMSCRIPT_PREUN = (1 << 1),
+ RPMSCRIPT_POSTIN = (1 << 2),
+ RPMSCRIPT_POSTUN = (1 << 3),
+ RPMSCRIPT_TRIGGERPREIN = (1 << 4),
+ RPMSCRIPT_TRIGGERUN = (1 << 6),
+ RPMSCRIPT_TRIGGERIN = (1 << 5),
+ RPMSCRIPT_TRIGGERPOSTUN = (1 << 7),
+ RPMSCRIPT_PRETRANS = (1 << 8),
+ RPMSCRIPT_POSTTRANS = (1 << 9),
+ /* ... */
+ RPMSCRIPT_VERIFY = (1 << 24),
+};
+
+typedef rpmFlags rpmscriptTypes;
+
+enum rpmscriptTriggerMode_e {
+ RPMSCRIPT_NORMALTRIGGER = (1 << 0),
+ RPMSCRIPT_FILETRIGGER = (1 << 1),
+ RPMSCRIPT_TRANSFILETRIGGER = (1 << 2),
+};
+
+typedef rpmFlags rpmscriptTriggerModes;
enum rpmscriptFlags_e {
RPMSCRIPT_FLAG_NONE = 0,
@@ -19,20 +46,37 @@ extern "C" {
#endif
RPM_GNUC_INTERNAL
+rpmTagVal triggerDsTag(rpmscriptTriggerModes tm);
+
+RPM_GNUC_INTERNAL
+rpmscriptTriggerModes triggerMode(rpmTagVal tag);
+
+RPM_GNUC_INTERNAL
+rpmTagVal triggertag(rpmsenseFlags sense);
+
+RPM_GNUC_INTERNAL
rpmScript rpmScriptFromTag(Header h, rpmTagVal scriptTag);
RPM_GNUC_INTERNAL
-rpmScript rpmScriptFromTriggerTag(Header h, rpmTagVal triggerTag, uint32_t ix);
+rpmScript rpmScriptFromTriggerTag(Header h, rpmTagVal triggerTag,
+ rpmscriptTriggerModes tm, uint32_t ix);
RPM_GNUC_INTERNAL
rpmScript rpmScriptFree(rpmScript script);
RPM_GNUC_INTERNAL
rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
- ARGV_const_t prefixes, int warn_only, int selinux, rpmPlugins plugins);
+ ARGV_const_t prefixes, int warn_only, rpmPlugins plugins);
RPM_GNUC_INTERNAL
rpmTagVal rpmScriptTag(rpmScript script);
+
+RPM_GNUC_INTERNAL
+rpmscriptTypes rpmScriptType(rpmScript script);
+
+RPM_GNUC_INTERNAL
+void rpmScriptSetNextFileFunc(rpmScript script, char *(*func)(void *),
+ void *param);
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmtag.h b/lib/rpmtag.h
index 51691018e..276df7a23 100644
--- a/lib/rpmtag.h
+++ b/lib/rpmtag.h
@@ -1,6 +1,12 @@
#ifndef _RPMTAG_H
#define _RPMTAG_H
+/** \ingroup rpmtag
+ * \file lib/rpmtag.h
+ *
+ * Accessing RPM tags: values, types, ...
+ */
+
#include <rpm/rpmtypes.h>
#ifdef __cplusplus
@@ -57,6 +63,8 @@ typedef enum rpmTag_e {
#define RPMTAG_HDRID RPMTAG_SHA1HEADER /* s */
RPMTAG_LONGSIGSIZE = RPMTAG_SIG_BASE+14, /* l */
RPMTAG_LONGARCHIVESIZE = RPMTAG_SIG_BASE+15, /* l */
+ /* RPMTAG_SIG_BASE+16 reserved */
+ RPMTAG_SHA256HEADER = RPMTAG_SIG_BASE+17, /* s */
RPMTAG_NAME = 1000, /* s */
#define RPMTAG_N RPMTAG_NAME /* s */
@@ -117,8 +125,8 @@ typedef enum rpmTag_e {
RPMTAG_REQUIRENAME = 1049, /* s[] */
#define RPMTAG_REQUIRES RPMTAG_REQUIRENAME /* s[] */
RPMTAG_REQUIREVERSION = 1050, /* s[] */
- RPMTAG_NOSOURCE = 1051, /* i */
- RPMTAG_NOPATCH = 1052, /* i */
+ RPMTAG_NOSOURCE = 1051, /* i[] */
+ RPMTAG_NOPATCH = 1052, /* i[] */
RPMTAG_CONFLICTFLAGS = 1053, /* i[] */
RPMTAG_CONFLICTNAME = 1054, /* s[] */
#define RPMTAG_CONFLICTS RPMTAG_CONFLICTNAME /* s[] */
@@ -217,14 +225,14 @@ typedef enum rpmTag_e {
RPMTAG_PRETRANSPROG = 1153, /* s[] */
RPMTAG_POSTTRANSPROG = 1154, /* s[] */
RPMTAG_DISTTAG = 1155, /* s */
- RPMTAG_SUGGESTSNAME = 1156, /* s[] extension */
-#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] */
- RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension */
- RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension */
- RPMTAG_ENHANCESNAME = 1159, /* s[] extension */
-#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] */
- RPMTAG_ENHANCESVERSION = 1160, /* s[] extension */
- RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension */
+ RPMTAG_OLDSUGGESTSNAME = 1156, /* s[] - obsolete */
+#define RPMTAG_OLDSUGGESTS RPMTAG_OLDSUGGESTSNAME /* s[] - obsolete */
+ RPMTAG_OLDSUGGESTSVERSION = 1157, /* s[] - obsolete */
+ RPMTAG_OLDSUGGESTSFLAGS = 1158, /* i[] - obsolete */
+ RPMTAG_OLDENHANCESNAME = 1159, /* s[] - obsolete */
+#define RPMTAG_OLDENHANCES RPMTAG_OLDENHANCESNAME /* s[] - obsolete */
+ RPMTAG_OLDENHANCESVERSION = 1160, /* s[] - obsolete */
+ RPMTAG_OLDENHANCESFLAGS = 1161, /* i[] - obsolete */
RPMTAG_PRIORITY = 1162, /* i[] extension placeholder (unimplemented) */
RPMTAG_CVSID = 1163, /* s (unimplemented) */
#define RPMTAG_SVNID RPMTAG_CVSID /* s (unimplemented) */
@@ -261,6 +269,7 @@ typedef enum rpmTag_e {
RPMTAG_BUILDOBSOLETES = 1194, /* internal (unimplemented) */
RPMTAG_DBINSTANCE = 1195, /* i extension */
RPMTAG_NVRA = 1196, /* s extension */
+
/* tags 1997-4999 reserved */
RPMTAG_FILENAMES = 5000, /* s[] extension */
RPMTAG_FILEPROVIDE = 5001, /* s[] extension */
@@ -290,7 +299,7 @@ typedef enum rpmTag_e {
RPMTAG_POSTTRANSFLAGS = 5025, /* i */
RPMTAG_VERIFYSCRIPTFLAGS = 5026, /* i */
RPMTAG_TRIGGERSCRIPTFLAGS = 5027, /* i[] */
- RPMTAG_COLLECTIONS = 5029, /* s[] list of collections */
+ RPMTAG_COLLECTIONS = 5029, /* s[] list of collections (unimplemented) */
RPMTAG_POLICYNAMES = 5030, /* s[] */
RPMTAG_POLICYTYPES = 5031, /* s[] */
RPMTAG_POLICYTYPESINDEXES = 5032, /* i[] */
@@ -307,8 +316,60 @@ typedef enum rpmTag_e {
RPMTAG_OBSOLETENEVRS = 5043, /* s[] extension */
RPMTAG_CONFLICTNEVRS = 5044, /* s[] extension */
RPMTAG_FILENLINKS = 5045, /* i[] extension */
- /* Skip numbers which might be used in new RPM versions */
- RPMTAG_BUILDINFO = 7000, /* s[] information about build */
+ RPMTAG_RECOMMENDNAME = 5046, /* s[] */
+#define RPMTAG_RECOMMENDS RPMTAG_RECOMMENDNAME /* s[] */
+ RPMTAG_RECOMMENDVERSION = 5047, /* s[] */
+ RPMTAG_RECOMMENDFLAGS = 5048, /* i[] */
+ RPMTAG_SUGGESTNAME = 5049, /* s[] */
+#define RPMTAG_SUGGESTS RPMTAG_SUGGESTNAME /* s[] */
+ RPMTAG_SUGGESTVERSION = 5050, /* s[] extension */
+ RPMTAG_SUGGESTFLAGS = 5051, /* i[] extension */
+ RPMTAG_SUPPLEMENTNAME = 5052, /* s[] */
+#define RPMTAG_SUPPLEMENTS RPMTAG_SUPPLEMENTNAME /* s[] */
+ RPMTAG_SUPPLEMENTVERSION = 5053, /* s[] */
+ RPMTAG_SUPPLEMENTFLAGS = 5054, /* i[] */
+ RPMTAG_ENHANCENAME = 5055, /* s[] */
+#define RPMTAG_ENHANCES RPMTAG_ENHANCENAME /* s[] */
+ RPMTAG_ENHANCEVERSION = 5056, /* s[] */
+ RPMTAG_ENHANCEFLAGS = 5057, /* i[] */
+ RPMTAG_RECOMMENDNEVRS = 5058, /* s[] extension */
+ RPMTAG_SUGGESTNEVRS = 5059, /* s[] extension */
+ RPMTAG_SUPPLEMENTNEVRS = 5060, /* s[] extension */
+ RPMTAG_ENHANCENEVRS = 5061, /* s[] extension */
+ RPMTAG_ENCODING = 5062, /* s */
+ RPMTAG_FILETRIGGERIN = 5063, /* internal */
+ RPMTAG_FILETRIGGERUN = 5064, /* internal */
+ RPMTAG_FILETRIGGERPOSTUN = 5065, /* internal */
+ RPMTAG_FILETRIGGERSCRIPTS = 5066, /* s[] */
+ RPMTAG_FILETRIGGERSCRIPTPROG = 5067, /* s[] */
+ RPMTAG_FILETRIGGERSCRIPTFLAGS = 5068, /* i[] */
+ RPMTAG_FILETRIGGERNAME = 5069, /* s[] */
+ RPMTAG_FILETRIGGERINDEX = 5070, /* i[] */
+ RPMTAG_FILETRIGGERVERSION = 5071, /* s[] */
+ RPMTAG_FILETRIGGERFLAGS = 5072, /* i[] */
+ RPMTAG_TRANSFILETRIGGERIN = 5073, /* internal */
+ RPMTAG_TRANSFILETRIGGERUN = 5074, /* internal */
+ RPMTAG_TRANSFILETRIGGERPOSTUN = 5075, /* internal */
+ RPMTAG_TRANSFILETRIGGERSCRIPTS = 5076, /* s[] */
+ RPMTAG_TRANSFILETRIGGERSCRIPTPROG = 5077, /* s[] */
+ RPMTAG_TRANSFILETRIGGERSCRIPTFLAGS = 5078, /* i[] */
+ RPMTAG_TRANSFILETRIGGERNAME = 5079, /* s[] */
+ RPMTAG_TRANSFILETRIGGERINDEX = 5080, /* i[] */
+ RPMTAG_TRANSFILETRIGGERVERSION = 5081, /* s[] */
+ RPMTAG_TRANSFILETRIGGERFLAGS = 5082, /* i[] */
+ RPMTAG_REMOVEPATHPOSTFIXES = 5083, /* s internal */
+ RPMTAG_FILETRIGGERPRIORITIES = 5084, /* i[] */
+ RPMTAG_TRANSFILETRIGGERPRIORITIES = 5085, /* i[] */
+ RPMTAG_FILETRIGGERCONDS = 5086, /* s[] extension */
+ RPMTAG_FILETRIGGERTYPE = 5087, /* s[] extension */
+ RPMTAG_TRANSFILETRIGGERCONDS = 5088, /* s[] extension */
+ RPMTAG_TRANSFILETRIGGERTYPE = 5089, /* s[] extension */
+ RPMTAG_FILESIGNATURES = 5090, /* s[] */
+ RPMTAG_FILESIGNATURELENGTH = 5091, /* i */
+ RPMTAG_PAYLOADDIGEST = 5092, /* s[] */
+ RPMTAG_PAYLOADDIGESTALGO = 5093, /* i */
+ /* Skip numbers which might be used in new RPM versions */
+ RPMTAG_BUILDINFO = 7000, /* s[] information about build */
RPMTAG_FIRSTFREE_TAG /*!< internal */
} rpmTag;
@@ -334,6 +395,12 @@ typedef enum rpmDbiTag_e {
RPMDBI_SIGMD5 = RPMTAG_SIGMD5,
RPMDBI_SHA1HEADER = RPMTAG_SHA1HEADER,
RPMDBI_INSTFILENAMES = RPMTAG_INSTFILENAMES,
+ RPMDBI_FILETRIGGERNAME = RPMTAG_FILETRIGGERNAME,
+ RPMDBI_TRANSFILETRIGGERNAME = RPMTAG_TRANSFILETRIGGERNAME,
+ RPMDBI_RECOMMENDNAME = RPMTAG_RECOMMENDNAME,
+ RPMDBI_SUGGESTNAME = RPMTAG_SUGGESTNAME,
+ RPMDBI_SUPPLEMENTNAME = RPMTAG_SUPPLEMENTNAME,
+ RPMDBI_ENHANCENAME = RPMTAG_ENHANCENAME,
} rpmDbiTag;
/** \ingroup signature
@@ -348,13 +415,15 @@ typedef enum rpmSigTag_e {
RPMSIGTAG_GPG = 1005, /*!< internal GnuPG signature. */
RPMSIGTAG_PGP5 = 1006, /*!< internal PGP5 signature @deprecated legacy. */
RPMSIGTAG_PAYLOADSIZE = 1007,/*!< internal uncompressed payload size (32bit) in bytes. */
+ RPMSIGTAG_RESERVEDSPACE = 1008,/*!< internal space reserved for signatures */
RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1, /*!< internal Broken SHA1, take 1. */
RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2, /*!< internal Broken SHA1, take 2. */
- RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER, /*!< internal sha1 header digest. */
RPMSIGTAG_DSA = RPMTAG_DSAHEADER, /*!< internal DSA header signature. */
RPMSIGTAG_RSA = RPMTAG_RSAHEADER, /*!< internal RSA header signature. */
+ RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER, /*!< internal sha1 header digest. */
RPMSIGTAG_LONGSIZE = RPMTAG_LONGSIGSIZE, /*!< internal Header+Payload size (64bit) in bytes. */
RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE, /*!< internal uncompressed payload size (64bit) in bytes. */
+ RPMSIGTAG_SHA256 = RPMTAG_SHA256HEADER,
} rpmSigTag;
diff --git a/lib/rpmtd.c b/lib/rpmtd.c
index 550d733ab..e33c8cb53 100644
--- a/lib/rpmtd.c
+++ b/lib/rpmtd.c
@@ -19,7 +19,7 @@ rpmtd rpmtdFree(rpmtd td)
{
/* permit free on NULL td */
if (td != NULL) {
- /* XXX should we free data too - a flag maybe? */
+ rpmtdFreeData(td);
free(td);
}
return NULL;
@@ -27,19 +27,16 @@ rpmtd rpmtdFree(rpmtd td)
void rpmtdReset(rpmtd td)
{
- assert(td != NULL);
-
- memset(td, 0, sizeof(*td));
- td->ix = -1;
+ if (td) {
+ memset(td, 0, sizeof(*td));
+ td->ix = -1;
+ }
}
void rpmtdFreeData(rpmtd td)
{
- assert(td != NULL);
-
- if (td->flags & RPMTD_ALLOCED) {
+ if (td && td->data && td->flags & RPMTD_ALLOCED) {
if (td->flags & RPMTD_PTR_ALLOCED) {
- assert(td->data != NULL);
char **data = td->data;
for (int i = 0; i < td->count; i++) {
free(data[i]);
@@ -52,27 +49,32 @@ void rpmtdFreeData(rpmtd td)
rpm_count_t rpmtdCount(rpmtd td)
{
- assert(td != NULL);
- /* fix up for binary type abusing count as data length */
- return (td->type == RPM_BIN_TYPE) ? 1 : td->count;
+ rpm_count_t count = 0;
+ if (td != NULL) {
+ /* fix up for binary type abusing count as data length */
+ count = (td->type == RPM_BIN_TYPE) ? 1 : td->count;
+ }
+ return count;
+}
+
+rpm_count_t rpmtdSize(rpmtd td)
+{
+ return (td != NULL) ? td->size : 0;
}
rpmTagVal rpmtdTag(rpmtd td)
{
- assert(td != NULL);
- return td->tag;
+ return (td != NULL) ? td->tag : 0;
}
rpmTagType rpmtdType(rpmtd td)
{
- assert(td != NULL);
- return td->type;
+ return (td != NULL) ? td->type : 0;
}
rpmTagClass rpmtdClass(rpmtd td)
{
- assert(td != NULL);
- return rpmTagTypeGetClass(td->type);
+ return (td != NULL) ? rpmTagTypeGetClass(td->type) : 0;
}
rpmtdFlags rpmtdGetFlags(rpmtd td)
@@ -82,15 +84,12 @@ rpmtdFlags rpmtdGetFlags(rpmtd td)
int rpmtdGetIndex(rpmtd td)
{
- assert(td != NULL);
- return td->ix;
+ return (td != NULL) ? td->ix : -1;
}
int rpmtdSetIndex(rpmtd td, int index)
{
- assert(td != NULL);
-
- if (index < 0 || index >= rpmtdCount(td)) {
+ if (td == NULL || index < 0 || index >= rpmtdCount(td)) {
return -1;
}
td->ix = index;
@@ -99,7 +98,8 @@ int rpmtdSetIndex(rpmtd td, int index)
int rpmtdInit(rpmtd td)
{
- assert(td != NULL);
+ if (td == NULL)
+ return -1;
/* XXX check that this is an array type? */
td->ix = -1;
@@ -108,11 +108,9 @@ int rpmtdInit(rpmtd td)
int rpmtdNext(rpmtd td)
{
- assert(td != NULL);
-
int i = -1;
- if (++td->ix >= 0) {
+ if (td != NULL && ++td->ix >= 0) {
if (td->ix < rpmtdCount(td)) {
i = td->ix;
} else {
@@ -124,7 +122,6 @@ int rpmtdNext(rpmtd td)
uint32_t *rpmtdNextUint32(rpmtd td)
{
- assert(td != NULL);
uint32_t *res = NULL;
if (rpmtdNext(td) >= 0) {
res = rpmtdGetUint32(td);
@@ -134,7 +131,6 @@ uint32_t *rpmtdNextUint32(rpmtd td)
uint64_t *rpmtdNextUint64(rpmtd td)
{
- assert(td != NULL);
uint64_t *res = NULL;
if (rpmtdNext(td) >= 0) {
res = rpmtdGetUint64(td);
@@ -144,7 +140,6 @@ uint64_t *rpmtdNextUint64(rpmtd td)
const char *rpmtdNextString(rpmtd td)
{
- assert(td != NULL);
const char *res = NULL;
if (rpmtdNext(td) >= 0) {
res = rpmtdGetString(td);
@@ -156,9 +151,7 @@ char * rpmtdGetChar(rpmtd td)
{
char *res = NULL;
- assert(td != NULL);
-
- if (td->type == RPM_CHAR_TYPE) {
+ if (td != NULL && td->type == RPM_CHAR_TYPE) {
int ix = (td->ix >= 0 ? td->ix : 0);
res = (char *) td->data + ix;
}
@@ -168,9 +161,7 @@ uint16_t * rpmtdGetUint16(rpmtd td)
{
uint16_t *res = NULL;
- assert(td != NULL);
-
- if (td->type == RPM_INT16_TYPE) {
+ if (td != NULL && td->type == RPM_INT16_TYPE) {
int ix = (td->ix >= 0 ? td->ix : 0);
res = (uint16_t *) td->data + ix;
}
@@ -181,9 +172,7 @@ uint32_t * rpmtdGetUint32(rpmtd td)
{
uint32_t *res = NULL;
- assert(td != NULL);
-
- if (td->type == RPM_INT32_TYPE) {
+ if (td != NULL && td->type == RPM_INT32_TYPE) {
int ix = (td->ix >= 0 ? td->ix : 0);
res = (uint32_t *) td->data + ix;
}
@@ -194,9 +183,7 @@ uint64_t * rpmtdGetUint64(rpmtd td)
{
uint64_t *res = NULL;
- assert(td != NULL);
-
- if (td->type == RPM_INT64_TYPE) {
+ if (td != NULL && td->type == RPM_INT64_TYPE) {
int ix = (td->ix >= 0 ? td->ix : 0);
res = (uint64_t *) td->data + ix;
}
@@ -207,7 +194,8 @@ const char * rpmtdGetString(rpmtd td)
{
const char *str = NULL;
- assert(td != NULL);
+ if (td == NULL)
+ return NULL;
if (td->type == RPM_STRING_TYPE) {
str = (const char *) td->data;
@@ -222,10 +210,12 @@ const char * rpmtdGetString(rpmtd td)
uint64_t rpmtdGetNumber(rpmtd td)
{
- assert(td != NULL);
uint64_t val = 0;
int ix = (td->ix >= 0 ? td->ix : 0);
+ if (td == NULL)
+ return 0;
+
switch (td->type) {
case RPM_INT64_TYPE:
val = *((uint64_t *) td->data + ix);
@@ -248,12 +238,12 @@ uint64_t rpmtdGetNumber(rpmtd td)
char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg)
{
- headerTagFormatFunction func = rpmHeaderFormatFuncByValue(fmt);
+ headerFmt ext = rpmHeaderFormatByValue(fmt);
const char *err = NULL;
char *str = NULL;
- if (func) {
- str = func(td);
+ if (ext) {
+ str = rpmHeaderFormatCall(ext, td);
} else {
err = _("Unknown format");
}
@@ -267,10 +257,12 @@ char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg)
int rpmtdSetTag(rpmtd td, rpmTagVal tag)
{
- assert(td != NULL);
rpmTagType newtype = rpmTagGetTagType(tag);
int rc = 0;
+ if (td == NULL)
+ goto exit;
+
/*
* Sanity checks:
* - is the new tag valid at all
@@ -425,8 +417,10 @@ rpmtd rpmtdDup(rpmtd td)
rpmtd newtd = NULL;
char **data = NULL;
int i;
+
+ if (td == NULL)
+ return NULL;
- assert(td != NULL);
/* TODO: permit other types too */
if (td->type != RPM_STRING_ARRAY_TYPE && td->type != RPM_I18NSTRING_TYPE) {
return NULL;
diff --git a/lib/rpmtd.h b/lib/rpmtd.h
index de7101123..040ddb340 100644
--- a/lib/rpmtd.h
+++ b/lib/rpmtd.h
@@ -1,6 +1,12 @@
#ifndef _RPMTD_H
#define _RPMTD_H
+/** \ingroup rpmtd
+ * \file lib/rpmtd.h
+ *
+ * RPM Tag Data Container API
+ */
+
#include <rpm/rpmtypes.h>
#include <rpm/argv.h>
@@ -30,6 +36,7 @@ struct rpmtd_s {
rpm_data_t data; /* pointer to actual data */
rpmtdFlags flags; /* flags on memory allocation etc */
int ix; /* iteration index */
+ rpm_count_t size; /* size of data (only works for RPMTD_IMMUTABLE atm) */
};
/** \ingroup rpmtd
@@ -67,6 +74,14 @@ void rpmtdFreeData(rpmtd td);
rpm_count_t rpmtdCount(rpmtd td);
/** \ingroup rpmtd
+ * Retrieve container data size (eg required for allocation).
+ * Note this currently only works for RPMTD_IMMUTABLE data.
+ * @param td Tag data container
+ * @return Data size in bytes.
+ */
+rpm_count_t rpmtdSize(rpmtd td);
+
+/** \ingroup rpmtd
* Retrieve tag of the container.
* @param td Tag data container
* @return Rpm tag.
diff --git a/lib/rpmte.c b/lib/rpmte.c
index da6f48c5c..66194dc3b 100644
--- a/lib/rpmte.c
+++ b/lib/rpmte.c
@@ -13,6 +13,7 @@
#include <rpm/rpmdb.h>
#include <rpm/rpmlog.h>
+#include "lib/misc.h"
#include "lib/rpmplugins.h"
#include "lib/rpmte_internal.h"
/* strpool-related interfaces */
@@ -50,7 +51,8 @@ struct rpmte_s {
rpmds conflicts; /*!< Conflicts: dependencies. */
rpmds obsoletes; /*!< Obsoletes: dependencies. */
rpmds order; /*!< Order: dependencies. */
- rpmfi fi; /*!< File information. */
+ rpmfiles files; /*!< File information. */
+ rpmfi fi; /*!< File iterator (backwards compat) */
rpmps probs; /*!< Problems (relocations) */
rpmts ts; /*!< Parent transaction */
@@ -70,11 +72,6 @@ struct rpmte_s {
int failed; /*!< (parent) install/erase failed */
rpmfs fs;
-
- ARGV_t lastInCollectionsAny; /*!< list of collections this te is the last to be installed or removed */
- ARGV_t lastInCollectionsAdd; /*!< list of collections this te is the last to be only installed */
- ARGV_t firstInCollectionsRemove; /*!< list of collections this te is the first to be only removed */
- ARGV_t collections; /*!< list of collections */
};
/* forward declarations */
@@ -91,111 +88,26 @@ void rpmteCleanDS(rpmte te)
te->order = rpmdsFree(te->order);
}
-static rpmfi getFI(rpmte p, Header h)
+static rpmfiles getFiles(rpmte p, Header h)
{
rpmfiFlags fiflags;
fiflags = (p->type == TR_ADDED) ? (RPMFI_NOHEADER | RPMFI_FLAGS_INSTALL) :
(RPMFI_NOHEADER | RPMFI_FLAGS_ERASE);
/* relocate stuff in header if necessary */
- if (rpmteType(p) == TR_ADDED && rpmfsFC(p->fs) > 0 && p->nrelocs) {
- if (!headerIsSource(h) && !headerIsEntry(h, RPMTAG_ORIGBASENAMES)) {
- rpmRelocateFileList(p->relocs, p->nrelocs, p->fs, h);
- }
- }
- return rpmfiNewPool(rpmtsPool(p->ts), h, RPMTAG_BASENAMES, fiflags);
-}
-
-/* stupid bubble sort, but it's probably faster here */
-static void sortRelocs(rpmRelocation *relocations, int numRelocations)
-{
- for (int i = 0; i < numRelocations; i++) {
- int madeSwap = 0;
- for (int j = 1; j < numRelocations; j++) {
- rpmRelocation tmpReloc;
- if (relocations[j - 1].oldPath == NULL || /* XXX can't happen */
- relocations[j ].oldPath == NULL || /* XXX can't happen */
- strcmp(relocations[j - 1].oldPath, relocations[j].oldPath) <= 0)
- continue;
- tmpReloc = relocations[j - 1];
- relocations[j - 1] = relocations[j];
- relocations[j] = tmpReloc;
- madeSwap = 1;
- }
- if (!madeSwap) break;
- }
-}
-
-static char * stripTrailingChar(char * s, char c)
-{
- char * t;
- for (t = s + strlen(s) - 1; *t == c && t >= s; t--)
- *t = '\0';
- return s;
-}
-
-static void buildRelocs(rpmte p, Header h, rpmRelocation *relocs)
-{
- int i;
- struct rpmtd_s validRelocs;
-
- for (rpmRelocation *r = relocs; r->oldPath || r->newPath; r++)
- p->nrelocs++;
-
- headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM);
- p->relocs = xmalloc(sizeof(*p->relocs) * (p->nrelocs+1));
-
- /* Build sorted relocation list from raw relocations. */
- for (i = 0; i < p->nrelocs; i++) {
- char * t;
-
- /*
- * Default relocations (oldPath == NULL) are handled in the UI,
- * not rpmlib.
- */
- if (relocs[i].oldPath == NULL) continue; /* XXX can't happen */
-
- /* FIXME: Trailing /'s will confuse us greatly. Internal ones will
- too, but those are more trouble to fix up. :-( */
- t = xstrdup(relocs[i].oldPath);
- p->relocs[i].oldPath = (t[0] == '/' && t[1] == '\0')
- ? t
- : stripTrailingChar(t, '/');
-
- /* An old path w/o a new path is valid, and indicates exclusion */
- if (relocs[i].newPath) {
- int valid = 0;
- const char *validprefix;
-
- t = xstrdup(relocs[i].newPath);
- p->relocs[i].newPath = (t[0] == '/' && t[1] == '\0')
- ? t
- : stripTrailingChar(t, '/');
-
- /* FIX: relocations[i].oldPath == NULL */
- /* Verify that the relocation's old path is in the header. */
- rpmtdInit(&validRelocs);
- while ((validprefix = rpmtdNextString(&validRelocs))) {
- if (rstreq(validprefix, p->relocs[i].oldPath)) {
- valid = 1;
- break;
+ if (rpmteType(p) == TR_ADDED && rpmfsFC(p->fs) > 0) {
+ if (!headerIsEntry(h, RPMTAG_ORIGBASENAMES)) {
+ if (rpmteIsSource(p)) {
+ /* Unlike binary packages, source relocation can fail */
+ if (rpmRelocateSrpmFileList(h, rpmtsRootDir(p->ts)) < 0) {
+ return NULL;
}
+ } else {
+ rpmRelocateFileList(p->relocs, p->nrelocs, p->fs, h);
}
-
- if (!valid) {
- if (p->badrelocs == NULL)
- p->badrelocs = xcalloc(p->nrelocs, sizeof(*p->badrelocs));
- p->badrelocs[i] = 1;
- }
- } else {
- p->relocs[i].newPath = NULL;
}
}
- p->relocs[i].oldPath = NULL;
- p->relocs[i].newPath = NULL;
- sortRelocs(p->relocs, p->nrelocs);
-
- rpmtdFreeData(&validRelocs);
+ return rpmfilesNew(rpmtsPool(p->ts), h, RPMTAG_BASENAMES, fiflags);
}
/**
@@ -208,7 +120,7 @@ static void buildRelocs(rpmte p, Header h, rpmRelocation *relocs)
static int addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs)
{
rpmstrPool tspool = rpmtsPool(p->ts);
- struct rpmtd_s colls, bnames;
+ struct rpmtd_s bnames;
int rc = 1; /* assume failure */
p->name = headerGetAsString(h, RPMTAG_NAME);
@@ -237,7 +149,7 @@ static int addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs)
p->relocs = NULL;
p->badrelocs = NULL;
if (relocs != NULL)
- buildRelocs(p, h, relocs);
+ rpmRelocationBuild(h, relocs, &p->nrelocs, &p->relocs, &p->badrelocs);
p->db_instance = headerGetInstance(h);
p->key = key;
@@ -258,10 +170,10 @@ static int addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs)
p->fs = rpmfsNew(rpmtdCount(&bnames), (p->type == TR_ADDED));
rpmtdFreeData(&bnames);
- p->fi = getFI(p, h);
+ p->files = getFiles(p, h);
/* Packages with no files return an empty file info set, NULL is an error */
- if (p->fi == NULL)
+ if (p->files == NULL)
goto exit;
/* See if we have pre/posttrans scripts. */
@@ -272,19 +184,6 @@ static int addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs)
headerIsEntry(h, RPMTAG_POSTTRANSPROG)) ?
RPMTE_HAVE_POSTTRANS : 0;
- p->lastInCollectionsAny = NULL;
- p->lastInCollectionsAdd = NULL;
- p->firstInCollectionsRemove = NULL;
- p->collections = NULL;
- if (headerGet(h, RPMTAG_COLLECTIONS, &colls, HEADERGET_MINMEM)) {
- const char *collname;
- while ((collname = rpmtdNextString(&colls))) {
- argvAdd(&p->collections, collname);
- }
- argvSort(p->collections, NULL);
- rpmtdFreeData(&colls);
- }
-
rpmteColorDS(p, RPMTAG_PROVIDENAME);
rpmteColorDS(p, RPMTAG_REQUIRENAME);
@@ -320,16 +219,12 @@ rpmte rpmteFree(rpmte te)
fdFree(te->fd);
rpmfiFree(te->fi);
+ rpmfilesFree(te->files);
headerFree(te->h);
rpmfsFree(te->fs);
rpmpsFree(te->probs);
rpmteCleanDS(te);
- argvFree(te->collections);
- argvFree(te->lastInCollectionsAny);
- argvFree(te->lastInCollectionsAdd);
- argvFree(te->firstInCollectionsRemove);
-
memset(te, 0, sizeof(*te)); /* XXX trash and burn */
free(te);
}
@@ -433,46 +328,6 @@ rpm_color_t rpmteSetColor(rpmte te, rpm_color_t color)
return ocolor;
}
-ARGV_const_t rpmteCollections(rpmte te)
-{
- return (te != NULL) ? te->collections : NULL;
-}
-
-int rpmteHasCollection(rpmte te, const char *collname)
-{
- return (argvSearch(rpmteCollections(te), collname, NULL) != NULL);
-}
-
-int rpmteAddToLastInCollectionAdd(rpmte te, const char *collname)
-{
- if (te != NULL) {
- argvAdd(&te->lastInCollectionsAdd, collname);
- argvSort(te->lastInCollectionsAdd, NULL);
- return 0;
- }
- return -1;
-}
-
-int rpmteAddToLastInCollectionAny(rpmte te, const char *collname)
-{
- if (te != NULL) {
- argvAdd(&te->lastInCollectionsAny, collname);
- argvSort(te->lastInCollectionsAny, NULL);
- return 0;
- }
- return -1;
-}
-
-int rpmteAddToFirstInCollectionRemove(rpmte te, const char *collname)
-{
- if (te != NULL) {
- argvAdd(&te->firstInCollectionsRemove, collname);
- argvSort(te->firstInCollectionsRemove, NULL);
- return 0;
- }
- return -1;
-}
-
rpm_loff_t rpmtePkgFileSize(rpmte te)
{
return (te != NULL ? te->pkgFileSize : 0);
@@ -571,14 +426,12 @@ rpmds rpmteDS(rpmte te, rpmTagVal tag)
return NULL;
}
-rpmfi rpmteSetFI(rpmte te, rpmfi fi)
+void rpmteCleanFiles(rpmte te)
{
if (te != NULL) {
te->fi = rpmfiFree(te->fi);
- if (fi != NULL)
- te->fi = rpmfiLink(fi);
+ te->files = rpmfilesFree(te->files);
}
- return NULL;
}
rpmfi rpmteFI(rpmte te)
@@ -586,12 +439,20 @@ rpmfi rpmteFI(rpmte te)
if (te == NULL)
return NULL;
+ if (te->fi == NULL)
+ te->fi = rpmfilesIter(te->files, RPMFI_ITER_FWD);
+
return te->fi; /* XXX take fi reference here? */
}
+rpmfiles rpmteFiles(rpmte te)
+{
+ return (te != NULL) ? rpmfilesLink(te->files) : NULL;
+}
+
static void rpmteColorDS(rpmte te, rpmTag tag)
{
- rpmfi fi = rpmteFI(te);
+ rpmfi fi;
rpmds ds = rpmteDS(te, tag);
char deptype = 'R';
char mydt;
@@ -602,7 +463,7 @@ static void rpmteColorDS(rpmte te, rpmTag tag)
unsigned ix;
int ndx, i;
- if (!(te && (Count = rpmdsCount(ds)) > 0 && rpmfiFC(fi) > 0))
+ if (!(te && (Count = rpmdsCount(ds)) > 0 && rpmfilesFC(te->files) > 0))
return;
switch (tag) {
@@ -620,8 +481,7 @@ static void rpmteColorDS(rpmte te, rpmTag tag)
colors = xcalloc(Count, sizeof(*colors));
/* Calculate dependency color. */
- fi = rpmfiInit(fi, 0);
- if (fi != NULL)
+ fi = rpmfilesIter(te->files, RPMFI_ITER_FWD);
while (rpmfiNext(fi) >= 0) {
val = rpmfiFColor(fi);
ddict = NULL;
@@ -646,6 +506,7 @@ assert (ix < Count);
(void) rpmdsSetColor(ds, val);
}
free(colors);
+ rpmfiFree(fi);
}
static Header rpmteDBHeader(rpmte te)
@@ -707,8 +568,8 @@ static int rpmteOpen(rpmte te, int reload_fi)
if (h != NULL) {
if (reload_fi) {
/* This can fail if we get a different, bad header from callback */
- te->fi = getFI(te, h);
- rc = (te->fi != NULL);
+ te->files = getFiles(te, h);
+ rc = (te->files != NULL);
} else {
rc = 1;
}
@@ -739,7 +600,7 @@ static int rpmteClose(rpmte te, int reset_fi)
}
rpmteSetHeader(te, NULL);
if (reset_fi) {
- rpmteSetFI(te, NULL);
+ rpmteCleanFiles(te);
}
return 1;
}
@@ -864,7 +725,7 @@ void rpmteAddRelocProblems(rpmte te)
const char * rpmteTypeString(rpmte te)
{
- switch(rpmteType(te)) {
+ switch (rpmteType(te)) {
case TR_ADDED: return _("install");
case TR_REMOVED: return _("erase");
default: return "???";
@@ -876,70 +737,7 @@ rpmfs rpmteGetFileStates(rpmte te)
return te->fs;
}
-rpmRC rpmteSetupCollectionPlugins(rpmte te)
-{
- ARGV_const_t colls = rpmteCollections(te);
- rpmPlugins plugins = rpmtsPlugins(te->ts);
- rpmRC rc = RPMRC_OK;
-
- if (!colls) {
- return rc;
- }
-
- rpmteOpen(te, 0);
- for (; colls && *colls; colls++) {
- if (!rpmpluginsPluginAdded(plugins, *colls)) {
- rc = rpmpluginsAddPlugin(plugins, "collection", *colls);
- if (rc != RPMRC_OK) {
- break;
- }
- }
- rc = rpmpluginsCallOpenTE(plugins, *colls, te);
- if (rc != RPMRC_OK) {
- break;
- }
- }
- rpmteClose(te, 0);
-
- return rc;
-}
-
-static rpmRC rpmteRunAllCollections(rpmte te, rpmPluginHook hook)
-{
- ARGV_const_t colls;
- rpmRC(*collHook) (rpmPlugins, const char *);
- rpmRC rc = RPMRC_OK;
-
- if (rpmtsFlags(te->ts) & RPMTRANS_FLAG_NOCOLLECTIONS) {
- goto exit;
- }
-
- switch (hook) {
- case PLUGINHOOK_COLL_POST_ADD:
- colls = te->lastInCollectionsAdd;
- collHook = rpmpluginsCallCollectionPostAdd;
- break;
- case PLUGINHOOK_COLL_POST_ANY:
- colls = te->lastInCollectionsAny;
- collHook = rpmpluginsCallCollectionPostAny;
- break;
- case PLUGINHOOK_COLL_PRE_REMOVE:
- colls = te->firstInCollectionsRemove;
- collHook = rpmpluginsCallCollectionPreRemove;
- break;
- default:
- goto exit;
- }
-
- for (; colls && *colls; colls++) {
- rc = collHook(rpmtsPlugins(te->ts), *colls);
- }
-
- exit:
- return rc;
-}
-
-int rpmteProcess(rpmte te, pkgGoal goal)
+int rpmteProcess(rpmte te, pkgGoal goal, int num)
{
/* Only install/erase resets pkg file info */
int scriptstage = (goal != PKG_INSTALL && goal != PKG_ERASE);
@@ -954,20 +752,16 @@ int rpmteProcess(rpmte te, pkgGoal goal)
}
}
- if (!scriptstage) {
- rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE);
- }
-
if (rpmteOpen(te, reset_fi)) {
+ if (!scriptstage) {
+ rpmtsNotify(te->ts, te, RPMCALLBACK_ELEM_PROGRESS, num,
+ rpmtsMembers(te->ts)->orderCount);
+ }
+
failed = rpmpsmRun(te->ts, te, goal);
rpmteClose(te, reset_fi);
}
- if (!scriptstage) {
- rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD);
- rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY);
- }
-
if (failed) {
failed = rpmteMarkFailed(te);
}
diff --git a/lib/rpmte.h b/lib/rpmte.h
index a66c1e91f..c52c44a09 100644
--- a/lib/rpmte.h
+++ b/lib/rpmte.h
@@ -233,27 +233,19 @@ int rpmteFailed(rpmte te);
rpmds rpmteDS(rpmte te, rpmTagVal tag);
/** \ingroup rpmte
- * Retrieve file info tag set from transaction element.
+ * Retrieve file info set from transaction element.
* @param te transaction element
- * @return file info tag set
+ * @return file info set (refcounted)
*/
-rpmfi rpmteFI(rpmte te);
+rpmfiles rpmteFiles(rpmte te);
/** \ingroup rpmte
- * Retrieve list of collections
+ * Retrieve file info iterator from transaction element.
+ * @deprecated use rpmteFiles() instead
* @param te transaction element
- * @return list of collections
- */
-ARGV_const_t rpmteCollections(rpmte te);
-
-/** \ingroup rpmte
- * Determine a transaction element is part of a collection
- * @param te transaction element
- * @param collname collection name
- * @return 1 if collname is part of a collection, 0 if not
+ * @return file info tag set
*/
-int rpmteHasCollection(rpmte te, const char * collname);
-
+rpmfi rpmteFI(rpmte te);
#ifdef __cplusplus
}
diff --git a/lib/rpmte_internal.h b/lib/rpmte_internal.h
index abcdb9020..a5a991ec5 100644
--- a/lib/rpmte_internal.h
+++ b/lib/rpmte_internal.h
@@ -14,6 +14,8 @@ typedef enum pkgGoal_e {
PKG_VERIFY = RPMTAG_VERIFYSCRIPT,
PKG_PRETRANS = RPMTAG_PRETRANS,
PKG_POSTTRANS = RPMTAG_POSTTRANS,
+ PKG_TRANSFILETRIGGERIN = RPMTAG_TRANSFILETRIGGERIN,
+ PKG_TRANSFILETRIGGERUN = RPMTAG_TRANSFILETRIGGERUN,
} pkgGoal;
/** \ingroup rpmte
@@ -47,7 +49,7 @@ RPM_GNUC_INTERNAL
rpmte rpmteFree(rpmte te);
RPM_GNUC_INTERNAL
-rpmfi rpmteSetFI(rpmte te, rpmfi fi);
+void rpmteCleanFiles(rpmte te);
RPM_GNUC_INTERNAL
FD_t rpmteSetFd(rpmte te, FD_t fd);
@@ -56,7 +58,7 @@ RPM_GNUC_INTERNAL
FD_t rpmtePayload(rpmte te);
RPM_GNUC_INTERNAL
-int rpmteProcess(rpmte te, pkgGoal goal);
+int rpmteProcess(rpmte te, pkgGoal goal, int num);
RPM_GNUC_INTERNAL
void rpmteAddProblem(rpmte te, rpmProblemType type,
@@ -84,18 +86,6 @@ int rpmteHaveTransScript(rpmte te, rpmTagVal tag);
/* XXX should be internal too but build code needs for now... */
rpmfs rpmteGetFileStates(rpmte te);
-/* XXX here for now... */
-/**
- * Relocate files in header.
- * @todo multilib file dispositions need to be checked.
- * @param relocations relocations
- * @param numRelocations number of relocations
- * @param fs file state set
- * @param h package header to relocate
- */
-RPM_GNUC_INTERNAL
-void rpmRelocateFileList(rpmRelocation *relocs, int numRelocations, rpmfs fs, Header h);
-
/** \ingroup rpmte
* Retrieve size in bytes of package header.
* @param te transaction element
@@ -114,44 +104,6 @@ unsigned int rpmteHeaderSize(rpmte te);
RPM_GNUC_INTERNAL
rpmRC rpmpsmRun(rpmts ts, rpmte te, pkgGoal goal);
-/** \ingroup rpmte
- * Add a collection to the list of last collections for the installation
- * section of a transaction element
- * @param te transaction element
- * @param collname collection name
- * @return 0 on success, non-zero on error
- */
-RPM_GNUC_INTERNAL
-int rpmteAddToLastInCollectionAdd(rpmte te, const char * collname);
-
-/** \ingroup rpmte
- * Add a collection to the list of last collections for the installation
- * or removal section of a transaction element
- * @param te transaction element
- * @param collname collection name
- * @return 0 on success, non-zero on error
- */
-RPM_GNUC_INTERNAL
-int rpmteAddToLastInCollectionAny(rpmte te, const char * collname);
-
-/** \ingroup rpmte
- * Add a collection to the list of first collections for the removal
- * section of a transaction element
- * @param te transaction element
- * @param collname collection name
- * @return 0 on success, non-zero on error
- */
-RPM_GNUC_INTERNAL
-int rpmteAddToFirstInCollectionRemove(rpmte te, const char * collname);
-
-/** \ingroup rpmte
- * Sends the open te plugin hook for each plugins with the transaction element open
- * @param te transaction element
- * @return 0 on success, non-zero on error
- */
-RPM_GNUC_INTERNAL
-rpmRC rpmteSetupCollectionPlugins(rpmte te);
-
#ifdef __cplusplus
}
#endif
diff --git a/lib/rpmtriggers.c b/lib/rpmtriggers.c
new file mode 100644
index 000000000..23a913d35
--- /dev/null
+++ b/lib/rpmtriggers.c
@@ -0,0 +1,632 @@
+#include "system.h"
+
+#include <rpm/rpmts.h>
+#include <rpm/rpmdb.h>
+#include <rpm/rpmds.h>
+#include <rpm/rpmfi.h>
+#include <stdlib.h>
+
+#include "lib/rpmtriggers.h"
+#include "lib/rpmts_internal.h"
+#include "lib/rpmdb_internal.h"
+#include "lib/rpmds_internal.h"
+#include "lib/rpmfi_internal.h"
+#include "lib/rpmte_internal.h"
+#include "lib/rpmchroot.h"
+
+#define TRIGGER_PRIORITY_BOUND 10000
+
+rpmtriggers rpmtriggersCreate(unsigned int hint)
+{
+ rpmtriggers triggers = xmalloc(sizeof(struct rpmtriggers_s));
+ triggers->count = 0;
+ triggers->alloced = hint;
+ triggers->triggerInfo = xmalloc(sizeof(struct triggerInfo_s) *
+ triggers->alloced);
+ return triggers;
+}
+
+rpmtriggers rpmtriggersFree(rpmtriggers triggers)
+{
+ _free(triggers->triggerInfo);
+ _free(triggers);
+
+ return NULL;
+}
+
+static void rpmtriggersAdd(rpmtriggers trigs, unsigned int hdrNum,
+ unsigned int tix, unsigned int priority)
+{
+ if (trigs->count == trigs->alloced) {
+ trigs->alloced <<= 1;
+ trigs->triggerInfo = xrealloc(trigs->triggerInfo,
+ sizeof(struct triggerInfo_s) * trigs->alloced);
+ }
+
+ trigs->triggerInfo[trigs->count].hdrNum = hdrNum;
+ trigs->triggerInfo[trigs->count].tix = tix;
+ trigs->triggerInfo[trigs->count].priority = priority;
+ trigs->count++;
+}
+
+static int trigCmp(const void *a, const void *b)
+{
+ const struct triggerInfo_s *trigA = a, *trigB = b;
+
+ if (trigA->priority < trigB->priority)
+ return 1;
+
+ if (trigA->priority > trigB->priority)
+ return -1;
+
+ if (trigA->hdrNum < trigB->hdrNum)
+ return -1;
+
+ if (trigA->hdrNum > trigB->hdrNum)
+ return 1;
+
+ if (trigA->tix < trigB->tix)
+ return -1;
+
+ if (trigA->tix > trigB->tix)
+ return 1;
+
+ return 0;
+}
+
+static void rpmtriggersSortAndUniq(rpmtriggers trigs)
+{
+ unsigned int from;
+ unsigned int to = 0;
+ unsigned int count = trigs->count;
+
+ if (count > 1)
+ qsort(trigs->triggerInfo, count, sizeof(struct triggerInfo_s), trigCmp);
+
+ for (from = 0; from < count; from++) {
+ if (from > 0 &&
+ !trigCmp((const void *) &trigs->triggerInfo[from - 1],
+ (const void *) &trigs->triggerInfo[from])) {
+
+ trigs->count--;
+ continue;
+ }
+ if (from != to)
+ trigs->triggerInfo[to] = trigs->triggerInfo[from];
+ to++;
+ }
+}
+
+void rpmtriggersPrepPostUnTransFileTrigs(rpmts ts, rpmte te)
+{
+ rpmdbMatchIterator mi;
+ rpmdbIndexIterator ii;
+ Header trigH;
+ const void *key;
+ size_t keylen;
+ rpmfiles files;
+ rpmds rpmdsTriggers;
+ rpmds rpmdsTrigger;
+
+ ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), RPMDBI_TRANSFILETRIGGERNAME);
+ mi = rpmdbNewIterator(rpmtsGetRdb(ts), RPMDBI_PACKAGES);
+ files = rpmteFiles(te);
+
+ /* Iterate over file triggers in rpmdb */
+ while ((rpmdbIndexIteratorNext(ii, &key, &keylen)) == 0) {
+ char pfx[keylen + 1];
+ memcpy(pfx, key, keylen);
+ pfx[keylen] = '\0';
+ /* Check if file trigger matches any installed file in this te */
+ rpmfi fi = rpmfilesFindPrefix(files, pfx);
+ while (rpmfiNext(fi) >= 0) {
+ if (RPMFILE_IS_INSTALLED(rpmfiFState(fi))) {
+ /* If yes then store it */
+ rpmdbAppendIterator(mi, rpmdbIndexIteratorPkgOffsets(ii),
+ rpmdbIndexIteratorNumPkgs(ii));
+ break;
+ }
+ }
+ rpmfiFree(fi);
+ }
+ rpmdbIndexIteratorFree(ii);
+
+ if (rpmdbGetIteratorCount(mi)) {
+ /* Filter triggers and save only trans postun triggers into ts */
+ while ((trigH = rpmdbNextIterator(mi)) != NULL) {
+ int tix = 0;
+ rpmdsTriggers = rpmdsNew(trigH, RPMTAG_TRANSFILETRIGGERNAME, 0);
+ while ((rpmdsTrigger = rpmdsFilterTi(rpmdsTriggers, tix))) {
+ if ((rpmdsNext(rpmdsTrigger) >= 0) &&
+ (rpmdsFlags(rpmdsTrigger) & RPMSENSE_TRIGGERPOSTUN)) {
+ struct rpmtd_s priorities;
+
+ headerGet(trigH, RPMTAG_TRANSFILETRIGGERPRIORITIES,
+ &priorities, HEADERGET_MINMEM);
+ rpmtdSetIndex(&priorities, tix);
+ rpmtriggersAdd(ts->trigs2run, rpmdbGetIteratorOffset(mi),
+ tix, *rpmtdGetUint32(&priorities));
+ }
+ rpmdsFree(rpmdsTrigger);
+ tix++;
+ }
+ rpmdsFree(rpmdsTriggers);
+ }
+ }
+ rpmdbFreeIterator(mi);
+}
+
+int runPostUnTransFileTrigs(rpmts ts)
+{
+ int i;
+ Header trigH;
+ struct rpmtd_s installPrefixes;
+ rpmScript script;
+ rpmtriggers trigs = ts->trigs2run;
+ int nerrors = 0;
+
+ if (rpmChrootIn() != 0)
+ return -1;
+
+ rpmtriggersSortAndUniq(trigs);
+ /* Iterate over stored triggers */
+ for (i = 0; i < trigs->count; i++) {
+ /* Get header containing trigger script */
+ trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts),
+ trigs->triggerInfo[i].hdrNum);
+
+ /* Maybe package with this trigger is already uninstalled */
+ if (trigH == NULL)
+ continue;
+
+ /* Prepare and run script */
+ script = rpmScriptFromTriggerTag(trigH,
+ triggertag(RPMSENSE_TRIGGERPOSTUN),
+ RPMSCRIPT_TRANSFILETRIGGER, trigs->triggerInfo[i].tix);
+
+ headerGet(trigH, RPMTAG_INSTPREFIXES, &installPrefixes,
+ HEADERGET_ALLOC|HEADERGET_ARGV);
+
+ nerrors += runScript(ts, NULL, trigH, installPrefixes.data, script, 0, 0);
+ rpmtdFreeData(&installPrefixes);
+ rpmScriptFree(script);
+ headerFree(trigH);
+ }
+
+ rpmChrootOut();
+
+ return nerrors;
+}
+
+/*
+ * Get files from next package from match iterator. If files are
+ * available in memory then don't read them from rpmdb.
+ */
+static rpmfiles rpmtsNextFiles(rpmts ts, rpmdbMatchIterator mi)
+{
+ Header h;
+ rpmte *te;
+ rpmfiles files = NULL;
+ rpmstrPool pool = ts->members->pool;
+ int ix;
+ unsigned int offset;
+
+ ix = rpmdbGetIteratorIndex(mi);
+ if (ix < rpmdbGetIteratorCount(mi)) {
+ offset = rpmdbGetIteratorOffsetFor(mi, ix);
+ if (packageHashGetEntry(ts->members->removedPackages, offset,
+ &te, NULL, NULL)) {
+ /* Files are available in memory */
+ files = rpmteFiles(te[0]);
+ }
+
+ if (packageHashGetEntry(ts->members->installedPackages, offset,
+ &te, NULL, NULL)) {
+ /* Files are available in memory */
+ files = rpmteFiles(te[0]);
+ }
+ }
+
+ if (files) {
+ rpmdbSetIteratorIndex(mi, ix + 1);
+ } else {
+ /* Files are not available in memory. Read them from rpmdb */
+ h = rpmdbNextIterator(mi);
+ if (h) {
+ files = rpmfilesNew(pool, h, RPMTAG_BASENAMES,
+ RPMFI_FLAGS_FILETRIGGER);
+ }
+ }
+
+ return files;
+}
+
+
+typedef struct matchFilesIter_s {
+ rpmts ts;
+ rpmds rpmdsTrigger;
+ rpmfiles files;
+ rpmfi fi;
+ rpmfs fs;
+ const char *pfx;
+ rpmdbMatchIterator pi;
+ packageHash tranPkgs;
+} *matchFilesIter;
+
+static matchFilesIter matchFilesIterator(rpmds trigger, rpmfiles files, rpmte te)
+{
+ matchFilesIter mfi = xcalloc(1, sizeof(*mfi));
+ rpmdsInit(trigger);
+ mfi->rpmdsTrigger = trigger;
+ mfi->files = rpmfilesLink(files);
+ mfi->fs = rpmteGetFileStates(te);
+ return mfi;
+}
+
+static matchFilesIter matchDBFilesIterator(rpmds trigger, rpmts ts,
+ int inTransaction)
+{
+ matchFilesIter mfi = xcalloc(1, sizeof(*mfi));
+ rpmsenseFlags sense;
+
+ rpmdsSetIx(trigger, 0);
+ sense = rpmdsFlags(trigger);
+ rpmdsInit(trigger);
+
+ mfi->rpmdsTrigger = trigger;
+ mfi->ts = ts;
+
+ /* If inTransaction is set then filter out packages that aren't in transaction */
+ if (inTransaction) {
+ if (sense & RPMSENSE_TRIGGERIN)
+ mfi->tranPkgs = ts->members->installedPackages;
+ else
+ mfi->tranPkgs = ts->members->removedPackages;
+ }
+ return mfi;
+}
+
+static const char *matchFilesNext(matchFilesIter mfi)
+{
+ const char *matchFile = NULL;
+ int fx = 0;
+
+ /* Decide if we iterate over given files (mfi->files) */
+ if (!mfi->ts)
+ do {
+ /* Get next file from mfi->fi */
+ matchFile = NULL;
+ while (matchFile == NULL && rpmfiNext(mfi->fi) >= 0) {
+ if (!XFA_SKIPPING(rpmfsGetAction(mfi->fs, rpmfiFX(mfi->fi))))
+ matchFile = rpmfiFN(mfi->fi);
+ }
+ if (matchFile)
+ break;
+
+ /* If we are done with current mfi->fi, create mfi->fi for next prefix */
+ fx = rpmdsNext(mfi->rpmdsTrigger);
+ mfi->pfx = rpmdsN(mfi->rpmdsTrigger);
+ rpmfiFree(mfi->fi);
+ mfi->fi = rpmfilesFindPrefix(mfi->files, mfi->pfx);
+
+ } while (fx >= 0);
+ /* or we iterate over files in rpmdb */
+ else
+ do {
+ matchFile = NULL;
+ while (matchFile == NULL && rpmfiNext(mfi->fi) >= 0) {
+ if (RPMFILE_IS_INSTALLED(rpmfiFState(mfi->fi)))
+ matchFile = rpmfiFN(mfi->fi);
+ }
+ if (matchFile)
+ break;
+
+ /* If we are done with current mfi->fi, create mfi->fi for next package */
+ rpmfilesFree(mfi->files);
+ rpmfiFree(mfi->fi);
+ mfi->files = rpmtsNextFiles(mfi->ts, mfi->pi);
+ mfi->fi = rpmfilesFindPrefix(mfi->files, mfi->pfx);
+ if (mfi->files)
+ continue;
+
+ /* If we are done with all packages, go through packages with new prefix */
+ fx = rpmdsNext(mfi->rpmdsTrigger);
+ mfi->pfx = rpmdsN(mfi->rpmdsTrigger);
+ rpmdbFreeIterator(mfi->pi);
+ mfi->pi = rpmdbInitPrefixIterator(rpmtsGetRdb(mfi->ts),
+ RPMDBI_DIRNAMES, mfi->pfx, 0);
+
+ rpmdbFilterIterator(mfi->pi, mfi->tranPkgs, 0);
+ /* Only walk through each header with matches once */
+ rpmdbUniqIterator(mfi->pi);
+
+ } while (fx >= 0);
+
+
+ return matchFile;
+}
+
+static int matchFilesEmpty(matchFilesIter mfi)
+{
+ const char *matchFile;
+
+ /* Try to get the first file */
+ matchFile = matchFilesNext(mfi);
+
+ /* Rewind back this file */
+ rpmfiInit(mfi->fi, 0);
+
+ if (matchFile)
+ /* We have at least one file so iterator is not empty */
+ return 0;
+ else
+ /* No file in iterator */
+ return 1;
+}
+
+static matchFilesIter matchFilesIteratorFree(matchFilesIter mfi)
+{
+ rpmfiFree(mfi->fi);
+ rpmfilesFree(mfi->files);
+ rpmdbFreeIterator(mfi->pi);
+ free(mfi);
+ return NULL;
+}
+
+/*
+ * Run all file triggers in header h
+ * @param searchMode 0 match trigger prefixes against files in te
+ * 1 match trigger prefixes against files in whole ts
+ * 2 match trigger prefixes against files in whole
+ * rpmdb
+ */
+static int runHandleTriggersInPkg(rpmts ts, rpmte te, Header h,
+ rpmsenseFlags sense, rpmscriptTriggerModes tm,
+ int searchMode, int ti)
+{
+ int nerrors = 0;
+ rpmds rpmdsTriggers, rpmdsTrigger;
+ rpmfiles files = NULL;
+ matchFilesIter mfi = NULL;
+ rpmScript script;
+ struct rpmtd_s installPrefixes;
+ char *(*inputFunc)(void *);
+
+ rpmdsTriggers = rpmdsNew(h, triggerDsTag(tm), 0);
+ rpmdsTrigger = rpmdsFilterTi(rpmdsTriggers, ti);
+ /*
+ * Now rpmdsTrigger contains all dependencies belonging to one trigger
+ * with trigger index tix. Have a look at the first one to check flags.
+ */
+ if ((rpmdsNext(rpmdsTrigger) >= 0) &&
+ (rpmdsFlags(rpmdsTrigger) & sense)) {
+
+ switch (searchMode) {
+ case 0:
+ /* Create iterator over files in te that this trigger matches */
+ files = rpmteFiles(te);
+ mfi = matchFilesIterator(rpmdsTrigger, files, te);
+ break;
+ case 1:
+ /* Create iterator over files in ts that this trigger matches */
+ mfi = matchDBFilesIterator(rpmdsTrigger, ts, 1);
+ break;
+ case 2:
+ /* Create iterator over files in whole rpmd that this trigger matches */
+ mfi = matchDBFilesIterator(rpmdsTrigger, ts, 0);
+ break;
+ }
+
+ /* If this trigger matches any file then run trigger script */
+ if (!matchFilesEmpty(mfi)) {
+ script = rpmScriptFromTriggerTag(h, triggertag(sense), tm, ti);
+
+ headerGet(h, RPMTAG_INSTPREFIXES, &installPrefixes,
+ HEADERGET_ALLOC|HEADERGET_ARGV);
+
+
+ /*
+ * As input function set function to get next file from
+ * matching file iterator. As parameter for this function
+ * set matching file iterator. Input function will be called
+ * during execution of trigger script in order to get data
+ * that will be passed as stdin to trigger script. To get
+ * these data from lua script function rpm.input() can be used.
+ */
+ inputFunc = (char *(*)(void *)) matchFilesNext;
+ rpmScriptSetNextFileFunc(script, inputFunc, mfi);
+
+ nerrors += runScript(ts, te, h, installPrefixes.data,
+ script, 0, 0);
+ rpmtdFreeData(&installPrefixes);
+ rpmScriptFree(script);
+ }
+ rpmfilesFree(files);
+ matchFilesIteratorFree(mfi);
+ }
+ rpmdsFree(rpmdsTrigger);
+ rpmdsFree(rpmdsTriggers);
+
+ return nerrors;
+}
+
+/* Return true if any file in package (te) starts with pfx */
+static int matchFilesInPkg(rpmts ts, rpmte te, const char *pfx,
+ rpmsenseFlags sense)
+{
+ int rc;
+ rpmfiles files = rpmteFiles(te);
+ rpmfi fi = rpmfilesFindPrefix(files, pfx);
+
+ rc = (fi != NULL);
+ rpmfilesFree(files);
+ rpmfiFree(fi);
+ return rc;
+}
+
+/* Return number of added/removed files starting with pfx in transaction */
+static int matchFilesInTran(rpmts ts, rpmte te, const char *pfx,
+ rpmsenseFlags sense)
+{
+ int rc = 1;
+ rpmdbMatchIterator pi;
+
+ /* Get all files from rpmdb starting with pfx */
+ pi = rpmdbInitPrefixIterator(rpmtsGetRdb(ts), RPMDBI_DIRNAMES, pfx, 0);
+
+ if (sense & RPMSENSE_TRIGGERIN)
+ /* Leave in pi only files installed in ts */
+ rpmdbFilterIterator(pi, ts->members->installedPackages, 0);
+ else
+ /* Leave in pi only files removed in ts */
+ rpmdbFilterIterator(pi, ts->members->removedPackages, 0);
+
+ rc = rpmdbGetIteratorCount(pi);
+ rpmdbFreeIterator(pi);
+
+ return rc;
+}
+
+rpmRC runFileTriggers(rpmts ts, rpmte te, rpmsenseFlags sense,
+ rpmscriptTriggerModes tm, int priorityClass)
+{
+ int nerrors = 0, i;
+ rpmdbIndexIterator ii;
+ const void *key;
+ char *pfx;
+ size_t keylen;
+ Header trigH;
+ int (*matchFunc)(rpmts, rpmte, const char*, rpmsenseFlags sense);
+ rpmTagVal priorityTag;
+ rpmtriggers triggers = rpmtriggersCreate(10);
+
+ /* Decide if we match triggers against files in te or in whole ts */
+ if (tm == RPMSCRIPT_FILETRIGGER) {
+ matchFunc = matchFilesInPkg;
+ priorityTag = RPMTAG_FILETRIGGERPRIORITIES;
+ } else {
+ matchFunc = matchFilesInTran;
+ priorityTag = RPMTAG_TRANSFILETRIGGERPRIORITIES;
+ }
+
+ ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), triggerDsTag(tm));
+
+ /* Loop over all file triggers in rpmdb */
+ while ((rpmdbIndexIteratorNext(ii, &key, &keylen)) == 0) {
+ pfx = xmalloc(keylen + 1);
+ memcpy(pfx, key, keylen);
+ pfx[keylen] = '\0';
+
+ /* Check if file trigger is fired by any file in ts/te */
+ if (matchFunc(ts, te, pfx, sense)) {
+ for (i = 0; i < rpmdbIndexIteratorNumPkgs(ii); i++) {
+ struct rpmtd_s priorities;
+ unsigned int priority;
+ unsigned int offset = rpmdbIndexIteratorPkgOffset(ii, i);
+ unsigned int tix = rpmdbIndexIteratorTagNum(ii, i);
+
+ /*
+ * Don't handle transaction triggers installed in current
+ * transaction to avoid executing the same script two times.
+ * These triggers are handled in runImmedFileTriggers().
+ */
+ if (tm == RPMSCRIPT_TRANSFILETRIGGER &&
+ (packageHashHasEntry(ts->members->removedPackages, offset) ||
+ packageHashHasEntry(ts->members->installedPackages, offset)))
+ continue;
+
+ /* Get priority of trigger from header */
+ trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), offset);
+ headerGet(trigH, priorityTag, &priorities, HEADERGET_MINMEM);
+ rpmtdSetIndex(&priorities, tix);
+ priority = *rpmtdGetUint32(&priorities);
+ headerFree(trigH);
+
+ /* Store file trigger in array */
+ rpmtriggersAdd(triggers, offset, tix, priority);
+ }
+ }
+ free(pfx);
+ }
+ rpmdbIndexIteratorFree(ii);
+
+ /* Sort triggers by priority, offset, trigger index */
+ rpmtriggersSortAndUniq(triggers);
+
+ if (rpmChrootIn() != 0) {
+ rpmtriggersFree(triggers);
+ return RPMRC_FAIL;
+ }
+
+ /* Handle stored triggers */
+ for (i = 0; i < triggers->count; i++) {
+ if (priorityClass == 1) {
+ if (triggers->triggerInfo[i].priority < TRIGGER_PRIORITY_BOUND)
+ continue;
+ } else if (priorityClass == 2) {
+ if (triggers->triggerInfo[i].priority >= TRIGGER_PRIORITY_BOUND)
+ continue;
+ }
+
+ trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), triggers->triggerInfo[i].hdrNum);
+ if (tm == RPMSCRIPT_FILETRIGGER)
+ nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 0,
+ triggers->triggerInfo[i].tix);
+ else
+ nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 1,
+ triggers->triggerInfo[i].tix);
+ headerFree(trigH);
+ }
+ rpmtriggersFree(triggers);
+ /* XXX an error here would require a full abort */
+ (void) rpmChrootOut();
+
+ return (nerrors == 0) ? RPMRC_OK : RPMRC_FAIL;
+}
+
+rpmRC runImmedFileTriggers(rpmts ts, rpmte te, rpmsenseFlags sense,
+ rpmscriptTriggerModes tm, int priorityClass)
+{
+ int nerrors = 0;
+ int triggersCount, i;
+ Header trigH = rpmteHeader(te);
+ struct rpmtd_s priorities;
+ rpmTagVal priorityTag;
+ rpmtriggers triggers;
+
+ if (tm == RPMSCRIPT_FILETRIGGER) {
+ priorityTag = RPMTAG_FILETRIGGERPRIORITIES;
+ } else {
+ priorityTag = RPMTAG_TRANSFILETRIGGERPRIORITIES;
+ }
+ headerGet(trigH, priorityTag, &priorities, HEADERGET_MINMEM);
+
+ triggersCount = rpmtdCount(&priorities);
+ triggers = rpmtriggersCreate(triggersCount);
+
+ for (i = 0; i < triggersCount; i++) {
+ rpmtdSetIndex(&priorities, i);
+ /* Offset is not important, all triggers are from the same package */
+ rpmtriggersAdd(triggers, 0, i, *rpmtdGetUint32(&priorities));
+ }
+
+ /* Sort triggers by priority, offset, trigger index */
+ rpmtriggersSortAndUniq(triggers);
+
+ for (i = 0; i < triggersCount; i++) {
+ if (priorityClass == 1) {
+ if (triggers->triggerInfo[i].priority < TRIGGER_PRIORITY_BOUND)
+ continue;
+ } else if (priorityClass == 2) {
+ if (triggers->triggerInfo[i].priority >= TRIGGER_PRIORITY_BOUND)
+ continue;
+ }
+
+ nerrors += runHandleTriggersInPkg(ts, te, trigH, sense, tm, 2,
+ triggers->triggerInfo[i].tix);
+ }
+ rpmtriggersFree(triggers);
+ headerFree(trigH);
+
+ return (nerrors == 0) ? RPMRC_OK : RPMRC_FAIL;
+}
diff --git a/lib/rpmtriggers.h b/lib/rpmtriggers.h
new file mode 100644
index 000000000..5ae9edd00
--- /dev/null
+++ b/lib/rpmtriggers.h
@@ -0,0 +1,84 @@
+#ifndef _RPMTRIGGERS_H
+#define _RPMTRIGGERS_H
+
+#include <rpm/rpmutil.h>
+#include "lib/rpmscript.h"
+
+struct triggerInfo_s {
+ unsigned int hdrNum;
+ unsigned int tix;
+ unsigned int priority;
+};
+
+typedef struct rpmtriggers_s {
+ struct triggerInfo_s *triggerInfo;
+ int count;
+ int alloced;
+} *rpmtriggers;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+RPM_GNUC_INTERNAL
+rpmtriggers rpmtriggersCreate(unsigned int hint);
+
+RPM_GNUC_INTERNAL
+rpmtriggers rpmtriggersFree(rpmtriggers triggers);
+
+/*
+ * Prepare post trans uninstall file triggers. After transcation uninstalled
+ * files are not saved anywhere. So we need during uninstalation of every
+ * package, in time when the files to uninstall are still available,
+ * to determine and store triggers that should be set off after transaction.
+ */
+RPM_GNUC_INTERNAL
+void rpmtriggersPrepPostUnTransFileTrigs(rpmts ts, rpmte te);
+
+/* Run triggers stored in ts */
+RPM_GNUC_INTERNAL
+int runPostUnTransFileTrigs(rpmts ts);
+
+/*
+ * It runs file triggers in other package(s) this package/transaction sets off.
+ * If tm is RPMSCRIPT_FILETRIGGERSCRIPT then it runs file triggers that are
+ * fired by files in transaction entry. If tm is RPMSCRIPT_TRANSFILETRIGGERSCRIPT
+ * then it runs file triggers that are fired by all files in transaction set.
+ * In that case te can be NULL.
+ *
+ * @param ts transaction set
+ * @param te transaction entry
+ * @param sense defines which triggers should be set off (triggerin,
+ * triggerun, triggerpostun)
+ * @param tm trigger mode, (filetrigger/transfiletrigger)
+ * @param priorityClass 1 to run triggers that should be executed before
+ * standard scriptlets
+ * 2 to run triggers that should be executed after
+ * standard scriptlets
+ * 0 to run all triggers
+ */
+RPM_GNUC_INTERNAL
+rpmRC runFileTriggers(rpmts ts, rpmte te, rpmsenseFlags sense,
+ rpmscriptTriggerModes tm, int priorityClass);
+
+/* Run file triggers in this te other package(s) set off.
+ * @param ts transaction set
+ * @param te transaction entry
+ * @param sense defines which triggers should be set off (triggerin,
+ * triggerun, triggerpostun)
+ * @param tm trigger mode, (filetrigger/transfiletrigger)
+ * @param priorityClass 1 to run triggers that should be executed before
+ * standard scriptlets
+ * 2 to run triggers that should be executed after
+ * standard scriptlets
+ * 0 to run all triggers
+ */
+RPM_GNUC_INTERNAL
+rpmRC runImmedFileTriggers(rpmts ts, rpmte te, rpmsenseFlags sense,
+ rpmscriptTriggerModes tm, int priorityClass);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _RPMTRIGGERS_H */
+
diff --git a/lib/rpmts.c b/lib/rpmts.c
index d3b893a1d..49f1a369b 100644
--- a/lib/rpmts.c
+++ b/lib/rpmts.c
@@ -19,6 +19,7 @@
#include <rpm/rpmds.h>
#include <rpm/rpmfi.h>
#include <rpm/rpmlog.h>
+#include <rpm/rpmsq.h>
#include <rpm/rpmte.h>
#include "rpmio/digest.h"
@@ -28,6 +29,7 @@
#include "lib/rpmts_internal.h"
#include "lib/rpmte_internal.h"
#include "lib/misc.h"
+#include "lib/rpmtriggers.h"
#include "debug.h"
@@ -39,6 +41,12 @@ struct rpmtsi_s {
int oc; /*!< iterator index. */
};
+struct rpmtxn_s {
+ rpmlock lock; /* transaction lock */
+ rpmtxnFlags flags; /* transaction flags */
+ rpmts ts; /* parent transaction set reference */
+};
+
static void loadKeyring(rpmts ts);
int _rpmts_stats = 0;
@@ -97,16 +105,16 @@ int rpmtsOpenDB(rpmts ts, int dbmode)
int rpmtsSuspendResumeDBLock(rpmts ts, int mode)
{
- return rpmdbSuspendResumeDBLock(ts->rdb, mode);
+ return 0;//rpmdbSuspendResumeDBLock(ts->rdb, mode);
}
int rpmtsInitDB(rpmts ts, int dbmode)
{
- rpmlock lock = rpmtsAcquireLock(ts);
+ rpmtxn txn = rpmtxnBegin(ts, RPMTXN_WRITE);
int rc = -1;
- if (lock)
+ if (txn)
rc = rpmdbInit(ts->rootDir, dbmode);
- rpmlockFree(lock);
+ rpmtxnEnd(txn);
return rc;
}
@@ -131,19 +139,19 @@ int rpmtsSetDBMode(rpmts ts, int dbmode)
int rpmtsRebuildDB(rpmts ts)
{
int rc = -1;
- rpmlock lock = NULL;
+ rpmtxn txn = NULL;
/* Cannot do this on a populated transaction set */
if (rpmtsNElements(ts) > 0)
return -1;
- lock = rpmtsAcquireLock(ts);
- if (lock) {
+ txn = rpmtxnBegin(ts, RPMTXN_WRITE);
+ if (txn) {
if (!(ts->vsflags & RPMVSF_NOHDRCHK))
rc = rpmdbRebuild(ts->rootDir, ts, headerCheck);
else
rc = rpmdbRebuild(ts->rootDir, NULL, NULL);
- rpmlockFree(lock);
+ rpmtxnEnd(txn);
}
return rc;
}
@@ -151,10 +159,10 @@ int rpmtsRebuildDB(rpmts ts)
int rpmtsVerifyDB(rpmts ts)
{
int rc = -1;
- rpmlock lock = rpmtsAcquireLock(ts);
- if (lock) {
+ rpmtxn txn = rpmtxnBegin(ts, RPMTXN_READ);
+ if (txn) {
rc = rpmdbVerify(ts->rootDir);
- rpmlockFree(lock);
+ rpmtxnEnd(txn);
}
return rc;
}
@@ -273,7 +281,10 @@ static int loadKeyringFromFiles(rpmts ts)
}
for (char **f = files; *f; f++) {
+ int subkeysCount, i;
+ rpmPubkey *subkeys;
rpmPubkey key = rpmPubkeyRead(*f);
+
if (!key) {
rpmlog(RPMLOG_ERR, _("%s: reading of public key failed.\n"), *f);
continue;
@@ -282,7 +293,22 @@ static int loadKeyringFromFiles(rpmts ts)
nkeys++;
rpmlog(RPMLOG_DEBUG, "added key %s to keyring\n", *f);
}
+ subkeys = rpmGetSubkeys(key, &subkeysCount);
rpmPubkeyFree(key);
+
+ for (i = 0; i < subkeysCount; i++) {
+ rpmPubkey subkey = subkeys[i];
+
+ if (rpmKeyringAddKey(ts->keyring, subkey) == 0) {
+ rpmlog(RPMLOG_DEBUG,
+ "added subkey %d of main key %s to keyring\n",
+ i, *f);
+
+ nkeys++;
+ }
+ rpmPubkeyFree(subkey);
+ }
+ free(subkeys);
}
exit:
free(pkpath);
@@ -311,6 +337,9 @@ static int loadKeyringFromDB(rpmts ts)
if (rpmBase64Decode(key, (void **) &pkt, &pktlen) == 0) {
rpmPubkey key = rpmPubkeyNew(pkt, pktlen);
+ int subkeysCount, i;
+ rpmPubkey *subkeys = rpmGetSubkeys(key, &subkeysCount);
+
if (rpmKeyringAddKey(ts->keyring, key) == 0) {
char *nvr = headerGetAsString(h, RPMTAG_NVR);
rpmlog(RPMLOG_DEBUG, "added key %s to keyring\n", nvr);
@@ -318,6 +347,22 @@ static int loadKeyringFromDB(rpmts ts)
nkeys++;
}
rpmPubkeyFree(key);
+
+ for (i = 0; i < subkeysCount; i++) {
+ rpmPubkey subkey = subkeys[i];
+
+ if (rpmKeyringAddKey(ts->keyring, subkey) == 0) {
+ char *nvr = headerGetAsString(h, RPMTAG_NVR);
+ rpmlog(RPMLOG_DEBUG,
+ "added subkey %d of main key %s to keyring\n",
+ i, nvr);
+
+ free(nvr);
+ nkeys++;
+ }
+ rpmPubkeyFree(subkey);
+ }
+ free(subkeys);
free(pkt);
}
}
@@ -343,7 +388,8 @@ static void loadKeyring(rpmts ts)
}
/* Build pubkey header. */
-static int makePubkeyHeader(rpmts ts, rpmPubkey key, Header * hdrp)
+static int makePubkeyHeader(rpmts ts, rpmPubkey key, rpmPubkey *subkeys,
+ int subkeysCount, Header * hdrp)
{
Header h = headerNew();
const char * afmt = "%{pubkeys:armor}";
@@ -364,6 +410,7 @@ static int makePubkeyHeader(rpmts ts, rpmPubkey key, Header * hdrp)
char * r = NULL;
char * evr = NULL;
int rc = -1;
+ int i;
if ((enc = rpmPubkeyBase64(key)) == NULL)
goto exit;
@@ -374,12 +421,12 @@ static int makePubkeyHeader(rpmts ts, rpmPubkey key, Header * hdrp)
/* Build header elements. */
v = pgpHexStr(pubp->signid, sizeof(pubp->signid));
- r = pgpHexStr(pubp->time, sizeof(pubp->time));
userid = pubp->userid ? pubp->userid : "none";
- keytime = pgpGrab(pubp->time, sizeof(pubp->time));
+ keytime = pubp->time;
rasprintf(&n, "gpg(%s)", v+8);
rasprintf(&u, "gpg(%s)", userid);
+ rasprintf(&r, "%x", keytime);
rasprintf(&evr, "%d:%s-%s", pubp->version, v, r);
headerPutString(h, RPMTAG_PUBKEYS, enc);
@@ -411,6 +458,27 @@ static int makePubkeyHeader(rpmts ts, rpmPubkey key, Header * hdrp)
headerPutUint32(h, RPMTAG_BUILDTIME, &keytime, 1);
headerPutString(h, RPMTAG_SOURCERPM, "(none)");
+ for (i = 0; i < subkeysCount; i++) {
+ char *v, *r, *n, *evr;
+ pgpDigParams pgpkey;
+
+ pgpkey = rpmPubkeyPgpDigParams(subkeys[i]);
+ v = pgpHexStr(pgpkey->signid, sizeof(pgpkey->signid));
+
+ rasprintf(&n, "gpg(%s)", v+8);
+ rasprintf(&r, "%x", pgpkey->time);
+ rasprintf(&evr, "%d:%s-%s", pubp->version, v, r);
+
+ headerPutString(h, RPMTAG_PROVIDENAME, n);
+ headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1);
+
+ free(v);
+ free(r);
+ free(n);
+ free(evr);
+ }
+
/* Reload the lot to immutable region and stomp sha1 digest on it */
h = headerReload(h, RPMTAG_HEADERIMMUTABLE);
if (h != NULL) {
@@ -446,14 +514,32 @@ exit:
return rc;
}
+rpmRC rpmtsImportHeader(rpmtxn txn, Header h, rpmFlags flags)
+{
+ rpmRC rc = RPMRC_FAIL;
+
+ if (txn && h && rpmtsOpenDB(txn->ts, (O_RDWR|O_CREAT)) == 0) {
+ if (rpmdbAdd(rpmtsGetRdb(txn->ts), h) == 0) {
+ rc = RPMRC_OK;
+ }
+ }
+ return rc;
+}
+
rpmRC rpmtsImportPubkey(const rpmts ts, const unsigned char * pkt, size_t pktlen)
{
Header h = NULL;
rpmRC rc = RPMRC_FAIL; /* assume failure */
rpmPubkey pubkey = NULL;
+ rpmPubkey *subkeys = NULL;
+ int subkeysCount = 0;
rpmVSFlags oflags = rpmtsVSFlags(ts);
rpmKeyring keyring;
- int krc;
+ rpmtxn txn = rpmtxnBegin(ts, RPMTXN_WRITE);
+ int krc, i;
+
+ if (txn == NULL)
+ return rc;
/* XXX keyring wont load if sigcheck disabled, force it temporarily */
rpmtsSetVSFlags(ts, (oflags & ~_RPMVSF_NOSIGNATURES));
@@ -462,6 +548,10 @@ rpmRC rpmtsImportPubkey(const rpmts ts, const unsigned char * pkt, size_t pktlen
if ((pubkey = rpmPubkeyNew(pkt, pktlen)) == NULL)
goto exit;
+
+ if ((subkeys = rpmGetSubkeys(pubkey, &subkeysCount)) == NULL)
+ goto exit;
+
krc = rpmKeyringAddKey(keyring, pubkey);
if (krc < 0)
goto exit;
@@ -470,7 +560,7 @@ rpmRC rpmtsImportPubkey(const rpmts ts, const unsigned char * pkt, size_t pktlen
if (krc == 0) {
rpm_tid_t tid = rpmtsGetTid(ts);
- if (makePubkeyHeader(ts, pubkey, &h) != 0)
+ if (makePubkeyHeader(ts, pubkey, subkeys, subkeysCount, &h) != 0)
goto exit;
headerPutUint32(h, RPMTAG_INSTALLTIME, &tid, 1);
@@ -478,10 +568,7 @@ rpmRC rpmtsImportPubkey(const rpmts ts, const unsigned char * pkt, size_t pktlen
/* Add header to database. */
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) {
- if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT)))
- goto exit;
- if (rpmdbAdd(rpmtsGetRdb(ts), h) != 0)
- goto exit;
+ rc = rpmtsImportHeader(txn, h, 0);
}
}
rc = RPMRC_OK;
@@ -490,7 +577,12 @@ exit:
/* Clean up. */
headerFree(h);
rpmPubkeyFree(pubkey);
+ for (i = 0; i < subkeysCount; i++)
+ rpmPubkeyFree(subkeys[i]);
+ free(subkeys);
+
rpmKeyringFree(keyring);
+ rpmtxnEnd(txn);
return rc;
}
@@ -593,7 +685,7 @@ void rpmtsEmpty(rpmts ts)
tsmem->orderCount = 0;
/* The pool cannot be emptied, there might be references to its contents */
tsmem->pool = rpmstrPoolFree(tsmem->pool);
- removedHashEmpty(tsmem->removedPackages);
+ packageHashEmpty(tsmem->removedPackages);
return;
}
@@ -642,7 +734,8 @@ rpmts rpmtsFree(rpmts ts)
(void) rpmtsCloseDB(ts);
- tsmem->removedPackages = removedHashFree(tsmem->removedPackages);
+ tsmem->removedPackages = packageHashFree(tsmem->removedPackages);
+ tsmem->installedPackages = packageHashFree(tsmem->installedPackages);
tsmem->order = _free(tsmem->order);
ts->members = _free(ts->members);
@@ -654,6 +747,7 @@ rpmts rpmtsFree(rpmts ts)
}
ts->rootDir = _free(ts->rootDir);
ts->lockPath = _free(ts->lockPath);
+ ts->lock = rpmlockFree(ts->lock);
ts->keyring = rpmKeyringFree(ts->keyring);
ts->netsharedPaths = argvFree(ts->netsharedPaths);
@@ -661,6 +755,8 @@ rpmts rpmtsFree(rpmts ts)
ts->plugins = rpmpluginsFree(ts->plugins);
+ rpmtriggersFree(ts->trigs2run);
+
if (_rpmts_stats)
rpmtsPrintStats(ts);
@@ -731,63 +827,6 @@ void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd)
}
}
-struct selabel_handle * rpmtsSELabelHandle(rpmts ts)
-{
-#if WITH_SELINUX
- if (ts != NULL) {
- return ts->selabelHandle;
- }
-#endif
- return NULL;
-}
-
-rpmRC rpmtsSELabelInit(rpmts ts, int open_status)
-{
-#if WITH_SELINUX
- const char * path = selinux_file_context_path();
-
- if (ts == NULL || path == NULL) {
- return RPMRC_FAIL;
- }
-
- if (open_status) {
- selinux_status_close();
- if (selinux_status_open(0) < 0) {
- return RPMRC_FAIL;
- }
- } else if (!selinux_status_updated() && ts->selabelHandle) {
- return RPMRC_OK;
- }
-
- struct selinux_opt opts[] = {
- { .type = SELABEL_OPT_PATH, .value = path}
- };
-
- if (ts->selabelHandle) {
- rpmtsSELabelFini(ts, 0);
- }
- ts->selabelHandle = selabel_open(SELABEL_CTX_FILE, opts, 1);
-
- if (!ts->selabelHandle) {
- return RPMRC_FAIL;
- }
-#endif
- return RPMRC_OK;
-}
-
-void rpmtsSELabelFini(rpmts ts, int close_status)
-{
-#if WITH_SELINUX
- if (ts && ts->selabelHandle) {
- selabel_close(ts->selabelHandle);
- ts->selabelHandle = NULL;
- }
- if (close_status) {
- selinux_status_close();
- }
-#endif
-}
-
rpm_tid_t rpmtsGetTid(rpmts ts)
{
rpm_tid_t tid = (rpm_tid_t)-1; /* XXX -1 is time(2) error return. */
@@ -918,7 +957,14 @@ rpmop rpmtsOp(rpmts ts, rpmtsOpX opx)
rpmPlugins rpmtsPlugins(rpmts ts)
{
- return (ts != NULL ? ts->plugins : NULL);
+ rpmPlugins plugins = NULL;
+
+ if (ts != NULL) {
+ if (ts->plugins == NULL)
+ ts->plugins = rpmpluginsNew(ts);
+ plugins = ts->plugins;
+ }
+ return plugins;
}
int rpmtsSetNotifyCallback(rpmts ts,
@@ -999,7 +1045,8 @@ rpmts rpmtsCreate(void)
tsmem->pool = NULL;
tsmem->delta = 5;
tsmem->addedPackages = NULL;
- tsmem->removedPackages = removedHashCreate(128, uintId, uintCmp, NULL, NULL);
+ tsmem->removedPackages = packageHashCreate(128, uintId, uintCmp, NULL, NULL);
+ tsmem->installedPackages = packageHashCreate(128, uintId, uintCmp, NULL, NULL);
tsmem->orderAlloced = 0;
tsmem->orderCount = 0;
tsmem->order = NULL;
@@ -1008,11 +1055,13 @@ rpmts rpmtsCreate(void)
ts->rootDir = NULL;
ts->keyring = NULL;
- ts->selabelHandle = NULL;
-
ts->nrefs = 0;
- ts->plugins = rpmpluginsNew(ts);
+ ts->plugins = NULL;
+
+ ts->trigs2run = rpmtriggersCreate(10);
+
+ ts->min_writes = rpmExpandNumeric("%{_minimize_writes}");
return rpmtsLink(ts);
}
@@ -1069,9 +1118,13 @@ rpmte rpmtsiNext(rpmtsi tsi, rpmElementTypes types)
}
#define RPMLOCK_PATH LOCALSTATEDIR "/rpm/.rpm.lock"
-rpmlock rpmtsAcquireLock(rpmts ts)
+rpmtxn rpmtxnBegin(rpmts ts, rpmtxnFlags flags)
{
static const char * const rpmlock_path_default = "%{?_rpmlock_path}";
+ rpmtxn txn = NULL;
+
+ if (ts == NULL)
+ return NULL;
if (ts->lockPath == NULL) {
const char *rootDir = rpmtsRootDir(ts);
@@ -1089,6 +1142,30 @@ rpmlock rpmtsAcquireLock(rpmts ts)
(void) rpmioMkpath(dirname(t), 0755, getuid(), getgid());
free(t);
}
- return rpmlockAcquire(ts->lockPath, _("transaction"));
+
+ if (ts->lock == NULL)
+ ts->lock = rpmlockNew(ts->lockPath, _("transaction"));
+
+ if (rpmlockAcquire(ts->lock)) {
+ txn = xcalloc(1, sizeof(*txn));
+ txn->lock = ts->lock;
+ txn->flags = flags;
+ txn->ts = rpmtsLink(ts);
+ if (txn->flags & RPMTXN_WRITE)
+ rpmsqBlock(SIG_BLOCK);
+ }
+
+ return txn;
}
+rpmtxn rpmtxnEnd(rpmtxn txn)
+{
+ if (txn) {
+ rpmlockRelease(txn->lock);
+ if (txn->flags & RPMTXN_WRITE)
+ rpmsqBlock(SIG_UNBLOCK);
+ rpmtsFree(txn->ts);
+ free(txn);
+ }
+ return NULL;
+}
diff --git a/lib/rpmts.h b/lib/rpmts.h
index 770504443..e09569a90 100644
--- a/lib/rpmts.h
+++ b/lib/rpmts.h
@@ -34,9 +34,10 @@ enum rpmtransFlags_e {
RPMTRANS_FLAG_NOTRIGGERS = (1 << 4), /*!< from --notriggers */
RPMTRANS_FLAG_NODOCS = (1 << 5), /*!< from --excludedocs */
RPMTRANS_FLAG_ALLFILES = (1 << 6), /*!< from --allfiles */
- /* bit 7 unused */
+ RPMTRANS_FLAG_NOPLUGINS = (1 << 7), /*!< from --noplugins */
RPMTRANS_FLAG_NOCONTEXTS = (1 << 8), /*!< from --nocontexts */
- /* bits 9-15 unused */
+ RPMTRANS_FLAG_NOCAPS = (1 << 9), /*!< from --nocaps */
+ /* bits 10-15 unused */
RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16), /*!< from --notriggerprein */
RPMTRANS_FLAG_NOPRE = (1 << 17), /*!< from --nopre */
RPMTRANS_FLAG_NOPOST = (1 << 18), /*!< from --nopost */
@@ -47,7 +48,7 @@ enum rpmtransFlags_e {
RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), /*!< from --notriggerpostun */
RPMTRANS_FLAG_NOPRETRANS = (1 << 24), /*!< from --nopretrans */
RPMTRANS_FLAG_NOPOSTTRANS = (1 << 25), /*!< from --noposttrans */
- RPMTRANS_FLAG_NOCOLLECTIONS = (1 << 26), /*!< from --nocollections */
+ /* bit 26 unused */
RPMTRANS_FLAG_NOMD5 = (1 << 27), /*!< from --nomd5 */
RPMTRANS_FLAG_NOFILEDIGEST = (1 << 27), /*!< from --nofiledigest (alias to --nomd5) */
/* bits 28-29 unused */
@@ -96,11 +97,11 @@ enum rpmVSFlags_e {
RPMVSF_NEEDPAYLOAD = (1 << 1),
/* bit(s) 2-7 unused */
RPMVSF_NOSHA1HEADER = (1 << 8),
- RPMVSF_NOMD5HEADER = (1 << 9), /* unimplemented */
+ RPMVSF_NOSHA256HEADER = (1 << 9),
RPMVSF_NODSAHEADER = (1 << 10),
- RPMVSF_NORSAHEADER = (1 << 11), /* unimplemented */
+ RPMVSF_NORSAHEADER = (1 << 11),
/* bit(s) 12-15 unused */
- RPMVSF_NOSHA1 = (1 << 16), /* unimplemented */
+ RPMVSF_NOPAYLOAD = (1 << 16),
RPMVSF_NOMD5 = (1 << 17),
RPMVSF_NODSA = (1 << 18),
RPMVSF_NORSA = (1 << 19)
@@ -111,8 +112,8 @@ typedef rpmFlags rpmVSFlags;
#define _RPMVSF_NODIGESTS \
( RPMVSF_NOSHA1HEADER | \
- RPMVSF_NOMD5HEADER | \
- RPMVSF_NOSHA1 | \
+ RPMVSF_NOSHA256HEADER | \
+ RPMVSF_NOPAYLOAD | \
RPMVSF_NOMD5 )
#define _RPMVSF_NOSIGNATURES \
@@ -123,13 +124,13 @@ typedef rpmFlags rpmVSFlags;
#define _RPMVSF_NOHEADER \
( RPMVSF_NOSHA1HEADER | \
- RPMVSF_NOMD5HEADER | \
+ RPMVSF_NOSHA256HEADER | \
RPMVSF_NODSAHEADER | \
RPMVSF_NORSAHEADER )
#define _RPMVSF_NOPAYLOAD \
- ( RPMVSF_NOSHA1 | \
- RPMVSF_NOMD5 | \
+ ( RPMVSF_NOMD5 | \
+ RPMVSF_NOPAYLOAD | \
RPMVSF_NODSA | \
RPMVSF_NORSA )
@@ -156,6 +157,12 @@ typedef enum rpmtsOpX_e {
RPMTS_OP_MAX = 17
} rpmtsOpX;
+enum rpmtxnFlags_e {
+ RPMTXN_READ = (1 << 0),
+ RPMTXN_WRITE = (1 << 1),
+};
+typedef rpmFlags rpmtxnFlags;
+
/** \ingroup rpmts
* Perform dependency resolution on the transaction set.
*
@@ -278,6 +285,15 @@ rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
const void * keyp, size_t keylen);
/** \ingroup rpmts
+ * Import a header into the rpmdb
+ * @param txn transaction handle
+ * @param h header
+ * @param flags (unused)
+ * @return RPMRC_OK/RPMRC_FAIL
+ */
+rpmRC rpmtsImportHeader(rpmtxn txn, Header h, rpmFlags flags);
+
+/** \ingroup rpmts
* Import public key packet(s).
* @todo Implicit --update policy for gpg-pubkey headers.
* @param ts transaction set
@@ -473,7 +489,7 @@ rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags);
rpm_color_t rpmtsColor(rpmts ts);
/** \ingroup rpmts
- * Retrieve prefered file color
+ * Retrieve preferred file color
* @param ts transaction set
* @return color bits
*/
@@ -488,7 +504,7 @@ rpm_color_t rpmtsPrefColor(rpmts ts);
rpm_color_t rpmtsSetColor(rpmts ts, rpm_color_t color);
/** \ingroup rpmts
- * Set prefered file color
+ * Set preferred file color
* @param ts transaction set
* @param color new color bits
* @return previous color bits
@@ -549,6 +565,16 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
rpmRelocation * relocs);
/** \ingroup rpmts
+ * Add package to be reinstalled to transaction set.
+ *
+ * @param ts transaction set
+ * @param h header
+ * @param key package retrieval key (e.g. file name)
+ * @return 0 on success
+ */
+int rpmtsAddReinstallElement(rpmts ts, Header h, const fnpyKey key);
+
+/** \ingroup rpmts
* Add package to be erased to transaction set.
* @param ts transaction set
* @param h header
@@ -557,6 +583,21 @@ int rpmtsAddInstallElement(rpmts ts, Header h,
*/
int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset);
+/** \ingroup rpmts
+ * Create a transaction (lock) handle
+ * @param ts transaction set
+ * @param flags flags
+ * @return transaction handle
+ */
+rpmtxn rpmtxnBegin(rpmts ts, rpmtxnFlags flags);
+
+/** \ingroup rpmts
+ * Destroy transaction (lock) handle
+ * @param txn transaction handle
+ * @return NULL always
+ */
+rpmtxn rpmtxnEnd(rpmtxn txn);
+
/** \ingroup rpmte
* Destroy transaction element iterator.
* @param tsi transaction element iterator
diff --git a/lib/rpmts_internal.h b/lib/rpmts_internal.h
index d4f25e17e..1e166d632 100644
--- a/lib/rpmts_internal.h
+++ b/lib/rpmts_internal.h
@@ -8,13 +8,16 @@
#include "lib/fprint.h"
#include "lib/rpmlock.h"
#include "lib/rpmdb_internal.h"
+#include "lib/rpmscript.h"
+#include "lib/rpmtriggers.h"
typedef struct diskspaceInfo_s * rpmDiskSpaceInfo;
/* Transaction set elements information */
typedef struct tsMembers_s {
rpmstrPool pool; /*!< Global string pool */
- removedHash removedPackages; /*!< Set of packages being removed. */
+ packageHash removedPackages; /*!< Set of packages being removed. */
+ packageHash installedPackages; /*!< Set of installed packages */
rpmal addedPackages; /*!< Set of packages being installed. */
rpmds rpmlib; /*!< rpmlib() dependency set. */
@@ -24,6 +27,17 @@ typedef struct tsMembers_s {
int delta; /*!< Delta for reallocation. */
} * tsMembers;
+typedef struct tsTrigger_s {
+ unsigned int hdrNum;
+ int index;
+} tsTrigger;
+
+typedef struct tsTriggers_s {
+ tsTrigger *trigger;
+ int count;
+ int alloced;
+} tsTriggers;
+
/** \ingroup rpmts
* The set of packages to be installed/removed atomically.
*/
@@ -47,10 +61,9 @@ struct rpmts_s {
tsMembers members; /*!< Transaction set member info (order etc) */
- struct selabel_handle * selabelHandle; /*!< Handle to selabel */
-
char * rootDir; /*!< Path to top of install tree. */
char * lockPath; /*!< Transaction lock path */
+ rpmlock lock; /*!< Transaction lock file */
FD_t scriptFd; /*!< Scriptlet stdout/stderr. */
rpm_tid_t tid; /*!< Transaction id. */
@@ -69,6 +82,10 @@ struct rpmts_s {
rpmPlugins plugins; /*!< Transaction plugins */
int nrefs; /*!< Reference count. */
+
+ rpmtriggers trigs2run; /*!< Transaction file triggers */
+
+ int min_writes; /*!< macro minimize_writes used */
};
#ifdef __cplusplus
@@ -86,6 +103,11 @@ rpmstrPool rpmtsPool(rpmts ts);
RPM_GNUC_INTERNAL
tsMembers rpmtsMembers(rpmts ts);
+/* Return rpmdb iterator with removals optionally pruned out */
+RPM_GNUC_INTERNAL
+rpmdbMatchIterator rpmtsPrunedIterator(rpmts ts, rpmDbiTagVal tag,
+ const char * key, int prune);
+
RPM_GNUC_INTERNAL
rpmal rpmtsCreateAl(rpmts ts, rpmElementTypes types);
@@ -94,29 +116,11 @@ RPM_GNUC_INTERNAL
int rpmtsSolve(rpmts ts, rpmds key);
RPM_GNUC_INTERNAL
-rpmlock rpmtsAcquireLock(rpmts ts);
+rpmRC rpmtsSetupTransactionPlugins(rpmts ts);
-/** \ingroup rpmts
- * Get the selabel handle from the transaction set
- * @param ts transaction set
- * @return rpm selabel handle, or NULL if it hasn't been initialized yet
- */
-struct selabel_handle * rpmtsSELabelHandle(rpmts ts);
-
-/** \ingroup rpmts
- * Initialize selabel
- * @param ts transaction set
- * @param open_status if the func should open selinux status or just check it
- * @return RPMRC_OK on success, RPMRC_FAIL otherwise
- */
-rpmRC rpmtsSELabelInit(rpmts ts, int open_status);
-
-/** \ingroup rpmts
- * Clean up selabel
- * @param ts transaction set
- * @param close_status whether we should close selinux status
- */
-void rpmtsSELabelFini(rpmts ts, int close_status);
+RPM_GNUC_INTERNAL
+rpmRC runScript(rpmts ts, rpmte te, Header h, ARGV_const_t prefixes,
+ rpmScript script, int arg1, int arg2);
#ifdef __cplusplus
}
diff --git a/lib/rpmtypes.h b/lib/rpmtypes.h
index 91ea94907..1948d183b 100644
--- a/lib/rpmtypes.h
+++ b/lib/rpmtypes.h
@@ -64,10 +64,12 @@ typedef struct rpmts_s * rpmts;
typedef struct rpmte_s * rpmte;
typedef struct rpmds_s * rpmds;
typedef struct rpmfi_s * rpmfi;
+typedef struct rpmfiles_s * rpmfiles;
typedef struct rpmdb_s * rpmdb;
typedef struct rpmdbMatchIterator_s * rpmdbMatchIterator;
typedef struct rpmtsi_s * rpmtsi;
typedef struct rpmps_s * rpmps;
+typedef struct rpmtxn_s * rpmtxn;
typedef struct rpmdbIndexIterator_s * rpmdbIndexIterator;
typedef const void * fnpyKey;
@@ -80,6 +82,7 @@ typedef struct rpmKeyring_s * rpmKeyring;
typedef uint32_t rpmsid;
typedef struct rpmstrPool_s * rpmstrPool;
+typedef struct rpmPlugin_s * rpmPlugin;
typedef struct rpmPlugins_s * rpmPlugins;
typedef struct rpmgi_s * rpmgi;
diff --git a/lib/rpmug.c b/lib/rpmug.c
index 53a5a6e4d..119d8e585 100644
--- a/lib/rpmug.c
+++ b/lib/rpmug.c
@@ -1,7 +1,9 @@
#include "system.h"
+#include <pthread.h>
#include <pwd.h>
#include <grp.h>
+#include <netdb.h>
#include <rpm/rpmlog.h>
#include <rpm/rpmstring.h>
@@ -9,32 +11,6 @@
#include "lib/rpmug.h"
#include "debug.h"
-#define HASHTYPE strCache
-#define HTKEYTYPE const char *
-#include "lib/rpmhash.H"
-#include "lib/rpmhash.C"
-#undef HASHTYPE
-#undef HTKEYTYPE
-
-static strCache strStash = NULL;
-
-const char * rpmugStashStr(const char *str)
-{
- const char *ret = NULL;
- if (str) {
- if (strStash == NULL) {
- strStash = strCacheCreate(64, rstrhash, strcmp,
- (strCacheFreeKey)rfree);
- }
-
- if (!strCacheGetEntry(strStash, str, &ret)) {
- strCacheAddEntry(strStash, xstrdup(str));
- (void) strCacheGetEntry(strStash, str, &ret);
- }
- }
- return ret;
-}
-
/*
* These really ought to use hash tables. I just made the
* guess that most files would be owned by root or the same person/group
@@ -55,7 +31,7 @@ int rpmugUid(const char * thisUname, uid_t * uid)
if (!thisUname) {
lastUnameLen = 0;
return -1;
- } else if (rstreq(thisUname, "root")) {
+ } else if (rstreq(thisUname, UID_0_USER)) {
*uid = 0;
return 0;
}
@@ -98,7 +74,7 @@ int rpmugGid(const char * thisGname, gid_t * gid)
if (thisGname == NULL) {
lastGnameLen = 0;
return -1;
- } else if (rstreq(thisGname, "root")) {
+ } else if (rstreq(thisGname, GID_0_GROUP)) {
*gid = 0;
return 0;
}
@@ -140,7 +116,7 @@ const char * rpmugUname(uid_t uid)
lastUid = (uid_t) -1;
return NULL;
} else if (uid == (uid_t) 0) {
- return "root";
+ return UID_0_USER;
} else if (uid == lastUid) {
return lastUname;
} else {
@@ -171,7 +147,7 @@ const char * rpmugGname(gid_t gid)
lastGid = (gid_t) -1;
return NULL;
} else if (gid == (gid_t) 0) {
- return "root";
+ return GID_0_GROUP;
} else if (gid == lastGid) {
return lastGname;
} else {
@@ -192,11 +168,27 @@ const char * rpmugGname(gid_t gid)
}
}
+static void loadLibs(void)
+{
+ (void) getpwnam(UID_0_USER);
+ endpwent();
+ (void) getgrnam(GID_0_GROUP);
+ endgrent();
+ (void) gethostbyname("localhost");
+}
+
+int rpmugInit(void)
+{
+ static pthread_once_t libsLoaded = PTHREAD_ONCE_INIT;
+
+ pthread_once(&libsLoaded, loadLibs);
+ return 0;
+}
+
void rpmugFree(void)
{
rpmugUid(NULL, NULL);
rpmugGid(NULL, NULL);
rpmugUname(-1);
rpmugGname(-1);
- strStash = strCacheFree(strStash);
}
diff --git a/lib/rpmug.h b/lib/rpmug.h
index 35e5d631d..22d64eb88 100644
--- a/lib/rpmug.h
+++ b/lib/rpmug.h
@@ -3,8 +3,6 @@
#include <sys/types.h>
-const char * rpmugStashStr(const char *str);
-
int rpmugUid(const char * name, uid_t * uid);
int rpmugGid(const char * name, gid_t * gid);
@@ -13,6 +11,8 @@ const char * rpmugUname(uid_t uid);
const char * rpmugGname(gid_t gid);
+int rpmugInit(void);
+
void rpmugFree(void);
#endif /* _RPMUG_H */
diff --git a/lib/rpmvercmp.c b/lib/rpmvercmp.c
index de3beeab4..b3d08faa4 100644
--- a/lib/rpmvercmp.c
+++ b/lib/rpmvercmp.c
@@ -36,7 +36,7 @@ int rpmvercmp(const char * a, const char * b)
while (*one && !risalnum(*one) && *one != '~') one++;
while (*two && !risalnum(*two) && *two != '~') two++;
- /* handle the tilde separator, it sorts before everthing else */
+ /* handle the tilde separator, it sorts before everything else */
if (*one == '~' || *two == '~') {
if (*one != '~') return 1;
if (*two != '~') return -1;
diff --git a/lib/rpmvf.h b/lib/rpmvf.h
index 51690b857..4cb463c2f 100644
--- a/lib/rpmvf.h
+++ b/lib/rpmvf.h
@@ -3,9 +3,11 @@
/** \ingroup rpmvf
* \file lib/rpmvf.h
- * @todo Add a more complete API...
+ *
+ * \brief Verify a package. The constants that enable/disable some sanity checks (mainly used at post (un)install)
*/
#include <rpm/rpmtypes.h>
+#include <rpm/rpmutil.h>
#ifdef __cplusplus
extern "C" {
@@ -85,13 +87,14 @@ typedef rpmFlags rpmVerifyFlags;
/** \ingroup rpmvf
* Verify file attributes (including digest).
- * @todo gnorpm and python bindings prevent this from being static.
+ * @deprecated use rpmfiVerify() / rpmfilesVerify() instead
* @param ts transaction set
* @param fi file info (with linked header and current file index)
* @retval *res bit(s) returned to indicate failure
* @param omitMask bit(s) to disable verify checks
* @return 0 on success (or not installed), 1 on error
*/
+RPM_GNUC_DEPRECATED
int rpmVerifyFile(const rpmts ts, rpmfi fi,
rpmVerifyAttrs * res, rpmVerifyAttrs omitMask);
diff --git a/lib/rpmvs.c b/lib/rpmvs.c
new file mode 100644
index 000000000..f77bfb02d
--- /dev/null
+++ b/lib/rpmvs.c
@@ -0,0 +1,456 @@
+#include "system.h"
+
+#include <rpm/rpmkeyring.h>
+#include "lib/rpmvs.h"
+#include "rpmio/digest.h"
+
+#include "debug.h"
+
+struct rpmvs_s {
+ struct rpmsinfo_s *sigs;
+ rpmRC *rcs;
+ char **results;
+ int nsigs;
+ int nalloced;
+};
+
+struct vfytag_s {
+ rpmTagVal tag;
+ rpmTagType tagtype;
+ rpm_count_t tagcount;
+ rpm_count_t tagsize;
+};
+
+static const struct vfytag_s rpmvfytags[] = {
+ { RPMSIGTAG_SIZE, RPM_BIN_TYPE, 0, 0, },
+ { RPMSIGTAG_PGP, RPM_BIN_TYPE, 0, 0, },
+ { RPMSIGTAG_MD5, RPM_BIN_TYPE, 0, 16, },
+ { RPMSIGTAG_GPG, RPM_BIN_TYPE, 0, 0, },
+ { RPMSIGTAG_PGP5, RPM_BIN_TYPE, 0, 0, },
+ { RPMSIGTAG_PAYLOADSIZE, RPM_INT32_TYPE, 1, 4, },
+ { RPMSIGTAG_RESERVEDSPACE, RPM_BIN_TYPE, 0, 0, },
+ { RPMTAG_DSAHEADER, RPM_BIN_TYPE, 0, 0, },
+ { RPMTAG_RSAHEADER, RPM_BIN_TYPE, 0, 0, },
+ { RPMTAG_SHA1HEADER, RPM_STRING_TYPE, 1, 41, },
+ { RPMSIGTAG_LONGSIZE, RPM_INT64_TYPE, 1, 8, },
+ { RPMSIGTAG_LONGARCHIVESIZE, RPM_INT64_TYPE, 1, 8, },
+ { RPMTAG_SHA256HEADER, RPM_STRING_TYPE, 1, 65, },
+ { RPMTAG_PAYLOADDIGEST, RPM_STRING_ARRAY_TYPE, 0, 0, },
+ { 0 } /* sentinel */
+};
+
+struct vfyinfo_s {
+ rpmTagVal tag;
+ struct rpmsinfo_s vi;
+};
+
+static const struct vfyinfo_s rpmvfyitems[] = {
+ { RPMSIGTAG_SIZE,
+ { RPMSIG_OTHER_TYPE, 0,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), 0, }, },
+ { RPMSIGTAG_PGP,
+ { RPMSIG_SIGNATURE_TYPE, RPMVSF_NORSA,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), 0, }, },
+ { RPMSIGTAG_MD5,
+ { RPMSIG_DIGEST_TYPE, RPMVSF_NOMD5,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), PGPHASHALGO_MD5, }, },
+ { RPMSIGTAG_GPG,
+ { RPMSIG_SIGNATURE_TYPE, RPMVSF_NODSA,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), 0, }, },
+ { RPMSIGTAG_PGP5,
+ { RPMSIG_SIGNATURE_TYPE, RPMVSF_NORSA,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), 0, }, },
+ { RPMSIGTAG_PAYLOADSIZE,
+ { RPMSIG_OTHER_TYPE, 0,
+ (RPMSIG_PAYLOAD), 0, }, },
+ { RPMSIGTAG_RESERVEDSPACE,
+ { RPMSIG_OTHER_TYPE, 0,
+ 0, 0, }, },
+ { RPMTAG_DSAHEADER,
+ { RPMSIG_SIGNATURE_TYPE, RPMVSF_NODSAHEADER,
+ (RPMSIG_HEADER), 0, }, },
+ { RPMTAG_RSAHEADER,
+ { RPMSIG_SIGNATURE_TYPE, RPMVSF_NORSAHEADER,
+ (RPMSIG_HEADER), 0, }, },
+ { RPMTAG_SHA1HEADER,
+ { RPMSIG_DIGEST_TYPE, RPMVSF_NOSHA1HEADER,
+ (RPMSIG_HEADER), PGPHASHALGO_SHA1, }, },
+ { RPMSIGTAG_LONGSIZE,
+ { RPMSIG_OTHER_TYPE, 0,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), 0, }, },
+ { RPMSIGTAG_LONGARCHIVESIZE,
+ { RPMSIG_OTHER_TYPE, 0,
+ (RPMSIG_HEADER|RPMSIG_PAYLOAD), 0, }, },
+ { RPMTAG_SHA256HEADER,
+ { RPMSIG_DIGEST_TYPE, RPMVSF_NOSHA256HEADER,
+ (RPMSIG_HEADER), PGPHASHALGO_SHA256, }, },
+ { RPMTAG_PAYLOADDIGEST,
+ { RPMSIG_DIGEST_TYPE, RPMVSF_NOPAYLOAD,
+ (RPMSIG_PAYLOAD), PGPHASHALGO_SHA256, }, },
+ { 0 } /* sentinel */
+};
+
+static const char *rangeName(int range);
+static const char * rpmSigString(rpmRC res);
+static rpmRC rpmVerifySignature(rpmKeyring keyring, struct rpmsinfo_s *sinfo,
+ DIGEST_CTX ctx, char ** result);
+
+static int sinfoLookup(rpmTagVal tag)
+{
+ const struct vfyinfo_s *start = &rpmvfyitems[0];
+ int ix = -1;
+ for (const struct vfyinfo_s *si = start; si->tag; si++) {
+ if (tag == si->tag) {
+ ix = si - start;
+ break;
+ }
+ }
+ return ix;
+}
+
+static int validHex(const char *str, size_t slen)
+{
+ int valid = 0; /* Assume invalid */
+ const char *b;
+
+ /* Our hex data is always even sized and at least sha-1 long */
+ if (slen % 2 || slen < 40)
+ goto exit;
+
+ for (b = str ; *b != '\0'; b++) {
+ if (strchr("0123456789abcdefABCDEF", *b) == NULL)
+ goto exit;
+ }
+ valid = 1;
+
+exit:
+ return valid;
+}
+
+static rpmRC rpmsinfoInit(rpmtd td, const char *origin,
+ struct rpmsinfo_s *sinfo, char **msg)
+{
+ rpmRC rc = RPMRC_FAIL;
+ const void *data = NULL;
+ const struct vfytag_s *tinfo;
+ const struct vfyinfo_s *vinfo;
+ rpm_count_t dlen = 0;
+ int ix;
+
+ if ((ix = sinfoLookup(td->tag)) == -1) {
+ /* anything unknown just falls through for now */
+ rc = RPMRC_OK;
+ goto exit;
+ }
+ vinfo = &rpmvfyitems[ix];
+ tinfo = &rpmvfytags[ix];
+ assert(tinfo->tag == vinfo->tag);
+
+ *sinfo = rpmvfyitems[ix].vi; /* struct assignment */
+
+ if (tinfo->tagtype && tinfo->tagtype != td->type) {
+ rasprintf(msg, _("%s tag %u: invalid type %u"),
+ origin, td->tag, td->type);
+ goto exit;
+ }
+
+ if (tinfo->tagcount && tinfo->tagcount != td->count) {
+ rasprintf(msg, _("%s: tag %u: invalid count %u"),
+ origin, td->tag, td->count);
+ goto exit;
+ }
+
+ switch (td->type) {
+ case RPM_STRING_TYPE:
+ case RPM_STRING_ARRAY_TYPE:
+ data = rpmtdGetString(td);
+ if (data)
+ dlen = strlen(data);
+ break;
+ case RPM_BIN_TYPE:
+ data = td->data;
+ dlen = td->count;
+ break;
+ }
+
+ /* MD5 has data length of 16, everything else is (much) larger */
+ if (sinfo->hashalgo && (data == NULL || dlen < 16)) {
+ rasprintf(msg, _("%s tag %u: invalid data %p (%u)"),
+ origin, td->tag, data, dlen);
+ goto exit;
+ }
+
+ if (td->type == RPM_STRING_TYPE && td->size == 0)
+ td->size = dlen + 1;
+
+ if (tinfo->tagsize && (td->flags & RPMTD_IMMUTABLE) &&
+ tinfo->tagsize != td->size) {
+ rasprintf(msg, _("%s tag %u: invalid size %u"),
+ origin, td->tag, td->size);
+ goto exit;
+ }
+
+ if (sinfo->type == RPMSIG_SIGNATURE_TYPE) {
+ if (pgpPrtParams(data, dlen, PGPTAG_SIGNATURE, &sinfo->sig)) {
+ rasprintf(msg, _("%s tag %u: invalid OpenPGP signature"),
+ origin, td->tag);
+ goto exit;
+ }
+ sinfo->hashalgo = pgpDigParamsAlgo(sinfo->sig, PGPVAL_HASHALGO);
+ sinfo->keyid = pgpGrab(sinfo->sig->signid+4, 4);
+ } else if (sinfo->type == RPMSIG_DIGEST_TYPE) {
+ if (td->type == RPM_BIN_TYPE) {
+ sinfo->dig = pgpHexStr(data, dlen);
+ } else {
+ if (!validHex(data, dlen)) {
+ rasprintf(msg, _("%s: tag %u: invalid hex"), origin, td->tag);
+ goto exit;
+ }
+ sinfo->dig = xstrdup(data);
+ }
+ }
+
+ if (sinfo->hashalgo)
+ sinfo->id = (td->tag << 16) | rpmtdGetIndex(td);
+
+ rc = RPMRC_OK;
+
+exit:
+ return rc;
+}
+
+static void rpmsinfoFini(struct rpmsinfo_s *sinfo)
+{
+ if (sinfo) {
+ if (sinfo->type == RPMSIG_SIGNATURE_TYPE)
+ pgpDigParamsFree(sinfo->sig);
+ else if (sinfo->type == RPMSIG_DIGEST_TYPE)
+ free(sinfo->dig);
+ free(sinfo->descr);
+ memset(sinfo, 0, sizeof(*sinfo));
+ }
+}
+
+static int rpmsinfoDisabled(const struct rpmsinfo_s *sinfo, rpmVSFlags vsflags)
+{
+ if (!(sinfo->type & RPMSIG_VERIFIABLE_TYPE))
+ return 1;
+ if (vsflags & sinfo->disabler)
+ return 1;
+ if ((vsflags & RPMVSF_NEEDPAYLOAD) && (sinfo->range & RPMSIG_PAYLOAD))
+ return 1;
+ return 0;
+}
+
+static void rpmvsReserve(struct rpmvs_s *vs, int n)
+{
+ if (vs->nsigs + n >= vs->nalloced) {
+ vs->nalloced = (vs->nsigs * 2) + n;
+ vs->rcs = xrealloc(vs->rcs, vs->nalloced * sizeof(*vs->rcs));
+ vs->results = xrealloc(vs->results, vs->nalloced * sizeof(*vs->results));
+ vs->sigs = xrealloc(vs->sigs, vs->nalloced * sizeof(*vs->sigs));
+ }
+}
+
+const char *rpmsinfoDescr(struct rpmsinfo_s *sinfo)
+{
+ if (sinfo->descr == NULL) {
+ char *t;
+ switch (sinfo->type) {
+ case RPMSIG_DIGEST_TYPE:
+ rasprintf(&sinfo->descr, _("%s%s %s"),
+ rangeName(sinfo->range),
+ pgpValString(PGPVAL_HASHALGO, sinfo->hashalgo),
+ _("digest"));
+ break;
+ case RPMSIG_SIGNATURE_TYPE:
+ t = sinfo->sig ? pgpIdentItem(sinfo->sig) : NULL;
+ rasprintf(&sinfo->descr, _("%s%s"),
+ rangeName(sinfo->range), t ? t : _("signature"));
+ free(t);
+ break;
+ }
+ }
+ return sinfo->descr;
+}
+
+char *rpmsinfoMsg(struct rpmsinfo_s *sinfo, rpmRC rc, const char *emsg)
+{
+ char *msg = NULL;
+ if (emsg) {
+ rasprintf(&msg, "%s: %s (%s)",
+ rpmsinfoDescr(sinfo), rpmSigString(rc), emsg);
+ } else {
+ rasprintf(&msg, "%s: %s", rpmsinfoDescr(sinfo), rpmSigString(rc));
+ }
+ return msg;
+}
+
+void rpmvsAppend(struct rpmvs_s *sis, hdrblob blob, rpmTagVal tag)
+{
+ struct rpmtd_s td;
+ rpmRC rc = hdrblobGet(blob, tag, &td);
+
+ if (rc == RPMRC_OK) {
+ const char *o = (blob->il > blob->ril) ? _("header") : _("package");
+ int ix;
+
+ rpmvsReserve(sis, rpmtdCount(&td));
+
+ while ((ix = rpmtdNext(&td)) >= 0) {
+ sis->results[sis->nsigs] = NULL;
+ sis->rcs[sis->nsigs] = rpmsinfoInit(&td, o,
+ &sis->sigs[sis->nsigs],
+ &sis->results[sis->nsigs]);
+ sis->nsigs++;
+ }
+ rpmtdFreeData(&td);
+ }
+}
+
+struct rpmvs_s *rpmvsCreate(hdrblob blob, rpmVSFlags vsflags)
+{
+ struct rpmvs_s *sis = xcalloc(1, sizeof(*sis));
+
+ rpmvsReserve(sis, 2); /* XXX bump this up later */
+
+ for (const struct vfyinfo_s *si = &rpmvfyitems[0]; si->tag; si++) {
+ if (rpmsinfoDisabled(&si->vi, vsflags))
+ continue;
+ rpmvsAppend(sis, blob, si->tag);
+ }
+ return sis;
+}
+
+struct rpmvs_s *rpmvsFree(struct rpmvs_s *sis)
+{
+ if (sis) {
+ free(sis->rcs);
+ for (int i = 0; i < sis->nsigs; i++) {
+ rpmsinfoFini(&sis->sigs[i]);
+ free(sis->results[i]);
+ }
+ free(sis->sigs);
+ free(sis->results);
+ free(sis);
+ }
+ return NULL;
+}
+
+void rpmvsInitDigests(struct rpmvs_s *sis, int range, rpmDigestBundle bundle)
+{
+ for (int i = 0; i < sis->nsigs; i++) {
+ struct rpmsinfo_s *sinfo = &sis->sigs[i];
+ if (sinfo->range & range) {
+ if (sis->rcs[i] == RPMRC_OK)
+ rpmDigestBundleAddID(bundle, sinfo->hashalgo, sinfo->id, 0);
+ }
+ }
+}
+
+int rpmvsVerifyItems(rpmPlugins plugins, struct rpmvs_s *sis, int range, rpmDigestBundle bundle,
+ rpmKeyring keyring, rpmsinfoCb cb, void *cbdata)
+{
+ int failed = 0;
+
+ for (int i = 0; i < sis->nsigs; i++) {
+ struct rpmsinfo_s *sinfo = &sis->sigs[i];
+
+ if (sinfo->range == range) {
+ if (sis->rcs[i] == RPMRC_OK) {
+ DIGEST_CTX ctx = rpmDigestBundleDupCtx(bundle, sinfo->id);
+ sis->results[i] = _free(sis->results[i]);
+ sis->rcs[i] = rpmVerifySignature(keyring, sinfo, ctx, &sis->results[i]);
+ /* Run verify hook for all plugins */
+ sis->rcs[i] = rpmpluginsCallVerify(plugins, keyring, sinfo->id, sinfo->sig, ctx, sis->rcs[i]);
+ rpmDigestFinal(ctx, NULL, NULL, 0);
+ rpmDigestBundleFinal(bundle, sinfo->id, NULL, NULL, 0);
+ }
+
+ if (cb)
+ sis->rcs[i] = cb(sinfo, sis->rcs[i], sis->results[i], cbdata);
+
+ if (sis->rcs[i] != RPMRC_OK)
+ failed++;
+ }
+ }
+
+ return failed;
+}
+
+static const char * rpmSigString(rpmRC res)
+{
+ const char * str;
+ switch (res) {
+ case RPMRC_OK: str = "OK"; break;
+ case RPMRC_FAIL: str = "BAD"; break;
+ case RPMRC_NOKEY: str = "NOKEY"; break;
+ case RPMRC_NOTTRUSTED: str = "NOTTRUSTED"; break;
+ default:
+ case RPMRC_NOTFOUND: str = "UNKNOWN"; break;
+ }
+ return str;
+}
+
+static const char *rangeName(int range)
+{
+ switch (range) {
+ case RPMSIG_HEADER: return _("Header ");
+ case RPMSIG_PAYLOAD: return _("Payload ");
+ }
+ /* trad. output for (RPMSIG_HEADER|RPMSIG_PAYLOAD) range is "" */
+ return "";
+}
+
+static rpmRC verifyDigest(struct rpmsinfo_s *sinfo, DIGEST_CTX digctx,
+ char **msg)
+{
+ rpmRC res = RPMRC_FAIL; /* assume failure */
+ char * dig = NULL;
+ size_t diglen = 0;
+ DIGEST_CTX ctx = rpmDigestDup(digctx);
+
+ if (rpmDigestFinal(ctx, (void **)&dig, &diglen, 1) || diglen == 0)
+ goto exit;
+
+ if (strcasecmp(sinfo->dig, dig) == 0) {
+ res = RPMRC_OK;
+ } else {
+ rasprintf(msg, "Expected %s != %s", sinfo->dig, dig);
+ }
+
+exit:
+ free(dig);
+ return res;
+}
+
+/**
+ * Verify DSA/RSA signature.
+ * @param keyring pubkey keyring
+ * @param sinfo OpenPGP signature parameters
+ * @param hashctx digest context
+ * @retval msg verbose success/failure text
+ * @return RPMRC_OK on success
+ */
+static rpmRC
+verifySignature(rpmKeyring keyring, struct rpmsinfo_s *sinfo,
+ DIGEST_CTX hashctx, char **msg)
+{
+ rpmRC res = rpmKeyringVerifySig(keyring, sinfo->sig, hashctx);
+
+ return res;
+}
+
+static rpmRC
+rpmVerifySignature(rpmKeyring keyring, struct rpmsinfo_s *sinfo,
+ DIGEST_CTX ctx, char ** result)
+{
+ rpmRC res = RPMRC_FAIL;
+
+ if (sinfo->type == RPMSIG_DIGEST_TYPE)
+ res = verifyDigest(sinfo, ctx, result);
+ else if (sinfo->type == RPMSIG_SIGNATURE_TYPE)
+ res = verifySignature(keyring, sinfo, ctx, result);
+
+ return res;
+}
diff --git a/lib/rpmvs.h b/lib/rpmvs.h
new file mode 100644
index 000000000..f96f20219
--- /dev/null
+++ b/lib/rpmvs.h
@@ -0,0 +1,75 @@
+#ifndef _RPMVS_H
+#define _RPMVS_H
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmts.h> /* for rpmVSFlags */
+#include "lib/header_internal.h"
+
+enum {
+ RPMSIG_UNKNOWN_TYPE = 0,
+ RPMSIG_DIGEST_TYPE = (1 << 0),
+ RPMSIG_SIGNATURE_TYPE = (1 << 1),
+ RPMSIG_OTHER_TYPE = (1 << 2),
+};
+
+#define RPMSIG_VERIFIABLE_TYPE (RPMSIG_DIGEST_TYPE|RPMSIG_SIGNATURE_TYPE)
+
+/* siginfo range bits */
+enum {
+ RPMSIG_HEADER = (1 << 0),
+ RPMSIG_PAYLOAD = (1 << 1),
+};
+
+struct rpmsinfo_s {
+ /* static data */
+ int type;
+ int disabler;
+ int range;
+ /* parsed data */
+ int hashalgo;
+ int id;
+ unsigned int keyid;
+ union {
+ pgpDigParams sig;
+ char *dig;
+ };
+ char *descr;
+};
+
+typedef rpmRC (*rpmsinfoCb)(struct rpmsinfo_s *sinfo, rpmRC sigres, const char *result, void *cbdata);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+RPM_GNUC_INTERNAL
+const char *rpmsinfoDescr(struct rpmsinfo_s *sinfo);
+
+RPM_GNUC_INTERNAL
+char *rpmsinfoMsg(struct rpmsinfo_s *sinfo, rpmRC rc, const char *emsg);
+
+RPM_GNUC_INTERNAL
+struct rpmvs_s *rpmvsCreate(hdrblob blob, rpmVSFlags vsflags);
+
+RPM_GNUC_INTERNAL
+struct rpmvs_s *rpmvsFree(struct rpmvs_s *sis);
+
+RPM_GNUC_INTERNAL
+void rpmvsAppend(struct rpmvs_s *sis, hdrblob blob, rpmTagVal tag);
+
+RPM_GNUC_INTERNAL
+void rpmvsInitDigests(struct rpmvs_s *sis, int range, rpmDigestBundle bundle);
+
+RPM_GNUC_INTERNAL
+int rpmvsVerifyItems(rpmPlugins plugins, struct rpmvs_s *sis, int range, rpmDigestBundle bundle,
+ rpmKeyring keyring, rpmsinfoCb cb, void *cbdata);
+
+RPM_GNUC_INTERNAL
+rpmRC rpmpkgRead(rpmPlugins plugins, rpmKeyring keyring, rpmVSFlags flags, FD_t fd,
+ rpmsinfoCb cb, void *cbdata, Header *hdrp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RPMVS_H */
diff --git a/lib/signature.c b/lib/signature.c
index 1c5327072..6f04962e8 100644
--- a/lib/signature.c
+++ b/lib/signature.c
@@ -11,238 +11,74 @@
#include <rpm/rpmstring.h>
#include <rpm/rpmfileutil.h>
#include <rpm/rpmlog.h>
-#include <rpm/rpmkeyring.h>
+#include <rpm/rpmmacro.h>
#include "lib/rpmlead.h"
-#include "lib/signature.h"
#include "lib/header_internal.h"
+#include "lib/signature.h"
#include "debug.h"
-/* Dumb wrapper around headerPut() for signature header */
-static int sighdrPut(Header h, rpmTagVal tag, rpmTagType type,
- rpm_data_t p, rpm_count_t c)
-{
- struct rpmtd_s sigtd;
- rpmtdReset(&sigtd);
- sigtd.tag = tag;
- sigtd.type = type;
- sigtd.data = p;
- sigtd.count = c;
- return headerPut(h, &sigtd, HEADERPUT_DEFAULT);
-}
-
/**
- * Print package size.
- * @todo rpmio: use fdSize rather than fstat(2) to get file size.
+ * Print package size (debug purposes only)
* @param fd package file handle
- * @param siglen signature header size
- * @param pad signature padding
- * @param datalen length of header+payload
- * @return rpmRC return code
+ * @param sigh signature header
*/
-static inline rpmRC printSize(FD_t fd, size_t siglen, size_t pad, rpm_loff_t datalen)
+static void printSize(FD_t fd, Header sigh)
{
struct stat st;
int fdno = Fileno(fd);
+ size_t siglen = headerSizeof(sigh, HEADER_MAGIC_YES);
+ size_t pad = (8 - (siglen % 8)) % 8; /* 8-byte pad */
+ struct rpmtd_s sizetag;
+ rpm_loff_t datalen = 0;
- if (fstat(fdno, &st) < 0)
- return RPMRC_FAIL;
+ /* Print package component sizes. */
+ if (headerGet(sigh, RPMSIGTAG_LONGSIZE, &sizetag, HEADERGET_DEFAULT)) {
+ rpm_loff_t *tsize = rpmtdGetUint64(&sizetag);
+ datalen = (tsize) ? *tsize : 0;
+ } else if (headerGet(sigh, RPMSIGTAG_SIZE, &sizetag, HEADERGET_DEFAULT)) {
+ rpm_off_t *tsize = rpmtdGetUint32(&sizetag);
+ datalen = (tsize) ? *tsize : 0;
+ }
+ rpmtdFreeData(&sizetag);
rpmlog(RPMLOG_DEBUG,
"Expected size: %12" PRIu64 \
" = lead(%d)+sigs(%zd)+pad(%zd)+data(%" PRIu64 ")\n",
RPMLEAD_SIZE+siglen+pad+datalen,
RPMLEAD_SIZE, siglen, pad, datalen);
- rpmlog(RPMLOG_DEBUG,
- " Actual size: %12" PRIu64 "\n", (rpm_loff_t) st.st_size);
- return RPMRC_OK;
+ if (fstat(fdno, &st) == 0) {
+ rpmlog(RPMLOG_DEBUG,
+ " Actual size: %12" PRIu64 "\n", (rpm_loff_t) st.st_size);
+ }
}
-rpmRC rpmReadSignature(FD_t fd, Header * sighp, sigType sig_type, char ** msg)
+rpmRC rpmReadSignature(FD_t fd, Header * sighp, char ** msg)
{
char *buf = NULL;
- int32_t block[4];
- int32_t il;
- int32_t dl;
- int32_t * ei = NULL;
- entryInfo pe;
- unsigned int nb, uc;
- int32_t ril = 0;
- struct indexEntry_s entry;
- struct entryInfo_s info;
- unsigned char * dataStart;
- unsigned char * dataEnd = NULL;
+ struct hdrblob_s blob;
Header sigh = NULL;
rpmRC rc = RPMRC_FAIL; /* assume failure */
- int xx;
- int i;
if (sighp)
*sighp = NULL;
- if (sig_type != RPMSIGTYPE_HEADERSIG)
- goto exit;
-
- memset(block, 0, sizeof(block));
- if ((xx = Freadall(fd, block, sizeof(block))) != sizeof(block)) {
- rasprintf(&buf, _("sigh size(%d): BAD, read returned %d\n"),
- (int)sizeof(block), xx);
- goto exit;
- }
- if (memcmp(block, rpm_header_magic, sizeof(rpm_header_magic))) {
- rasprintf(&buf, _("sigh magic: BAD\n"));
+ if (hdrblobRead(fd, 1, 1, RPMTAG_HEADERSIGNATURES, &blob, &buf) != RPMRC_OK)
goto exit;
- }
- il = ntohl(block[2]);
- if (il < 0 || il > 32) {
- rasprintf(&buf,
- _("sigh tags: BAD, no. of tags(%d) out of range\n"), il);
- goto exit;
- }
- dl = ntohl(block[3]);
- if (dl < 0 || dl > 8192) {
- rasprintf(&buf,
- _("sigh data: BAD, no. of bytes(%d) out of range\n"), dl);
- goto exit;
- }
-
- memset(&entry, 0, sizeof(entry));
- memset(&info, 0, sizeof(info));
-
- nb = (il * sizeof(struct entryInfo_s)) + dl;
- uc = sizeof(il) + sizeof(dl) + nb;
- ei = xmalloc(uc);
- ei[0] = block[2];
- ei[1] = block[3];
- pe = (entryInfo) &ei[2];
- dataStart = (unsigned char *) (pe + il);
- if ((xx = Freadall(fd, pe, nb)) != nb) {
- rasprintf(&buf,
- _("sigh blob(%d): BAD, read returned %d\n"), (int)nb, xx);
- goto exit;
- }
- /* Check (and convert) the 1st tag element. */
- xx = headerVerifyInfo(1, dl, pe, &entry.info, 0);
- if (xx != -1) {
- rasprintf(&buf, _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"),
- 0, entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
-
- /* Is there an immutable header region tag? */
- if (entry.info.tag == RPMTAG_HEADERSIGNATURES) {
- /* Is the region tag sane? */
- if (!(entry.info.type == REGION_TAG_TYPE &&
- entry.info.count == REGION_TAG_COUNT)) {
- rasprintf(&buf,
- _("region tag: BAD, tag %d type %d offset %d count %d\n"),
- entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
-
- /* Is the trailer within the data area? */
- if (entry.info.offset + REGION_TAG_COUNT > dl) {
- rasprintf(&buf,
- _("region offset: BAD, tag %d type %d offset %d count %d\n"),
- entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
-
- /* Is there an immutable header region tag trailer? */
- dataEnd = dataStart + entry.info.offset;
- (void) memcpy(&info, dataEnd, REGION_TAG_COUNT);
- /* XXX Really old packages have HEADER_IMAGE, not HEADER_SIGNATURES. */
- if (info.tag == htonl(RPMTAG_HEADERIMAGE)) {
- rpmTagVal stag = htonl(RPMTAG_HEADERSIGNATURES);
- info.tag = stag;
- memcpy(dataEnd, &stag, sizeof(stag));
- }
- dataEnd += REGION_TAG_COUNT;
-
- xx = headerVerifyInfo(1, il * sizeof(*pe), &info, &entry.info, 1);
- if (xx != -1 ||
- !((entry.info.tag == RPMTAG_HEADERSIGNATURES || entry.info.tag == RPMTAG_HEADERIMAGE)
- && entry.info.type == REGION_TAG_TYPE
- && entry.info.count == REGION_TAG_COUNT))
- {
- rasprintf(&buf,
- _("region trailer: BAD, tag %d type %d offset %d count %d\n"),
- entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
- memset(&info, 0, sizeof(info));
-
- /* Is the no. of tags in the region less than the total no. of tags? */
- ril = entry.info.offset/sizeof(*pe);
- if ((entry.info.offset % sizeof(*pe)) || ril > il) {
- rasprintf(&buf, _("region size: BAD, ril(%d) > il(%d)\n"), ril, il);
- goto exit;
- }
- }
-
- /* Sanity check signature tags */
- memset(&info, 0, sizeof(info));
- for (i = 1; i < il; i++) {
- xx = headerVerifyInfo(1, dl, pe+i, &entry.info, 0);
- if (xx != -1) {
- rasprintf(&buf,
- _("sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"),
- i, entry.info.tag, entry.info.type,
- entry.info.offset, entry.info.count);
- goto exit;
- }
- }
-
/* OK, blob looks sane, load the header. */
- sigh = headerImport(ei, uc, 0);
- if (sigh == NULL) {
- rasprintf(&buf, _("sigh load: BAD\n"));
+ if (hdrblobImport(&blob, 0, &sigh, &buf) != RPMRC_OK)
goto exit;
- }
- { size_t sigSize = headerSizeof(sigh, HEADER_MAGIC_YES);
- size_t pad = (8 - (sigSize % 8)) % 8; /* 8-byte pad */
- ssize_t trc;
- struct rpmtd_s sizetag;
- rpm_loff_t archSize = 0;
-
- /* Position at beginning of header. */
- if (pad && (trc = Freadall(fd, block, pad)) != pad) {
- rasprintf(&buf,
- _("sigh pad(%zd): BAD, read %zd bytes\n"), pad, trc);
- goto exit;
- }
-
- /* Print package component sizes. */
- if (headerGet(sigh, RPMSIGTAG_LONGSIZE, &sizetag, HEADERGET_DEFAULT)) {
- rpm_loff_t *tsize = rpmtdGetUint64(&sizetag);
- archSize = (tsize) ? *tsize : 0;
- } else if (headerGet(sigh, RPMSIGTAG_SIZE, &sizetag, HEADERGET_DEFAULT)) {
- rpm_off_t *tsize = rpmtdGetUint32(&sizetag);
- archSize = (tsize) ? *tsize : 0;
- }
- rpmtdFreeData(&sizetag);
- rc = printSize(fd, sigSize, pad, archSize);
- if (rc != RPMRC_OK) {
- rasprintf(&buf,
- _("sigh sigSize(%zd): BAD, fstat(2) failed\n"), sigSize);
- goto exit;
- }
- }
- ei = NULL; /* XXX will be freed with header */
+ printSize(fd, sigh);
+ rc = RPMRC_OK;
exit:
if (sighp && sigh && rc == RPMRC_OK)
*sighp = headerLink(sigh);
headerFree(sigh);
- free(ei);
if (msg != NULL) {
*msg = buf;
@@ -255,7 +91,7 @@ exit:
int rpmWriteSignature(FD_t fd, Header sigh)
{
- static uint8_t buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ static const uint8_t zeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
int sigSize, pad;
int rc;
@@ -266,276 +102,128 @@ int rpmWriteSignature(FD_t fd, Header sigh)
sigSize = headerSizeof(sigh, HEADER_MAGIC_YES);
pad = (8 - (sigSize % 8)) % 8;
if (pad) {
- if (Fwrite(buf, sizeof(buf[0]), pad, fd) != pad)
+ if (Fwrite(zeros, sizeof(zeros[0]), pad, fd) != pad)
rc = 1;
}
rpmlog(RPMLOG_DEBUG, "Signature: size(%d)+pad(%d)\n", sigSize, pad);
return rc;
}
-Header rpmNewSignature(void)
-{
- Header sigh = headerNew();
- return sigh;
-}
-
-Header rpmFreeSignature(Header sigh)
-{
- return headerFree(sigh);
-}
-
-static int makeHDRDigest(Header sigh, const char * file, rpmTagVal sigTag)
-{
- Header h = NULL;
- FD_t fd = NULL;
- char * SHA1 = NULL;
- int ret = -1; /* assume failure. */
-
- switch (sigTag) {
- case RPMSIGTAG_SHA1:
- fd = Fopen(file, "r.fdio");
- if (fd == NULL || Ferror(fd))
- goto exit;
- h = headerRead(fd, HEADER_MAGIC_YES);
- if (h == NULL)
- goto exit;
-
- if (headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) {
- DIGEST_CTX ctx;
- struct rpmtd_s utd;
-
- if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, HEADERGET_DEFAULT)
- || utd.data == NULL)
- {
- rpmlog(RPMLOG_ERR,
- _("Immutable header region could not be read. "
- "Corrupted package?\n"));
- goto exit;
- }
- ctx = rpmDigestInit(PGPHASHALGO_SHA1, RPMDIGEST_NONE);
- (void) rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic));
- (void) rpmDigestUpdate(ctx, utd.data, utd.count);
- (void) rpmDigestFinal(ctx, (void **)&SHA1, NULL, 1);
- rpmtdFreeData(&utd);
- } else {
- rpmlog(RPMLOG_ERR, _("Cannot sign RPM v3 packages\n"));
- goto exit;
- }
-
- if (SHA1 == NULL)
- goto exit;
- if (!sighdrPut(sigh, RPMSIGTAG_SHA1, RPM_STRING_TYPE, SHA1, 1))
- goto exit;
- ret = 0;
- break;
- default:
- break;
- }
-
-exit:
- free(SHA1);
- headerFree(h);
- if (fd != NULL) (void) Fclose(fd);
- return ret;
-}
-
-int rpmGenDigest(Header sigh, const char * file, rpmTagVal sigTag)
+rpmRC rpmGenerateSignature(char *SHA256, char *SHA1, uint8_t *MD5,
+ rpm_loff_t size, rpm_loff_t payloadSize, FD_t fd)
{
- struct stat st;
- uint8_t * pkt = NULL;
- size_t pktlen;
- int ret = -1; /* assume failure. */
-
- switch (sigTag) {
- case RPMSIGTAG_SIZE: {
- rpm_off_t size;
- if (stat(file, &st) != 0)
- break;
- size = st.st_size;
- if (!sighdrPut(sigh, sigTag, RPM_INT32_TYPE, &size, 1))
- break;
- ret = 0;
- } break;
- case RPMSIGTAG_LONGSIZE: {
- rpm_loff_t size;
- if (stat(file, &st) != 0)
- break;
- size = st.st_size;
- if (!sighdrPut(sigh, sigTag, RPM_INT64_TYPE, &size, 1))
- break;
- ret = 0;
- } break;
- case RPMSIGTAG_MD5:
- pktlen = 16;
- pkt = xcalloc(pktlen, sizeof(*pkt));
- if (rpmDoDigest(PGPHASHALGO_MD5, file, 0, pkt, NULL)
- || !sighdrPut(sigh, sigTag, RPM_BIN_TYPE, pkt, pktlen))
- break;
- ret = 0;
- break;
- case RPMSIGTAG_SHA1:
- ret = makeHDRDigest(sigh, file, sigTag);
- break;
- default:
- break;
- }
- free(pkt);
-
- return ret;
-}
-
-static const char * rpmSigString(rpmRC res)
-{
- const char * str;
- switch (res) {
- case RPMRC_OK: str = "OK"; break;
- case RPMRC_FAIL: str = "BAD"; break;
- case RPMRC_NOKEY: str = "NOKEY"; break;
- case RPMRC_NOTTRUSTED: str = "NOTRUSTED"; break;
- default:
- case RPMRC_NOTFOUND: str = "UNKNOWN"; break;
- }
- return str;
-}
-
-static rpmRC
-verifyMD5Digest(rpmtd sigtd, DIGEST_CTX md5ctx, char **msg)
-{
- rpmRC res = RPMRC_FAIL; /* assume failure */
- uint8_t * md5sum = NULL;
- size_t md5len = 0;
- char *md5;
- const char *title = _("MD5 digest:");
- *msg = NULL;
- DIGEST_CTX ctx = rpmDigestDup(md5ctx);
-
- if (ctx == NULL) {
- rasprintf(msg, "%s %s\n", title, rpmSigString(res));
+ Header sig = headerNew();
+ struct rpmtd_s td;
+ rpmRC rc = RPMRC_OK;
+ char *reservedSpace;
+ int spaceSize = 32; /* always reserve a bit of space */
+ int gpgSize = rpmExpandNumeric("%{__gpg_reserved_space}");
+ rpm_off_t size32 = size;
+ rpm_off_t payloadSize32 = payloadSize;
+
+ /* Prepare signature */
+ if (SHA256) {
+ rpmtdReset(&td);
+ td.tag = RPMSIGTAG_SHA256;
+ td.count = 1;
+ td.type = RPM_STRING_TYPE;
+ td.data = SHA256;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+ }
+
+ if (SHA1) {
+ rpmtdReset(&td);
+ td.tag = RPMSIGTAG_SHA1;
+ td.count = 1;
+ td.type = RPM_STRING_TYPE;
+ td.data = SHA1;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+ }
+
+ if (MD5) {
+ rpmtdReset(&td);
+ td.tag = RPMSIGTAG_MD5;
+ td.count = 16;
+ td.type = RPM_BIN_TYPE;
+ td.data = MD5;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+ }
+
+ rpmtdReset(&td);
+ td.count = 1;
+ td.type = RPM_INT32_TYPE;
+
+ td.tag = RPMSIGTAG_PAYLOADSIZE;
+ td.data = &payloadSize32;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+
+ td.tag = RPMSIGTAG_SIZE;
+ td.data = &size32;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+
+ if (size >= UINT32_MAX || payloadSize >= UINT32_MAX) {
+ /*
+ * Put the 64bit size variants into the header, but
+ * modify spaceSize so that the resulting header has
+ * the same size. Note that this only works if all tags
+ * with a lower number than RPMSIGTAG_RESERVEDSPACE are
+ * already added and no tag with a higher number is
+ * added yet.
+ */
+ rpm_loff_t p = payloadSize;
+ rpm_loff_t s = size;
+ int newsigSize, oldsigSize;
+
+ oldsigSize = headerSizeof(sig, HEADER_MAGIC_YES);
+
+ headerDel(sig, RPMSIGTAG_PAYLOADSIZE);
+ headerDel(sig, RPMSIGTAG_SIZE);
+
+ td.type = RPM_INT64_TYPE;
+
+ td.tag = RPMSIGTAG_LONGARCHIVESIZE;
+ td.data = &p;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+
+ td.tag = RPMSIGTAG_LONGSIZE;
+ td.data = &s;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+
+ newsigSize = headerSizeof(sig, HEADER_MAGIC_YES);
+ spaceSize -= newsigSize - oldsigSize;
+ }
+
+ if (gpgSize > 0)
+ spaceSize += gpgSize;
+
+ if (spaceSize > 0) {
+ reservedSpace = xcalloc(spaceSize, sizeof(char));
+ rpmtdReset(&td);
+ td.tag = RPMSIGTAG_RESERVEDSPACE;
+ td.count = spaceSize;
+ td.type = RPM_BIN_TYPE;
+ td.data = reservedSpace;
+ headerPut(sig, &td, HEADERPUT_DEFAULT);
+ free(reservedSpace);
+ }
+
+ /* Reallocate the signature into one contiguous region. */
+ sig = headerReload(sig, RPMTAG_HEADERSIGNATURES);
+ if (sig == NULL) { /* XXX can't happen */
+ rpmlog(RPMLOG_ERR, _("Unable to reload signature header.\n"));
+ rc = RPMRC_FAIL;
goto exit;
}
- (void) rpmDigestFinal(ctx, (void **)&md5sum, &md5len, 0);
-
- md5 = pgpHexStr(md5sum, md5len);
- if (md5len != sigtd->count || memcmp(md5sum, sigtd->data, md5len)) {
- char *hex = rpmtdFormat(sigtd, RPMTD_FORMAT_STRING, NULL);
- rasprintf(msg, "%s %s Expected(%s) != (%s)\n", title,
- rpmSigString(res), hex, md5);
- free(hex);
- } else {
- res = RPMRC_OK;
- rasprintf(msg, "%s %s (%s)\n", title, rpmSigString(res), md5);
- }
- free(md5);
-
-exit:
- md5sum = _free(md5sum);
- return res;
-}
-
-/**
- * Verify header immutable region SHA1 digest.
- * @retval msg verbose success/failure text
- * @param sha1ctx
- * @return RPMRC_OK on success
- */
-static rpmRC
-verifySHA1Digest(rpmtd sigtd, DIGEST_CTX sha1ctx, char **msg)
-{
- rpmRC res = RPMRC_FAIL; /* assume failure */
- char * SHA1 = NULL;
- const char *title = _("Header SHA1 digest:");
- const char *sig = sigtd->data;
- *msg = NULL;
- DIGEST_CTX ctx = rpmDigestDup(sha1ctx);
-
- if (ctx == NULL) {
- rasprintf(msg, "%s %s\n", title, rpmSigString(res));
+ /* Write the signature section into the package. */
+ if (rpmWriteSignature(fd, sig)) {
+ rc = RPMRC_FAIL;
goto exit;
}
- (void) rpmDigestFinal(ctx, (void **)&SHA1, NULL, 1);
-
- if (SHA1 == NULL || !rstreq(SHA1, sig)) {
- rasprintf(msg, "%s %s Expected(%s) != (%s)\n", title,
- rpmSigString(res), sig, SHA1 ? SHA1 : "(nil)");
- } else {
- res = RPMRC_OK;
- rasprintf(msg, "%s %s (%s)\n", title, rpmSigString(res), SHA1);
- }
-
exit:
- SHA1 = _free(SHA1);
- return res;
-}
-
-/**
- * Verify DSA/RSA signature.
- * @param keyring pubkey keyring
- * @param sig OpenPGP signature parameters
- * @param hashctx digest context
- * @param isHdr header-only signature?
- * @retval msg verbose success/failure text
- * @return RPMRC_OK on success
- */
-static rpmRC
-verifySignature(rpmKeyring keyring, pgpDigParams sig, DIGEST_CTX hashctx,
- int isHdr, char **msg)
-{
-
- rpmRC res = rpmKeyringVerifySig(keyring, sig, hashctx);
-
- char *sigid = pgpIdentItem(sig);
- rasprintf(msg, "%s%s: %s\n", isHdr ? _("Header ") : "", sigid,
- rpmSigString(res));
- free(sigid);
- return res;
+ headerFree(sig);
+ return rc;
}
-rpmRC
-rpmVerifySignature(rpmKeyring keyring, rpmtd sigtd, pgpDigParams sig,
- DIGEST_CTX ctx, char ** result)
-{
- rpmRC res = RPMRC_NOTFOUND;
- char *msg = NULL;
- int hdrsig = 0;
- if (sigtd->data == NULL || sigtd->count <= 0 || ctx == NULL)
- goto exit;
-
- switch (sigtd->tag) {
- case RPMSIGTAG_MD5:
- res = verifyMD5Digest(sigtd, ctx, &msg);
- break;
- case RPMSIGTAG_SHA1:
- res = verifySHA1Digest(sigtd, ctx, &msg);
- break;
- case RPMSIGTAG_RSA:
- case RPMSIGTAG_DSA:
- hdrsig = 1;
- /* fallthrough */
- case RPMSIGTAG_PGP5: /* XXX legacy */
- case RPMSIGTAG_PGP:
- case RPMSIGTAG_GPG:
- if (sig != NULL)
- res = verifySignature(keyring, sig, ctx, hdrsig, &msg);
- break;
- default:
- break;
- }
-
-exit:
- if (res == RPMRC_NOTFOUND) {
- rasprintf(&msg,
- _("Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"),
- sigtd->tag, sigtd->data, sigtd->count, ctx, sig);
- res = RPMRC_FAIL;
- }
-
- if (result) {
- *result = msg;
- } else {
- free(msg);
- }
- return res;
-}
diff --git a/lib/signature.h b/lib/signature.h
index 18bbdc709..85dccd1d3 100644
--- a/lib/signature.h
+++ b/lib/signature.h
@@ -5,36 +5,21 @@
* \file lib/signature.h
* Generate and verify signatures.
*/
-
-#include <rpm/header.h>
-
-/** \ingroup signature
- * Signature types stored in rpm lead.
- */
-typedef enum sigType_e {
- RPMSIGTYPE_HEADERSIG= 5 /*!< Header style signature */
-} sigType;
+#include <rpm/rpmtypes.h>
#ifdef __cplusplus
extern "C" {
#endif
/** \ingroup signature
- * Return new, empty (signature) header instance.
- * @return signature header
- */
-Header rpmNewSignature(void);
-
-/** \ingroup signature
* Read (and verify header+payload size) signature header.
* If an old-style signature is found, we emulate a new style one.
* @param fd file handle
* @retval sighp address of (signature) header (or NULL)
- * @param sig_type type of signature header to read (from lead)
* @retval msg failure msg
* @return rpmRC return code
*/
-rpmRC rpmReadSignature(FD_t fd, Header *sighp, sigType sig_type, char ** msg);
+rpmRC rpmReadSignature(FD_t fd, Header *sighp, char ** msg);
/** \ingroup signature
* Write signature header.
@@ -45,38 +30,16 @@ rpmRC rpmReadSignature(FD_t fd, Header *sighp, sigType sig_type, char ** msg);
int rpmWriteSignature(FD_t fd, Header h);
/** \ingroup signature
- * Generate digest(s) from a header+payload file, save in signature header.
- * @param sigh signature header
- * @param file header+payload file name
- * @param sigTag type of digest(s) to add
- * @return 0 on success, -1 on failure
+ * Generate signature and write to file
+ * @param SHA256 SHA256 digest
+ * @param SHA1 SHA1 digest
+ * @param MD5 MD5 digest
+ * @param size size of header
+ * @param payloadSize size of archive
+ * @param fd output file
*/
-int rpmGenDigest(Header sigh, const char * file, rpmTagVal sigTag);
-
-/** \ingroup signature
- * Verify a signature from a package.
- *
- * @param keyring keyring handle
- * @param sigtd signature tag data container
- * @param sig signature/pubkey parameters
- * @retval result detailed text result of signature verification
- * (malloc'd)
- * @return result of signature verification
- */
-rpmRC rpmVerifySignature(rpmKeyring keyring, rpmtd sigtd, pgpDigParams sig,
- DIGEST_CTX ctx, char ** result);
-
-/** \ingroup signature
- * Destroy signature header from package.
- * @param h signature header
- * @return NULL always
- */
-Header rpmFreeSignature(Header h);
-
-/* Dumb wrapper around pgpPrtParams() to log some error messages on failure */
-RPM_GNUC_INTERNAL
-int parsePGPSig(rpmtd sigtd, const char *type, const char *fn,
- pgpDigParams *sig);
+rpmRC rpmGenerateSignature(char *SHA256, char *SHA1, uint8_t *MD5,
+ rpm_loff_t size, rpm_loff_t payloadSize, FD_t fd);
#ifdef __cplusplus
}
diff --git a/lib/tagexts.c b/lib/tagexts.c
index 95c5e074d..00b500c26 100644
--- a/lib/tagexts.c
+++ b/lib/tagexts.c
@@ -301,28 +301,65 @@ static char * strtolocale(char *str)
return (char *)cc;
}
+typedef enum tMode_e {
+ NORMALTRIGGER = 0,
+ FILETRIGGER = 1,
+ TRANSFILETRIGGER = 2,
+} tMode;
+
/**
* Retrieve trigger info.
+ * @param mode type of trigger (see tMode_e)
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
-static int triggercondsTag(Header h, rpmtd td, headerGetFlags hgflags)
+static int triggercondsTagFor(tMode mode, Header h, rpmtd td,
+ headerGetFlags hgflags)
{
uint32_t * indices;
int i, j;
char ** conds;
struct rpmtd_s nametd, indextd, flagtd, versiontd, scripttd;
int hgeflags = HEADERGET_MINMEM;
+ rpmTagVal triggername, triggerindex, triggerflags;
+ rpmTagVal triggerversion, triggerscripts;
+
+ switch (mode) {
+ case NORMALTRIGGER:
+ triggername = RPMTAG_TRIGGERNAME;
+ triggerindex = RPMTAG_TRIGGERINDEX;
+ triggerflags = RPMTAG_TRIGGERFLAGS;
+ triggerversion = RPMTAG_TRIGGERVERSION;
+ triggerscripts = RPMTAG_TRIGGERSCRIPTS;
+ break;
+ case FILETRIGGER:
+ triggername = RPMTAG_FILETRIGGERNAME;
+ triggerindex = RPMTAG_FILETRIGGERINDEX;
+ triggerflags = RPMTAG_FILETRIGGERFLAGS;
+ triggerversion = RPMTAG_FILETRIGGERVERSION;
+ triggerscripts = RPMTAG_FILETRIGGERSCRIPTS;
+ break;
+ case TRANSFILETRIGGER:
+ triggername = RPMTAG_TRANSFILETRIGGERNAME;
+ triggerindex = RPMTAG_TRANSFILETRIGGERINDEX;
+ triggerflags = RPMTAG_TRANSFILETRIGGERFLAGS;
+ triggerversion = RPMTAG_TRANSFILETRIGGERVERSION;
+ triggerscripts = RPMTAG_TRANSFILETRIGGERSCRIPTS;
+ break;
+ default:
+ return 0;
+ }
- if (!headerGet(h, RPMTAG_TRIGGERNAME, &nametd, hgeflags)) {
+ if (!headerGet(h, triggername, &nametd, hgeflags)) {
return 0;
}
- headerGet(h, RPMTAG_TRIGGERINDEX, &indextd, hgeflags);
- headerGet(h, RPMTAG_TRIGGERFLAGS, &flagtd, hgeflags);
- headerGet(h, RPMTAG_TRIGGERVERSION, &versiontd, hgeflags);
- headerGet(h, RPMTAG_TRIGGERSCRIPTS, &scripttd, hgeflags);
+ headerGet(h, triggerindex, &indextd, hgeflags);
+ headerGet(h, triggerflags, &flagtd, hgeflags);
+ headerGet(h, triggerversion, &versiontd, hgeflags);
+ headerGet(h, triggerscripts, &scripttd, hgeflags);
td->type = RPM_STRING_ARRAY_TYPE;
td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED;
@@ -371,24 +408,63 @@ static int triggercondsTag(Header h, rpmtd td, headerGetFlags hgflags)
return 1;
}
+static int triggercondsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return triggercondsTagFor(NORMALTRIGGER, h, td, hgflags);
+}
+
+static int filetriggercondsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return triggercondsTagFor(FILETRIGGER, h, td, hgflags);
+}
+
+static int transfiletriggercondsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return triggercondsTagFor(TRANSFILETRIGGER, h, td, hgflags);
+}
+
/**
* Retrieve trigger type info.
+ * @param mode type of trigger (see tMode_e)
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
-static int triggertypeTag(Header h, rpmtd td, headerGetFlags hgflags)
+static int triggertypeTagFor(tMode mode, Header h, rpmtd td,
+ headerGetFlags hgflags)
{
int i;
char ** conds;
struct rpmtd_s indices, flags, scripts;
+ rpmTagVal triggerindex, triggerflags, triggerscripts;
+
+ switch (mode) {
+ case NORMALTRIGGER:
+ triggerindex = RPMTAG_TRIGGERINDEX;
+ triggerflags = RPMTAG_TRIGGERFLAGS;
+ triggerscripts = RPMTAG_TRIGGERSCRIPTS;
+ break;
+ case FILETRIGGER:
+ triggerindex = RPMTAG_FILETRIGGERINDEX;
+ triggerflags = RPMTAG_FILETRIGGERFLAGS;
+ triggerscripts = RPMTAG_FILETRIGGERSCRIPTS;
+ break;
+ case TRANSFILETRIGGER:
+ triggerindex = RPMTAG_TRANSFILETRIGGERINDEX;
+ triggerflags = RPMTAG_TRANSFILETRIGGERFLAGS;
+ triggerscripts = RPMTAG_TRANSFILETRIGGERSCRIPTS;
+ break;
+ default:
+ return 0;
+ }
- if (!headerGet(h, RPMTAG_TRIGGERINDEX, &indices, HEADERGET_MINMEM)) {
+ if (!headerGet(h, triggerindex, &indices, HEADERGET_MINMEM)) {
return 0;
}
- headerGet(h, RPMTAG_TRIGGERFLAGS, &flags, HEADERGET_MINMEM);
- headerGet(h, RPMTAG_TRIGGERSCRIPTS, &scripts, HEADERGET_MINMEM);
+ headerGet(h, triggerflags, &flags, HEADERGET_MINMEM);
+ headerGet(h, triggerscripts, &scripts, HEADERGET_MINMEM);
td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED;
td->count = rpmtdCount(&scripts);
@@ -424,20 +500,38 @@ static int triggertypeTag(Header h, rpmtd td, headerGetFlags hgflags)
return 1;
}
+static int triggertypeTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return triggertypeTagFor(NORMALTRIGGER, h, td, hgflags);
+}
+
+static int filetriggertypeTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return triggertypeTagFor(FILETRIGGER, h, td, hgflags);
+}
+
+static int transfiletriggertypeTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return triggertypeTagFor(TRANSFILETRIGGER, h, td, hgflags);
+}
+
/**
* Retrieve installed file paths.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int instfilenamesTag(Header h, rpmtd td, headerGetFlags hgflags)
{
return fnTag(h, RPMTAG_BASENAMES, 1, td);
}
+
/**
* Retrieve file paths.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int filenamesTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -449,6 +543,7 @@ static int filenamesTag(Header h, rpmtd td, headerGetFlags hgflags)
* Retrieve original file paths (wrt relocation).
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int origfilenamesTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -499,6 +594,7 @@ static char *makeFClass(rpmfi fi)
* Retrieve/generate file classes.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int fileclassTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -529,6 +625,7 @@ static int fileclassTag(Header h, rpmtd td, headerGetFlags hgflags)
* Retrieve file provides.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int fileprovideTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -540,6 +637,7 @@ static int fileprovideTag(Header h, rpmtd td, headerGetFlags hgflags)
* Retrieve file requires.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int filerequireTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -561,6 +659,7 @@ static const char * const _macro_i18ndomains = "%{?_i18ndomains}";
* @param h header
* @param tag tag
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int i18nTag(Header h, rpmTag tag, rpmtd td, headerGetFlags hgflags)
@@ -656,6 +755,7 @@ static int localeTag(Header h, rpmTag tag, rpmtd td)
* Retrieve summary text.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int summaryTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -667,6 +767,7 @@ static int summaryTag(Header h, rpmtd td, headerGetFlags hgflags)
* Retrieve description text.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int descriptionTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -688,6 +789,7 @@ static int changelogtextTag(Header h, rpmtd td)
* Retrieve group text.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int groupTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -734,6 +836,7 @@ static int get64(Header h, rpmtd td, rpmTag newtag, rpmTag oldtag)
* Retrieve file sizes as 64bit regardless of how they're stored.
* @param h header
* @retval td tag data container
+ * @param hgflags header get flags
* @return 1 on success
*/
static int longfilesizesTag(Header h, rpmtd td, headerGetFlags hgflags)
@@ -800,7 +903,7 @@ typedef rpmFlags nevraFlags;
static int getNEVRA(Header h, rpmtd td, nevraFlags flags)
{
const char *val = NULL;
- char *res = NULL;
+ char *res = xstrdup("");
if ((flags & NEVRA_NAME)) {
val = headerGetString(h, RPMTAG_NAME);
@@ -907,11 +1010,63 @@ static int depnevrsTag(Header h, rpmtd td, headerGetFlags hgflags,
return (ndeps > 0);
}
+#define RPMSENSE_STRONG (1 << 27)
+
+static int depnevrsTagFiltered(Header h, rpmtd td, headerGetFlags hgflags,
+ rpmTagVal tag, int strong)
+{
+ rpmds ds = rpmdsNew(h, tag, 0);
+ int ndeps = rpmdsCount(ds);
+
+ if (ndeps > 0) {
+ char **deps = xmalloc(sizeof(*deps) * ndeps);
+ ndeps = 0;
+ while (rpmdsNext(ds) >= 0) {
+ if ((rpmdsFlags(ds) & RPMSENSE_STRONG) == (strong ? RPMSENSE_STRONG : 0))
+ deps[ndeps++] = rpmdsNewDNEVR(NULL, ds);
+ }
+ if (ndeps) {
+ td->data = deps;
+ td->type = RPM_STRING_ARRAY_TYPE;
+ td->count = ndeps;
+ td->flags |= (RPMTD_ALLOCED | RPMTD_PTR_ALLOCED);
+ } else {
+ _free(deps);
+ }
+ }
+ rpmdsFree(ds);
+ return (ndeps > 0);
+}
+
static int requirenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
{
return depnevrsTag(h, td, hgflags, RPMTAG_REQUIRENAME);
}
+static int recommendnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return depnevrsTag(h, td, hgflags, RPMTAG_RECOMMENDNAME) ||
+ depnevrsTagFiltered(h, td, hgflags, RPMTAG_OLDSUGGESTSNAME, 1);
+}
+
+static int suggestnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return depnevrsTag(h, td, hgflags, RPMTAG_SUGGESTNAME) ||
+ depnevrsTagFiltered(h, td, hgflags, RPMTAG_OLDSUGGESTSNAME, 0);
+}
+
+static int supplementnevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return depnevrsTag(h, td, hgflags, RPMTAG_SUPPLEMENTNAME) ||
+ depnevrsTagFiltered(h, td, hgflags, RPMTAG_OLDENHANCESNAME, 1);
+}
+
+static int enhancenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ return depnevrsTag(h, td, hgflags, RPMTAG_ENHANCENAME) ||
+ depnevrsTagFiltered(h, td, hgflags, RPMTAG_OLDENHANCESNAME, 0);
+}
+
static int providenevrsTag(Header h, rpmtd td, headerGetFlags hgflags)
{
return depnevrsTag(h, td, hgflags, RPMTAG_PROVIDENAME);
@@ -958,7 +1113,11 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = {
{ RPMTAG_FILEPROVIDE, fileprovideTag },
{ RPMTAG_FILEREQUIRE, filerequireTag },
{ RPMTAG_TRIGGERCONDS, triggercondsTag },
+ { RPMTAG_FILETRIGGERCONDS, filetriggercondsTag },
+ { RPMTAG_TRANSFILETRIGGERCONDS, transfiletriggercondsTag },
{ RPMTAG_TRIGGERTYPE, triggertypeTag },
+ { RPMTAG_FILETRIGGERTYPE, filetriggertypeTag },
+ { RPMTAG_TRANSFILETRIGGERTYPE, transfiletriggertypeTag },
{ RPMTAG_LONGFILESIZES, longfilesizesTag },
{ RPMTAG_LONGARCHIVESIZE, longarchivesizeTag },
{ RPMTAG_LONGSIZE, longsizeTag },
@@ -976,6 +1135,10 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = {
{ RPMTAG_EPOCHNUM, epochnumTag },
{ RPMTAG_INSTFILENAMES, instfilenamesTag },
{ RPMTAG_REQUIRENEVRS, requirenevrsTag },
+ { RPMTAG_RECOMMENDNEVRS, recommendnevrsTag},
+ { RPMTAG_SUGGESTNEVRS, suggestnevrsTag},
+ { RPMTAG_SUPPLEMENTNEVRS, supplementnevrsTag},
+ { RPMTAG_ENHANCENEVRS, enhancenevrsTag},
{ RPMTAG_PROVIDENEVRS, providenevrsTag },
{ RPMTAG_OBSOLETENEVRS, obsoletenevrsTag },
{ RPMTAG_CONFLICTNEVRS, conflictnevrsTag },
diff --git a/lib/tagname.c b/lib/tagname.c
index 0c2696803..68b252991 100644
--- a/lib/tagname.c
+++ b/lib/tagname.c
@@ -4,6 +4,8 @@
#include "system.h"
+#include <pthread.h>
+
#include <rpm/header.h>
#include <rpm/rpmstring.h>
#include "debug.h"
@@ -23,26 +25,11 @@ struct headerTagTableEntry_s {
#include "lib/tagtbl.C"
-static const int rpmTagTableSize = sizeof(rpmTagTable) / sizeof(rpmTagTable[0]) - 1;
+#define TABLESIZE (sizeof(rpmTagTable) / sizeof(rpmTagTable[0]) - 1)
+static const int rpmTagTableSize = TABLESIZE;
-/**
- */
-typedef struct headerTagIndices_s * headerTagIndices;
-
-struct headerTagIndices_s {
- int (*loadIndex) (headerTagTableEntry ** ipp, int * np,
- int (*cmp) (const void * avp, const void * bvp));
- /*!< load sorted tag index. */
- headerTagTableEntry * byName; /*!< header tags sorted by name. */
- int byNameSize; /*!< no. of entries. */
- int (*byNameCmp) (const void * avp, const void * bvp); /*!< compare entries by name. */
- rpmTagVal (*tagValue) (const char * name); /* return value from name. */
- headerTagTableEntry * byValue; /*!< header tags sorted by value. */
- int byValueSize; /*!< no. of entries. */
- int (*byValueCmp) (const void * avp, const void * bvp); /*!< compare entries by value. */
- const char * (*tagName) (rpmTagVal value); /* Return name from value. */
- rpmTagType (*tagType) (rpmTagVal value); /* Return type from value. */
-};
+static headerTagTableEntry tagsByName[TABLESIZE]; /*!< tags sorted by name. */
+static headerTagTableEntry tagsByValue[TABLESIZE]; /*!< tags sorted by value. */
/**
* Compare tag table entries by name.
@@ -74,56 +61,76 @@ static int tagCmpValue(const void * avp, const void * bvp)
return ret;
}
-/**
- * Load/sort a tag index.
- * @retval *ipp tag index
- * @retval *np no. of tags
- * @param cmp sort compare routine
- * @return 0 always
- */
-static int tagLoadIndex(headerTagTableEntry ** ipp, int * np,
- int (*cmp) (const void * avp, const void * bvp))
+static pthread_once_t tagsLoaded = PTHREAD_ONCE_INIT;
+
+/* Initialize tag by-value and by-name lookup tables */
+static void loadTags(void)
{
- headerTagTableEntry tte, *ip;
- int n = 0;
-
- ip = xcalloc(rpmTagTableSize, sizeof(*ip));
- n = 0;
- for (tte = (headerTagTableEntry)rpmTagTable; tte->name != NULL; tte++) {
- ip[n] = tte;
- n++;
+ for (int i = 0; i < rpmTagTableSize; i++) {
+ tagsByValue[i] = &rpmTagTable[i];
+ tagsByName[i] = &rpmTagTable[i];
}
-assert(n == rpmTagTableSize);
- if (n > 1)
- qsort(ip, n, sizeof(*ip), cmp);
- *ipp = ip;
- *np = n;
- return 0;
+ qsort(tagsByValue, rpmTagTableSize, sizeof(*tagsByValue), tagCmpValue);
+ qsort(tagsByName, rpmTagTableSize, sizeof(*tagsByName), tagCmpName);
}
+static headerTagTableEntry entryByTag(rpmTagVal tag)
+{
+ headerTagTableEntry entry = NULL;
+ int i, comparison;
+ int l = 0;
+ int u = rpmTagTableSize;
-/* forward refs */
-static const char * _tagName(rpmTagVal tag);
-static rpmTagType _tagType(rpmTagVal tag);
-static rpmTagVal _tagValue(const char * tagstr);
+ while (l < u) {
+ i = (l + u) / 2;
+ comparison = (tag - tagsByValue[i]->val);
-static struct headerTagIndices_s _rpmTags = {
- tagLoadIndex,
- NULL, 0, tagCmpName, _tagValue,
- NULL, 0, tagCmpValue, _tagName, _tagType,
-};
+ if (comparison < 0) {
+ u = i;
+ } else if (comparison > 0) {
+ l = i + 1;
+ } else {
+ /* Make sure that the bsearch retrieve is stable. */
+ while (i > 0 && tag == tagsByValue[i-1]->val) {
+ i--;
+ }
+ entry = tagsByValue[i];
+ break;
+ }
+ }
+ return entry;
+}
+
+static headerTagTableEntry entryByName(const char *tag)
+{
+ headerTagTableEntry entry = NULL;
+ int i, comparison;
+ int l = 0;
+ int u = rpmTagTableSize;
-static headerTagIndices const rpmTags = &_rpmTags;
+ while (l < u) {
+ i = (l + u) / 2;
+ comparison = rstrcasecmp(tag, tagsByName[i]->shortname);
-static const char * _tagName(rpmTagVal tag)
+ if (comparison < 0) {
+ u = i;
+ } else if (comparison > 0) {
+ l = i + 1;
+ } else {
+ entry = tagsByName[i];
+ break;
+ }
+ }
+ return entry;
+}
+
+const char * rpmTagGetName(rpmTagVal tag)
{
const char *name = "(unknown)";
const struct headerTagTableEntry_s *t;
- int comparison, i, l, u;
- if (_rpmTags.byValue == NULL)
- tagLoadIndex(&_rpmTags.byValue, &_rpmTags.byValueSize, tagCmpValue);
+ pthread_once(&tagsLoaded, loadTags);
switch (tag) {
case RPMDBI_PACKAGES:
@@ -138,119 +145,54 @@ static const char * _tagName(rpmTagVal tag)
break;
default:
- if (_rpmTags.byValue == NULL)
- break;
- l = 0;
- u = _rpmTags.byValueSize;
- while (l < u) {
- i = (l + u) / 2;
- t = _rpmTags.byValue[i];
-
- comparison = (tag - t->val);
-
- if (comparison < 0)
- u = i;
- else if (comparison > 0)
- l = i + 1;
- else {
- /* Make sure that the bsearch retrieve is stable. */
- while (i > 0 && tag == _rpmTags.byValue[i-1]->val) {
- i--;
- }
- t = _rpmTags.byValue[i];
- if (t->shortname != NULL)
- name = t->shortname;
- break;
- }
- }
+ t = entryByTag(tag);
+ if (t && t->shortname)
+ name = t->shortname;
break;
}
return name;
}
-static rpmTagType _tagType(rpmTagVal tag)
+rpmTagType rpmTagGetType(rpmTagVal tag)
{
const struct headerTagTableEntry_s *t;
- int comparison, i, l, u;
-
- if (_rpmTags.byValue == NULL)
- tagLoadIndex(&_rpmTags.byValue, &_rpmTags.byValueSize, tagCmpValue);
- if (_rpmTags.byValue) {
- l = 0;
- u = _rpmTags.byValueSize;
- while (l < u) {
- i = (l + u) / 2;
- t = _rpmTags.byValue[i];
-
- comparison = (tag - t->val);
-
- if (comparison < 0)
- u = i;
- else if (comparison > 0)
- l = i + 1;
- else {
- /* Make sure that the bsearch retrieve is stable. */
- while (i > 0 && t->val == _rpmTags.byValue[i-1]->val) {
- i--;
- }
- t = _rpmTags.byValue[i];
- /* XXX this is dumb */
- return (rpmTagType)(t->type | t->retype);
- }
- }
+ rpmTagType tagtype = RPM_NULL_TYPE;
+
+ pthread_once(&tagsLoaded, loadTags);
+
+ t = entryByTag(tag);
+ if (t) {
+ /* XXX this is dumb */
+ tagtype = (rpmTagType)(t->type | t->retype);
}
- return RPM_NULL_TYPE;
+ return tagtype;
}
-static rpmTagVal _tagValue(const char * tagstr)
+rpmTagVal rpmTagGetValue(const char * tagstr)
{
const struct headerTagTableEntry_s *t;
- int comparison, i, l, u;
+ rpmTagType tagval = RPMTAG_NOT_FOUND;
+
+ pthread_once(&tagsLoaded, loadTags);
if (!rstrcasecmp(tagstr, "Packages"))
return RPMDBI_PACKAGES;
- if (_rpmTags.byName == NULL)
- tagLoadIndex(&_rpmTags.byName, &_rpmTags.byNameSize, tagCmpName);
- if (_rpmTags.byName == NULL)
- return RPMTAG_NOT_FOUND;
-
- l = 0;
- u = _rpmTags.byNameSize;
- while (l < u) {
- i = (l + u) / 2;
- t = _rpmTags.byName[i];
+ t = entryByName(tagstr);
+ if (t)
+ tagval = t->val;
- comparison = rstrcasecmp(tagstr, t->shortname);
-
- if (comparison < 0)
- u = i;
- else if (comparison > 0)
- l = i + 1;
- else
- return t->val;
- }
- return RPMTAG_NOT_FOUND;
-}
-
-const char * rpmTagGetName(rpmTagVal tag)
-{
- return ((*rpmTags->tagName)(tag));
-}
-
-rpmTagType rpmTagGetType(rpmTagVal tag)
-{
- return ((*rpmTags->tagType)(tag));
+ return tagval;
}
rpmTagType rpmTagGetTagType(rpmTagVal tag)
{
- return (rpmTagType)((*rpmTags->tagType)(tag) & RPM_MASK_TYPE);
+ return (rpmTagGetType(tag) & RPM_MASK_TYPE);
}
rpmTagReturnType rpmTagGetReturnType(rpmTagVal tag)
{
- return ((*rpmTags->tagType)(tag) & RPM_MASK_RETURN_TYPE);
+ return (rpmTagGetType(tag) & RPM_MASK_RETURN_TYPE);
}
rpmTagClass rpmTagTypeGetClass(rpmTagType type)
@@ -285,30 +227,25 @@ rpmTagClass rpmTagGetClass(rpmTagVal tag)
return rpmTagTypeGetClass(rpmTagGetTagType(tag));
}
-rpmTagVal rpmTagGetValue(const char * tagstr)
-{
- return ((*rpmTags->tagValue)(tagstr));
-}
-
int rpmTagGetNames(rpmtd tagnames, int fullname)
{
const char **names;
const char *name;
- if (_rpmTags.byName == NULL)
- tagLoadIndex(&_rpmTags.byName, &_rpmTags.byNameSize, tagCmpName);
- if (tagnames == NULL ||_rpmTags.byName == NULL)
+ pthread_once(&tagsLoaded, loadTags);
+
+ if (tagnames == NULL || tagsByName == NULL)
return 0;
rpmtdReset(tagnames);
- tagnames->count = _rpmTags.byNameSize;
+ tagnames->count = rpmTagTableSize;
tagnames->data = names = xmalloc(tagnames->count * sizeof(*names));
tagnames->type = RPM_STRING_ARRAY_TYPE;
tagnames->flags = RPMTD_ALLOCED | RPMTD_IMMUTABLE;
for (int i = 0; i < tagnames->count; i++) {
- name = fullname ? _rpmTags.byName[i]->name :
- _rpmTags.byName[i]->shortname;
+ name = fullname ? tagsByName[i]->name :
+ tagsByName[i]->shortname;
names[i] = name;
}
return tagnames->count;
diff --git a/lib/transaction.c b/lib/transaction.c
index b91953cf8..6af1d1662 100644
--- a/lib/transaction.c
+++ b/lib/transaction.c
@@ -4,6 +4,9 @@
#include "system.h"
+#include <inttypes.h>
+#include <libgen.h>
+
#include <rpm/rpmlib.h> /* rpmMachineScore, rpmReadPackageFile */
#include <rpm/rpmmacro.h> /* XXX for rpmExpand */
#include <rpm/rpmlog.h>
@@ -11,6 +14,7 @@
#include <rpm/rpmds.h>
#include <rpm/rpmfileutil.h>
#include <rpm/rpmstring.h>
+#include <rpm/rpmsq.h>
#include "lib/fprint.h"
#include "lib/misc.h"
@@ -21,6 +25,7 @@
#include "lib/rpmte_internal.h" /* only internal apis */
#include "lib/rpmts_internal.h"
#include "rpmio/rpmhook.h"
+#include "lib/rpmtriggers.h"
#include "lib/rpmplugins.h"
@@ -63,6 +68,45 @@ struct diskspaceInfo_s {
#define adj_fs_blocks(_nb) (((_nb) * 21) / 20)
#define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block))
+static char *getMntPoint(const char *dirName, dev_t dev)
+{
+ char mntPoint[PATH_MAX];
+ char *resolved_path = realpath(dirName, mntPoint);
+ char *end = NULL;
+ struct stat sb;
+ char *res = NULL;
+
+ if (!resolved_path) {
+ strncpy(mntPoint, dirName, PATH_MAX);
+ mntPoint[PATH_MAX-1] = '\0';
+ }
+
+ while (end != mntPoint) {
+ end = strrchr(mntPoint, '/');
+ if (end == mntPoint) { /* reached "/" */
+ stat("/", &sb);
+ if (dev != sb.st_dev) {
+ res = xstrdup(mntPoint);
+ } else {
+ res = xstrdup("/");
+ }
+ break;
+ } else if (end) {
+ *end = '\0';
+ } else { /* dirName doesn't start with / - should not happen */
+ res = xstrdup(dirName);
+ break;
+ }
+ stat(mntPoint, &sb);
+ if (dev != sb.st_dev) {
+ *end = '/';
+ res = xstrdup(mntPoint);
+ break;
+ }
+ }
+ return res;
+}
+
static int rpmtsInitDSI(const rpmts ts)
{
if (rpmtsFilterFlags(ts) & RPMPROB_FILTER_DISKSPACE)
@@ -77,8 +121,6 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(const rpmts ts, dev_t dev,
{
rpmDiskSpaceInfo dsi;
struct stat sb;
- char * resolved_path;
- char mntPoint[PATH_MAX];
int rc;
#if STATFS_IN_SYS_STATVFS
@@ -119,11 +161,7 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(const rpmts ts, dev_t dev,
dsi->bneeded = 0;
dsi->ineeded = 0;
#ifdef STATFS_HAS_F_BAVAIL
-# ifdef ST_RDONLY
dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail;
-# else
- dsi->bavail = sfb.f_bavail;
-# endif
#else
/* FIXME: the statfs struct doesn't have a member to tell how many blocks are
* available for non-superusers. f_blocks - f_bfree is probably too big, but
@@ -137,34 +175,16 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(const rpmts ts, dev_t dev,
? sfb.f_ffree : -1;
/* Find mount point belonging to this device number */
- resolved_path = realpath(dirName, mntPoint);
- if (!resolved_path) {
- strncpy(mntPoint, dirName, PATH_MAX);
- mntPoint[PATH_MAX-1] = '\0';
- }
- char * end = NULL;
- while (end != mntPoint) {
- end = strrchr(mntPoint, '/');
- if (end == mntPoint) { /* reached "/" */
- stat("/", &sb);
- if (dsi->dev != sb.st_dev) {
- dsi->mntPoint = xstrdup(mntPoint);
- } else {
- dsi->mntPoint = xstrdup("/");
- }
- break;
- } else if (end) {
- *end = '\0';
- } else { /* dirName doesn't start with / - should not happen */
- dsi->mntPoint = xstrdup(dirName);
- break;
- }
- stat(mntPoint, &sb);
- if (dsi->dev != sb.st_dev) {
- *end = '/';
- dsi->mntPoint = xstrdup(mntPoint);
- break;
- }
+ dsi->mntPoint = getMntPoint(dirName, dsi->dev);
+
+ /* normalize block size to 4096 bytes if it is too big. */
+ if (dsi->bsize > 4096) {
+ uint64_t old_size = dsi->bavail * dsi->bsize;
+ rpmlog(RPMLOG_DEBUG,
+ "dubious blocksize % " PRId64 " on %s, normalizing to 4096\n",
+ dsi->bsize, dsi->mntPoint);
+ dsi->bsize = 4096; /* Assume 4k block size */
+ dsi->bavail = old_size / dsi->bsize;
}
rpmlog(RPMLOG_DEBUG,
@@ -291,17 +311,21 @@ static uint64_t countFiles(rpmts ts)
uint64_t fc = 0;
rpmtsi pi = rpmtsiInit(ts);
rpmte p;
- while ((p = rpmtsiNext(pi, 0)) != NULL)
- fc += rpmfiFC(rpmteFI(p));
+ rpmfiles files;
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
+ files = rpmteFiles(p);
+ fc += rpmfilesFC(files);
+ rpmfilesFree(files);
+ }
rpmtsiFree(pi);
return fc;
}
-static int handleRemovalConflict(rpmfi fi, int fx, rpmfi ofi, int ofx)
+static int handleRemovalConflict(rpmfiles fi, int fx, rpmfiles ofi, int ofx)
{
int rConflicts = 0; /* Removed files don't conflict, normally */
- rpmFileTypes ft = rpmfiWhatis(rpmfiFModeIndex(fi, fx));
- rpmFileTypes oft = rpmfiWhatis(rpmfiFModeIndex(ofi, ofx));
+ rpmFileTypes ft = rpmfiWhatis(rpmfilesFMode(fi, fx));
+ rpmFileTypes oft = rpmfiWhatis(rpmfilesFMode(ofi, ofx));
struct stat sb;
char *fn = NULL;
@@ -312,7 +336,7 @@ static int handleRemovalConflict(rpmfi fi, int fx, rpmfi ofi, int ofx)
} else if (oft == LINK) {
/* We can't correctly handle directory symlink changing to directory */
if (ft == XDIR) {
- fn = rpmfiFNIndex(fi, fx);
+ fn = rpmfilesFN(fi, fx);
if (stat(fn, &sb) == 0 && S_ISDIR(sb.st_mode))
rConflicts = 1;
}
@@ -324,7 +348,7 @@ static int handleRemovalConflict(rpmfi fi, int fx, rpmfi ofi, int ofx)
*/
if (rConflicts) {
if (fn == NULL)
- fn = rpmfiFNIndex(fi, fx);
+ fn = rpmfilesFN(fi, fx);
if (lstat(fn, &sb) || rpmfiWhatis(sb.st_mode) == ft)
rConflicts = 0;
}
@@ -342,15 +366,15 @@ static int handleRemovalConflict(rpmfi fi, int fx, rpmfi ofi, int ofx)
* unnecessary with careful packaging.
*/
static int handleColorConflict(rpmts ts,
- rpmfs fs, rpmfi fi, int fx,
- rpmfs ofs, rpmfi ofi, int ofx)
+ rpmfs fs, rpmfiles fi, int fx,
+ rpmfs ofs, rpmfiles ofi, int ofx)
{
int rConflicts = 1;
rpm_color_t tscolor = rpmtsColor(ts);
if (tscolor != 0) {
- rpm_color_t fcolor = rpmfiFColorIndex(fi, fx) & tscolor;
- rpm_color_t ofcolor = rpmfiFColorIndex(ofi, ofx) & tscolor;
+ rpm_color_t fcolor = rpmfilesFColor(fi, fx) & tscolor;
+ rpm_color_t ofcolor = rpmfilesFColor(ofi, ofx) & tscolor;
if (fcolor != 0 && ofcolor != 0 && fcolor != ofcolor) {
rpm_color_t prefcolor = rpmtsPrefColor(ts);
@@ -377,22 +401,24 @@ static int handleColorConflict(rpmts ts,
* @param ts transaction set
* @param p current transaction element
* @param fi file info set
- * @param shared shared file info
- * @param sharedCount no. of shared elements
- * @param reportConflicts
+ * @param fx file index
+ * @param otherHeader header containing the matching file
+ * @param otherFi matching file info set
+ * @param ofx matching file index
+ * @param beingRemoved file being removed (installed otherwise)
*/
/* XXX only ts->{probs,rpmdb} modified */
-static void handleInstInstalledFile(const rpmts ts, rpmte p, rpmfi fi, int fx,
- Header otherHeader, rpmfi otherFi, int ofx,
+static void handleInstInstalledFile(const rpmts ts, rpmte p, rpmfiles fi, int fx,
+ Header otherHeader, rpmfiles otherFi, int ofx,
int beingRemoved)
{
rpmfs fs = rpmteGetFileStates(p);
- int isCfgFile = ((rpmfiFFlagsIndex(otherFi, ofx) | rpmfiFFlagsIndex(fi, fx)) & RPMFILE_CONFIG);
+ int isCfgFile = ((rpmfilesFFlags(otherFi, ofx) | rpmfilesFFlags(fi, fx)) & RPMFILE_CONFIG);
if (XFA_SKIPPING(rpmfsGetAction(fs, fx)))
return;
- if (rpmfiCompareIndex(otherFi, ofx, fi, fx)) {
+ if (rpmfilesCompare(otherFi, ofx, fi, fx)) {
int rConflicts = 1;
char rState = RPMFILE_STATE_REPLACED;
@@ -421,20 +447,22 @@ static void handleInstInstalledFile(const rpmts ts, rpmte p, rpmfi fi, int fx,
rState = RPMFILE_STATE_WRONGCOLOR;
}
+
if (rConflicts) {
- char *path = rpmfiFNIndex(fi, fx);
+ char *path = rpmfilesFN(fi, fx);
/* Call file conflict hook for all plugins */
rpmpluginsCallFileConflict(ts->plugins, ts, path, otherHeader, otherFi, rConflicts);
}
-
+
/* Somebody used The Force, lets shut up... */
if (rpmtsFilterFlags(ts) & RPMPROB_FILTER_REPLACEOLDFILES) {
rConflicts = 0;
}
+
if (rConflicts) {
char *altNEVR = headerGetAsString(otherHeader, RPMTAG_NEVRA);
- char *fn = rpmfiFNIndex(fi, fx);
+ char *fn = rpmfilesFN(fi, fx);
rpmteAddProblem(p, RPMPROB_FILE_CONFLICT, altNEVR, fn,
headerGetInstance(otherHeader));
free(fn);
@@ -449,34 +477,42 @@ static void handleInstInstalledFile(const rpmts ts, rpmte p, rpmfi fi, int fx,
}
}
- /* Determine config file dispostion, skipping missing files (if any). */
+ /* Determine config file disposition, skipping missing files (if any). */
if (isCfgFile) {
int skipMissing = ((rpmtsFlags(ts) & RPMTRANS_FLAG_ALLFILES) ? 0 : 1);
rpmFileAction action;
- action = rpmfiDecideFateIndex(otherFi, ofx, fi, fx, skipMissing);
+ action = rpmfilesDecideFate(otherFi, ofx, fi, fx, skipMissing);
rpmfsSetAction(fs, fx, action);
}
- rpmfiSetFReplacedSizeIndex(fi, fx, rpmfiFSizeIndex(otherFi, ofx));
+
+ /* Skip already existing files - if 'minimize_writes' is set. */
+ if ((!isCfgFile) && (rpmfsGetAction(fs, fx) == FA_UNKNOWN) && ts->min_writes) {
+ if (rpmfileContentsEqual(otherFi, ofx, fi, fx)) {
+ rpmfsSetAction(fs, fx, FA_TOUCH);
+ }
+ }
+
+ rpmfilesSetFReplacedSize(fi, fx, rpmfilesFSize(otherFi, ofx));
}
/**
* Update disk space needs on each partition for this package's files.
*/
/* XXX only ts->{probs,di} modified */
-static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi fi)
+static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfiles fi)
{
rpm_loff_t fixupSize = 0;
int i, j;
rpmfs fs = rpmteGetFileStates(p);
rpmfs otherFs;
- rpm_count_t fc = rpmfiFC(fi);
+ rpm_count_t fc = rpmfilesFC(fi);
int reportConflicts = !(rpmtsFilterFlags(ts) & RPMPROB_FILTER_REPLACENEWFILES);
- fingerPrint * fpList = rpmfiFps(fi);
+ fingerPrint * fpList = rpmfilesFps(fi);
for (i = 0; i < fc; i++) {
struct fingerPrint_s * fiFps;
int otherPkgNum, otherFileNum;
- rpmfi otherFi;
+ rpmfiles otherFi;
rpmte otherTe;
rpmfileAttrs FFlags;
struct rpmffi_s * recs;
@@ -485,7 +521,7 @@ static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi
if (XFA_SKIPPING(rpmfsGetAction(fs, i)))
continue;
- FFlags = rpmfiFFlagsIndex(fi, i);
+ FFlags = rpmfilesFFlags(fi, i);
fixupSize = 0;
@@ -513,7 +549,7 @@ static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi
* that were just installed.
* If both this and the other package are being removed, then each
* file removal from preceding packages needs to be skipped so that
- * the file removal occurs only on the last occurence of an overlapped
+ * the file removal occurs only on the last occurrence of an overlapped
* file in the transaction set.
*
*/
@@ -535,7 +571,6 @@ static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi
for (otherPkgNum = j - 1; otherPkgNum >= 0; otherPkgNum--) {
otherTe = recs[otherPkgNum].p;
- otherFi = rpmteFI(otherTe);
otherFileNum = recs[otherPkgNum].fileno;
otherFs = rpmteGetFileStates(otherTe);
@@ -544,8 +579,10 @@ static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi
continue;
/* XXX Happens iff fingerprint for incomplete package install. */
- if (rpmfsGetAction(otherFs, otherFileNum) != FA_UNKNOWN)
+ if (rpmfsGetAction(otherFs, otherFileNum) != FA_UNKNOWN) {
+ otherFi = rpmteFiles(otherTe);
break;
+ }
}
switch (rpmteType(p)) {
@@ -555,7 +592,7 @@ static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi
rpmFileAction action;
if (rpmfsGetAction(fs, i) != FA_UNKNOWN)
break;
- if (rpmfiConfigConflictIndex(fi, i)) {
+ if (rpmfilesConfigConflict(fi, i)) {
/* Here is a non-overlapped pre-existing config file. */
action = (FFlags & RPMFILE_NOREPLACE) ?
FA_ALTNAME : FA_BACKUP;
@@ -568,7 +605,7 @@ static void handleOverlappedFiles(rpmts ts, fingerPrintCache fpc, rpmte p, rpmfi
assert(otherFi != NULL);
/* Mark added overlapped non-identical files as a conflict. */
- if (rpmfiCompareIndex(otherFi, otherFileNum, fi, i)) {
+ if (rpmfilesCompare(otherFi, otherFileNum, fi, i)) {
int rConflicts;
/* If enabled, resolve colored conflicts to preferred type */
@@ -576,7 +613,7 @@ assert(otherFi != NULL);
otherFs, otherFi, otherFileNum);
if (rConflicts && reportConflicts) {
- char *fn = rpmfiFNIndex(fi, i);
+ char *fn = rpmfilesFN(fi, i);
rpmteAddProblem(p, RPMPROB_NEW_FILE_CONFLICT,
rpmteNEVRA(otherTe), fn, 0);
free(fn);
@@ -587,10 +624,13 @@ assert(otherFi != NULL);
if (oaction != FA_UNKNOWN && !XFA_SKIPPING(oaction)) {
rpmfileAttrs oflags;
/* ...but ghosts aren't really created so... */
- oflags = rpmfiFFlagsIndex(otherFi, otherFileNum);
+ oflags = rpmfilesFFlags(otherFi, otherFileNum);
if (!(oflags & RPMFILE_GHOST)) {
rpmfsSetAction(fs, i, FA_SKIP);
}
+ /* if the other file is color skipped then skip this file too */
+ } else if (oaction == FA_SKIPCOLOR) {
+ rpmfsSetAction(fs, i, FA_SKIPCOLOR);
}
}
@@ -599,9 +639,9 @@ assert(otherFi != NULL);
break;
/* Try to get the disk accounting correct even if a conflict. */
- fixupSize = rpmfiFSizeIndex(otherFi, otherFileNum);
+ fixupSize = rpmfilesFSize(otherFi, otherFileNum);
- if (rpmfiConfigConflictIndex(fi, i)) {
+ if (rpmfilesConfigConflict(fi, i)) {
/* Here is an overlapped pre-existing config file. */
rpmFileAction action;
action = (FFlags & RPMFILE_NOREPLACE) ? FA_ALTNAME : FA_SKIP;
@@ -627,12 +667,14 @@ assert(otherFi != NULL);
}
if (XFA_SKIPPING(rpmfsGetAction(fs, i)))
break;
- if (rpmfiFStateIndex(fi, i) != RPMFILE_STATE_NORMAL)
+ if (rpmfilesFState(fi, i) != RPMFILE_STATE_NORMAL) {
+ rpmfsSetAction(fs, i, FA_SKIP);
break;
+ }
/* Pre-existing modified config files need to be saved. */
- if (rpmfiConfigConflictIndex(fi, i)) {
- rpmfsSetAction(fs, i, FA_BACKUP);
+ if (rpmfilesConfigConflict(fi, i)) {
+ rpmfsSetAction(fs, i, FA_SAVE);
break;
}
@@ -640,10 +682,11 @@ assert(otherFi != NULL);
rpmfsSetAction(fs, i, FA_ERASE);
break;
}
+ rpmfilesFree(otherFi);
/* Update disk space info for a file. */
rpmtsUpdateDSI(ts, fpEntryDev(fpc, fiFps), fpEntryDir(fpc, fiFps),
- rpmfiFSizeIndex(fi, i), rpmfiFReplacedSizeIndex(fi, i),
+ rpmfilesFSize(fi, i), rpmfilesFReplacedSize(fi, i),
fixupSize, rpmfsGetAction(fs, i));
}
@@ -654,7 +697,6 @@ assert(otherFi != NULL);
* @param tspool transaction string pool
* @param p current transaction element
* @param h installed header
- * @param ps problem set
*/
static void ensureOlder(rpmstrPool tspool, const rpmte p, const Header h)
{
@@ -677,9 +719,9 @@ static void ensureOlder(rpmstrPool tspool, const rpmte p, const Header h)
* netshardpath and though should be excluded.
* @param ts transaction set
* @param fi file info set
- * @returns pointer to matching path or NULL
+ * @returns 1 if path is net shared path, otherwise 0
*/
-static char ** matchNetsharedpath(const rpmts ts, rpmfi fi)
+static int matchNetsharedpath(const rpmts ts, rpmfi fi)
{
char ** nsp;
const char * dn, * bn;
@@ -717,29 +759,25 @@ static char ** matchNetsharedpath(const rpmts ts, rpmfi fi)
break;
}
- return nsp;
+ return (nsp != NULL && *nsp != NULL);
}
-static void skipEraseFiles(const rpmts ts, rpmte p)
+static void skipEraseFiles(const rpmts ts, rpmfiles files, rpmfs fs)
{
- rpmfi fi = rpmteFI(p);
- rpmfs fs = rpmteGetFileStates(p);
int i;
- char ** nsp;
/*
* Skip net shared paths.
* Net shared paths are not relative to the current root (though
* they do need to take package relocations into account).
*/
if (ts->netsharedPaths) {
- fi = rpmfiInit(fi, 0);
+ rpmfi fi = rpmfilesIter(files, RPMFI_ITER_FWD);
while ((i = rpmfiNext(fi)) >= 0)
{
- nsp = matchNetsharedpath(ts, fi);
- if (nsp && *nsp) {
+ if (matchNetsharedpath(ts, fi))
rpmfsSetAction(fs, i, FA_SKIPNETSHARED);
- }
}
+ rpmfiFree(fi);
}
}
@@ -747,9 +785,10 @@ static void skipEraseFiles(const rpmts ts, rpmte p)
/**
* Skip any files that do not match install policies.
* @param ts transaction set
- * @param fi file info set
+ * @param files file info set
+ * @param fs file states
*/
-static void skipInstallFiles(const rpmts ts, rpmte p)
+static void skipInstallFiles(const rpmts ts, rpmfiles files, rpmfs fs)
{
rpm_color_t tscolor = rpmtsColor(ts);
rpm_color_t FColor;
@@ -759,8 +798,7 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
char * dff;
int dc;
int i, j, ix;
- rpmfi fi = rpmteFI(p);
- rpmfs fs = rpmteGetFileStates(p);
+ rpmfi fi = rpmfilesIter(files, RPMFI_ITER_FWD);
if (!noDocs)
noDocs = rpmExpandNumeric("%{_excludedocs}");
@@ -772,13 +810,13 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
fi = rpmfiInit(fi, 0);
while ((i = rpmfiNext(fi)) >= 0) {
- char ** nsp;
const char *flangs;
ix = rpmfiDX(fi);
drc[ix]++;
/* Don't bother with skipped files */
+ /* XXX FIXME: --excludepath on %license should not be permitted */
if (XFA_SKIPPING(rpmfsGetAction(fs, i))) {
drc[ix]--; dff[ix] = 1;
continue;
@@ -798,8 +836,7 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
* they do need to take package relocations into account).
*/
if (ts->netsharedPaths) {
- nsp = matchNetsharedpath(ts, fi);
- if (nsp && *nsp) {
+ if (matchNetsharedpath(ts, fi)) {
drc[ix]--; dff[ix] = 1;
rpmfsSetAction(fs, i, FA_SKIPNETSHARED);
continue;
@@ -807,6 +844,14 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
}
/*
+ * In general, excluding license files is not permitted. In case
+ * of SKIPNETSHARED and SKIPCOLOR the file is expected to be
+ * there via other means however so that is ok.
+ */
+ if (rpmfiFFlags(fi) & RPMFILE_LICENSE)
+ continue;
+
+ /*
* Skip i18n language specific files.
*/
flangs = (ts->installLangs != NULL) ? rpmfiFLangs(fi) : NULL;
@@ -851,7 +896,8 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
}
/* Skip (now empty) directories that had skipped files. */
- for (j = 0; j < dc; j++) {
+ /* Iterate over dirs in reversed order to solve subdirs at first */
+ for (j = dc - 1; j >= 0; j--) {
const char * dn, * bn;
size_t dnlen, bnlen;
@@ -859,7 +905,7 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
if (!dff[j]) continue; /* dir was not emptied here. */
/* Find parent directory and basename. */
- dn = rpmfiDNIndex(fi, j); dnlen = strlen(dn) - 1;
+ dn = rpmfilesDN(files, j); dnlen = strlen(dn) - 1;
bn = dn + dnlen; bnlen = 0;
while (bn > dn && bn[-1] != '/') {
bnlen++;
@@ -892,12 +938,18 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
continue;
rpmlog(RPMLOG_DEBUG, "excluding directory %s\n", dn);
rpmfsSetAction(fs, i, FA_SKIPNSTATE);
+ ix = rpmfiDX(fi);
+ /* Decrease count of files for parent directory */
+ drc[ix]--;
+ /* Mark directory because something was removed from them */
+ dff[ix] = 1;
break;
}
}
free(drc);
free(dff);
+ rpmfiFree(fi);
}
#undef HASHTYPE
@@ -932,6 +984,7 @@ rpmdbMatchIterator rpmFindBaseNamesInDB(rpmts ts, uint64_t fileCount)
tsMembers tsmem = rpmtsMembers(ts);
rpmstrPool tspool = rpmtsPool(ts);
rpmtsi pi; rpmte p;
+ rpmfiles files;
rpmfi fi;
rpmdbMatchIterator mi;
int oc = 0;
@@ -945,12 +998,13 @@ rpmdbMatchIterator rpmFindBaseNamesInDB(rpmts ts, uint64_t fileCount)
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
- (void) rpmdbCheckSignals();
+ (void) rpmsqPoll();
rpmtsNotify(ts, NULL, RPMCALLBACK_TRANS_PROGRESS, oc++, tsmem->orderCount);
/* Gather all installed headers with matching basename's. */
- fi = rpmfiInit(rpmteFI(p), 0);
+ files = rpmteFiles(p);
+ fi = rpmfilesIter(files, RPMFI_ITER_FWD);
while (rpmfiNext(fi) >= 0) {
size_t keylen;
@@ -965,7 +1019,9 @@ rpmdbMatchIterator rpmFindBaseNamesInDB(rpmts ts, uint64_t fileCount)
keylen++; /* XXX "/" fixup. */
rpmdbExtendIterator(mi, baseName, keylen);
rpmStringSetAddEntry(baseNames, baseNameId);
- }
+ }
+ rpmfiFree(fi);
+ rpmfilesFree(files);
}
rpmtsiFree(pi);
rpmStringSetFree(baseNames);
@@ -986,7 +1042,7 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, fingerPrintCache fpc)
{
tsMembers tsmem = rpmtsMembers(ts);
rpmte p;
- rpmfi fi;
+ rpmfiles fi;
rpmfs fs;
int j;
unsigned int fileNum;
@@ -1015,15 +1071,15 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, fingerPrintCache fpc)
fingerPrint *fpp = NULL;
unsigned int installedPkg;
int beingRemoved = 0;
- rpmfi otherFi = NULL;
+ rpmfiles otherFi = NULL;
rpmte *removedPkg = NULL;
/* Is this package being removed? */
installedPkg = rpmdbGetIteratorOffset(mi);
- if (removedHashGetEntry(tsmem->removedPackages, installedPkg,
+ if (packageHashGetEntry(tsmem->removedPackages, installedPkg,
&removedPkg, NULL, NULL)) {
beingRemoved = 1;
- otherFi = rpmfiLink(rpmteFI(removedPkg[0]));
+ otherFi = rpmteFiles(removedPkg[0]);
}
h = headerLink(h);
@@ -1057,7 +1113,7 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, fingerPrintCache fpc)
fpLookup(fpc, dirName, baseName, &fpp);
fpIx = 0;
} else {
- fpp = rpmfiFps(otherFi);
+ fpp = rpmfilesFps(otherFi);
fpIx = fileNum;
}
@@ -1066,7 +1122,7 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, fingerPrintCache fpc)
for (j = 0; j < numRecs; j++) {
p = recs[j].p;
- fi = rpmteFI(p);
+ fi = rpmteFiles(p);
fs = rpmteGetFileStates(p);
/* Determine the fate of each file. */
@@ -1074,7 +1130,7 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, fingerPrintCache fpc)
case TR_ADDED:
if (!otherFi) {
/* XXX What to do if this fails? */
- otherFi = rpmfiNew(ts, h, RPMTAG_BASENAMES, RPMFI_KEEPHEADER);
+ otherFi = rpmfilesNew(NULL, h, RPMTAG_BASENAMES, RPMFI_KEEPHEADER);
}
handleInstInstalledFile(ts, p, fi, recs[j].fileno,
h, otherFi, fileNum, beingRemoved);
@@ -1086,13 +1142,14 @@ void checkInstalledFiles(rpmts ts, uint64_t fileCount, fingerPrintCache fpc)
}
break;
}
+ rpmfilesFree(fi);
}
newheader = rpmdbNextIterator(mi);
} while (newheader==h);
- otherFi = rpmfiFree(otherFi);
+ otherFi = rpmfilesFree(otherFi);
if (!beingRemoved) {
rpmtdFreeData(&ostates);
rpmtdFreeData(&bnames);
@@ -1146,7 +1203,7 @@ static rpmps checkProblems(rpmts ts)
if (!(probFilter & RPMPROB_FILTER_REPLACEPKG)) {
Header h;
rpmdbMatchIterator mi;
- mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(p), 0);
+ mi = rpmtsPrunedIterator(ts, RPMDBI_NAME, rpmteN(p), 1);
rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP, rpmteE(p));
rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_STRCMP, rpmteV(p));
rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP, rpmteR(p));
@@ -1180,92 +1237,16 @@ static int runTransScripts(rpmts ts, pkgGoal goal)
int rc = 0;
rpmte p;
rpmtsi pi = rpmtsiInit(ts);
- while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL) {
- rc += rpmteProcess(p, goal);
- }
- rpmtsiFree(pi);
- return rc;
-}
-
-static int rpmtsSetupCollections(rpmts ts)
-{
- /* seenCollectionsPost and TEs are basically a key-value pair. each item in
- * seenCollectionsPost is a collection that has been seen from any package,
- * and the associated index in the TEs is the last transaction element
- * where that collection was seen. */
- ARGV_t seenCollectionsPost = NULL;
- rpmte *TEs = NULL;
- int numSeenPost = 0;
-
- /* seenCollectionsPre is a list of collections that have been seen from
- * only removed packages */
- ARGV_t seenCollectionsPre = NULL;
- int numSeenPre = 0;
-
- ARGV_const_t collname;
- int installing = 1;
- int i;
-
- rpmte p;
- rpmtsi pi = rpmtsiInit(ts);
- while ((p = rpmtsiNext(pi, 0)) != NULL) {
- /* detect when we switch from installing to removing packages, and
- * update the lastInCollectionAdd lists */
- if (installing && rpmteType(p) == TR_REMOVED) {
- installing = 0;
- for (i = 0; i < numSeenPost; i++) {
- rpmteAddToLastInCollectionAdd(TEs[i], seenCollectionsPost[i]);
- }
- }
-
- rpmteSetupCollectionPlugins(p);
-
- for (collname = rpmteCollections(p); collname && *collname; collname++) {
- /* figure out if we've seen this collection in post before */
- for (i = 0; i < numSeenPost && strcmp(*collname, seenCollectionsPost[i]); i++) {
- }
- if (i < numSeenPost) {
- /* we've seen the collection, update the index */
- TEs[i] = p;
- } else {
- /* haven't seen the collection yet, add it */
- argvAdd(&seenCollectionsPost, *collname);
- TEs = xrealloc(TEs, sizeof(*TEs) * (numSeenPost + 1));
- TEs[numSeenPost] = p;
- numSeenPost++;
- }
+ rpmElementTypes types = TR_ADDED;
+ int i = 0;
+ if (goal == PKG_TRANSFILETRIGGERUN)
+ types = TR_REMOVED;
- /* figure out if we've seen this collection in pre remove before */
- if (installing == 0) {
- for (i = 0; i < numSeenPre && strcmp(*collname, seenCollectionsPre[i]); i++) {
- }
- if (i >= numSeenPre) {
- /* haven't seen this collection, add it */
- rpmteAddToFirstInCollectionRemove(p, *collname);
- argvAdd(&seenCollectionsPre, *collname);
- numSeenPre++;
- }
- }
- }
+ while ((p = rpmtsiNext(pi, types)) != NULL) {
+ rc += rpmteProcess(p, goal, i++);
}
rpmtsiFree(pi);
-
- /* we've looked at all the rpmte's, update the lastInCollectionAny lists */
- for (i = 0; i < numSeenPost; i++) {
- rpmteAddToLastInCollectionAny(TEs[i], seenCollectionsPost[i]);
- if (installing == 1) {
- /* lastInCollectionAdd is only updated above if packages were
- * removed. if nothing is removed in the transaction, we need to
- * update that list here */
- rpmteAddToLastInCollectionAdd(TEs[i], seenCollectionsPost[i]);
- }
- }
-
- argvFree(seenCollectionsPost);
- argvFree(seenCollectionsPre);
- _free(TEs);
-
- return 0;
+ return rc;
}
static int rpmtsSetup(rpmts ts, rpmprobFilterFlags ignoreSet)
@@ -1279,21 +1260,7 @@ static int rpmtsSetup(rpmts ts, rpmprobFilterFlags ignoreSet)
(void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | _noTransTriggers));
if (rpmtsFlags(ts) & (RPMTRANS_FLAG_JUSTDB | RPMTRANS_FLAG_TEST))
- (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | _noTransScripts | _noTransTriggers | RPMTRANS_FLAG_NOCOLLECTIONS));
-
- /* if SELinux isn't enabled or it is a test run, don't bother... */
- if (!is_selinux_enabled() || (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) {
- rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_NOCONTEXTS));
- }
-
- if (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS) {
- rpmlog(RPMLOG_DEBUG, "Selinux disabled.\n");
- } else {
- if (rpmtsSELabelInit(ts, 1)) {
- rpmlog(RPMLOG_WARNING, "Failed to open SELinux handle.\n");
- rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_NOCONTEXTS));
- }
- }
+ (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | _noTransScripts | _noTransTriggers));
/*
* Make sure the database is open RDWR for package install/erase.
@@ -1315,9 +1282,6 @@ static int rpmtsSetup(rpmts ts, rpmprobFilterFlags ignoreSet)
static int rpmtsFinish(rpmts ts)
{
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS)) {
- rpmtsSELabelFini(ts, 1);
- }
return rpmChrootSet(NULL);
}
@@ -1326,7 +1290,6 @@ static int rpmtsPrepare(rpmts ts)
tsMembers tsmem = rpmtsMembers(ts);
rpmtsi pi;
rpmte p;
- rpmfi fi;
int rc = 0;
uint64_t fileCount = countFiles(ts);
const char *dbhome = NULL;
@@ -1336,16 +1299,21 @@ static int rpmtsPrepare(rpmts ts)
rpmlog(RPMLOG_DEBUG, "computing %" PRIu64 " file fingerprints\n", fileCount);
- /* Skip netshared paths, not our i18n files, and excluded docs */
+ /* Reset actions, set skip for netshared paths and excluded files */
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
- if (rpmfiFC(rpmteFI(p)) == 0)
- continue;
- if (rpmteType(p) == TR_ADDED) {
- skipInstallFiles(ts, p);
- } else {
- skipEraseFiles(ts, p);
+ rpmfiles files = rpmteFiles(p);
+ if (rpmfilesFC(files) > 0) {
+ rpmfs fs = rpmteGetFileStates(p);
+ /* Ensure clean state, this could get called more than once. */
+ rpmfsResetActions(fs);
+ if (rpmteType(p) == TR_ADDED) {
+ skipInstallFiles(ts, files, fs);
+ } else {
+ skipEraseFiles(ts, files, fs);
+ }
}
+ rpmfilesFree(files);
}
rpmtsiFree(pi);
@@ -1368,13 +1336,14 @@ static int rpmtsPrepare(rpmts ts)
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
- if ((fi = rpmteFI(p)) == NULL)
+ rpmfiles files = rpmteFiles(p);;
+ if (files == NULL)
continue; /* XXX can't happen */
(void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0);
/* check files in ts against each other and update disk space
needs on each partition for this package. */
- handleOverlappedFiles(ts, fpc, p, fi);
+ handleOverlappedFiles(ts, fpc, p, files);
/* Check added package has sufficient space on each partition used. */
if (rpmteType(p) == TR_ADDED) {
@@ -1391,6 +1360,7 @@ static int rpmtsPrepare(rpmts ts)
rpmtsCheckDSIProblems(ts, p);
}
(void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0);
+ rpmfilesFree(files);
}
rpmtsiFree(pi);
rpmtsNotify(ts, NULL, RPMCALLBACK_TRANS_STOP, 6, tsmem->orderCount);
@@ -1403,7 +1373,7 @@ static int rpmtsPrepare(rpmts ts)
if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_TEST|RPMTRANS_FLAG_BUILD_PROBS))) {
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
- rpmteSetFI(p, NULL);
+ rpmteCleanFiles(p);
}
rpmtsiFree(pi);
}
@@ -1421,6 +1391,7 @@ static int rpmtsProcess(rpmts ts)
{
rpmtsi pi; rpmte p;
int rc = 0;
+ int i = 0;
pi = rpmtsiInit(ts);
while ((p = rpmtsiNext(pi, 0)) != NULL) {
@@ -1429,49 +1400,114 @@ static int rpmtsProcess(rpmts ts)
rpmlog(RPMLOG_DEBUG, "========== +++ %s %s-%s 0x%x\n",
rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p));
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS)) {
- rpmtsSELabelInit(ts, 0);
- }
-
- failed = rpmteProcess(p, rpmteType(p));
+ failed = rpmteProcess(p, rpmteType(p), i++);
if (failed) {
rpmlog(RPMLOG_ERR, "%s: %s %s\n", rpmteNEVRA(p),
rpmteTypeString(p), failed > 1 ? _("skipped") : _("failed"));
rc++;
}
- (void) rpmdbSync(rpmtsGetRdb(ts));
}
rpmtsiFree(pi);
return rc;
}
-static rpmRC rpmtsSetupTransactionPlugins(rpmts ts)
+rpmRC rpmtsSetupTransactionPlugins(rpmts ts)
{
rpmRC rc = RPMRC_OK;
- char *plugins = NULL, *plugin = NULL;
- const char *delims = ",";
-
- plugins = rpmExpand("%{?__transaction_plugins}", NULL);
- if (!plugins || rstreq(plugins, "")) {
- goto exit;
- }
+ ARGV_t files = NULL;
+ int nfiles = 0;
+ char *dsoPath = NULL;
- plugin = strtok(plugins, delims);
- while(plugin != NULL) {
- rpmlog(RPMLOG_DEBUG, "plugin is %s\n", plugin);
- if (!rpmpluginsPluginAdded(ts->plugins, (const char*)plugin)) {
- if (rpmpluginsAddPlugin(ts->plugins, "transaction",
- (const char*)plugin) == RPMRC_FAIL) {
- /* any configured plugin failing to load is a failure */
+ /*
+ * Assume allocated equals initialized. There are some oddball cases
+ * (verification of non-installed package) where this is not true
+ * currently but that's not a new issue.
+ */
+ if ((rpmtsFlags(ts) & RPMTRANS_FLAG_NOPLUGINS) || rpmPluginsGetCount(rpmtsPlugins(ts)) != 0)
+ return RPMRC_OK;
+
+ dsoPath = rpmExpand("%{__plugindir}/*.so", NULL);
+ if (rpmGlob(dsoPath, &nfiles, &files) == 0) {
+ rpmPlugins tsplugins = rpmtsPlugins(ts);
+ for (int i = 0; i < nfiles; i++) {
+ char *bn = basename(files[i]);
+ bn[strlen(bn)-strlen(".so")] = '\0';
+ if (rpmpluginsAddPlugin(tsplugins, "transaction", bn) == RPMRC_FAIL)
+ {
+ /* any configured plugin failing to load is a failure */
// temporally make the loading policy relaxed: no failures
+ //refer to commit id: 3959da1846227711d97c17495aa4779e653a1b3a
//rc = RPMRC_FAIL;
}
}
- plugin = strtok(NULL, delims);
+ files = argvFree(files);
}
+ free(dsoPath);
+
+ return rc;
+}
+/**
+ * Run a scriptlet with args.
+ *
+ * Run a script with an interpreter. If the interpreter is not specified,
+ * /bin/sh will be used. If the interpreter is /bin/sh, then the args from
+ * the header will be ignored, passing instead arg1 and arg2.
+ *
+ * @param ts transaction set
+ * @param te transaction element
+ * @param prefixes install prefixes
+ * @param script scriptlet from header
+ * @param arg1 no. instances of package installed after scriptlet exec
+ * (-1 is no arg)
+ * @param arg2 ditto, but for the target package
+ * @return 0 on success
+ */
+rpmRC runScript(rpmts ts, rpmte te, Header h, ARGV_const_t prefixes,
+ rpmScript script, int arg1, int arg2)
+{
+ rpmte xte = te;
+ rpmRC stoprc, rc = RPMRC_OK;
+ rpmTagVal stag = rpmScriptTag(script);
+ FD_t sfd = NULL;
+ int warn_only = (stag != RPMTAG_PREIN &&
+ stag != RPMTAG_PREUN &&
+ stag != RPMTAG_PRETRANS &&
+ stag != RPMTAG_VERIFYSCRIPT);
+
+ /* Fake up a transaction element for triggers from rpmdb */
+ if (te == NULL) {
+ te = rpmteNew(ts, h, TR_REMOVED, NULL, NULL);
+ rpmteSetHeader(te, h);
+ }
+
+ sfd = rpmtsNotify(ts, te, RPMCALLBACK_SCRIPT_START, stag, 0);
+ if (sfd == NULL)
+ sfd = rpmtsScriptFd(ts);
+
+ rpmswEnter(rpmtsOp(ts, RPMTS_OP_SCRIPTLETS), 0);
+ rc = rpmScriptRun(script, arg1, arg2, sfd,
+ prefixes, warn_only, rpmtsPlugins(ts));
+ rpmswExit(rpmtsOp(ts, RPMTS_OP_SCRIPTLETS), 0);
+
+ /* Map warn-only errors to "notfound" for script stop callback */
+ stoprc = (rc != RPMRC_OK && warn_only) ? RPMRC_NOTFOUND : rc;
+ rpmtsNotify(ts, te, RPMCALLBACK_SCRIPT_STOP, stag, stoprc);
+
+ /*
+ * Notify callback for all errors. "total" abused for warning/error,
+ * rc only reflects whether the condition prevented install/erase
+ * (which is only happens with %prein and %preun scriptlets) or not.
+ */
+ if (rc != RPMRC_OK) {
+ if (warn_only) {
+ rc = RPMRC_OK;
+ }
+ rpmtsNotify(ts, te, RPMCALLBACK_SCRIPT_ERROR, stag, rc);
+ }
+
+ if (te != xte)
+ rpmteFree(te);
-exit:
- free(plugins);
return rc;
}
@@ -1479,9 +1515,11 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
{
int rc = -1; /* assume failure */
tsMembers tsmem = rpmtsMembers(ts);
- rpmlock lock = NULL;
+ rpmtxn txn = NULL;
rpmps tsprobs = NULL;
int TsmPreDone = 0; /* TsmPre hook hasn't been called */
+ /* Ignore SIGPIPE for the duration of transaction */
+ rpmsqAction_t oact = rpmsqSetAction(SIGPIPE, RPMSQ_IGN);
/* Force default 022 umask during transaction for consistent results */
mode_t oldmask = umask(022);
@@ -1494,7 +1532,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
/* If we are in test mode, then there's no need for transaction lock. */
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) {
- if (!(lock = rpmtsAcquireLock(ts))) {
+ if (!(txn = rpmtxnBegin(ts, RPMTXN_WRITE))) {
goto exit;
}
}
@@ -1504,23 +1542,19 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
goto exit;
}
- if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL) {
- goto exit;
- }
-
- rpmtsSetupCollections(ts);
-
/* Check package set for problems */
tsprobs = checkProblems(ts);
/* Run pre transaction hook for all plugins */
TsmPreDone = 1;
- if (rpmpluginsCallTsmPre(ts->plugins, ts) == RPMRC_FAIL) {
+ if (rpmpluginsCallTsmPre(rpmtsPlugins(ts), ts) == RPMRC_FAIL) {
goto exit;
}
- /* Run pre-transaction scripts, but only if there are no known
- * problems up to this point and not disabled otherwise. */
+ /* Run %pretrans scripts, but only if there are no known problems up to
+ * this point and not disabled otherwise. This is evil as it runs before
+ * fingerprinting and problem checking and is best avoided.
+ */
if (!((rpmtsFlags(ts) & (RPMTRANS_FLAG_BUILD_PROBS|RPMTRANS_FLAG_NOPRETRANS))
|| (rpmpsNumProblems(tsprobs)))) {
rpmlog(RPMLOG_DEBUG, "running pre-transaction scripts\n");
@@ -1553,24 +1587,47 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_TEST|RPMTRANS_FLAG_BUILD_PROBS)))
tsmem->pool = rpmstrPoolFree(tsmem->pool);
+ /* Run %transfiletriggerun scripts unless disabled */
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_BUILD_PROBS|RPMTRANS_FLAG_NOPRETRANS|
+ RPMTRANS_FLAG_NOTRIGGERUN))) {
+
+ runFileTriggers(ts, NULL, RPMSENSE_TRIGGERUN,
+ RPMSCRIPT_TRANSFILETRIGGER, 0);
+ runTransScripts(ts, PKG_TRANSFILETRIGGERUN);
+ }
+
/* Actually install and remove packages, get final exit code */
rc = rpmtsProcess(ts) ? -1 : 0;
- /* Run post-transaction scripts unless disabled */
+ /* Run %posttrans scripts unless disabled */
if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
rpmlog(RPMLOG_DEBUG, "running post-transaction scripts\n");
runTransScripts(ts, PKG_POSTTRANS);
}
+ /* Run %transfiletriggerpostun scripts unless disabled */
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
+ runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0);
+ }
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) {
+ runPostUnTransFileTrigs(ts);
+ }
+
+ /* Run %transfiletriggerin scripts unless disabled */
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
+ runTransScripts(ts, PKG_TRANSFILETRIGGERIN);
+ }
exit:
/* Run post transaction hook for all plugins */
if (TsmPreDone) /* If TsmPre hook has been called, call the TsmPost hook */
- rpmpluginsCallTsmPost(ts->plugins, ts, rc);
+ rpmpluginsCallTsmPost(rpmtsPlugins(ts), ts, rc);
/* Finish up... */
(void) umask(oldmask);
(void) rpmtsFinish(ts);
rpmpsFree(tsprobs);
- rpmlockFree(lock);
+ rpmtxnEnd(txn);
+ /* Restore SIGPIPE *after* unblocking signals in rpmtxnEnd() */
+ rpmsqSetAction(SIGPIPE, oact);
return rc;
}
diff --git a/lib/verify.c b/lib/verify.c
index 3dcec10f7..5528ba95e 100644
--- a/lib/verify.c
+++ b/lib/verify.c
@@ -53,25 +53,22 @@ static int cap_compare(cap_t acap, cap_t bcap)
}
#endif
-int rpmVerifyFile(const rpmts ts, const rpmfi fi,
- rpmVerifyAttrs * res, rpmVerifyAttrs omitMask)
+rpmVerifyAttrs rpmfilesVerify(rpmfiles fi, int ix, rpmVerifyAttrs omitMask)
{
- rpm_mode_t fmode = rpmfiFMode(fi);
- rpmfileAttrs fileAttrs = rpmfiFFlags(fi);
- rpmVerifyAttrs flags = rpmfiVFlags(fi);
- const char * fn = rpmfiFN(fi);
+ rpm_mode_t fmode = rpmfilesFMode(fi, ix);
+ rpmfileAttrs fileAttrs = rpmfilesFFlags(fi, ix);
+ rpmVerifyAttrs flags = rpmfilesVFlags(fi, ix);
+ const char * fn = rpmfilesFN(fi, ix);
struct stat sb;
- int rc;
-
- *res = RPMVERIFY_NONE;
+ rpmVerifyAttrs vfy = RPMVERIFY_NONE;
/*
* Check to see if the file was installed - if not pretend all is OK.
*/
- switch (rpmfiFState(fi)) {
+ switch (rpmfilesFState(fi, ix)) {
case RPMFILE_STATE_NETSHARED:
case RPMFILE_STATE_NOTINSTALLED:
- return 0;
+ goto exit;
break;
case RPMFILE_STATE_REPLACED:
/* For replaced files we can only verify if it exists at all */
@@ -92,8 +89,23 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
}
if (fn == NULL || lstat(fn, &sb) != 0) {
- *res |= RPMVERIFY_LSTATFAIL;
- return 1;
+ vfy |= RPMVERIFY_LSTATFAIL;
+ goto exit;
+ }
+
+ /* If we expected a directory but got a symlink to one, follow the link */
+ if (S_ISDIR(fmode) && S_ISLNK(sb.st_mode)) {
+ struct stat dsb;
+ /* ...if it actually points to a directory */
+ if (stat(fn, &dsb) == 0 && S_ISDIR(dsb.st_mode)) {
+ uid_t fuid;
+ /* ...and is by a legit user, to match fsmVerify() behavior */
+ if (sb.st_uid == 0 ||
+ (rpmugUid(rpmfilesFUser(fi, ix), &fuid) == 0 &&
+ sb.st_uid == fuid)) {
+ sb = dsb; /* struct assignment */
+ }
+ }
}
/* Links have no mode, other types have no linkto */
@@ -122,19 +134,19 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
size_t diglen;
/* XXX If --nomd5, then prelinked library sizes are not corrected. */
- if ((digest = rpmfiFDigest(fi, &algo, &diglen))) {
+ if ((digest = rpmfilesFDigest(fi, ix, &algo, &diglen))) {
unsigned char fdigest[diglen];
rpm_loff_t fsize;
- rc = rpmDoDigest(algo, fn, 0, fdigest, &fsize);
- sb.st_size = fsize;
- if (rc) {
- *res |= (RPMVERIFY_READFAIL|RPMVERIFY_FILEDIGEST);
- } else if (memcmp(fdigest, digest, diglen)) {
- *res |= RPMVERIFY_FILEDIGEST;
+ if (rpmDoDigest(algo, fn, 0, fdigest, &fsize)) {
+ vfy |= (RPMVERIFY_READFAIL|RPMVERIFY_FILEDIGEST);
+ } else {
+ sb.st_size = fsize;
+ if (memcmp(fdigest, digest, diglen))
+ vfy |= RPMVERIFY_FILEDIGEST;
}
} else {
- *res |= RPMVERIFY_FILEDIGEST;
+ vfy |= RPMVERIFY_FILEDIGEST;
}
}
@@ -143,18 +155,18 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
int size = 0;
if ((size = readlink(fn, linkto, sizeof(linkto)-1)) == -1)
- *res |= (RPMVERIFY_READLINKFAIL|RPMVERIFY_LINKTO);
+ vfy |= (RPMVERIFY_READLINKFAIL|RPMVERIFY_LINKTO);
else {
- const char * flink = rpmfiFLink(fi);
+ const char * flink = rpmfilesFLink(fi, ix);
linkto[size] = '\0';
if (flink == NULL || !rstreq(linkto, flink))
- *res |= RPMVERIFY_LINKTO;
+ vfy |= RPMVERIFY_LINKTO;
}
}
if (flags & RPMVERIFY_FILESIZE) {
- if (sb.st_size != rpmfiFSize(fi))
- *res |= RPMVERIFY_FILESIZE;
+ if (sb.st_size != rpmfilesFSize(fi, ix))
+ vfy |= RPMVERIFY_FILESIZE;
}
if (flags & RPMVERIFY_MODE) {
@@ -176,7 +188,7 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
}
if (metamode != filemode)
- *res |= RPMVERIFY_MODE;
+ vfy |= RPMVERIFY_MODE;
#if WITH_ACL
/*
@@ -186,7 +198,7 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
acl_t facl = acl_get_file(fn, ACL_TYPE_ACCESS);
if (facl) {
if (acl_equiv_mode(facl, NULL) == 1) {
- *res |= RPMVERIFY_MODE;
+ vfy |= RPMVERIFY_MODE;
}
acl_free(facl);
}
@@ -197,12 +209,12 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
if (S_ISCHR(fmode) != S_ISCHR(sb.st_mode)
|| S_ISBLK(fmode) != S_ISBLK(sb.st_mode))
{
- *res |= RPMVERIFY_RDEV;
+ vfy |= RPMVERIFY_RDEV;
} else if (S_ISDEV(fmode) && S_ISDEV(sb.st_mode)) {
rpm_rdev_t st_rdev = (sb.st_rdev & 0xffff);
- rpm_rdev_t frdev = (rpmfiFRdev(fi) & 0xffff);
+ rpm_rdev_t frdev = (rpmfilesFRdev(fi, ix) & 0xffff);
if (st_rdev != frdev)
- *res |= RPMVERIFY_RDEV;
+ vfy |= RPMVERIFY_RDEV;
}
}
@@ -213,7 +225,7 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
* capabilities at all but suffices for now...
*/
cap_t cap, fcap;
- cap = cap_from_text(rpmfiFCaps(fi));
+ cap = cap_from_text(rpmfilesFCaps(fi, ix));
if (!cap) {
cap = cap_from_text("=");
}
@@ -223,32 +235,71 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
}
if (cap_compare(cap, fcap) != 0)
- *res |= RPMVERIFY_CAPS;
+ vfy |= RPMVERIFY_CAPS;
cap_free(fcap);
cap_free(cap);
}
#endif
- if ((flags & RPMVERIFY_MTIME) && (sb.st_mtime != rpmfiFMtime(fi))) {
- *res |= RPMVERIFY_MTIME;
+ if ((flags & RPMVERIFY_MTIME) && (sb.st_mtime != rpmfilesFMtime(fi, ix))) {
+ vfy |= RPMVERIFY_MTIME;
}
if (flags & RPMVERIFY_USER) {
const char * name = rpmugUname(sb.st_uid);
- const char * fuser = rpmfiFUser(fi);
- if (name == NULL || fuser == NULL || !rstreq(name, fuser))
- *res |= RPMVERIFY_USER;
+ const char * fuser = rpmfilesFUser(fi, ix);
+ uid_t uid;
+ int namematch = 0;
+ int idmatch = 0;
+
+ if (name && fuser)
+ namematch = rstreq(name, fuser);
+ if (fuser && rpmugUid(fuser, &uid) == 0)
+ idmatch = (uid == sb.st_uid);
+
+ if (namematch != idmatch) {
+ rpmlog(RPMLOG_WARNING,
+ _("Duplicate username or UID for user %s\n"), fuser);
+ }
+
+ if (!(namematch || idmatch))
+ vfy |= RPMVERIFY_USER;
}
if (flags & RPMVERIFY_GROUP) {
const char * name = rpmugGname(sb.st_gid);
- const char * fgroup = rpmfiFGroup(fi);
- if (name == NULL || fgroup == NULL || !rstreq(name, fgroup))
- *res |= RPMVERIFY_GROUP;
+ const char * fgroup = rpmfilesFGroup(fi, ix);
+ gid_t gid;
+ int namematch = 0;
+ int idmatch = 0;
+
+ if (name && fgroup)
+ namematch = rstreq(name, fgroup);
+ if (fgroup && rpmugGid(fgroup, &gid) == 0)
+ idmatch = (gid == sb.st_gid);
+
+ if (namematch != idmatch) {
+ rpmlog(RPMLOG_WARNING,
+ _("Duplicate groupname or GID for group %s\n"), fgroup);
+ }
+
+ if (!(namematch || idmatch))
+ vfy |= RPMVERIFY_GROUP;
}
- return 0;
+exit:
+ return vfy;
+}
+
+int rpmVerifyFile(const rpmts ts, const rpmfi fi,
+ rpmVerifyAttrs * res, rpmVerifyAttrs omitMask)
+{
+ rpmVerifyAttrs vfy = rpmfiVerify(fi, omitMask);
+ if (res)
+ *res = vfy;
+
+ return (vfy & RPMVERIFY_LSTATFAIL) ? 1 : 0;
}
/**
@@ -314,7 +365,7 @@ char * rpmVerifyString(uint32_t verifyResult, const char *pad)
char * rpmFFlagsString(uint32_t fflags, const char *pad)
{
char *fmt = NULL;
- rasprintf(&fmt, "%s%s%s%s%s%s%s%s",
+ rasprintf(&fmt, "%s%s%s%s%s%s%s%s%s",
(fflags & RPMFILE_DOC) ? "d" : pad,
(fflags & RPMFILE_CONFIG) ? "c" : pad,
(fflags & RPMFILE_SPECFILE) ? "s" : pad,
@@ -322,22 +373,43 @@ char * rpmFFlagsString(uint32_t fflags, const char *pad)
(fflags & RPMFILE_NOREPLACE) ? "n" : pad,
(fflags & RPMFILE_GHOST) ? "g" : pad,
(fflags & RPMFILE_LICENSE) ? "l" : pad,
- (fflags & RPMFILE_README) ? "r" : pad);
+ (fflags & RPMFILE_README) ? "r" : pad,
+ (fflags & RPMFILE_ARTIFACT) ? "a" : pad);
return fmt;
}
+static const char * stateStr(rpmfileState fstate)
+{
+ switch (fstate) {
+ case RPMFILE_STATE_NORMAL:
+ return NULL;
+ case RPMFILE_STATE_NOTINSTALLED:
+ return rpmIsVerbose() ? _("not installed") : NULL;
+ case RPMFILE_STATE_NETSHARED:
+ return rpmIsVerbose() ? _("net shared") : NULL;
+ case RPMFILE_STATE_WRONGCOLOR:
+ return rpmIsVerbose() ? _("wrong color") : NULL;
+ case RPMFILE_STATE_REPLACED:
+ return _("replaced");
+ case RPMFILE_STATE_MISSING:
+ return _("no state");
+ }
+ return _("unknown state");
+}
+
/**
* Check file info from header against what's actually installed.
* @param ts transaction set
* @param h header to verify
* @param omitMask bits to disable verify checks
- * @param ghosts should ghosts be verified?
+ * @param skipAttr skip files with these attrs (eg %ghost)
* @return 0 no problems, 1 problems found
*/
-static int verifyHeader(rpmts ts, Header h, rpmVerifyAttrs omitMask, int ghosts)
+static int verifyHeader(rpmts ts, Header h, rpmVerifyAttrs omitMask,
+ rpmfileAttrs skipAttrs)
{
rpmVerifyAttrs verifyResult = 0;
- int ec = 0; /* assume no problems */
+ rpmVerifyAttrs verifyAll = 0; /* assume no problems */
rpmfi fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, RPMFI_FLAGS_VERIFY);
if (fi == NULL)
@@ -347,17 +419,17 @@ static int verifyHeader(rpmts ts, Header h, rpmVerifyAttrs omitMask, int ghosts)
while (rpmfiNext(fi) >= 0) {
rpmfileAttrs fileAttrs = rpmfiFFlags(fi);
char *buf = NULL, *attrFormat;
+ const char *fstate = NULL;
char ac;
- int rc;
- /* If not verifying %ghost, skip ghost files. */
- if ((fileAttrs & RPMFILE_GHOST) && !ghosts)
+ /* Skip on attributes (eg from --noghost) */
+ if (skipAttrs & fileAttrs)
continue;
- rc = rpmVerifyFile(ts, fi, &verifyResult, omitMask);
+ verifyResult = rpmfiVerify(fi, omitMask);
/* Filter out timestamp differences of shared files */
- if (rc == 0 && (verifyResult & RPMVERIFY_MTIME)) {
+ if (verifyResult & RPMVERIFY_MTIME) {
rpmdbMatchIterator mi;
mi = rpmtsInitIterator(ts, RPMDBI_BASENAMES, rpmfiFN(fi), 0);
if (rpmdbGetIteratorCount(mi) > 1)
@@ -365,9 +437,13 @@ static int verifyHeader(rpmts ts, Header h, rpmVerifyAttrs omitMask, int ghosts)
rpmdbFreeIterator(mi);
}
+ /* State is only meaningful for installed packages */
+ if (headerGetInstance(h))
+ fstate = stateStr(rpmfiFState(fi));
+
attrFormat = rpmFFlagsString(fileAttrs, "");
ac = rstreq(attrFormat, "") ? ' ' : attrFormat[0];
- if (rc) {
+ if (verifyResult & RPMVERIFY_LSTATFAIL) {
if (!(fileAttrs & (RPMFILE_MISSINGOK|RPMFILE_GHOST)) || rpmIsVerbose()) {
rasprintf(&buf, _("missing %c %s"), ac, rpmfiFN(fi));
if ((verifyResult & RPMVERIFY_LSTATFAIL) != 0 &&
@@ -377,25 +453,30 @@ static int verifyHeader(rpmts ts, Header h, rpmVerifyAttrs omitMask, int ghosts)
rstrcat(&buf, app);
free(app);
}
- ec = rc;
}
- } else if (verifyResult || rpmIsVerbose()) {
+ } else if (verifyResult || fstate || rpmIsVerbose()) {
char *verifyFormat = rpmVerifyString(verifyResult, ".");
rasprintf(&buf, "%s %c %s", verifyFormat, ac, rpmfiFN(fi));
free(verifyFormat);
-
- if (verifyResult) ec = 1;
}
free(attrFormat);
if (buf) {
+ if (fstate)
+ buf = rstrscat(&buf, " (", fstate, ")", NULL);
rpmlog(RPMLOG_NOTICE, "%s\n", buf);
buf = _free(buf);
}
+
+ /* Filter out missing %ghost/%missingok errors from final result */
+ if (fileAttrs & (RPMFILE_MISSINGOK|RPMFILE_GHOST))
+ verifyResult &= ~RPMVERIFY_LSTATFAIL;
+
+ verifyAll |= verifyResult;
}
rpmfiFree(fi);
- return ec;
+ return (verifyAll != 0) ? 1 : 0;
}
/**
@@ -440,7 +521,6 @@ static int verifyDependencies(rpmts ts, Header h)
int showVerifyPackage(QVA_t qva, rpmts ts, Header h)
{
rpmVerifyAttrs omitMask = ((qva->qva_flags & VERIFY_ATTRS) ^ VERIFY_ATTRS);
- int ghosts = (qva->qva_fflags & RPMFILE_GHOST);
int ec = 0;
int rc;
@@ -449,7 +529,7 @@ int showVerifyPackage(QVA_t qva, rpmts ts, Header h)
ec = rc;
}
if (qva->qva_flags & VERIFY_FILES) {
- if ((rc = verifyHeader(ts, h, omitMask, ghosts)) != 0)
+ if ((rc = verifyHeader(ts, h, omitMask, qva->qva_fflags)) != 0)
ec = rc;
}
if (qva->qva_flags & VERIFY_SCRIPT) {
diff --git a/luaext/linit.c b/luaext/linit.c
deleted file mode 100644
index 6f10b26fb..000000000
--- a/luaext/linit.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "lua.h"
-#include "lauxlib.h"
-#include "linit.h"
-
-LUA_API int luaopen_init(lua_State *L)
-{
-#include "linit.lch"
- return 0;
-}
diff --git a/luaext/linit.h b/luaext/linit.h
deleted file mode 100644
index 04cbb2dd6..000000000
--- a/luaext/linit.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef LINIT_H
-#define LINIT_H
-
-int luaopen_init(lua_State *L);
-
-#endif
diff --git a/luaext/linit.lch b/luaext/linit.lch
deleted file mode 100644
index 56ced87cf..000000000
--- a/luaext/linit.lch
+++ /dev/null
@@ -1,46 +0,0 @@
-/* code automatically generated by bin2c -- DO NOT EDIT */
-{
-/* #include'ing this file in a C program is equivalent to calling
- lua_dofile(L,"local/linit.lua");
-*/
-/* local/linit.lua */
-static const unsigned char B1[]={
- 10,114,101,120, 46,110,101,119, 32, 61, 32,114,101,120, 46,110,101,119, 80, 79,
- 83, 73, 88, 10, 10,117,116,105,108, 32, 61, 32,123,125, 10, 10,102,117,110, 99,
-116,105,111,110, 32,117,116,105,108, 46,103,114,101,112, 40,101,120,112,114, 44,
- 32,102,105,108,101,110, 97,109,101, 41, 10, 9,105,102, 32,110,111,116, 32,112,
-111,115,105,120, 46,115,116, 97,116, 40,102,105,108,101,110, 97,109,101, 44, 32,
- 34,109,111,100,101, 34, 41, 32,116,104,101,110, 10, 9, 9,114,101,116,117,114,
-110, 32,110,105,108, 10, 9,101,110,100, 10, 9,108,111, 99, 97,108, 32,108,105,
-110,101,115, 32, 61, 32,123,125, 10, 9,108,111, 99, 97,108, 32,112, 97,116, 32,
- 61, 32,114,101,120, 46,110,101,119, 40,101,120,112,114, 41, 10, 9,108,111, 99,
- 97,108, 32,112,111,115, 32, 61, 32, 49, 10, 9,102,111,114, 32,108,105,110,101,
- 32,105,110, 32,105,111, 46,108,105,110,101,115, 40,102,105,108,101,110, 97,109,
-101, 41, 32,100,111, 10, 9, 9,105,102, 32,112, 97,116, 58,109, 97,116, 99,104,
- 40,108,105,110,101, 41, 32,116,104,101,110, 10, 9, 9, 9,116, 97, 98,108,101,
- 46,105,110,115,101,114,116, 40,108,105,110,101,115, 44, 32,112,111,115, 44, 32,
-108,105,110,101, 41, 10, 9, 9,101,110,100, 10, 9, 9,112,111,115, 32, 61, 32,
-112,111,115, 32, 43, 32, 49, 10, 9,101,110,100, 10, 9,105,102, 32,116, 97, 98,
-108,101, 46,103,101,116,110, 40,108,105,110,101,115, 41, 32, 61, 61, 32, 48, 32,
-116,104,101,110, 10, 9, 9,114,101,116,117,114,110, 32,110,105,108, 10, 9,101,
-110,100, 10, 9,114,101,116,117,114,110, 32,108,105,110,101,115, 10,101,110,100,
- 10, 10,102,117,110, 99,116,105,111,110, 32,117,116,105,108, 46,105,103,114,101,
-112, 40,101,120,112,114, 44, 32,102,105,108,101,110, 97,109,101, 41, 10, 9,114,
-101,116,117,114,110, 32,105,112, 97,105,114,115, 40,114,101,120, 46,103,114,101,
-112, 40,101,120,112,114, 44, 32,102,105,108,101,110, 97,109,101, 41, 41, 10,101,
-110,100, 10, 10,102,117,110, 99,116,105,111,110, 32,117,116,105,108, 46, 98,103,
-114,101,112, 40,101,120,112,114, 44, 32,102,105,108,101,110, 97,109,101, 41, 10,
- 9,105,102, 32,110,111,116, 32,112,111,115,105,120, 46,115,116, 97,116, 40,102,
-105,108,101,110, 97,109,101, 44, 32, 34,109,111,100,101, 34, 41, 32,116,104,101,
-110, 10, 9, 9,114,101,116,117,114,110, 32,110,105,108, 10, 9,101,110,100, 10,
- 9,108,111, 99, 97,108, 32,112, 97,116, 32, 61, 32,114,101,120, 46,110,101,119,
- 40,101,120,112,114, 41, 10, 9,102,111,114, 32,108,105,110,101, 32,105,110, 32,
-105,111, 46,108,105,110,101,115, 40,102,105,108,101,110, 97,109,101, 41, 32,100,
-111, 10, 9, 9,105,102, 32,112, 97,116, 58,109, 97,116, 99,104, 40,108,105,110,
-101, 41, 32,116,104,101,110, 10, 9, 9, 9,114,101,116,117,114,110, 32,116,114,
-117,101, 10, 9, 9,101,110,100, 10, 9,101,110,100, 10, 9,114,101,116,117,114,
-110, 32,102, 97,108,115,101, 10,101,110,100, 10, 10,
-};
-
- lua_dobuffer(L,(const char*)B1,sizeof(B1),"local/linit.lua");
-}
diff --git a/luaext/lposix.c b/luaext/lposix.c
index f3c787eab..0a7c26c71 100644
--- a/luaext/lposix.c
+++ b/luaext/lposix.c
@@ -58,6 +58,15 @@ static const char *filetype(mode_t m)
typedef int (*Selector)(lua_State *L, int i, const void *data);
+/* implemented as luaL_typerror until lua 5.1, dropped in 5.2
+ * (C) 1994-2012 Lua.org, PUC-Rio. MIT license
+ */
+static int typerror (lua_State *L, int narg, const char *tname) {
+ const char *msg = lua_pushfstring(L, "%s expected, got %s",
+ tname, luaL_typename(L, narg));
+ return luaL_argerror(L, narg, msg);
+}
+
static int doselection(lua_State *L, int i, const char *const S[], Selector F, const void *data)
{
if (lua_isnone(L, i))
@@ -139,7 +148,7 @@ static uid_t mygetuid(lua_State *L, int i)
return (p==NULL) ? -1 : p->pw_uid;
}
else
- return luaL_typerror(L, i, "string or number");
+ return typerror(L, i, "string or number");
}
static gid_t mygetgid(lua_State *L, int i)
@@ -154,7 +163,7 @@ static gid_t mygetgid(lua_State *L, int i)
return (g==NULL) ? -1 : g->gr_gid;
}
else
- return luaL_typerror(L, i, "string or number");
+ return typerror(L, i, "string or number");
}
@@ -326,10 +335,22 @@ static int Pexec(lua_State *L) /** exec(path,[args]) */
const char *path = luaL_checkstring(L, 1);
int i,n=lua_gettop(L);
char **argv;
+ int flag, fdno, open_max;
if (!have_forked)
return luaL_error(L, "exec not permitted in this context");
+ open_max = sysconf(_SC_OPEN_MAX);
+ if (open_max == -1) {
+ open_max = 1024;
+ }
+ for (fdno = 3; fdno < open_max; fdno++) {
+ flag = fcntl(fdno, F_GETFD);
+ if (flag == -1 || (flag & FD_CLOEXEC))
+ continue;
+ fcntl(fdno, F_SETFD, FD_CLOEXEC);
+ }
+
argv = malloc((n+1)*sizeof(char*));
if (argv==NULL) return luaL_error(L,"not enough memory");
argv[0] = (char*)path;
@@ -352,22 +373,22 @@ static int Pfork(lua_State *L) /** fork() */
static int Pwait(lua_State *L) /** wait([pid]) */
{
- pid_t pid = luaL_optint(L, 1, -1);
+ pid_t pid = luaL_optinteger(L, 1, -1);
return pushresult(L, waitpid(pid, NULL, 0), NULL);
}
static int Pkill(lua_State *L) /** kill(pid,[sig]) */
{
- pid_t pid = luaL_checkint(L, 1);
- int sig = luaL_optint(L, 2, SIGTERM);
+ pid_t pid = luaL_checkinteger(L, 1);
+ int sig = luaL_optinteger(L, 2, SIGTERM);
return pushresult(L, kill(pid, sig), NULL);
}
static int Psleep(lua_State *L) /** sleep(seconds) */
{
- unsigned int seconds = luaL_checkint(L, 1);
+ unsigned int seconds = luaL_checkinteger(L, 1);
lua_pushnumber(L, sleep(seconds));
return 1;
}
@@ -520,7 +541,7 @@ static int Pgetprocessid(lua_State *L) /** getprocessid([selector]) */
static int Pttyname(lua_State *L) /** ttyname(fd) */
{
- int fd=luaL_optint(L, 1, 0);
+ int fd=luaL_optinteger(L, 1, 0);
lua_pushstring(L, ttyname(fd));
return 1;
}
@@ -573,7 +594,7 @@ static int Pgetpasswd(lua_State *L) /** getpasswd(name or id) */
else if (lua_isstring(L, 1))
p = getpwnam(lua_tostring(L, 1));
else
- luaL_typerror(L, 1, "string or number");
+ typerror(L, 1, "string or number");
if (p==NULL)
lua_pushnil(L);
else
@@ -590,7 +611,7 @@ static int Pgetgroup(lua_State *L) /** getgroup(name or id) */
else if (lua_isstring(L, 1))
g = getgrnam(lua_tostring(L, 1));
else
- luaL_typerror(L, 1, "string or number");
+ typerror(L, 1, "string or number");
if (g==NULL)
lua_pushnil(L);
else
@@ -709,10 +730,10 @@ static int Puname(lua_State *L) /** uname([string]) */
luaL_buffinit(L, &b);
for (s=luaL_optstring(L, 1, "%s %n %r %v %m"); *s; s++)
if (*s!='%')
- luaL_putchar(&b, *s);
+ luaL_addchar(&b, *s);
else switch (*++s)
{
- case '%': luaL_putchar(&b, *s); break;
+ case '%': luaL_addchar(&b, *s); break;
case 'm': luaL_addstring(&b,u.machine); break;
case 'n': luaL_addstring(&b,u.nodename); break;
case 'r': luaL_addstring(&b,u.release); break;
@@ -810,6 +831,25 @@ static int Pmkstemp(lua_State *L)
return 2;
}
+static int Predirect2null(lua_State *L)
+{
+ int target_fd, fd, r, e;
+
+ if (!have_forked)
+ return luaL_error(L, "silence_file_descriptor not permitted in this context");
+
+ target_fd = luaL_checkinteger(L, 1);
+
+ r = fd = open("/dev/null", O_WRONLY);
+ if (fd >= 0 && fd != target_fd) {
+ r = dup2(fd, target_fd);
+ e = errno;
+ (void) close(fd);
+ errno = e;
+ }
+ return pushresult(L, r, NULL);
+}
+
static const luaL_Reg R[] =
{
{"access", Paccess},
@@ -852,6 +892,7 @@ static const luaL_Reg R[] =
{"wait", Pwait},
{"setenv", Psetenv},
{"unsetenv", Punsetenv},
+ {"redirect2null", Predirect2null},
{NULL, NULL}
};
@@ -871,7 +912,7 @@ static int exit_override(lua_State *L)
if (!have_forked)
return luaL_error(L, "exit not permitted in this context");
- exit(luaL_optint(L, 1, EXIT_SUCCESS));
+ exit(luaL_optinteger(L, 1, EXIT_SUCCESS));
}
static const luaL_Reg os_overrides[] =
diff --git a/luaext/modemuncher.c b/luaext/modemuncher.c
index ed86d9f89..3c46e2d4f 100644
--- a/luaext/modemuncher.c
+++ b/luaext/modemuncher.c
@@ -50,7 +50,7 @@ static int rwxrwxrwx(mode_t *mode, const char *p)
{
if (*p == modesel[count].rwx) tmp_mode |= modesel[count].bits; /* set a bit */
else if (*p == '-') tmp_mode &= ~modesel[count].bits; /* clear a bit */
- else if (*p=='s') switch(count)
+ else if (*p=='s') switch (count)
{
case 2: /* turn on suid flag */
tmp_mode |= S_ISUID | S_IXUSR;
diff --git a/macros.debug b/macros.debug
new file mode 100644
index 000000000..ee0cc9ebe
--- /dev/null
+++ b/macros.debug
@@ -0,0 +1,47 @@
+# macros to include to generate debuginfo
+# Note don't define/enable a feature here if it is already the default in
+# macros.in. Otherwise it cannot simply be --undefined on the command line
+# in the tests (it needs to be undefined multiple times then).
+
+%_enable_debug_packages 1
+%_include_minidebuginfo 1
+%_include_gdb_index 1
+
+# Expanded at end of %install scriptlet
+
+%__arch_install_post %{nil}
+
+%__os_install_post \
+ %{_rpmconfigdir}/brp-compress \
+ %{!?__debug_package:\
+ %{_rpmconfigdir}/brp-strip %{__strip} \
+ %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \
+ } \
+ %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \
+%{nil}
+
+%__spec_install_post\
+ %{?__debug_package:%{__debug_install_post}}\
+ %{__arch_install_post}\
+ %{__os_install_post}\
+%{nil}
+
+%install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}}\
+%%install\
+%{nil}
+
+# Should missing buildids terminate a build?
+%_missing_build_ids_terminate_build 1
+
+# Number of debugging information entries (DIEs) above which
+# dwz will stop considering file for multifile optimizations
+# and enter a low memory mode, in which it will optimize
+# in about half the memory needed otherwise.
+%_dwz_low_mem_die_limit 10000000
+# Number of DIEs above which dwz will stop processing
+# a file altogether.
+%_dwz_max_die_limit 50000000
+
+%_find_debuginfo_dwz_opts --run-dwz\\\
+ --dwz-low-mem-die-limit %{_dwz_low_mem_die_limit}\\\
+ --dwz-max-die-limit %{_dwz_max_die_limit}
diff --git a/macros.in b/macros.in
index 148b3b686..053060daf 100644
--- a/macros.in
+++ b/macros.in
@@ -6,15 +6,6 @@
# should be added to /etc/rpm/macros, while per-user configuration should
# be added to ~/.rpmmacros.
#
-#==============================================================================
-# Macro naming conventions (preliminary):
-#
-# Macros that begin with an underscore are "local" in the sense that
-# they (if used) will not be exported in rpm headers. Some macros
-# that don't start with an underscore (but look like they should)
-# are compatible with macros generated by rpm-2.5.x and will be made
-# more consistent in a future release.
-#
#==============================================================================
# ---- A macro that expands to nothing.
@@ -68,6 +59,8 @@
%__ssh @__SSH@
%__tar @__TAR@
%__unzip @__UNZIP@
+%__zstd @__ZSTD@
+%__gem @__GEM@
%__git @__GIT@
%__hg @__HG@
%__bzr @__BZR@
@@ -131,7 +124,7 @@
# %if ! %{with static}
# ...
# %endif
-# %ifdef %{with static}
+# %if %{with static}
# ...
# %endif
# %{?with_static: ... }
@@ -154,6 +147,8 @@
#
# The directory where rpm's configuration and scripts live
%_rpmconfigdir %{getconfdir}
+# The directory where rpm's macro files live
+%_rpmmacrodir %{_rpmconfigdir}/macros.d
# The directory where sources/patches will be unpacked and built.
%_builddir %{_topdir}/BUILD
@@ -185,12 +180,39 @@
%_find_debuginfo_ko_strip_opts %{?_rpm_ko_strip_option:\'--strip-ko-option=%{_rpm_ko_strip_option}\'}
%__debug_install_post \
- %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} %{?_find_debuginfo_strip_opts} %{?_find_debuginfo_ko_strip_opts} "%{_builddir}/%{?buildsubdir}" %{?_install_debug_manifest} \
+ %{_rpmconfigdir}/find-debuginfo.sh \\\
+ %{?_smp_mflags} \\\
+ %{?_missing_build_ids_terminate_build:--strict-build-id} \\\
+ %{?_no_recompute_build_ids:-n} \\\
+ %{?_include_minidebuginfo:-m} \\\
+ %{?_include_gdb_index:-i} \\\
+ %{?_unique_build_ids:--build-id-seed "%{VERSION}-%{RELEASE}"} \\\
+ %{?_unique_debug_names:--unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
+ %{?_unique_debug_srcs:--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
+ %{?_find_debuginfo_dwz_opts} \\\
+ %{?_find_debuginfo_opts} \\\
+ %{?_find_debuginfo_strip_opts} \\\
+ %{?_find_debuginfo_ko_strip_opts} \\\
+ %{?_debugsource_packages:-S debugsourcefiles.list} \\\
+ "%{_builddir}/%{?buildsubdir}"\\\
+ %{?_install_debug_manifest} \
%{nil}
# Template for debug information sub-package.
-%debug_package \
-%global __debug_package 1\
+%_debuginfo_template \
+%package debuginfo\
+Summary: Debug information for package %{name}\
+Group: Development/Debug\
+AutoReq: 0\
+AutoProv: 1\
+%description debuginfo\
+This package provides debug information for package %{name}.\
+Debug information is useful when developing applications that use this\
+package or when debugging this package.\
+%files debuginfo -f debugfiles.list\
+%{nil}
+
+%_debugsource_template \
%package debugsource\
Summary: Debug sources for package %{name}\
Group: Development/Debug\
@@ -199,15 +221,30 @@ AutoReqProv: 0\
This package provides debug sources for package %{name}.\
Debug sources are useful when developing applications that use this\
package or when debugging this package.\
-%files debugsource -f debugsources.list\
+%files debugsource -f debugsourcefiles.list\
%defattr(-,root,root)\
%manifest %{name}-debugsource.manifest \
%{nil}
+%debug_package \
+%ifnarch noarch\
+%global __debug_package 1\
+%_debuginfo_template\
+%{?_debugsource_packages:%_debugsource_template}\
+%endif\
+%{nil}
+
%_defaultdocdir %{_datadir}/doc/packages
%_defaultlicensedir %{_datadir}/licenses
%_docdir_fmt %%{NAME}
+# Following macros for filtering auto deps must not be used in spec files.
+# Their purpouse is to set up global filtering for all packages. If you need
+# to set up specific filtering for your package use %__requires_exclude_from
+# and %__provides_exclude_from instead.
+%__global_requires_exclude_from %{?_docdir:%{_docdir}}
+%__global_provides_exclude_from %{?_docdir:%{_docdir}}
+
# The path to the gzip executable (legacy, use %{__gzip} instead).
%_gzipbin %{__gzip}
@@ -215,6 +252,15 @@ package or when debugging this package.\
# Any older entry is not packaged in binary packages.
%_changelog_trimtime 0
+# If true, set the SOURCE_DATE_EPOCH environment variable
+# to the timestamp of the topmost changelog entry
+%source_date_epoch_from_changelog 0
+
+# If true, make sure that timestamps in built rpms
+# are not later than the value of SOURCE_DATE_EPOCH.
+# Is ignored when SOURCE_DATE_EPOCH is not set.
+%clamp_mtime_to_source_date_epoch 0
+
# The directory where newly built binary packages will be written.
%_rpmdir %{_topdir}/RPMS
@@ -237,7 +283,7 @@ package or when debugging this package.\
%_buildrootdir %{_topdir}/BUILDROOT
# Build root path, where %install installs the package during build.
-%buildroot %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
+%buildroot %{_buildrootdir}/%{NAME}-%{VERSION}-%{RELEASE}.%{_arch}
# Directory where temporaray files can be created.
%_tmppath %{_var}/tmp
@@ -344,24 +390,28 @@ package or when debugging this package.\
# "w9.gzdio" gzip level 9 (default).
# "w9.bzdio" bzip2 level 9.
# "w6.xzdio" xz level 6, xz's default.
+# "w7T16.xzdio" xz level 7 using 16 thread (xz only)
# "w6.lzdio" lzma-alone level 6, lzma's default
+# "w3.zstdio" zstd level 3, zstd's default
+# "w.ufdio" uncompressed
#
#%_source_payload w9.gzdio
-%_binary_payload w5.lzdio
+#%_binary_payload w9.gzdio
+%_binary_payload w19.zstdio
# Algorithm to use for generating file checksum digests on build.
# If not specified or 0, MD5 is used.
-# WARNING: non-MD5 is backwards incompatible, don't enable lightly!
-# The supported algorithms may depend on NSS version, as of NSS
-# 3.11.99.5 the following are supported:
-# 1 MD5 (default)
+# WARNING: non-MD5 is backwards incompatible with rpm < 4.6!
+# The supported algorithms may depend on the underlying crypto
+# implementation but generally at least the following are supported:
+# 1 MD5
# 2 SHA1
-# 8 SHA256
+# 8 SHA256 (default)
# 9 SHA384
# 10 SHA512
#
-#%_source_filedigest_algorithm 1
-#%_binary_filedigest_algorithm 1
+%_source_filedigest_algorithm 8
+%_binary_filedigest_algorithm 8
# Configurable vendor information, same as Vendor: in a specfile.
#
@@ -372,6 +422,7 @@ package or when debugging this package.\
# Default patch flags
#%_default_patch_flags -s
+%_default_patch_flags --no-backup-if-mismatch
#==============================================================================
# ---- Build configuration macros.
@@ -395,9 +446,21 @@ package or when debugging this package.\
%_missing_doc_files_terminate_build 1
#
+# Should empty %files manifest file terminate a build?
+#
+# Note: The default value should be 0 for legacy compatibility.
+%_empty_manifest_terminate_build 0
+
+#
# Should binaries in noarch packages terminate a build?
%_binaries_in_noarch_packages_terminate_build 1
+# Should invalid utf8 encoding in package metadata terminate a build?
+%_invalid_encoding_terminates_build 0
+
+# Should invalid version format in requires, provides, ... terminate a build?
+%_wrong_version_format_terminate_build 0
+
#
# Should rpm try to download missing sources at build-time?
# Enabling this is dangerous as long as rpm has no means to validate
@@ -436,6 +499,79 @@ package or when debugging this package.\
#%_missing_build_ids_terminate_build 1
#
+# Include minimal debug information in build binaries.
+# Requires _enable_debug_packages.
+#
+#%_include_minidebuginfo 1
+
+#
+# Include a .gdb_index section in the .debug files.
+# Requires _enable_debug_packages and gdb-add-index installed.
+#
+#%_include_gdb_index 1
+
+#
+# Defines how and if build_id links are generated for ELF files.
+# The following settings are supported:
+#
+# - none
+# No build_id links are generated.
+#
+# - alldebug
+# build_id links are generated only when the __debug_package global is
+# defined. This will generate build_id links in the -debuginfo package
+# for both the main file as /usr/lib/debug/.build-id/xx/yyy and for
+# the .debug file as /usr/lib/debug/.build-id/xx/yyy.debug.
+# This is the old style build_id links as generated by the original
+# find-debuginfo.sh script.
+#
+# - separate
+# build_id links are generate for all binary packages. If this is a
+# main package (the __debug_package global isn't set) then the
+# build_id link is generated as /usr/lib/.build-id/xx/yyy. If this is
+# a -debuginfo package (the __debug_package global is set) then the
+# build_id link is generated as /usr/lib/debug/.build-id/xx/yyy.
+#
+# - compat
+# Same as for "separate" but if the __debug_package global is set then
+# the -debuginfo package will have a compatibility link for the main
+# ELF /usr/lib/debug/.build-id/xx/yyy -> /usr/lib/.build-id/xx/yyy
+%_build_id_links alldebug
+
+# Whether build-ids should be made unique between package version/releases
+# when generating debuginfo packages. If set to 1 this will pass
+# --build-id-seed "%{VERSION}-%{RELEASE}" to find-debuginfo.sh which will
+# pass it onto debugedit --build-id-seed to be used to prime the build-id
+# note hash.
+%_unique_build_ids 1
+
+# Do not recompute build-ids but keep whatever is in the ELF file already.
+# Cannot be used together with _unique_build_ids (which forces recomputation).
+# Defaults to undefined (unset).
+#%_no_recompute_build_ids 1
+
+# Whether .debug files should be made unique between package version,
+# release and architecture. If set to 1 this will pass
+# --unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch} find-debuginfo.sh
+# to create debuginfo files which end in -<ver>-<rel>.<arch>.debug
+# Requires _unique_build_ids.
+#For legacy compatibility, Temply change _unique_debug_names to 0.
+#%_unique_debug_names 0
+
+# Whether the /usr/debug/src/<package> directories should be unique between
+# package version, release and architecture. If set to 1 this will pass
+# --unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}" to
+# find-debuginfo.sh to name the directory under /usr/debug/src as
+# <name>-<ver>-<rel>.<arch>.
+%_unique_debug_srcs 1
+
+# Whether rpm should put debug source files into its own subpackage
+%_debugsource_packages 1
+
+# Whether rpm should create extra debuginfo packages for each subpackage
+%_debuginfo_subpackages 1
+
+#
# Use internal dependency generator rather than external helpers?
%_use_internal_dependency_generator 1
@@ -488,8 +624,24 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
#
%_fileattrsdir %{_rpmconfigdir}/fileattrs
+# This macro defines how much space (in bytes) in package should be
+# reserved for gpg signatures during building of a package. If this space is
+# big enough for gpg signatures to fit into it then signing of the packages is
+# very quick because it is not necessary to rewrite the whole package to make
+# some space for gpg signatures.
+%__gpg_reserved_space 4096
+
#==============================================================================
# ---- Database configuration macros.
+#
+# Select backend database. The following values are supported:
+# bdb Berkeley DB
+# lmdb Lightning Memory-mapped Database
+# ndb new data base format
+#
+%_db_backend bdb
+
+#
# Macros used to configure Berkley db parameters.
#
# rpmdb macro configuration values are a colon (or white space) separated
@@ -528,23 +680,22 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
# Misc BDB tuning options
%__dbi_other mp_mmapsize=128Mb mp_size=1Mb
-%_dbi_config %{?__dbi_other} nofsync
+%_dbi_config %{?__dbi_other}
# "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd".
-%_dbi_config_Packages %{?__dbi_other} lockdbfd
+%_dbi_config_Packages %{?_dbi_config} lockdbfd
#==============================================================================
# ---- GPG/PGP/PGP5 signature macros.
# Macro(s) to hold the arguments passed to GPG/PGP for package
# signing and verification.
#
-%__gpg_check_password_cmd %{__gpg} \
- gpg --batch --no-verbose --passphrase-fd 3 -u "%{_gpg_name}" -so -
%__gpg_sign_cmd %{__gpg} \
- gpg --batch --no-verbose --no-armor --passphrase-fd 3 \
+ gpg --no-verbose --no-armor \
%{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} \
--no-secmem-warning \
+ %{?_gpg_sign_cmd_extra_args:%{_gpg_sign_cmd_extra_args}} \
-u "%{_gpg_name}" -sbo %{__signature_filename} %{__plaintext_filename}
# XXX rpm >= 4.1 verifies signatures internally
@@ -611,6 +762,14 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
%_vsflags_rebuilddb 0xc0c00
%_vsflags_verify %{__vsflags}
+# Set to 1 to minimize writing (at the cost of more reads) to
+# conserve eg SSD disks.
+%_minimize_writes 0
+
+# Set to 1 to flush file IO during transactions (at a severe cost in
+# performance for rotational disks)
+#%_flush_io 0
+
#
# Default output format string for rpm -qa
#
@@ -618,6 +777,11 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
%_query_all_fmt %%{nvra}
#
+# Default for coloring output
+# valid values are always never and auto
+%_color_output never
+
+#
# Default path to the file used for transaction fcntl lock.
%_rpmlock_path %{_dbpath}/.rpm.lock
@@ -650,9 +814,9 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\
RPM_DOC_DIR=\"%{_docdir}\"\
export RPM_DOC_DIR\
- RPM_PACKAGE_NAME=\"%{name}\"\
- RPM_PACKAGE_VERSION=\"%{version}\"\
- RPM_PACKAGE_RELEASE=\"%{release}\"\
+ RPM_PACKAGE_NAME=\"%{NAME}\"\
+ RPM_PACKAGE_VERSION=\"%{VERSION}\"\
+ RPM_PACKAGE_RELEASE=\"%{RELEASE}\"\
export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\
LANG=C\
export LANG\
@@ -661,6 +825,8 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
export RPM_BUILD_ROOT}\
%{?_javaclasspath:CLASSPATH=\"%{_javaclasspath}\"\
export CLASSPATH}\
+ PKG_CONFIG_PATH=\"${PKG_CONFIG_PATH}:%{_libdir}/pkgconfig:%{_datadir}/pkgconfig\"\
+ export PKG_CONFIG_PATH\
\
%{verbose:set -x}%{!verbose:exec > /dev/null}\
umask 022\
@@ -668,7 +834,7 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
#%___build_body %{nil}
-%___build_post exit 0
+%___build_post exit $?
%___build_template #!%{___build_shell}\
%{___build_pre}\
@@ -681,7 +847,6 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
#==============================================================================
# ---- Scriptlet templates.
# Macro(s) that expand to a command and script that is executed.
-# CAVEAT: All macro expansions must fit in a BUFSIZ (8192 byte) buffer.
#
%__spec_prep_shell %{___build_shell}
%__spec_prep_args %{___build_args}
@@ -830,7 +995,7 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
%_build_vendor %{_host_vendor}
%_build_os %{_host_os}
%_host @host@
-%_host_alias @host@%{nil}
+%_host_alias @host_alias@%{nil}
%_host_cpu @host_cpu@
%_host_vendor @host_vendor@
%_host_os @host_os@
@@ -849,9 +1014,6 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
# directory structure (--prefix, --libdir etc) and compiler flags
# such as CFLAGS.
#
-# The configure macro should be invoked as %configure (rather than %{configure})
-# because the rest of the arguments will be expanded using %*.
-#
%_configure ./configure
%configure \
CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \
@@ -876,13 +1038,23 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
--disable-dependency-tracking
#------------------------------------------------------------------------------
+# Tested features of make
+# Output synchronization for parallel make:
+%_make_output_sync %(! %{__make} --version -O >/dev/null 2>&1 || echo -O)
+
+#------------------------------------------------------------------------------
+# The "make" analogue, hiding the _smp_mflags magic from specs
+%make_build %{__make} %{_make_output_sync} %{?_smp_mflags}
+
+#------------------------------------------------------------------------------
# The make install analogue of %configure for modern autotools:
-%make_install %{__make} install DESTDIR=%{?buildroot}
+%make_install %{__make} install DESTDIR=%{?buildroot} INSTALL="%{__install} -p"
#------------------------------------------------------------------------------
# Former make install analogue, kept for compatibility and for old/broken
# packages that don't support DESTDIR properly.
%makeinstall \
+ echo "warning: %%makeinstall is deprecated, try %%make_install instead" 1>&2\
%{__make} \\\
prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\
exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\
@@ -900,61 +1072,6 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
install
#------------------------------------------------------------------------------
-# The GNUconfigure macro does the following:
-# update config.guess and config.sub.
-# regenerate all autoconf/automake files
-# optionally change to a directory (make the directory if requested).
-# run configure with correct prefix, platform, and CFLAGS.
-# optionally restore current directory.
-#
-# Based on autogen.sh from GNOME and orginal GNUconfigure
-#
-%GNUconfigure(MCs:) \
- CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS; \
- LDFLAGS="${LDFLAGS:-%{-s:-s}}" ; export LDFLAGS; \
- %{-C:_mydir="`pwd`"; %{-M: %{__mkdir} -p %{-C*};} cd %{-C*}} \
- dirs="`find ${_mydir} -name configure.in -print`"; export dirs; \
- for coin in `echo ${dirs}` \
-do \
- dr=`dirname ${coin}`; \
-if test -f ${dr}/NO-AUTO-GEN; then \
- : \
-else \
- macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < ${coin}`; \
- ( cd ${dr}; \
- aclocalinclude="${ACLOCAL_FLAGS}"; \
- for k in ${macrodirs}; do \
- if test -d ${k}; then \
- aclocalinclude="${aclocalinclude} -I ${k}"; \
- ##else \
- ## echo "**Warning**: No such directory \`${k}'. Ignored." \
- fi \
- done \
- if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then \
- if grep "sed.*POTFILES" configure.in >/dev/null; then \
- : do nothing -- we still have an old unmodified configure.in \
- else \
- test -r ${dr}/aclocal.m4 || touch ${dr}/aclocal.m4; \
- echo "no" | gettextize --force --copy; \
- test -r ${dr}/aclocal.m4 && %{__chmod} u+w ${dr}/aclocal.m4; \
- fi \
- fi \
- if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then \
- %{__libtoolize} --force --copy; \
- fi \
- aclocal ${aclocalinclude}; \
- if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then \
- %{__autoheader}; \
- fi \
- echo "Running automake --gnu ${am_opt} ..."; \
- %{__automake} --add-missing --gnu ${am_opt}; \
- %{__autoconf}; \
- ); \
- fi \
-done \
- %{-C:${_mydir}}%{!-C:.}/configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} --infodir=%{_infodir} %* ; \
- %{-C:cd ${_mydir}; unset _mydir}
-
%patches %{lua: for i, p in ipairs(patches) do print(p.." ") end}
%sources %{lua: for i, s in ipairs(sources) do print(s.." ") end}
@@ -980,7 +1097,8 @@ done \
# %{perl_sitearch}/Image
# %dir %{perl_sitearch}/auto/Image
#
-%requires_eq() %(LC_ALL="C" echo '%*' | xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
+%requires_eq() %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
+%requires_ge() %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
%perl_sitearch %(eval "`%{__perl} -V:installsitearch`"; echo $installsitearch)
%perl_sitelib %(eval "`%{__perl} -V:installsitelib`"; echo $installsitelib)
%perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)
@@ -991,46 +1109,12 @@ done \
#------------------------------------------------------------------------------
# Useful python macros for determining python version and paths
#
-%python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())")
-%python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))")
-%python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")
-
-# More useful perl macros (from Raul Dias <rsd@swi.com.br>)
-#
-%perl_version %(perl -V:version | sed "s!.*='!!;s!'.*!!")
-%perl_man1ext %(perl -V:man1ext | sed "s!.*='!!;s!'.*!!")
-%perl_man3ext %(perl -V:man3ext | sed "s!.*='!!;s!'.*!!")
-%perl_man1dir %(perl -V:man1dir | sed "s!.*='!!;s!'.*!!")
-%perl_man3dir %(perl -V:man3dir | sed "s!.*='!!;s!'.*!!")
-%perl_installman1dir %(perl -V:installman1dir | sed "s!.*='!!;s!'.*!!")
-%perl_installman3dir %(perl -V:installman3dir | sed "s!.*='!!;s!'.*!!")
-%perl_installarchlib %(perl -V:installarchlib | sed "s!.*='!!;s!'.*!!")
-%perl_prefix %{buildroot}
-
-#------------------------------------------------------------------------------
-# Python specific macro definitions (originally from PLD).
-#
-%py_ver %(python -c "import sys; v=sys.version_info[:2]; print '%%d.%%d'%%v" 2>/dev/null || echo PYTHON-NOT-FOUND)
-%py_prefix %(python -c "import sys; print sys.prefix" 2>/dev/null || echo PYTHON-NOT-FOUND)
-%py_libdir %{py_prefix}/%{_lib}/python%{py_ver}
-%py_incdir %{py_prefix}/include/python%{py_ver}
-%py_sitedir %{py_libdir}/site-packages
-%py_compile(O) \
-find %1 -name '*.pyc' -exec rm -f {} \\; \
-python -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 \
-%{-O: \
-find %1 -name '*.pyo' -exec rm -f {} \\; \
-python -O -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 \
-}
-%py_requires(d) \
-%define minver %py_ver \
-%define maxver %(python -c "import sys; a,b=sys.version_info[:2]; print '%%d.%%d'%%(a,b+1)" 2>/dev/null || echo PYTHON-NOT-FOUND) \
-BuildRequires: python %{-d:python-devel} \
-PreReq: python >= %minver, python < %maxver
-
+%python_sitelib %(%{__python} -Es %{_rpmconfigdir}/python-macro-helper sitelib)
+%python_sitearch %(%{__python} -Es %{_rpmconfigdir}/python-macro-helper sitearch)
+%python_version %(%{__python} -Es %{_rpmconfigdir}/python-macro-helper version)
#------------------------------------------------------------------------------
-# arch macro for all Intel i?86 compatibile processors
+# arch macro for all Intel i?86 compatible processors
# (Note: This macro (and it's analogues) will probably be obsoleted when
# rpm can use regular expressions against target platforms in macro
# conditionals.
@@ -1039,9 +1123,27 @@ PreReq: python >= %minver, python < %maxver
#------------------------------------------------------------------------------
# arch macro for all supported ARM processors
-%arm armv3l armv4b armv4l armv4tl armv5b armv5l armv5teb armv5tel armv5tejl armv6l armv7l armv7hl
-%arml armv3l armv4l armv5l armv5tel armv6l armv7l armv7hl
-%armb armv4b armv5b armv5teb
+%arm armv3l armv4b armv4l armv4tl armv5tl armv5tel armv5tejl armv6l armv6hl armv7l armv7hl armv7hnl
+
+#------------------------------------------------------------------------------
+# arch macro for 32-bit MIPS processors
+%mips32 mips mipsel mipsr6 mipsr6el
+
+#------------------------------------------------------------------------------
+# arch macro for 64-bit MIPS processors
+%mips64 mips64 mips64el mips64r6 mips64r6el
+
+#------------------------------------------------------------------------------
+# arch macro for big endian MIPS processors
+%mipseb mips mipsr6 mips64 mips64r6
+
+#------------------------------------------------------------------------------
+# arch macro for little endian MIPS processors
+%mipsel mipsel mipsr6el mips64el mips64r6el
+
+#------------------------------------------------------------------------------
+# arch macro for all supported MIPS processors
+%mips %{mips32} %{mips64}
#------------------------------------------------------------------------------
# arch macro for all supported Sparc processors
@@ -1053,7 +1155,7 @@ PreReq: python >= %minver, python < %maxver
#------------------------------------------------------------------------------
# arch macro for all supported PowerPC 64 processors
-%power64 ppc64 ppc64p7
+%power64 ppc64 ppc64p7 ppc64le
#------------------------------------------------------------------------
# Use in %install to generate locale specific file lists. For example,
@@ -1073,17 +1175,17 @@ PreReq: python >= %minver, python < %maxver
# for any special local needs use %__urlhelper_localopts in system-wide
# or per-user macro configuration.
%__urlhelpercmd @__CURL@
-%__urlhelperopts --silent --show-error --fail --location -o
+%__urlhelperopts --silent --show-error --fail --globoff --location -o
%__urlhelper_proxyopts %{?_httpproxy:--proxy %{_httpproxy}%{?_httpport::%{_httpport}}}%{!?_httpproxy:%{nil}}
%_urlhelper %{__urlhelpercmd} %{?__urlhelper_localopts} %{?__urlhelper_proxyopts} %{__urlhelperopts}
-#------------------------------------------------------------------------------
-# Collection specific macros
+# Transaction plugin macros
%__plugindir %{_libdir}/rpm-plugins
-%__collection_font %{__plugindir}/exec.so /usr/bin/fc-cache
-%__collection_java %{__plugindir}/exec.so /usr/bin/rebuild-gcj-db
-%__collection_sepolicy %{__plugindir}/sepolicy.so
-%__collection_sepolicy_flags 1
+#%__transaction_systemd_inhibit %{__plugindir}/systemd_inhibit.so
+#%__transaction_selinux %{__plugindir}/selinux.so
+#%__transaction_syslog %{__plugindir}/syslog.so
+#%__transaction_ima %{__plugindir}/ima.so
+#%__transaction_prioreset %{__plugindir}/prioreset.so
#------------------------------------------------------------------------------
# transaction specific macros
@@ -1104,13 +1206,18 @@ PreReq: python >= %minver, python < %maxver
# Plain patch (-m is unused)
%__scm_setup_patch(q) %{nil}
%__scm_apply_patch(qp:m:)\
-%{__patch} %{-p:-p%{-p*}} %{-q:-s}
+%{__patch} %{-p:-p%{-p*}} %{-q:-s} --fuzz=%{_default_patch_fuzz} %{_default_patch_flags}
+
+# Plain patch with backups for gendiff
+%__scm_setup_gendiff(q) %{nil}
+%__scm_apply_gendiff(qp:m:)\
+%{__patch} %{-p:-p%{-p*}} %{-q:-s} --fuzz=%{_default_patch_fuzz} %{_default_patch_flags} -b --suffix ".%{2}"
# Mercurial (aka hg)
%__scm_setup_hg(q)\
%{__hg} init %{-q} .\
%{__hg} add %{-q} .\
-%{__hg} commit %{-q} --user "%{__scm_author}" -m "%{name}-%{version} base"
+%{__hg} commit %{-q} --user "%{__scm_author}" -m "%{NAME}-%{VERSION} base"
%__scm_apply_hg(qp:m:)\
%{__hg} import - %{-p:-p%{-p*}} %{-q} -m %{-m*} --user "%{__scm_author}"
@@ -1122,23 +1229,30 @@ PreReq: python >= %minver, python < %maxver
%{__git} config user.email "%{__scm_usermail}"\
%{__git} add .\
%{__git} commit %{-q} -a\\\
- --author "%{__scm_author}" -m "%{name}-%{version} base"
+ --author "%{__scm_author}" -m "%{NAME}-%{VERSION} base"
%__scm_apply_git(qp:m:)\
-%{__git} apply %{-p:-p%{-p*}} -\
-%{__git} commit %{-q} -a -m %{-m*} --author "%{__scm_author}"
+%{__git} apply --index %{-p:-p%{-p*}} -\
+%{__git} commit %{-q} -m %{-m*} --author "%{__scm_author}"
+
+# Git, using "git am" (-m is unused)
+%__scm_setup_git_am(q)\
+%{expand:%__scm_setup_git %{-q}}
+
+%__scm_apply_git_am(qp:m:)\
+%{__git} am %{-q} %{-p:-p%{-p*}}
# Quilt
%__scm_setup_quilt(q) %{nil}
%__scm_apply_quilt(qp:m:)\
-%{__quilt} import %{-p:-p%{-p*}} %{1} && %{__quilt} push
+%{__quilt} import %{-p:-p%{-p*}} %{1} && %{__quilt} push %{-q}
# Bzr
%__scm_setup_bzr(q)\
%{__bzr} init %{-q}\
%{__bzr} whoami --branch "%{__scm_author}"\
%{__bzr} add .\
-%{__bzr} commit %{-q} -m "%{name}-%{version} base"
+%{__bzr} commit %{-q} -m "%{NAME}-%{VERSION} base"
# bzr doesn't seem to have its own command to apply patches?
%__scm_apply_bzr(qp:m:)\
@@ -1147,13 +1261,23 @@ PreReq: python >= %minver, python < %maxver
# Single patch application
%apply_patch(qp:m:)\
-%{uncompress:%{1}} | %{expand:%__scm_apply_%{__scm} %{-q} %{-p:-p%{-p*}} %{-m:-m%{-m*}}}
+%{lua:\
+local file = rpm.expand("%{1}")\
+local num = rpm.expand("%{2}")\
+if posix.access(file, "r") then\
+ local options = rpm.expand("%{-q} %{-p:-p%{-p*}} %{-m:-m%{-m*}}")\
+ local scm_apply = rpm.expand("%__scm_apply_%{__scm}")\
+ print(rpm.expand("%{uncompress:"..file.."} | "..scm_apply.." "..options.." "..file.." "..num.."\\n"))\
+else\
+ print("echo 'Cannot read "..file.."'; exit 1;".."\\n")\
+end}
# Automatically apply all patches
%autopatch(vp:)\
%{lua:\
+local options = rpm.expand("%{!-v:-q} %{-p:-p%{-p*}} ")\
for i, p in ipairs(patches) do\
- print(rpm.expand("%apply_patch -m %{basename:"..p.."} "..rpm.expand("%{!-v:-q} %{-p:-p%{-p*}} ")..p.."\\n"))\
+ print(rpm.expand("%apply_patch -m %{basename:"..p.."} "..options..p.." "..i.."\\n"))\
end}
# One macro to (optionally) do it all.
@@ -1164,7 +1288,7 @@ end}
%autosetup(a:b:cDn:TvNS:p:)\
%setup %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{!-v:-q}\
%{-S:%global __scm %{-S*}}\
-%{-S:%{expand:%__scm_setup_%{-S*} %{!-v:-q}}}\
+%{expand:%__scm_setup_%{__scm} %{!-v:-q}}\
%{!-N:%autopatch %{-v} %{-p:-p%{-p*}}}
# \endverbatim
diff --git a/misc/Makefile.am b/misc/Makefile.am
index 4fdde9525..e413a211c 100644
--- a/misc/Makefile.am
+++ b/misc/Makefile.am
@@ -9,5 +9,5 @@ EXTRA_DIST = \
noinst_LTLIBRARIES = libmisc.la
-libmisc_la_SOURCES = fts.c fts.h
+libmisc_la_SOURCES = fts.c rpmfts.h
libmisc_la_LIBADD = @LTLIBOBJS@
diff --git a/misc/fnmatch.c b/misc/fnmatch.c
index 77fbd93e7..8de22c8b0 100644
--- a/misc/fnmatch.c
+++ b/misc/fnmatch.c
@@ -17,7 +17,9 @@
Boston, MA 02111-1307, USA. */
# include "system.h"
+# include <ctype.h>
# include <stdlib.h>
+# include <string.h>
/* Find the first occurrence of C in S or the final NUL byte. */
static inline char *
diff --git a/misc/fts.c b/misc/fts.c
index 9fbefe3d2..5c6f53d40 100644
--- a/misc/fts.c
+++ b/misc/fts.c
@@ -31,41 +31,45 @@
static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94";
#endif /* LIBC_SCCS and not lint */
+/* Conditional to set up proper fstat64 implementation */
+#if defined(hpux) || defined(sun)
+# define FTS_FSTAT64(_fd, _sbp) fstat((_fd), (_sbp))
+#else
+# define FTS_FSTAT64(_fd, _sbp) fstat64((_fd), (_sbp))
+#endif
+
#if defined(_LIBC)
#include <sys/param.h>
#include <include/sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
-#include "misc/fts.h"
+#include "misc/rpmfts.h"
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#else
+
+/* Conditionals for working around non-GNU environments */
#if defined(hpux)
-# define _INCLUDE_POSIX_SOURCE
+# define _INCLUDE_POSIX_SOURCE
# define __errno_location() (&errno)
# define dirfd(dirp) -1
# define stat64 stat
-# define _STAT_VER 0
-# define __fxstat64(_stat_ver, _fd, _sbp) fstat((_fd), (_sbp))
#endif
#if defined(sun)
# define __errno_location() (&errno)
# define dirfd(dirp) -1
-# define _STAT_VER 0
-# define __fxstat64(_stat_ver, _fd, _sbp) fstat((_fd), (_sbp))
#endif
#if defined(__APPLE__)
# define __errno_location() (__error())
-# define _STAT_VER 0
-# define __fxstat64(_stat_ver, _fd, _sbp) fstat64((_fd), (_sbp))
#endif
+
#include "system.h"
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#include "misc/fts.h"
+#include "misc/rpmfts.h"
# define __set_errno(val) (*__errno_location ()) = (val)
# define __open open
# define __close close
@@ -1118,7 +1122,7 @@ fts_safe_changedir(FTS * sp, FTSENT * p, int fd, const char * path)
return (0);
if (fd < 0 && (newfd = __open(path, O_RDONLY, 0)) < 0)
return (-1);
- if (__fxstat64(_STAT_VER, newfd, &sb)) {
+ if (FTS_FSTAT64(newfd, &sb)) {
ret = -1;
goto bail;
}
diff --git a/misc/fts.h b/misc/rpmfts.h
index 47c650e7c..30ad0ee8e 100644
--- a/misc/fts.h
+++ b/misc/rpmfts.h
@@ -39,26 +39,19 @@
#else
# define __THROW
-#ifdef __cplusplus
-# define __BEGIN_DECLS extern "C" {
-# define __END_DECLS }
-#else
-# define __BEGIN_DECLS
-# define __END_DECLS
-#endif
-#if defined(hpux)
-# define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
-# define _INCLUDE_POSIX_SOURCE
+#if !defined(_LARGEFILE64_SOURCE)
# define _LARGEFILE64_SOURCE
#endif
-#if defined(sun)
-# define _D_EXACT_NAMLEN(d) ((d)->d_reclen)
+#if !defined(_D_EXACT_NAMLEN)
+# define _D_EXACT_NAMLEN(d) (strlen((d)->d_name))
#endif
-#if defined(__APPLE__)
-# define _D_EXACT_NAMLEN(d) (strlen((d)->d_name))
+#if defined(hpux)
+# if !defined(_INCLUDE_POSIX_SOURCE)
+# define _INCLUDE_POSIX_SOURCE
+# endif
#endif
#endif
@@ -151,7 +144,9 @@ typedef struct _ftsent {
char fts_name[1]; /*!< file name */
} FTSENT;
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
/**
* Return list of children of the current node.
@@ -166,7 +161,7 @@ FTSENT *Fts_children (FTS * sp, int instr) __THROW
/**
* Destroy a file hierarchy traversal handle.
* @param sp file hierarchy state
- * @return 0 on sucess, -1 on error
+ * @return 0 on success, -1 on error
*/
RPM_GNUC_INTERNAL
int Fts_close (FTS * sp) __THROW
@@ -198,12 +193,14 @@ FTSENT *Fts_read (FTS * sp) __THROW
* @param sp file hierarchy state
* @param p file set member
* @param instr new disposition for file set member
- * @return 0 on sucess, -1 on error
+ * @return 0 on success, -1 on error
*/
RPM_GNUC_INTERNAL
int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW
;
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* fts.h */
diff --git a/mkinstalldirs b/mkinstalldirs
index ef7e16fda..55d537f87 100755
--- a/mkinstalldirs
+++ b/mkinstalldirs
@@ -1,7 +1,7 @@
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
-scriptversion=2006-05-11.19
+scriptversion=2009-04-28.21; # UTC
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
@@ -81,9 +81,9 @@ case $dirmode in
echo "mkdir -p -- $*"
exec mkdir -p -- "$@"
else
- # On NextStep and OpenStep, the `mkdir' command does not
+ # On NextStep and OpenStep, the 'mkdir' command does not
# recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
+ # directories to create, and then abort because '.' already
# exists.
test -d ./-p && rmdir ./-p
test -d ./--version && rmdir ./--version
@@ -157,5 +157,6 @@ exit $errstatus
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
# End:
diff --git a/packaging/rpm.spec b/packaging/rpm.spec
index 506b1016b..9bb1322fe 100644
--- a/packaging/rpm.spec
+++ b/packaging/rpm.spec
@@ -5,8 +5,8 @@ Name: rpm
Summary: The Package Manager
License: LGPL-2.0+ and GPL-2.0+
Group: Base/Package Management
-Version: 4.11.0.1
-Release: 0
+Version: 4.14.1.1
+Release: 1
Url: http://www.rpm.org
BuildRequires: binutils
BuildRequires: bzip2
@@ -33,7 +33,11 @@ BuildRequires: pkgconfig(nss)
BuildRequires: uthash-devel
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libsmack)
+BuildRequires: pkgconfig(libarchive)
BuildRequires: fdupes
+BuildRequires: libdw-devel
+BuildRequires: libelf-devel
+BuildRequires: pkgconfig(libzstd)
Provides: rpminst
Provides: rpm-libs
@@ -139,14 +143,14 @@ rm -f m4/libtool.m4
rm -f m4/lt*.m4
# Change hard-coded paths in man pages and .rc files
-[[ x"/usr/lib/rpm" != x%{rpmhome} ]] && \
+#[[ x"/usr/lib/rpm" != x%{rpmhome} ]] && \
/bin/bash -c '/usr/bin/find %{_builddir} -type f -exec sed -e "s|/usr/lib/rpm|%{rpmhome}|g" -i {} \;'
%build
CPPFLAGS="$CPPFLAGS `pkg-config --cflags nss`"
export CPPFLAGS
-export CFLAGS="%{optflags} -ffunction-sections"
-export LDFLAGS="${LDFLAGS} -Wl,-Bsymbolic-functions -ffunction-sections"
+export CFLAGS="%{optflags} -ffunction-sections -fstack-protector-strong -Wl,-z,relro -D_FORTIFY_SOURCE=2 -fPIE"
+export LDFLAGS="${LDFLAGS} -pie -Wl,-Bsymbolic-functions -ffunction-sections"
%ifarch armv5tel
export CFLAGS="-g -O0 -fno-strict-aliasing -ffunction-sections"
%endif
@@ -160,6 +164,7 @@ export CFLAGS="-g -O0 -fno-strict-aliasing -ffunction-sections"
--enable-python \
--with-vendor=tizen \
--with-msm \
+ --enable-zstd \
--with-rpmconfigdir=%{rpmhome}
make %{?_smp_mflags}
@@ -263,6 +268,7 @@ rm -f %{_dbpath}/Filemd5s \
%{_bindir}/rpmquery
%{_bindir}/rpmverify
%{_bindir}/rpmqpack
+%{_bindir}/rpm2archive
%attr(0755, root, root) %dir %{rpmhome}
%{rpmhome}/macros
%{rpmhome}/macros.d
@@ -275,7 +281,9 @@ rm -f %{_dbpath}/Filemd5s \
%{rpmhome}/tgpg
%{rpmhome}/platform
%dir %{__plugindir}
-%{__plugindir}/exec.so
+%{__plugindir}/ima.so
+%{__plugindir}/prioreset.so
+%{__plugindir}/syslog.so
%{_libdir}/librpm.so.*
%{_libdir}/librpmio.so.*
%{_libdir}/librpmbuild.so.*
@@ -303,6 +311,8 @@ rm -f %{_dbpath}/Filemd5s \
%{rpmhome}/find-supplements*
%{rpmhome}/check-*
%{rpmhome}/debugedit
+%{rpmhome}/sepdebugcrcfix
+%{rpmhome}/python-macro-helper
%{rpmhome}/find-debuginfo.sh
%{rpmhome}/find-lang.sh
%{rpmhome}/find-provides.ksyms
diff --git a/platform.in b/platform.in
index 20c564e2a..e84431a40 100644
--- a/platform.in
+++ b/platform.in
@@ -41,15 +41,20 @@
%_oldincludedir @oldincludedir@
%_infodir @infodir@
%_mandir @mandir@
-%_initddir %{_sysconfdir}/init.d
+%_initddir %{_sysconfdir}/rc.d/init.d
# Deprecated misspelling, present for backwards compatibility.
%_initrddir %{_initddir}
+%_rundir @RUNDIR@
%_defaultdocdir %{_datadir}/doc
+# Maximum number of CPU's to use when building, 0 for unlimited.
+#%_smp_ncpus_max 0
%_smp_mflags %([ -z "$RPM_BUILD_NCPUS" ] \\\
&& RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"; \\\
- [ "$RPM_BUILD_NCPUS" -gt 1 ] && echo "-j$RPM_BUILD_NCPUS")
+ ncpus_max=%{?_smp_ncpus_max}; \\\
+ if [ -n "$ncpus_max" ] && [ "$ncpus_max" -gt 0 ] && [ "$RPM_BUILD_NCPUS" -gt "$ncpus_max" ]; then RPM_BUILD_NCPUS="$ncpus_max"; fi; \\\
+ if [ "$RPM_BUILD_NCPUS" -gt 1 ]; then echo "-j$RPM_BUILD_NCPUS"; fi)
#==============================================================================
# ---- Build policy macros.
@@ -63,6 +68,8 @@
%__os_install_post \
%{_rpmconfigdir}/brp-compress \
%{_rpmconfigdir}/brp-strip %{__strip} \
+ %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \
+ %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \
%{nil}
%__spec_install_post\
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 8002d9c40..e71364026 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,6 +1,7 @@
# Makefile for rpm library.
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
AM_CPPFLAGS += -I$(top_srcdir)/misc
@@ -13,16 +14,33 @@ AM_LDFLAGS = -avoid-version -module -shared
pluginsdir = $(libdir)/rpm-plugins
-plugins_LTLIBRARIES = exec.la
-
-exec_la_SOURCES = plugin.h exec.c
-exec_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la
+plugins_LTLIBRARIES =
if SELINUX
-sepolicy_la_SOURCES = plugin.h sepolicy.c
-sepolicy_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la @WITH_SELINUX_LIB@ @WITH_SEMANAGE_LIB@
+selinux_la_SOURCES = selinux.c
+selinux_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la @WITH_SELINUX_LIB@
+plugins_LTLIBRARIES += selinux.la
+endif
+
+if DBUS
+systemd_inhibit_la_SOURCES = systemd_inhibit.c
+systemd_inhibit_la_CPPFLAGS = $(AM_CPPFLAGS) @DBUS_CFLAGS@
+systemd_inhibit_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la @DBUS_LIBS@
+plugins_LTLIBRARIES += systemd_inhibit.la
+endif
+
+prioreset_la_SOURCES = prioreset.c
+prioreset_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la
+plugins_LTLIBRARIES += prioreset.la
+
+syslog_la_SOURCES = syslog.c
+syslog_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la
+plugins_LTLIBRARIES += syslog.la
-plugins_LTLIBRARIES += sepolicy.la
+if IMA
+ima_la_sources = ima.c
+ima_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la
+plugins_LTLIBRARIES += ima.la
endif
if MSM
diff --git a/plugins/exec.c b/plugins/exec.c
deleted file mode 100644
index 49a4cae5a..000000000
--- a/plugins/exec.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "plugin.h"
-
-#include <sys/wait.h>
-
-static char * options;
-static char * name;
-
-rpmPluginHook PLUGIN_HOOKS = \
- PLUGINHOOK_INIT | \
- PLUGINHOOK_CLEANUP | \
- PLUGINHOOK_COLL_POST_ANY;
-
-rpmRC PLUGINHOOK_INIT_FUNC(rpmts ts, const char *name, const char *opts)
-{
- options = strdup(opts);
- name = strdup(name);
- return RPMRC_OK;
-}
-
-rpmRC PLUGINHOOK_CLEANUP_FUNC(void)
-{
- options = _free(options);
- name = _free(name);
- return RPMRC_OK;
-}
-
-rpmRC PLUGINHOOK_COLL_POST_ANY_FUNC(void)
-{
- rpmRC rc = RPMRC_FAIL;
-
- if (rpmChrootIn()) {
- goto exit;
- }
-
- if (options) {
- int status = system(options);
- if (!WIFEXITED(status) || WEXITSTATUS(status)) {
- rpmlog(RPMLOG_ERR, "%s collection action failed\n", name);
- goto exit;
- }
- }
-
- rc = RPMRC_OK;
-
- exit:
- if (rpmChrootOut()) {
- rc = RPMRC_FAIL;
- }
-
- return rc;
-}
diff --git a/plugins/ima.c b/plugins/ima.c
new file mode 100644
index 000000000..fe6d3ad7f
--- /dev/null
+++ b/plugins/ima.c
@@ -0,0 +1,80 @@
+#include "system.h"
+
+#include <errno.h>
+#include <sys/xattr.h>
+
+#include <rpm/rpmfi.h>
+#include <rpm/rpmte.h>
+#include <rpm/rpmfiles.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmlog.h>
+#include <rpmio/rpmstring.h>
+
+#include "lib/rpmfs.h"
+#include "lib/rpmplugin.h"
+#include "lib/rpmte_internal.h"
+
+#define XATTR_NAME_IMA "security.ima"
+
+/*
+ * check_zero_hdr: Check the signature for a zero header
+ *
+ * Check whether the given signature has a header with all zeros
+ *
+ * Returns -1 in case the signature is too short to compare
+ * (invalid signature), 0 in case the header is not only zeroes,
+ * and 1 if it is only zeroes.
+ */
+static int check_zero_hdr(const unsigned char *fsig, size_t siglen)
+{
+ /*
+ * Every signature has a header signature_v2_hdr as defined in
+ * Linux's (4.5) security/integrity/integtrity.h. The following
+ * 9 bytes represent this header in front of the signature.
+ */
+ static const uint8_t zero_hdr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+ if (siglen < sizeof(zero_hdr))
+ return -1;
+ return (memcmp(fsig, &zero_hdr, sizeof(zero_hdr)) == 0);
+}
+
+static rpmRC ima_fsm_file_prepare(rpmPlugin plugin, rpmfi fi,
+ const char *path,
+ const char *dest,
+ mode_t file_mode, rpmFsmOp op)
+{
+ const unsigned char * fsig = NULL;
+ size_t len;
+ int rc = RPMRC_OK;
+ rpmFileAction action = XFO_ACTION(op);
+
+ /* Ignore skipped files and unowned directories */
+ if (XFA_SKIPPING(action) || (op & FAF_UNOWNED))
+ goto exit;
+
+ /* Don't install signatures for (mutable) files marked
+ * as config files unless they are also executable.
+ */
+ if (rpmfiFFlags(fi) & RPMFILE_CONFIG) {
+ if (!(rpmfiFMode(fi) & (S_IXUSR|S_IXGRP|S_IXOTH)))
+ goto exit;
+ }
+
+ fsig = rpmfiFSignature(fi, &len);
+ if (fsig && (check_zero_hdr(fsig, len) == 0)) {
+ if (lsetxattr(path, XATTR_NAME_IMA, fsig, len, 0) < 0) {
+ rpmlog(RPMLOG_ERR,
+ "ima: could not apply signature on '%s': %s\n",
+ path, strerror(errno));
+ rc = RPMRC_FAIL;
+ }
+ }
+
+exit:
+ return rc;
+}
+
+struct rpmPluginHooks_s ima_hooks = {
+ .fsm_file_prepare = ima_fsm_file_prepare,
+};
diff --git a/plugins/msm-plugin.c b/plugins/msm-plugin.c
index 3a1c653e6..4fe1c1a8e 100644
--- a/plugins/msm-plugin.c
+++ b/plugins/msm-plugin.c
@@ -44,22 +44,11 @@
#include "rpmio/rpmlog.h"
#include "rpm/rpmfileutil.h"
-#include "msm.h"
-
-/*hooks that are used in msm plugin */
-
-rpmPluginHook PLUGIN_HOOKS = \
- PLUGINHOOK_INIT | \
- PLUGINHOOK_CLEANUP | \
- PLUGINHOOK_TSM_PRE | \
- PLUGINHOOK_TSM_POST | \
- PLUGINHOOK_PSM_PRE | \
- PLUGINHOOK_PSM_POST | \
- PLUGINHOOK_FSM_COMMIT | \
- PLUGINHOOK_FSM_INIT | \
- PLUGINHOOK_FILE_CONFLICT | \
- PLUGINHOOK_VERIFY;
+#include "lib/rpmfs.h"
+#include "lib/rpmplugin.h"
+#include "lib/rpmte_internal.h"
+#include "msm.h"
typedef struct fileconflict {
const char *path;
@@ -213,7 +202,7 @@ static packagecontext *msmAddTE(rpmte te)
/* Implementation of hooks */
/* Hooks are listed in the call sequence inside rpm code */
-rpmRC PLUGINHOOK_INIT_FUNC(rpmts _ts, const char *name, const char *opts)
+rpmRC msm_plugin_init(rpmPlugin plugin, rpmts _ts)
{
ts = _ts;
@@ -263,7 +252,7 @@ rpmRC PLUGINHOOK_INIT_FUNC(rpmts _ts, const char *name, const char *opts)
return RPMRC_OK;
}
-rpmRC PLUGINHOOK_FILE_CONFLICT_FUNC(rpmts ts, char* path,
+rpmRC msm_plugin_fsm_file_conflict(rpmts ts, char* path,
Header oldHeader, rpmfi oldFi,
int rpmrc)
{
@@ -310,7 +299,7 @@ rpmRC PLUGINHOOK_FILE_CONFLICT_FUNC(rpmts ts, char* path,
return rpmrc;
}
-rpmRC PLUGINHOOK_TSM_PRE_FUNC(rpmts ts)
+rpmRC msm_plugin_tsm_pre(rpmPlugin plugin, rpmts ts)
{
if (!dsp) {
rpmlog(RPMLOG_ERR, "Device security policy is missing. Unable to proceed\n");
@@ -320,7 +309,7 @@ rpmRC PLUGINHOOK_TSM_PRE_FUNC(rpmts ts)
return RPMRC_OK;
}
-rpmRC PLUGINHOOK_VERIFY_FUNC(rpmKeyring keyring, rpmtd sigtd, pgpDigParams sig, DIGEST_CTX ctx, int rpmrc)
+rpmRC msm_plugin_psm_verify(rpmKeyring keyring, int sigTagId, pgpDigParams sig, DIGEST_CTX ctx, int rpmrc)
{
current = NULL;
@@ -339,7 +328,7 @@ rpmRC PLUGINHOOK_VERIFY_FUNC(rpmKeyring keyring, rpmtd sigtd, pgpDigParams sig,
rpmlog(RPMLOG_ERR, "Invalid signature, cannot search sw source\n");
goto exit;
}
- if (sigtd->tag != RPMSIGTAG_RSA) {
+ if (sigTagId != RPMSIGTAG_RSA) {
/* Not RSA, revert to unknown sw source. */
rpmlog(RPMLOG_DEBUG, "not an RSA signature, cannot search sw source\n");
goto exit;
@@ -366,7 +355,7 @@ rpmRC PLUGINHOOK_VERIFY_FUNC(rpmKeyring keyring, rpmtd sigtd, pgpDigParams sig,
return rpmrc;
}
-rpmRC PLUGINHOOK_PSM_PRE_FUNC(rpmte te)
+rpmRC msm_plugin_psm_pre(rpmPlugin plugin, rpmte te)
{
packagecontext *ctx = NULL;
manifest_x *mfx = NULL;
@@ -595,7 +584,7 @@ rpmRC PLUGINHOOK_PSM_PRE_FUNC(rpmte te)
return rc;
}
-rpmRC PLUGINHOOK_FSM_INIT_FUNC(const char* path, mode_t mode)
+rpmRC msm_plugin_fsm_file_init(const char* path, mode_t mode)
{
/* Check if there any conflicts that prevent file being written to the disk */
@@ -617,7 +606,7 @@ rpmRC PLUGINHOOK_FSM_INIT_FUNC(const char* path, mode_t mode)
msmFreePointer((void**)&dupPath);
if (fc) {
- //rpmlog(RPMLOG_DEBUG, "rpmteN(ctx->te) %s fc->pkg_name: %s\n", rpmteN(ctx->te), fc->pkg_name);
+ //rpmlog(RPMLOG_ERR, "rpmteN(ctx->te) %s fc->pkg_name: %s\n", rpmteN(ctx->te), fc->pkg_name);
/* There is a conflict, see if we are not allowed to overwrite */
if ((!current ||
(strcmp(current->rankkey, fc->sw_source->rankkey) > 0)) &&
@@ -635,7 +624,7 @@ rpmRC PLUGINHOOK_FSM_INIT_FUNC(const char* path, mode_t mode)
return RPMRC_OK;
}
-rpmRC PLUGINHOOK_FSM_COMMIT_FUNC(const char* path, mode_t mode, int type)
+rpmRC msm_plugin_fsm_file_commit(const char* path, mode_t mode, int type)
{
/* Setup xattrs for the given path */
@@ -673,7 +662,7 @@ rpmRC PLUGINHOOK_FSM_COMMIT_FUNC(const char* path, mode_t mode, int type)
return RPMRC_OK;
}
-rpmRC PLUGINHOOK_PSM_POST_FUNC(rpmte te, int rpmrc)
+rpmRC msm_plugin_psm_post(rpmPlugin plugin, rpmte te, int rpmrc)
{
packagecontext *ctx = context;
@@ -721,7 +710,7 @@ rpmRC PLUGINHOOK_PSM_POST_FUNC(rpmte te, int rpmrc)
return rpmrc;
}
-rpmRC PLUGINHOOK_TSM_POST_FUNC(rpmts ts, int rpmrc)
+rpmRC msm_plugin_tsm_post(rpmPlugin plugin, rpmts ts, int rpmrc)
{
packagecontext *ctx = context;
msmFreeInternalHashes(); // free hash structures first
@@ -736,7 +725,7 @@ rpmRC PLUGINHOOK_TSM_POST_FUNC(rpmts ts, int rpmrc)
return RPMRC_OK;
}
-rpmRC PLUGINHOOK_CLEANUP_FUNC(void)
+rpmRC msm_plugin_cleanup(rpmPlugin plugin)
{
ts = NULL;
@@ -755,7 +744,26 @@ rpmRC PLUGINHOOK_CLEANUP_FUNC(void)
}
msmFreePointer((void**)&ownSmackLabel);
- if (cookie) magic_close(cookie);
+ if (cookie)
+ {
+ magic_close(cookie);
+ cookie = NULL;
+ }
return RPMRC_OK;
}
+
+/*hooks that are used in msm plugin */
+struct rpmPluginHooks_s msm_hooks = {
+ .init = msm_plugin_init,
+ .cleanup = msm_plugin_cleanup,
+ .tsm_pre = msm_plugin_tsm_pre,
+ .tsm_post = msm_plugin_tsm_post,
+ .psm_pre = msm_plugin_psm_pre,
+ .psm_post = msm_plugin_psm_post,
+ .psm_verify = msm_plugin_psm_verify,
+ .fsm_file_init = msm_plugin_fsm_file_init,
+ .fsm_file_commit = msm_plugin_fsm_file_commit,
+ .fsm_file_conflict = msm_plugin_fsm_file_conflict,
+};
+
diff --git a/plugins/prioreset.c b/plugins/prioreset.c
new file mode 100644
index 000000000..d4f158a3e
--- /dev/null
+++ b/plugins/prioreset.c
@@ -0,0 +1,50 @@
+#include "system.h"
+
+#include <errno.h>
+#include <sys/resource.h>
+#if defined(__linux__)
+#include <sys/syscall.h> /* For ionice */
+#endif
+
+#include <rpm/rpmlog.h>
+#include "lib/rpmplugin.h"
+
+#include "debug.h"
+
+/*
+ * In general we want scriptlets to run with the same priority as rpm
+ * itself. However on legacy SysV init systems, properties of the
+ * parent process can be inherited by the actual daemons on restart,
+ * so you can end up with eg nice/ionice'd mysql or httpd, ouch.
+ * This plugin resets the scriptlet process priorities after forking, and
+ * can be used to counter that effect. Should not be used with systemd
+ * because the it's not needed there, and the effect is counter-productive.
+ */
+
+static rpmRC prioreset_scriptlet_fork_post(rpmPlugin plugin, const char *path, int type)
+{
+ /* Call for resetting nice priority. */
+ int ret = setpriority(PRIO_PROCESS, 0, 0);
+ if (ret == -1) {
+ rpmlog(RPMLOG_WARNING, _("Unable to reset nice value: %s"),
+ strerror(errno));
+ }
+
+ /* Call for resetting IO priority. */
+ #if defined(__linux__)
+ /* Defined at include/linux/ioprio.h */
+ const int _IOPRIO_WHO_PROCESS = 1;
+ const int _IOPRIO_CLASS_NONE = 0;
+ ret = syscall(SYS_ioprio_set, _IOPRIO_WHO_PROCESS, 0, _IOPRIO_CLASS_NONE);
+ if (ret == -1) {
+ rpmlog(RPMLOG_WARNING, _("Unable to reset I/O priority: %s"),
+ strerror(errno));
+ }
+ #endif
+
+ return RPMRC_OK;
+}
+
+struct rpmPluginHooks_s prioreset_hooks = {
+ .scriptlet_fork_post = prioreset_scriptlet_fork_post,
+};
diff --git a/plugins/selinux.c b/plugins/selinux.c
new file mode 100644
index 000000000..3c9d9e4ab
--- /dev/null
+++ b/plugins/selinux.c
@@ -0,0 +1,196 @@
+#include "system.h"
+
+#include <selinux/selinux.h>
+#include <selinux/context.h>
+#include <selinux/label.h>
+#include <selinux/avc.h>
+#include <rpm/rpmlog.h>
+#include <rpm/rpmts.h>
+#include "lib/rpmplugin.h"
+
+#include "debug.h"
+
+static struct selabel_handle * sehandle = NULL;
+
+static void sehandle_fini(int close_status)
+{
+ if (sehandle) {
+ selabel_close(sehandle);
+ sehandle = NULL;
+ }
+ if (close_status) {
+ selinux_status_close();
+ }
+}
+
+static rpmRC sehandle_init(int open_status)
+{
+ const char * path = selinux_file_context_path();
+ struct selinux_opt opts[] = {
+ { .type = SELABEL_OPT_PATH, .value = path }
+ };
+
+ if (path == NULL)
+ return RPMRC_FAIL;
+
+ if (open_status) {
+ selinux_status_close();
+ if (selinux_status_open(0) < 0) {
+ return RPMRC_FAIL;
+ }
+ } else if (!selinux_status_updated() && sehandle) {
+ return RPMRC_OK;
+ }
+
+ if (sehandle)
+ sehandle_fini(0);
+
+ sehandle = selabel_open(SELABEL_CTX_FILE, opts, 1);
+
+ rpmlog(RPMLOG_DEBUG, "selabel_open: (%s) %s\n",
+ path, (sehandle == NULL ? strerror(errno) : ""));
+
+ return (sehandle != NULL) ? RPMRC_OK : RPMRC_FAIL;
+}
+
+static rpmRC selinux_tsm_pre(rpmPlugin plugin, rpmts ts)
+{
+ rpmRC rc = RPMRC_OK;
+
+ /* If SELinux isn't enabled on the system, dont mess with it */
+ if (!is_selinux_enabled()) {
+ rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_NOCONTEXTS));
+ }
+
+ /* If not enabled or a test-transaction, dont bother with labels */
+ if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOCONTEXTS|RPMTRANS_FLAG_TEST))) {
+ rc = sehandle_init(1);
+ }
+
+ return rc;
+}
+
+static rpmRC selinux_tsm_post(rpmPlugin plugin, rpmts ts, int rc)
+{
+ if (sehandle) {
+ sehandle_fini(1);
+ }
+ return RPMRC_OK;
+}
+
+static rpmRC selinux_psm_pre(rpmPlugin plugin, rpmte te)
+{
+ rpmRC rc = RPMRC_OK;
+
+ if (sehandle) {
+ /* reload the labels if policy changed underneath */
+ rc = sehandle_init(0);
+ }
+ return rc;
+}
+
+static rpmRC selinux_scriptlet_fork_post(rpmPlugin plugin,
+ const char *path, int type)
+{
+ rpmRC rc = RPMRC_FAIL;
+ int xx;
+#ifndef HAVE_SETEXECFILECON
+ security_context_t mycon = NULL, fcon = NULL, newcon = NULL;
+ context_t con = NULL;
+
+ if (sehandle == NULL)
+ return RPMRC_OK;
+
+ /* Figure the context to for next exec() */
+ if (getcon(&mycon) < 0)
+ goto exit;
+ if (getfilecon(path, &fcon) < 0)
+ goto exit;
+ if (security_compute_create(mycon, fcon, string_to_security_class("process"), &newcon) < 0)
+ goto exit;
+
+ if (rstreq(mycon, newcon)) {
+ /* No default transition, use rpm_script_t for now. */
+ const char * script_type = "rpm_script_t";
+
+ con = context_new(mycon);
+ if (!con)
+ goto exit;
+ if (context_type_set(con, script_type))
+ goto exit;
+ freecon(newcon);
+ newcon = xstrdup(context_str(con));
+ }
+
+ if ((xx = setexeccon(newcon)) == 0)
+ rc = RPMRC_OK;
+
+ if (rpmIsDebug()) {
+ rpmlog(RPMLOG_DEBUG, "setexeccon: (%s, %s) %s\n",
+ path, newcon, (xx < 0 ? strerror(errno) : ""));
+ }
+
+exit:
+ context_free(con);
+ freecon(newcon);
+ freecon(fcon);
+ freecon(mycon);
+
+#else
+ if (sehandle == NULL)
+ return RPMRC_OK;
+
+ if ((xx = setexecfilecon(path, "rpm_script_t") == 0))
+ rc = RPMRC_OK;
+
+ if (rpmIsDebug()) {
+ rpmlog(RPMLOG_DEBUG, "setexecfilecon: (%s) %s\n",
+ path, (xx < 0 ? strerror(errno) : ""));
+ }
+#endif
+ /* If selinux is not enforcing, we don't care either */
+ if (rc && security_getenforce() < 1)
+ rc = RPMRC_OK;
+
+ return rc;
+}
+
+static rpmRC selinux_fsm_file_prepare(rpmPlugin plugin, rpmfi fi,
+ const char *path, const char *dest,
+ mode_t file_mode, rpmFsmOp op)
+{
+ rpmRC rc = RPMRC_FAIL; /* assume failure */
+ rpmFileAction action = XFO_ACTION(op);
+
+ if (sehandle && !XFA_SKIPPING(action)) {
+ security_context_t scon = NULL;
+ if (selabel_lookup_raw(sehandle, &scon, dest, file_mode) == 0) {
+ int conrc = lsetfilecon(path, scon);
+
+ if (rpmIsDebug()) {
+ rpmlog(RPMLOG_DEBUG, "lsetfilecon: (%s, %s) %s\n",
+ path, scon, (rc < 0 ? strerror(errno) : ""));
+ }
+
+ if (conrc == 0 || (conrc < 0 && errno == EOPNOTSUPP))
+ rc = RPMRC_OK;
+ freecon(scon);
+ } else {
+ /* No context for dest is not our headache */
+ if (errno == ENOENT)
+ rc = RPMRC_OK;
+ }
+ } else {
+ rc = RPMRC_OK;
+ }
+
+ return rc;
+}
+
+struct rpmPluginHooks_s selinux_hooks = {
+ .tsm_pre = selinux_tsm_pre,
+ .tsm_post = selinux_tsm_post,
+ .psm_pre = selinux_psm_pre,
+ .scriptlet_fork_post = selinux_scriptlet_fork_post,
+ .fsm_file_prepare = selinux_fsm_file_prepare,
+};
diff --git a/plugins/sepolicy.c b/plugins/sepolicy.c
deleted file mode 100644
index 86bf1981a..000000000
--- a/plugins/sepolicy.c
+++ /dev/null
@@ -1,655 +0,0 @@
-#include "plugin.h"
-
-#include <errno.h>
-#include <selinux/selinux.h>
-#include <semanage/semanage.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <rpm/rpmpol.h>
-#include <rpm/rpmfileutil.h>
-#include <rpm/rpmmacro.h>
-#include <rpm/rpmbase64.h>
-
-#include "lib/rpmte_internal.h"
-#include "lib/rpmts_internal.h" /* rpmtsSELabelFoo() */
-
-rpmPluginHook PLUGIN_HOOKS = \
- PLUGINHOOK_INIT | \
- PLUGINHOOK_CLEANUP | \
- PLUGINHOOK_OPENTE | \
- PLUGINHOOK_COLL_POST_ADD | \
- PLUGINHOOK_COLL_PRE_REMOVE;
-
-typedef enum sepolAction {
- SEPOL_ACTION_IGNORE,
- SEPOL_ACTION_INSTALL,
- SEPOL_ACTION_REMOVE
-} sepolAction;
-
-typedef struct sepol {
- char *data; /*!< policy data */
- char *name; /*!< policy names */
- ARGV_t types; /*!< policy types */
- uint32_t flags; /*!< policy flags */
- sepolAction action; /*!< install/remove/ignore */
- struct sepol *next; /*!< next in linked list */
-} sepol;
-
-typedef struct sepoltrans {
- int execsemodule; /*!< 0 = use libsemanage to install policy; non-zero = use semodule */
- semanage_handle_t *sh; /*!< handle to libsemanage, only used when execsemodule is zero */
- char *semodulepath; /*!< path to semodule binary */
- ARGV_t semodargs; /*!< argument list to pass to semodule, only used when execsemodule is non-zero */
- ARGV_t filelist; /*!< list of temporary files that have been written to disk during the transaction */
- int changes; /*!< number of changes made during the transaction */
-} sepoltrans;
-
-
-static char * name;
-static rpmts ts;
-
-static sepol * policiesHead;
-static sepol * policiesTail;
-
-
-static sepol *sepolNew(rpmte te);
-static sepol *sepolFree(sepol * pol);
-static int sepolHasType(const sepol * pol, const char *type);
-
-static rpmRC sepolPreparePolicies(sepol * pols, const char *policytype);
-static rpmRC sepolWritePolicy(const sepol * pol, char **path);
-static rpmRC sepolLoadPolicies(const sepol * pols);
-
-static sepoltrans *sepoltransNew(void);
-static sepoltrans *sepoltransFree(sepoltrans * pt);
-
-static rpmRC sepoltransInstall(sepoltrans * pt, const sepol * pol);
-static rpmRC sepoltransRemove(sepoltrans * pt, const sepol * pol);
-static rpmRC sepoltransCommit(sepoltrans * pt);
-
-
-static sepol *sepolNew(rpmte te)
-{
- sepol *head = NULL;
- sepol *ret = NULL;
- sepolAction action;
- Header h;
- struct rpmtd_s policies, names, types, typesidx, flags;
- int i, j;
- int count;
-
- rpmtdReset(&policies);
- rpmtdReset(&names);
- rpmtdReset(&types);
- rpmtdReset(&typesidx);
- rpmtdReset(&flags);
-
- h = rpmteHeader(te);
- if (!h) {
- goto exit;
- }
-
- if (!headerIsEntry(h, RPMTAG_POLICIES)) {
- goto exit;
- }
-
- if (!headerGet(h, RPMTAG_POLICIES, &policies, HEADERGET_MINMEM)) {
- goto exit;
- }
-
- count = rpmtdCount(&policies);
- if (count <= 0) {
- goto exit;
- }
-
- if (!headerGet(h, RPMTAG_POLICYNAMES, &names, HEADERGET_MINMEM)
- || rpmtdCount(&names) != count) {
- goto exit;
- }
-
- if (!headerGet(h, RPMTAG_POLICYFLAGS, &flags, HEADERGET_MINMEM)
- || rpmtdCount(&flags) != count) {
- goto exit;
- }
-
- if (!headerGet(h, RPMTAG_POLICYTYPES, &types, HEADERGET_MINMEM)) {
- goto exit;
- }
-
- if (!headerGet(h, RPMTAG_POLICYTYPESINDEXES, &typesidx, HEADERGET_MINMEM)
- || rpmtdCount(&types) != rpmtdCount(&typesidx)) {
- goto exit;
- }
-
- action = (rpmteType(te) == TR_ADDED) ? SEPOL_ACTION_INSTALL : SEPOL_ACTION_REMOVE;
-
- for (i = 0; i < count; i++) {
- sepol *pol = xcalloc(1, sizeof(*pol));
- pol->next = head;
- head = pol;
-
- pol->data = xstrdup(rpmtdNextString(&policies));
- pol->name = xstrdup(rpmtdNextString(&names));
- pol->flags = *rpmtdNextUint32(&flags);
- pol->action = action;
-
- for (j = 0; j < rpmtdCount(&types); j++) {
- uint32_t index = ((uint32_t *) typesidx.data)[j];
- if (index < 0 || index >= count) {
- goto exit;
- }
- if (index != i) {
- continue;
- }
- argvAdd(&pol->types, rpmtdNextString(&types));
- }
- argvSort(pol->types, NULL);
- }
-
- ret = head;
-
- exit:
- headerFree(h);
-
- rpmtdFreeData(&policies);
- rpmtdFreeData(&names);
- rpmtdFreeData(&types);
- rpmtdFreeData(&typesidx);
- rpmtdFreeData(&flags);
-
- if (!ret) {
- sepolFree(head);
- }
-
- return ret;
-}
-
-static sepol *sepolFree(sepol * pol)
-{
- while (pol) {
- sepol *next = pol->next;
-
- pol->data = _free(pol->data);
- pol->name = _free(pol->name);
- pol->types = argvFree(pol->types);
- pol->next = NULL;
- _free(pol);
-
- pol = next;
- }
-
- return NULL;
-}
-
-int sepolHasType(const sepol * pol, const char *type)
-{
- if (!pol || !type) {
- return 0;
- }
-
- return (argvSearch(pol->types, type, NULL) != NULL) ||
- (argvSearch(pol->types, RPMPOL_TYPE_DEFAULT, NULL) != NULL);
-}
-
-static rpmRC sepolPreparePolicies(sepol * pols, const char *policytype)
-{
- sepol *pol;
- rpmRC rc = RPMRC_OK;
-
- for (pol = pols; pol; pol = pol->next) {
- if (!sepolHasType(pol, policytype)) {
- pol->action = SEPOL_ACTION_IGNORE;
- }
- }
-
- return rc;
-}
-
-static rpmRC sepolWritePolicy(const sepol * pol, char **path)
-{
- char *tmppath = NULL;
- FD_t fd = NULL;
- char *policy = NULL;
- size_t policylen;
- rpmRC rc = RPMRC_FAIL;
-
- if (rpmBase64Decode(pol->data, (void **) &policy, &policylen) != 0) {
- rpmlog(RPMLOG_ERR, _("Failed to decode policy for %s\n"),
- pol->name);
- goto exit;
- }
-
- fd = rpmMkTempFile(NULL, &tmppath);
- if (fd == NULL || Ferror(fd)) {
- rpmlog(RPMLOG_ERR, _("Failed to create temporary file for %s: %s\n"),
- pol->name, strerror(errno));
- goto exit;
- }
-
- if (!Fwrite(policy, sizeof(*policy), policylen, fd)) {
- rpmlog(RPMLOG_ERR, _("Failed to write %s policy to file %s\n"),
- pol->name, tmppath);
- goto exit;
- }
-
- *path = tmppath;
- rc = RPMRC_OK;
-
- exit:
- if (fd)
- Fclose(fd);
- _free(policy);
- if (rc != RPMRC_OK)
- _free(tmppath);
-
- return rc;
-}
-
-static rpmRC sepolLoadPolicies(const sepol * pols)
-{
- const sepol *pol;
- rpmRC rc = RPMRC_FAIL;
- sepoltrans *pt = sepoltransNew();
-
- if (pt == NULL)
- goto exit;
-
- for (pol = pols; pol; pol = pol->next) {
- switch (pol->action) {
- case SEPOL_ACTION_REMOVE:
- rc = sepoltransRemove(pt, pol);
- break;
- case SEPOL_ACTION_INSTALL:
- rc = sepoltransInstall(pt, pol);
- break;
- case SEPOL_ACTION_IGNORE:
- default:
- rc = RPMRC_OK;
- break;
- }
-
- if (rc != RPMRC_OK)
- goto exit;
- }
-
- rc = sepoltransCommit(pt);
-
-exit:
- sepoltransFree(pt);
-
- return rc;
-}
-
-static sepoltrans *sepoltransNew(void)
-{
- sepoltrans *pt = xcalloc(1, sizeof(*pt));
- pt->semodulepath = rpmExpand("%{__semodule}", NULL);
- pt->execsemodule = (!rpmChrootDone() && access(pt->semodulepath, X_OK) == 0);
- pt->changes = 0;
-
- if (pt->execsemodule) {
- argvAdd(&pt->semodargs, "semodule");
- } else {
- pt->sh = semanage_handle_create();
- if (!pt->sh) {
- rpmlog(RPMLOG_ERR, _("Failed to create semanage handle\n"));
- goto err;
- }
- semanage_set_create_store(pt->sh, 1);
- semanage_set_check_contexts(pt->sh, 0);
- if (semanage_connect(pt->sh) < 0) {
- rpmlog(RPMLOG_ERR, _("Failed to connect to policy handler\n"));
- goto err;
- }
- if (semanage_begin_transaction(pt->sh) < 0) {
- rpmlog(RPMLOG_ERR, _("Failed to begin policy transaction: %s\n"),
- errno ? strerror(errno) : "");
- goto err;
- }
- semanage_set_reload(pt->sh, !rpmChrootDone());
- }
-
- return pt;
-
- err:
- if (pt->sh) {
- if (semanage_is_connected(pt->sh)) {
- semanage_disconnect(pt->sh);
- }
- semanage_handle_destroy(pt->sh);
- }
- free(pt);
-
- return NULL;
-}
-
-static sepoltrans *sepoltransFree(sepoltrans * pt)
-{
- ARGV_t file;
-
- if (!pt) {
- return NULL;
- }
-
- for (file = pt->filelist; file && *file; file++) {
- if (unlink(*file) < 0) {
- rpmlog(RPMLOG_WARNING, _("Failed to remove temporary policy file %s: %s\n"),
- *file, strerror(errno));
- }
- }
- argvFree(pt->filelist);
-
- if (pt->execsemodule) {
- argvFree(pt->semodargs);
- } else {
- semanage_disconnect(pt->sh);
- semanage_handle_destroy(pt->sh);
- }
-
- free(pt->semodulepath);
- memset(pt, 0, sizeof(*pt)); /* trash and burn */
-
- free(pt);
- return NULL;
-}
-
-static rpmRC sepoltransInstall(sepoltrans * pt, const sepol * pol)
-{
- rpmRC rc = RPMRC_OK;
- char *path = NULL;
-
- rc = sepolWritePolicy(pol, &path);
- if (rc != RPMRC_OK) {
- return rc;
- }
- argvAdd(&pt->filelist, path);
-
- if (pt->execsemodule) {
- const char *flag = (pol->flags & RPMPOL_FLAG_BASE) ? "-b" : "-i";
- if (argvAdd(&pt->semodargs, flag) < 0 || argvAdd(&pt->semodargs, path) < 0) {
- rc = RPMRC_FAIL;
- }
- } else {
- if (pol->flags & RPMPOL_FLAG_BASE) {
- if (semanage_module_install_base_file(pt->sh, path) < 0) {
- rc = RPMRC_FAIL;
- }
- } else {
- if (semanage_module_install_file(pt->sh, path) < 0) {
- rc = RPMRC_FAIL;
- }
- }
- }
-
- if (rc != RPMRC_OK) {
- rpmlog(RPMLOG_ERR, _("Failed to install policy module: %s (%s)\n"),
- pol->name, path);
- } else {
- pt->changes++;
- }
-
- _free(path);
-
- return rc;
-}
-
-static rpmRC sepoltransRemove(sepoltrans * pt, const sepol * pol)
-{
- rpmRC rc = RPMRC_OK;
-
- if (pol->flags & RPMPOL_FLAG_BASE) {
- return RPMRC_FAIL;
- }
-
- if (pt->execsemodule) {
- if (argvAdd(&pt->semodargs, "-r") < 0 || argvAdd(&pt->semodargs, pol->name) < 0) {
- rc = RPMRC_FAIL;
- }
- } else {
- if (semanage_module_remove(pt->sh, (char *) pol->name) < 0) {
- rc = RPMRC_FAIL;
- }
- }
-
- if (rc != RPMRC_OK) {
- rpmlog(RPMLOG_ERR, _("Failed to remove policy module: %s\n"),
- pol->name);
- } else {
- pt->changes++;
- }
-
- return rc;
-}
-
-static rpmRC sepoltransCommit(sepoltrans * pt)
-{
- rpmRC rc = RPMRC_OK;
-
- if (pt->changes == 0) {
- return rc;
- }
-
- if (pt->execsemodule) {
- int status;
- pid_t pid = fork();
- int fd;
-
- switch (pid) {
- case -1:
- rpmlog(RPMLOG_ERR, _("Failed to fork process: %s\n"),
- strerror(errno));
- rc = RPMRC_FAIL;
- break;
- case 0:
- fd = open("/dev/null", O_RDWR);
- dup2(fd, STDIN_FILENO);
- dup2(fd, STDOUT_FILENO);
- dup2(fd, STDERR_FILENO);
- execv(pt->semodulepath, pt->semodargs);
- rpmlog(RPMLOG_ERR, _("Failed to execute %s: %s\n"),
- pt->semodulepath, strerror(errno));
- exit(1);
- default:
- waitpid(pid, &status, 0);
- if (!WIFEXITED(status)) {
- rpmlog(RPMLOG_ERR, _("%s terminated abnormally\n"),
- pt->semodulepath);
- rc = RPMRC_FAIL;
- } else if (WEXITSTATUS(status)) {
- rpmlog(RPMLOG_ERR, _("%s failed with exit code %i\n"),
- pt->semodulepath, WEXITSTATUS(status));
- rc = RPMRC_FAIL;
- }
- }
- } else {
- if (semanage_commit(pt->sh) < 0) {
- rpmlog(RPMLOG_ERR, _("Failed to commit policy changes\n"));
- rc = RPMRC_FAIL;
- }
- }
-
- return rc;
-}
-
-static rpmRC sepolRelabelFiles(void)
-{
- rpmRC rc = RPMRC_OK;
- pid_t pid;
- int fd;
- int status;
- char *restoreconPath = rpmExpand("%{__restorecon}", NULL);
-
- if (!restoreconPath) {
- rpmlog(RPMLOG_ERR, _("Failed to expand restorecon path"));
- return RPMRC_FAIL;
- }
-
- /* execute restorecon -R / */
- pid = fork();
- switch (pid) {
- case -1:
- rpmlog(RPMLOG_ERR, _("Failed to fork process: %s\n"),
- strerror(errno));
- rc = RPMRC_FAIL;
- break;
- case 0:
- fd = open("/dev/null", O_RDWR);
- dup2(fd, STDIN_FILENO);
- dup2(fd, STDOUT_FILENO);
- dup2(fd, STDERR_FILENO);
- execl(restoreconPath, "restorecon", "-R", "/", NULL);
- rpmlog(RPMLOG_ERR, _("Failed to execute %s: %s\n"), restoreconPath,
- strerror(errno));
- exit(1);
- default:
- waitpid(pid, &status, 0);
- if (!WIFEXITED(status)) {
- rpmlog(RPMLOG_ERR, _("%s terminated abnormally\n"),
- restoreconPath);
- rc = RPMRC_FAIL;
- } else if (WEXITSTATUS(status)) {
- rpmlog(RPMLOG_ERR, _("%s failed with exit code %i\n"),
- restoreconPath, WEXITSTATUS(status));
- rc = RPMRC_FAIL;
- }
- }
-
- _free(restoreconPath);
-
- return rc;
-}
-
-static rpmRC sepolGo(void)
-{
- semanage_handle_t *sh;
- int existingPolicy;
- char *policytype = NULL;
- rpmRC rc = RPMRC_FAIL;
-
- static int performed = 0;
- if (performed) {
- return RPMRC_OK;
- }
- performed = 1;
-
- if (rpmChrootIn()) {
- goto exit;
- }
-
- if (selinux_getpolicytype(&policytype) < 0) {
- goto exit;
- }
-
- sepolPreparePolicies(policiesHead, policytype);
-
- /* determine if this is the first time installing policy */
- sh = semanage_handle_create();
- existingPolicy = (semanage_is_managed(sh) == 1);
- semanage_handle_destroy(sh);
-
- /* now load the policies */
- rc = sepolLoadPolicies(policiesHead);
-
- /* re-init selinux and re-read the files contexts, since things may have changed */
- selinux_reset_config();
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS)) {
- if (rpmtsSELabelInit(ts, 0) == RPMRC_OK) {
- /* if this was the first time installing policy, every package before
- * policy was installed will be mislabeled (e.g. semodule). So, relabel
- * the entire filesystem if this is the case */
- if (!existingPolicy) {
- if (sepolRelabelFiles() != RPMRC_OK) {
- rpmlog(RPMLOG_WARNING, _("Failed to relabel filesystem. Files may be mislabeled\n"));
- }
- }
- } else {
- rpmlog(RPMLOG_WARNING, _("Failed to reload file contexts. Files may be mislabeled\n"));
- }
- }
-
- exit:
- if (rpmChrootOut()) {
- rc = RPMRC_FAIL;
- }
-
- _free(policytype);
-
- return rc;
-}
-
-static rpmRC sepolAddTE(rpmte te)
-{
- sepol *pol;
- sepol *polTail;
-
- if (!rpmteHasCollection(te, name)) {
- return RPMRC_OK;
- }
-
- pol = sepolNew(te);
- if (!pol) {
- /* something's wrong with the policy information, either missing or
- * corrupt. abort */
- rpmlog(RPMLOG_ERR, _("Failed to extract policy from %s\n"),
- rpmteNEVRA(te));
- return RPMRC_FAIL;
- }
-
- /* find the tail of pol */
- polTail = pol;
- while (polTail->next) {
- polTail = polTail->next;
- }
-
- /* add the new policy to the list */
- if (!policiesHead) {
- policiesHead = pol;
- policiesTail = polTail;
- } else {
- if (rpmteType(te) == TR_ADDED) {
- /* add to the end of the list */
- policiesTail->next = pol;
- policiesTail = polTail;
- } else {
- /* add to the beginning of the list */
- polTail->next = policiesHead;
- policiesHead = pol;
- }
- }
-
- return RPMRC_OK;
-}
-
-
-
-rpmRC PLUGINHOOK_INIT_FUNC(rpmts _ts, const char *_name, const char *_opts)
-{
- ts = _ts;
- name = strdup(_name);
- policiesHead = policiesTail = NULL;
- return RPMRC_OK;
-}
-
-rpmRC PLUGINHOOK_CLEANUP_FUNC(void)
-{
- _free(name);
- ts = NULL;
- policiesHead = policiesTail = sepolFree(policiesHead);
- return RPMRC_OK;
-}
-
-rpmRC PLUGINHOOK_OPENTE_FUNC(rpmte te)
-{
- return sepolAddTE(te);
-}
-
-rpmRC PLUGINHOOK_COLL_POST_ADD_FUNC(void)
-{
- return sepolGo();
-}
-
-rpmRC PLUGINHOOK_COLL_PRE_REMOVE_FUNC(void)
-{
- return sepolGo();
-}
diff --git a/plugins/syslog.c b/plugins/syslog.c
new file mode 100644
index 000000000..5f22f981c
--- /dev/null
+++ b/plugins/syslog.c
@@ -0,0 +1,116 @@
+#include "system.h"
+
+#include <syslog.h>
+
+#include <rpm/rpmts.h>
+#include "lib/rpmplugin.h"
+
+struct logstat {
+ int logging;
+ unsigned int scriptfail;
+ unsigned int pkgfail;
+};
+
+static rpmRC syslog_init(rpmPlugin plugin, rpmts ts)
+{
+ /* XXX make this configurable? */
+ const char * log_ident = "[RPM]";
+ struct logstat * state = rcalloc(1, sizeof(*state));
+
+ rpmPluginSetData(plugin, state);
+ openlog(log_ident, (LOG_PID), LOG_USER);
+ return RPMRC_OK;
+}
+
+static void syslog_cleanup(rpmPlugin plugin)
+{
+ struct logstat * state = rpmPluginGetData(plugin);
+ free(state);
+ closelog();
+}
+
+static rpmRC syslog_tsm_pre(rpmPlugin plugin, rpmts ts)
+{
+ struct logstat * state = rpmPluginGetData(plugin);
+
+ /* Reset counters */
+ state->scriptfail = 0;
+ state->pkgfail = 0;
+
+ /* Assume we are logging but... */
+ state->logging = 1;
+
+ /* ...don't log test transactions */
+ if (rpmtsFlags(ts) & (RPMTRANS_FLAG_TEST|RPMTRANS_FLAG_BUILD_PROBS))
+ state->logging = 0;
+
+ /* ...don't log chroot transactions */
+ if (!rstreq(rpmtsRootDir(ts), "/"))
+ state->logging = 0;
+
+ if (state->logging) {
+ syslog(LOG_NOTICE, "Transaction ID %x started", rpmtsGetTid(ts));
+ }
+
+ return RPMRC_OK;
+}
+
+static rpmRC syslog_tsm_post(rpmPlugin plugin, rpmts ts, int res)
+{
+ struct logstat * state = rpmPluginGetData(plugin);
+
+ if (state->logging) {
+ if (state->pkgfail || state->scriptfail) {
+ syslog(LOG_WARNING, "%u elements failed, %u scripts failed",
+ state->pkgfail, state->scriptfail);
+ }
+ syslog(LOG_NOTICE, "Transaction ID %x finished: %d",
+ rpmtsGetTid(ts), res);
+ }
+
+ state->logging = 0;
+ return RPMRC_OK;
+}
+
+static rpmRC syslog_psm_post(rpmPlugin plugin, rpmte te, int res)
+{
+ struct logstat * state = rpmPluginGetData(plugin);
+
+ if (state->logging) {
+ int lvl = LOG_NOTICE;
+ const char *op = (rpmteType(te) == TR_ADDED) ? "install" : "erase";
+ const char *outcome = "success";
+ /* XXX: Permit configurable header queryformat? */
+ const char *pkg = rpmteNEVRA(te);
+
+ if (res != RPMRC_OK) {
+ lvl = LOG_WARNING;
+ outcome = "failure";
+ state->pkgfail++;
+ }
+
+ syslog(lvl, "%s %s: %s", op, pkg, outcome);
+ }
+ return RPMRC_OK;
+}
+
+static rpmRC syslog_scriptlet_post(rpmPlugin plugin,
+ const char *s_name, int type, int res)
+{
+ struct logstat * state = rpmPluginGetData(plugin);
+
+ if (state->logging && res) {
+ syslog(LOG_WARNING, "scriptlet %s failure: %d\n", s_name, res);
+ state->scriptfail++;
+ }
+ return RPMRC_OK;
+}
+
+struct rpmPluginHooks_s syslog_hooks = {
+ .init = syslog_init,
+ .cleanup = syslog_cleanup,
+ .tsm_pre = syslog_tsm_pre,
+ .tsm_post = syslog_tsm_post,
+ .psm_post = syslog_psm_post,
+ .scriptlet_post = syslog_scriptlet_post,
+};
diff --git a/plugins/systemd_inhibit.c b/plugins/systemd_inhibit.c
new file mode 100644
index 000000000..e2cbcffbb
--- /dev/null
+++ b/plugins/systemd_inhibit.c
@@ -0,0 +1,111 @@
+#include "system.h"
+
+#include <dbus/dbus.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <rpm/rpmlog.h>
+#include <rpm/rpmts.h>
+#include "lib/rpmplugin.h"
+
+static int lock_fd = -1;
+
+static int inhibit(void)
+{
+ DBusError err;
+ DBusConnection *bus = NULL;
+ DBusMessage *msg = NULL;
+ DBusMessage *reply = NULL;
+ int fd = -1;
+
+ dbus_error_init(&err);
+ bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
+
+ if (bus) {
+ msg = dbus_message_new_method_call("org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "Inhibit");
+ }
+
+ if (msg) {
+ const char *what = "idle:sleep:shutdown";
+ const char *mode = "block";
+ const char *who = "RPM";
+ const char *reason = "Transaction running";
+
+ dbus_message_append_args(msg,
+ DBUS_TYPE_STRING, &what,
+ DBUS_TYPE_STRING, &who,
+ DBUS_TYPE_STRING, &reason,
+ DBUS_TYPE_STRING, &mode,
+ DBUS_TYPE_INVALID);
+
+ reply = dbus_connection_send_with_reply_and_block(bus, msg, -1, &err);
+ dbus_message_unref(msg);
+ }
+
+ if (reply) {
+ dbus_message_get_args(reply, &err,
+ DBUS_TYPE_UNIX_FD, &fd,
+ DBUS_TYPE_INVALID);
+ dbus_message_unref(reply);
+ }
+
+ if (dbus_error_is_set(&err)) {
+ rpmlog(RPMLOG_WARNING,
+ "Unable to get systemd shutdown inhibition lock: %s\n",
+ err.message);
+ dbus_error_free(&err);
+ }
+
+ if (bus) {
+ dbus_connection_close(bus);
+ dbus_connection_unref(bus);
+ }
+
+ return fd;
+}
+
+static rpmRC systemd_inhibit_init(rpmPlugin plugin, rpmts ts)
+{
+ struct stat st;
+
+ if (lstat("/run/systemd/system/", &st) == 0) {
+ if (S_ISDIR(st.st_mode)) {
+ return RPMRC_OK;
+ }
+ }
+
+ return RPMRC_NOTFOUND;
+}
+
+static rpmRC systemd_inhibit_tsm_pre(rpmPlugin plugin, rpmts ts)
+{
+ if (rpmtsFlags(ts) & (RPMTRANS_FLAG_TEST|RPMTRANS_FLAG_BUILD_PROBS))
+ return RPMRC_OK;
+
+ lock_fd = inhibit();
+
+ if (lock_fd >= 0) {
+ rpmlog(RPMLOG_DEBUG, "System shutdown blocked (fd %d)\n", lock_fd);
+ }
+
+ return RPMRC_OK;
+}
+
+static rpmRC systemd_inhibit_tsm_post(rpmPlugin plugin, rpmts ts, int res)
+{
+ if (lock_fd >= 0) {
+ close(lock_fd);
+ lock_fd = -1;
+ rpmlog(RPMLOG_DEBUG, "System shutdown unblocked\n");
+ }
+ return RPMRC_OK;
+}
+
+struct rpmPluginHooks_s systemd_inhibit_hooks = {
+ .init = systemd_inhibit_init,
+ .tsm_pre = systemd_inhibit_tsm_pre,
+ .tsm_post = systemd_inhibit_tsm_post,
+};
diff --git a/po/LINGUAS b/po/LINGUAS
index 819b3f6ee..9bd9900c4 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1 +1 @@
-br ca cs da de el es eo fi fr is it ja ko ms nb nl pl pt pt_BR ru sk sl sr sr@latin sv te tr uk zh_CN zh_TW
+ar br ca cmn cs da de el eo es fi fr id is it ja ko ms nb nl pl pt pt_BR ru sk sl sr sr@latin sv te tr uk vi zh_CN zh_TW
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4eee26487..b6f982622 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,13 +1,11 @@
# List of files which contain translatable strings.
-
-# Package source files
-
cliutils.c
+rpm2archive.c
rpm2cpio.c
-rpmqv.c
rpmbuild.c
rpmdb.c
rpmkeys.c
+rpmqv.c
rpmsign.c
rpmspec.c
build/build.c
@@ -29,11 +27,15 @@ build/policies.c
build/reqprov.c
build/rpmfc.c
build/spec.c
+lib/backend/db3.c
+lib/backend/dbi.c
lib/cpio.c
lib/depends.c
lib/formats.c
+lib/fprint.c
lib/fsm.c
-lib/legacy.c
+lib/header.c
+lib/headerfmt.c
lib/manifest.c
lib/order.c
lib/package.c
@@ -42,9 +44,11 @@ lib/poptI.c
lib/poptQV.c
lib/psm.c
lib/query.c
+lib/relocation.c
lib/rpmal.c
lib/rpmchecksig.c
lib/rpmchroot.c
+lib/rpmdb.c
lib/rpmds.c
lib/rpmfi.c
lib/rpmgi.c
@@ -60,34 +64,33 @@ lib/rpmtd.c
lib/rpmte.c
lib/rpmts.c
lib/rpmvercmp.c
+lib/rpmvs.c
lib/signature.c
-lib/transaction.c
-lib/verify.c
-lib/fprint.c
-lib/header.c
-lib/headerfmt.c
-lib/merge.c
-lib/rpmdb.c
lib/tagexts.c
lib/tagname.c
-lib/backend/db3.c
-lib/backend/dbconfig.c
-plugins/exec.c
-plugins/sepolicy.c
+lib/transaction.c
+lib/verify.c
+plugins/ima.c
+plugins/prioreset.c
+plugins/selinux.c
+plugins/syslog.c
+plugins/systemd_inhibit.c
python/rpmts-py.c
rpmio/argv.c
rpmio/digest.c
+rpmio/digest_nss.c
rpmio/macro.c
rpmio/rpmfileutil.c
-rpmio/rpmlua.c
rpmio/rpmio.c
rpmio/rpmlog.c
+rpmio/rpmlua.c
rpmio/rpmmalloc.c
rpmio/rpmpgp.c
-rpmio/rpmstring.c
rpmio/rpmsq.c
+rpmio/rpmstring.c
rpmio/rpmsw.c
rpmio/url.c
sign/rpmgensig.c
+sign/rpmsignfiles.c
tools/rpmdeps.c
tools/rpmgraph.c
diff --git a/po/bn_IN.po b/po/ar.po
index e84e3ec83..15b040a39 100644
--- a/po/bn_IN.po
+++ b/po/ar.po
@@ -1,530 +1,594 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
+# Mosaab Alzoubi <moceap@hotmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
-"Report-Msgid-Bugs-To: http://rpm.org/\n"
-"POT-Creation-Date: 2012-11-05 10:07+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Bengali (India) (http://www.transifex.com/projects/p/rpm/language/bn_IN/)\n"
+"Language-Team: Arabic (http://www.transifex.com/rpm-team/rpm/language/ar/)\n"
+"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: bn_IN\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: cliutils.c:21 lib/poptI.c:29
#, c-format
msgid "%s: %s\n"
-msgstr ""
+msgstr "%s: %s\n"
-#: cliutils.c:27 lib/poptALL.c:55
+#: cliutils.c:27 lib/poptALL.c:56
#, c-format
msgid "RPM version %s\n"
-msgstr ""
+msgstr "إصدارة RPM %s\n"
#: cliutils.c:32
#, c-format
msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
-msgstr ""
+msgstr "الحقوق محÙوظة 1998-2002 - شركة ريدهات.\n"
#: cliutils.c:33
#, c-format
msgid ""
"This program may be freely redistributed under the terms of the GNU GPL\n"
msgstr ""
+"ÙŠÙمكن إعادة نشر هذا البرنامج بحريّة تحت بنود رخصة النّشر العمومية من غنّو\n"
#: cliutils.c:53
#, c-format
msgid "creating a pipe for --pipe failed: %m\n"
-msgstr ""
+msgstr "Ùشل إنشاء عبّارة بالمÙعطى --pipe: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
-msgstr ""
+msgstr "Ùشل التّنÙيذ\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
-msgstr ""
+msgstr "لا تدل المÙدخلات على حزمة RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
-msgstr ""
+msgstr "خطأ أثناء قراءة ترويسة الحزمة\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:125
-msgid "unexpected query flags"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:161
+#: rpmbuild.c:167 rpmbuild.c:208
msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmqv.c:174
-msgid ""
-"--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
msgstr ""
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
msgstr ""
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:216
+msgid "remove build tree when done"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:220
+msgid "debug file state machine"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
msgstr ""
-#: rpmqv.c:256
-msgid "no packages given for erase"
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmqv.c:314
-msgid "no arguments given for verify"
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmbuild.c:99
+#: rpmbuild.c:234
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:239
+msgid "remove sources when done"
+msgstr "أزÙÙ„ المصادر عند الانتهاء"
+
+#: rpmbuild.c:241
+msgid "remove specfile when done"
+msgstr "أزÙÙ„ مل٠المÙحدّد عند الانتهاء"
+
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:245
+msgid "override target platform"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr ""
+
+#: rpmbuild.c:300
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:363
+#, c-format
+msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:401
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
+#: rpmbuild.c:479
+#, c-format
+msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:151
+#: rpmbuild.c:556
#, c-format
-msgid "verify %files section from <tarball>"
+msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
+#: rpmbuild.c:564
+#, c-format
+msgid "Building for target %s\n"
msgstr ""
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
msgstr ""
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
+#: rpmdb.c:21
+msgid "initialize database"
+msgstr "تهيئة قاعدة البيانات"
+
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
+#: rpmdb.c:26
+msgid "verify database files"
+msgstr "تحقّق من ملÙات قاعدة البيانات"
+
+#: rpmdb.c:28
+msgid "export database to stdout header list"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
+#: rpmdb.c:31
+msgid "import database from stdin header list"
msgstr ""
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmdb.c:38
+msgid "Database options:"
+msgstr "خيارات قاعدة البيانات:"
+
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
+msgstr "تحقّق من توقيعات الحزمة"
+
+#: rpmkeys.c:22
+msgid "import an armored public key"
msgstr ""
-#: rpmbuild.c:173
-msgid "remove build tree when done"
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
+msgstr "أظهر قائمة المÙاتيح من حلقة Ù…Ùاتيح RPM"
+
+#: rpmkeys.c:36
+msgid "Keyring options:"
+msgstr "خيارات حلقة المÙاتيح:"
+
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
msgstr ""
-#: rpmbuild.c:177
-msgid "debug file state machine"
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
msgstr ""
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
msgstr ""
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
msgstr ""
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
msgstr ""
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
msgstr ""
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
+#: rpmqv.c:126
+msgid "unexpected query flags"
msgstr ""
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
+#: rpmqv.c:129
+msgid "unexpected query format"
msgstr ""
-#: rpmbuild.c:194
-msgid "remove sources when done"
+#: rpmqv.c:132
+msgid "unexpected query source"
msgstr ""
-#: rpmbuild.c:196
-msgid "remove specfile when done"
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
msgstr ""
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
msgstr ""
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
msgstr ""
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
msgstr ""
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
msgstr ""
-#: rpmdb.c:22
-msgid "initialize database"
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
msgstr ""
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
msgstr ""
-#: rpmdb.c:27
-msgid "verify database files"
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
msgstr ""
-#: rpmdb.c:33
-msgid "Database options:"
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:26
-msgid "import an armored public key"
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:40
-msgid "Keyring options:"
+#: rpmqv.c:258
+msgid "no packages given for erase"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
+#: rpmqv.c:292
+msgid "no packages given for install"
msgstr ""
-#: rpmsign.c:25
-msgid "sign package(s)"
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
msgstr ""
-#: rpmsign.c:27
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr ""
+
+#: rpmsign.c:30
+msgid "sign package(s)"
+msgstr "وقّع الحزم"
+
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
-msgstr ""
+msgstr "احذ٠توقيعات الحÙزم"
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "خيارات التّوقيع:"
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:189
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
-msgstr ""
+msgstr "خيارات المÙحدّد:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -533,473 +597,549 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
-msgstr ""
+msgstr "يجري تنÙيذ(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
-msgstr ""
+msgstr "Ùشل تنÙيذ %s (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
+msgstr "نهاية غير سليمة ÙÙŠ %s (%s)\n"
+
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
+"\n"
+"\n"
+"أخطاء بناء الحزمة:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:327 build/files.c:496 build/files.c:710
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:337 build/files.c:632 build/files.c:720 build/files.c:779
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:362 build/files.c:651
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:465
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:511
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:547
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:556
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:568
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:672
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:679
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:794
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:804
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:853
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:974
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1002
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1124
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1132
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
#: build/files.c:1346
#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
+#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1347
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1538
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1544
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1548
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1557
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1602
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1626
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1639
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1640 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1676
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1683
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
+msgstr "السّطر: %s\n"
+
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
msgstr ""
-#: build/files.c:1690
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1712
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1866
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1883
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2011
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2036 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
+msgid "Bad file: %s: %s\n"
msgstr ""
-#: build/files.c:2070
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2083
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2114
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2127
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2133
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
-msgstr ""
+msgstr "%s: السّطر: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:434
#, c-format
-msgid "Could not open %s: %s\n"
+msgid "Failed to read %jd bytes in file %s: %s\n"
msgstr ""
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:468
+#: build/pack.c:453
#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:479
+#: build/pack.c:520
#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
+msgid "Could not open %s: %s\n"
+msgstr "تعذّر Ùتح %s: %s\n"
-#: build/pack.c:489
+#: build/pack.c:527
#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
+msgid "Unable to write package: %s\n"
+msgstr "تعذّرت كتابة الحزمة: %s\n"
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
-msgstr ""
+msgstr "تمت كتابة: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
-msgstr ""
+msgstr "يجري تنÙيذ \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Package does not exist: %s\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseDescription.c:74
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Second description\n"
-msgstr ""
-
-#: build/parseFiles.c:33
-#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1007,341 +1147,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
-msgstr ""
+msgstr "يجري تنزيل %s إلى %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
-msgstr ""
+msgstr "تعذّر تنزيل %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
-msgstr ""
+msgstr "نوع الرّمز غير معروÙ: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
-msgstr ""
+msgstr "مصدر خاطئ: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
-msgstr ""
+msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
+msgstr "السّطر %d: %s\n"
+
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1412,442 +1621,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
-msgstr ""
+msgstr "تعذّر تنÙيذ %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
-msgstr ""
+msgstr "يجري إبجاد %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
+msgstr "تعذّر إيجاد %s:\n"
+
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
msgstr ""
-#: build/spec.c:404
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "Ù…Ùشتركة"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:348
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:349
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
+msgstr "(ليس رقمًا)"
+
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:125
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(نوع غير سليم)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
-msgstr ""
+msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
-msgstr ""
+msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
-msgstr ""
+msgstr "عادية"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
-msgstr ""
+msgstr "Ù…Ùستبدلة"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
-msgstr ""
+msgstr "غير مثبّتة"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
-msgstr ""
+msgstr "لون خاطئ"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
-msgstr ""
+msgstr "Ù…Ùقودة"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
+msgstr "(غير معروÙØ©)"
+
+#: lib/fsm.c:745
+#, c-format
+msgid "%s saved as %s\n"
+msgstr "%s Ø­ÙÙت كـ %s\n"
+
+#: lib/fsm.c:798
+#, c-format
+msgid "%s created as %s\n"
+msgstr "%s Ø£Ùنشئت كـ %s\n"
+
+#: lib/fsm.c:1082
+#, c-format
+msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
+#: lib/fsm.c:1083
+msgid "directory"
+msgstr "دليل"
+
+#: lib/fsm.c:1083
+msgid "file"
+msgstr "ملÙ"
+
+#: lib/header.c:285
+#, c-format
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/fsm.c:689
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "user %s does not exist - using root\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/fsm.c:696
+#: lib/header.c:1805
#, c-format
-msgid "group %s does not exist - using root\n"
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/fsm.c:1518
+#: lib/header.c:1824
#, c-format
-msgid "%s saved as %s\n"
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/header.c:1833
#, c-format
-msgid "%s created as %s\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/header.c:1841
#, c-format
-msgid "%s %s: remove failed: %s\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/fsm.c:1846
-msgid "directory"
+#: lib/header.c:1876
+#, c-format
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/fsm.c:1846
-msgid "file"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:1885
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:149
+#: lib/header.c:1890
#, c-format
-msgid "skipping %s with unverifiable signature\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1900
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1909
+#, c-format
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1949
+#, c-format
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:296
-#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/headerfmt.c:362
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/headerfmt.c:384
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
-#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:427
+#: lib/headerfmt.c:413
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
msgstr ""
-#: lib/package.c:436
-#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/headerfmt.c:455
+msgid "unexpected }"
msgstr ""
-#: lib/package.c:452
-#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
-#, c-format
-msgid "%s: No signature available\n"
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
msgstr ""
-#: lib/package.c:629 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:157
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:158 lib/poptALL.c:161
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:160
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:163
+#: lib/poptALL.c:194
+msgid "undefine MACRO"
+msgstr ""
+
+#: lib/poptALL.c:195
+msgid "MACRO"
+msgstr ""
+
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:166 lib/poptALL.c:180
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:167 lib/poptALL.c:181
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:172
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:177
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:178
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:183
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:186
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:190
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:192
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:198
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:210
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:277
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1868,527 +2196,579 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
-msgid ""
-"install all files, even configurations which might otherwise be skipped"
+#: lib/poptI.c:118
+msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
-"remove all packages which match <package> (normally an error is generated if"
-" <package> specified multiple packages)"
+"remove all packages which match <package> (normally an error is generated if "
+"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
-msgstr ""
+msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
-msgstr ""
+msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
-msgstr ""
+msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr ""
+msgstr "ثبّت الحزم"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
-msgstr ""
+msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
-msgstr ""
+msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:171
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:173
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:175
+#: lib/poptQV.c:197
+msgid "list all license files"
+msgstr ""
+
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:179
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:184
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:191
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:209
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:224 lib/poptQV.c:227
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:230
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:235
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:237 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:240 lib/poptQV.c:243
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:156
+#: lib/query.c:161
msgid "normal "
-msgstr ""
+msgstr "عادية"
-#: lib/query.c:159
+#: lib/query.c:164
msgid "replaced "
-msgstr ""
+msgstr "Ù…Ùستبدلة"
-#: lib/query.c:162
+#: lib/query.c:167
msgid "not installed "
-msgstr ""
+msgstr "غير مثبّتة"
-#: lib/query.c:165
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:168
+#: lib/query.c:173
msgid "wrong color "
-msgstr ""
+msgstr "لون خاطئ"
-#: lib/query.c:171
+#: lib/query.c:176
msgid "(no state) "
-msgstr ""
+msgstr "(بدون حالة)"
-#: lib/query.c:174
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
-msgstr ""
+msgstr "(غير معرو٠%3d) "
-#: lib/query.c:194
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:225
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:314
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:321
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:332 lib/query.c:351 lib/query.c:367
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:342 lib/query.c:357 lib/query.c:372
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:380
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:388
+#: lib/query.c:394
#, c-format
-msgid "no package provides %s\n"
+msgid "no package recommends %s\n"
msgstr ""
-#: lib/query.c:420
+#: lib/query.c:401
#, c-format
-msgid "file %s: %s\n"
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
msgstr ""
#: lib/query.c:423
#, c-format
+msgid "no package provides %s\n"
+msgstr ""
+
+#: lib/query.c:455
+#, c-format
+msgid "file %s: %s\n"
+msgstr "المل٠%s: %s\n"
+
+#: lib/query.c:458
+#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:434
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:441
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:454 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:488
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ""
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr ""
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "غير مواÙÙ‚"
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ""
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "مواÙÙ‚"
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
-msgstr ""
+msgstr "%s: Ùشل Ùتح: %s\n"
#: lib/rpmchroot.c:43
#, c-format
@@ -2410,215 +2790,444 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
-msgid "NO "
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
msgstr ""
-#: lib/rpmds.c:489
-msgid "YES"
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
+msgid "NO "
+msgstr "لا"
+
+#: lib/rpmds.c:744
+msgid "YES"
+msgstr "نعم"
+
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " Ùشل - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
-msgstr ""
+msgstr "يجري التّحضير..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
-msgstr ""
+msgstr "Ùشل ÙÙŠ الاعتماديات:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
-msgstr ""
+msgstr "تعذّر Ùتح %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
-msgstr ""
+msgstr "يجري تثبيت %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
-msgstr ""
+msgstr "مختلÙØ©"
#: lib/rpmprob.c:114
#, c-format
@@ -2668,817 +3277,654 @@ msgstr ""
#: lib/rpmprob.c:159
#, c-format
msgid "%s is needed by %s%s"
-msgstr ""
+msgstr "%s is مطلوبة بواسطة %s%s"
#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
msgid "(installed) "
-msgstr ""
+msgstr "(مثبّتة) "
#: lib/rpmprob.c:163
#, c-format
msgid "%s conflicts with %s%s"
-msgstr ""
+msgstr "%s تتعارض مع %s%s"
#: lib/rpmprob.c:167
#, c-format
msgid "%s is obsoleted by %s%s"
-msgstr ""
+msgstr "%s عÙيّنت كمنتهية بواسطة %s%s"
#: lib/rpmprob.c:172
#, c-format
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:494
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:511 lib/rpmrc.c:543
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:522
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:535
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:602
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
-msgstr ""
+msgstr "خيار خاطئ '%s' at %s:%d\n"
-#: lib/rpmrc.c:926
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1348
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
-msgstr ""
+msgstr "نظام غير معروÙ: %s\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
-msgstr ""
+msgstr "اتّصل رجاءً %s\n"
-#: lib/rpmrc.c:1590
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
-msgstr ""
+msgstr "صيغة غير معروÙØ©"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
-msgstr ""
+msgstr "ثبّت"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
-msgstr ""
+msgstr "أزÙÙ„"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:192
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:210
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:218
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:278
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1085
+#: lib/rpmts.c:1142
msgid "transaction"
-msgstr ""
-
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
+msgstr "Ù…Ùبادلة"
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr ""
-
-#: lib/signature.c:219
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr ""
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:261
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/transaction.c:1409
-msgid "skipped"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/transaction.c:1409
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr ""
-
-#: lib/verify.c:422
+#: lib/rpmvs.c:268
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s%s"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/headerfmt.c:375
-msgid "empty tag format"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "الترويسة"
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr ""
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "تعذّر تحميل رأس التّوقيع.\n"
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr ""
+#: lib/transaction.c:1397
+msgid "skipped"
+msgstr "Ù…Ùستثناة"
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:263
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: lib/verify.c:284
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr ""
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:2349
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "Ù…Ùقود %c %s"
-#: lib/rpmdb.c:2358
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2448
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:551
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:557
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:562
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:566
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:607
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:637
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/macro.c:1182
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/macro.c:1197
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/macro.c:1578
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: plugins/sepolicy.c:218
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+msgid "File %s: %s\n"
+msgstr "المل٠%s: %s\n"
-#: plugins/sepolicy.c:231
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "Failed to write %s policy to file %s\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(بدون أخطاء)"
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "خطأ Ùادح: "
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "خطأ: "
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: rpmio/macro.c:185
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/macro.c:323
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr ""
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr "(لا شيء)"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr ""
-
-#: rpmio/macro.c:743
-#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:208
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:221
#, c-format
-msgid "File %s: %s\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:270
#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr ""
+msgid "Could not exec %s: %s\n"
+msgstr "تعذّر تنÙيذ %s: %s\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: sign/rpmgensig.c:302
#, c-format
-msgid "invalid syntax in lua script: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: sign/rpmgensig.c:312
#, c-format
-msgid "lua script failed: %s\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr ""
-
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/br.po b/po/br.po
index 02f773152..16c7daad5 100644
--- a/po/br.po
+++ b/po/br.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Thierry Vignaud <thierry.vignaud@gmail.com>, 2012.
+# Thierry Vignaud <thierry.vignaud@gmail.com>, 2012,2015,2017
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-12-19 10:54+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Breton (http://www.transifex.com/rpm-team/rpm/language/br/)\n"
"Language: br\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -44,487 +44,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "sac'het eo bet seveniñ\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
-msgstr ""
+msgstr "an arguzenn n'eo ket ur pakad RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr ""
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<restr_spec>"
+
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:125
-msgid "unexpected query flags"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<pakad tarzh>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
+msgstr "<tarball>"
+
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
msgstr ""
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:216
+msgid "remove build tree when done"
msgstr ""
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
+#: rpmbuild.c:220
+msgid "debug file state machine"
msgstr ""
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "n'eus pakad evet da lemel"
+#: rpmbuild.c:234
+#, c-format
+msgid "do not execute %check stage of the build"
+msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "n'eus pakad evet da staliañ"
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
+msgstr ""
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
+#: rpmbuild.c:239
+msgid "remove sources when done"
msgstr ""
-#: rpmqv.c:314
-msgid "no arguments given for verify"
+#: rpmbuild.c:241
+msgid "remove specfile when done"
msgstr ""
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
msgstr ""
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+#: rpmbuild.c:245
+msgid "override target platform"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:300
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:363
+#, c-format
+msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:401
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgid "Failed to rename %s to %s: %m\n"
+msgstr "Fazi en un adenvel %s da %s: %m\n"
+
+#: rpmbuild.c:479
+#, c-format
+msgid "failed to stat %s: %m\n"
+msgstr "Sac'het eo bet stat %s :\n"
+
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
+msgstr "%s n'eo ket ur restr reizh\n"
+
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
+#: rpmbuild.c:556
+#, c-format
+msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
+#: rpmbuild.c:564
+#, c-format
+msgid "Building for target %s\n"
msgstr ""
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
msgstr ""
-#: rpmbuild.c:151
-#, c-format
-msgid "verify %files section from <tarball>"
+#: rpmdb.c:21
+msgid "initialize database"
msgstr ""
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
+#: rpmdb.c:26
+msgid "verify database files"
msgstr ""
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
+#: rpmdb.c:28
+msgid "export database to stdout header list"
msgstr ""
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
+#: rpmdb.c:31
+msgid "import database from stdin header list"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<pakad tarzh>"
+#: rpmdb.c:38
+msgid "Database options:"
+msgstr "Dibaboù ar stlennvon:"
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
msgstr ""
-#: rpmbuild.c:173
-msgid "remove build tree when done"
+#: rpmkeys.c:22
+msgid "import an armored public key"
msgstr ""
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmbuild.c:177
-msgid "debug file state machine"
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
msgstr ""
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
+#: rpmkeys.c:36
+msgid "Keyring options:"
msgstr ""
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
+msgstr "n'eo ket bet roet arguzenn ebet"
+
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
msgstr ""
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
msgstr ""
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
msgstr ""
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
msgstr ""
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
msgstr ""
-#: rpmbuild.c:194
-msgid "remove sources when done"
+#: rpmqv.c:126
+msgid "unexpected query flags"
msgstr ""
-#: rpmbuild.c:196
-msgid "remove specfile when done"
+#: rpmqv.c:129
+msgid "unexpected query format"
msgstr ""
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
+#: rpmqv.c:132
+msgid "unexpected query source"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
msgstr ""
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
msgstr ""
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
msgstr ""
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
msgstr ""
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
msgstr ""
-#: rpmdb.c:22
-msgid "initialize database"
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
msgstr ""
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
msgstr ""
-#: rpmdb.c:27
-msgid "verify database files"
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
msgstr ""
-#: rpmdb.c:33
-msgid "Database options:"
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
msgstr ""
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
msgstr ""
-#: rpmkeys.c:26
-msgid "import an armored public key"
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:40
-msgid "Keyring options:"
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
msgstr ""
-#: rpmsign.c:25
-msgid "sign package(s)"
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "n'eus pakad ebet da lemel"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "n'eus pakad ebet da staliañ"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
msgstr ""
-#: rpmsign.c:27
-msgid "sign package(s) (identical to --addsign)"
+#: rpmqv.c:318
+msgid "no arguments given for verify"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:30
+msgid "sign package(s)"
+msgstr "sinañ pakad(où)"
+
+#: rpmsign.c:32
+msgid "sign package(s) (identical to --addsign)"
+msgstr "sinañ pakad(où) (evel --addsign)"
+
+#: rpmsign.c:34
msgid "delete package signatures"
-msgstr ""
+msgstr "lemel sinadurioù pakad"
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "N'hell ket bet sevenet %s : %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "Dibaboù ar sinadur:"
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
msgstr ""
-#: rpmspec.c:26
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
+
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
-msgstr ""
+msgstr "Dibaboù Spec :"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -533,473 +595,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "O seveniñ(%s) : %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Sac'het eo bet seveniñ %s (%s) : %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
-msgstr ""
+msgstr "Mankout a ra '(' e %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
-msgstr ""
+msgstr "Mankout a ra ')' e %s %s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "N'eo ket bet kavet ar renkell : %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "N'eo ket bet kavet ar rstr : %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "N'eo ket ur renkell: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "linenn : %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Fazi en ur lenn %%files eus ar restr %s : %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr "Muioc'h evit ur restr war ul linenn : %s\n"
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "N'eo ket ur restr mat : %s : %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr ""
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "N'hell ket bet digoret ar restr %s : %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s : linenn : %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Fazi en un adenvel %s da %s: %m\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "N'hell ket bet digoret ar restr %s : %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
-msgstr ""
-
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
+msgstr "N'hell ket bet skrivet ar pakad: %s\n"
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
-msgstr ""
+msgstr "Skrivet: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "O seveniñ « %s » :\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Sac'het eo bet seveniñ « %s ».\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Sac'het eo bet ar gwiriekaat pakad « %s ».\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "n'hell ket bet krouet %s : %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "linenn %d : re a anvioù : %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "linenn %d : n'eus ket eus ar pakad-se : %s\n"
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1007,341 +1142,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
-msgstr ""
+msgstr "O pellgargañ %s da %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr ""
+msgid "%s in: %s\n"
+msgstr "%s e: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s : %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
+
+#: build/parseReqs.c:232 build/parseReqs.c:307
+msgid "invalid dependency"
+msgstr ""
+
+#: build/parseReqs.c:267 lib/rpmds.c:1470
msgid "Version required"
msgstr "Ret eo e vede ur stumm"
-#: build/parseReqs.c:165
-msgid "invalid dependency"
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "linenn %d : %s : %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "linenn %d : %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "fazi en ur zigeriñ %s : %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1412,450 +1616,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "N'hell bet bet sevenet %s : %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "sac'het eo bet %s : %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "sac'het eo bet magic_open(0x%x) : %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "sac'het eo bet magic_load : %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "O klask %s : %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Sac'het eo bet klask %s :\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(fazi 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "n'hellan ket krouiliñ %s war %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "rannet"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " sac'het - "
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "Un Delta RPM eo %s neuez ne c'hell ket bezañ staliet\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "Bet eo ouzhpennet ar pakad %s dija, o tremen e-biou %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "Bet eo ouzhpennet ar pakad %s dija, o erlec'hiañ gant %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(n'eo ket un niverenn)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr ""
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "reizh"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "erlec'hiet"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "ket staliet"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "ket rannet"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "mankout a ra"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(dianav)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr "%s %s : sac'het eo bet lemel : %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr "renkell"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr "restr"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s : sac'het eo bet rpmReadSignature : %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s : n'eus sinadur ebet\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s : sac'het eo bet headerRead : %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr ""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr ""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr ""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s : sac'het eo bet Fread : %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
-msgstr ""
+msgstr "URZH"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
-msgstr ""
+msgstr "RENKEL"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1876,527 +2191,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "lemel (distaliañ) ar pakad"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pakad>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "na stal ket ar restroù kefluniadur"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "na stal ket an teuliadur"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<hent>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<restr_pakad>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "Stal teuliadur"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "Staliañ pakad(où)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "o tremen e-biou ar restroù %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "o tremen e-biou ar restroù %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " war restr "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "sac'het eo bet %s war ar restr %s : %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "sac'het eo bet %s : %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "reizh "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "erlec'hiet "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "ket staliet "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(stat ebet) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
-#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s : sac'het eo bet headerRead : %s\n"
-
-#: lib/rpmchecksig.c:128
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
-msgstr "KET MAT"
-
-#: lib/rpmchecksig.c:386
-msgid "OK"
-msgstr "MAT"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "KET MAT"
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "MAT"
+
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s : sac'het eo bet digeriñ : %s\n"
@@ -2421,212 +2785,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader : o tremen e-biou"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s : sac'het eo bet regexec : %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s : sac'het eo bet regcomp : %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator : o tremen e-biou"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "KET"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "YA"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " sac'het - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "O vremañaat / o staliañ ...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "O naetaat / O lemel ...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "O prientiñ ..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "O prientiñ ar pakadoù ..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Sujedigezh sac'het :\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "O tegas %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "fazi en ur lenn eus ar restr %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "N'hell ket bet digoret %s : %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "O staliañ %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "n'eo ket ur pakad rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "o c'hortoz evit krouiliñ %s war %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Sac'het eo bet dlopen %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "disheñvel"
@@ -2700,796 +3293,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "N'hell ket bet digoret %s e %s:%d : %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "N'hell ket bet digoret %s evit lenn : %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Furmad dianav"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "staliañ"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "lemel"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "N'hell ket bet digoret stlennvon ar pakadoù e %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "gra"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:268
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/signature.c:489
-msgid "Header "
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "tremenet en e biou"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "sac'het"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "mankout a ra %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
+#: lib/verify.c:263
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/verify.c:284
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "N'hell ket bet digoret indeks %s gant db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader : o tremen e-biou"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s : sac'het eo bet regexec : %s\n"
-
-#: lib/rpmdb.c:1596
+#: lib/verify.c:448
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s : sac'het eo bet regcomp : %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator : o tremen e-biou"
+msgid "missing %c %s"
+msgstr "mankout a ra %c %s"
-#: lib/rpmdb.c:1897
+#: lib/verify.c:503
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2250
+#: plugins/prioreset.c:29
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2349
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:562
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:566
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:607
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:637
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:761
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "n'hellan ket krouiliñ %s war %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "rannet"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "File %s: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr ""
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[hini ebet]"
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(fazi ebet)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "Fazi sac'hus : "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "fazi :"
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "hoc'h evezh : "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Sac'het eo bet seveniñ %s : %s\n"
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr "V%d %s/%s %s, ID alc'hwez %s"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr "(hini ebet)"
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr ""
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s : sac'het eo bet Fwrite : %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr ""
+msgid "%s: Fread failed: %s\n"
+msgstr "%s : sac'het eo bet Fread : %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr ""
+msgid "%s: Fflush failed: %s\n"
+msgstr "%s : sac'het eo bet Fflush : %s\n"
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
+msgid "Could not exec %s: %s\n"
+msgstr "N'hell ket bet sevenet %s : %s\n"
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/macro.c:1175
+#: sign/rpmgensig.c:302
#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr ""
+msgid "Could not read from file %s: %s\n"
+msgstr "N'hell ket bet lennet ar restr %s : %s\n"
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:312
#, c-format
-msgid "error creating temporary file %s: %m\n"
-msgstr ""
+msgid "gpg exec failed (%d)\n"
+msgstr "Sac'het eo bet seveniñ gpg (%d)\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
-#, c-format
-msgid "File %s: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
-msgstr ""
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
+msgstr "sac'het eo rpmMkTemp\n"
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[hini ebet]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(fazi ebet)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "Fazi sac'hus : "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "fazi :"
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "ho evezh : "
-
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:622
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
-msgstr "V%d %s/%s %s, ID alc'hwez %s"
-
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
-msgstr "(hini ebet)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s : sac'het eo bet Fwrite : %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s : sac'het eo bet rpmReadSignature : %s"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
-msgstr "%s : sac'het eo bet Fflush : %s\n"
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s : sac'het eo bet headerRead : %s\n"
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s : sac'het eo bet rpmWriteSignature : %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s : sac'het eo bet writeLead : %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr "Sac'het eo bet seveniñ gpg (%d)\n"
+msgid "replacing %s failed: %s\n"
+msgstr "sach'et eo bet erlec'hiañ %s : %s\n"
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
-msgstr "sac'het eo rpmMkTemp\n"
-
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s : sac'het eo bet writeLead : %s\n"
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s : sac'het eo bet rpmWriteSignature : %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
-msgstr "sach'et eo bet erlec'hiañ %s : %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/ca.po b/po/ca.po
index 594edd3ca..6c23d3a0d 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2017
+# Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Catalan (http://www.transifex.com/rpm-team/rpm/language/ca/)\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,7 +27,7 @@ msgstr "%s: %s\n"
#: cliutils.c:27 lib/poptALL.c:56
#, c-format
msgid "RPM version %s\n"
-msgstr "Versió de l'RPM %s\n"
+msgstr "Versió %s de RPM\n"
#: cliutils.c:32
#, c-format
@@ -45,557 +47,647 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "Ha fallat la creació d'una canonada per a --pipe: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
-msgstr "ha fallat l'execució\n"
+msgstr "ha fallat l'exec\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "l'argument no és un paquet RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "s'ha produït un error en llegir la capçalera del paquet\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
-msgstr "no s'ha pogut tornar a obrir les dades de càrrega: %s\n"
+msgstr "no s'ha pogut tornar a obrir la càrrega: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opcions de consulta (amb -q o --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opcions de verificació (amb -V o --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opcions d'instal·lació/actualització/supressió:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Opcions comunes per a tots els modes d'rpm i executables:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "només es pot realitzar un tipus de consulta/verificació alhora"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "indicadors inesperats de la consulta"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "format inesperat de la consulta"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "font inesperada de la consulta"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "només es pot especificar un mode principal"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "només es poden reubicar els fitxers durant la instal·lació d'un paquet"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "no es pot utilitzar l'opció --prefix amb --relocate o --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"només es poden utilitzar les opcions --relocate i --excludepath quan "
-"s'estiguin instal·lant paquets nous"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr ""
-"només es pot utilitzar l'opció --prefix quan s'estiguin instal·lant paquets "
-"nous"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "els arguments a --prefix han de començar amb una /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-"només es pot especificar l'opció --replacepkgs durant la instal·lació d'un "
-"paquet"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-"només es pot especificar l'opció --excludedocs durant la instal·lació d'un "
-"paquet"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "ja s'ha especificat el buildroot i s'ignora %s\n"
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-"només es pot especificar l'opció --includedocs durant la instal·lació d'un "
-"paquet"
+"construeix mitjançant el %prep (desempaqueta les fonts i aplica els pedaços) "
+"des del <fitxer spec>"
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "només es pot especificar una opció entre --excludedocs i --includedocs"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<fitxer spec>"
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-"només es pot especificar l'opció --ignorearch durant la instal·lació d'un "
-"paquet"
+"construeix mitjançant el %build (%prep, després compila) des del <fitxer "
+"spec>"
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-"només es pot especificar l'opció --ignoreos durant la instal·lació d'un "
-"paquet"
+"construeix mitjançant el %install (%prep, %build i després instal·la) des "
+"del <fitxer spec>"
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-"només es pot especificar l'opció --ignoresize durant la instal·lació d'un "
-"paquet"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
+msgstr "verifica la secció %files des del <fitxer spec>"
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-"només es pot especificar l'opció --allmatches durant la supressió d'un paquet"
+"construeix els paquets de les fonts i dels binaris des del <fitxer spec>"
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-"només es pot especificar l'opció --allfiles durant la instal·lació d'un "
-"paquet"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
+msgstr "construeix només el paquet dels binaris des del <fitxer spec>"
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"només es pot especificar l'opció --justdb durant la instal·lació i supressió "
-"d'un paquet"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
+msgstr "construeix només el paquet de les fonts des del <fitxer spec>"
-#: rpmqv.c:221
+#: rpmbuild.c:161
+#, c-format
msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-"només es poden especificar les opcions d'inhabilitació d'scripts durant la "
-"instal·lació i supressió d'un paquet"
+"construeix mitjançant el %prep (desempaqueta de les fonts i aplica els "
+"pedaços) des del <paquet de les fonts>"
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"només es poden especificar les opcions d'inhabilitació de l'activador durant "
-"la instal·lació i supressió d'un paquet"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<paquet de les fonts>"
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
+"construeix mitjançant el %build (%prep, després compila) des del <paquet de "
+"les fonts>"
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
+"construeix mitjançant el %install (%prep, %build i instal·la) des del "
+"<paquet de les fonts>"
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "els arguments a --root (-r) han de començar per /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "no s'han donat paquets per a suprimir"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "no s'han donat paquets per a instal·lar"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "no s'han donat arguments per a consultar"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "no s'han donat arguments per a verificar"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:170
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr "el buildroot ja s'ha especificat, s'està ignorant %s\n"
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-"munta amb %prep (desempaqueta els fonts i aplica els pedaços) des del "
-"<fitxer d'especificació>"
+msgid "verify %files section from <source package>"
+msgstr "verifica la secció %files des del <paquet de les fonts>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr "<fitxer d'especificació>"
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr ""
-"munta amb %build (%prep, després compila) des del <fitxer d'especificació>"
-
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-"munta amb %install (%prep, %build i després instal·la) des del <fitxer "
-"d'especificació>"
-
-#: rpmbuild.c:129
-#, c-format
-msgid "verify %files section from <specfile>"
-msgstr "verifica la secció %files de <fitxer d'especificació>"
+"construeix el paquet dels binaris i de les fonts des del <paquet de les "
+"fonts>"
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
-msgstr "munta els paquets de codi font i binaris de <fitxer d'especificació>"
-
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
-msgstr "munta només el paquet binari de <fitxer d'especificació>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "construeix només el paquet dels binaris des del <paquet de les fonts>"
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
-msgstr "munta només el paquet font de <fitxer d'especificació>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr "construeix només el paquet de les fonts des del <paquet de les fonts>"
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-"munta amb %prep (desempaqueta els fonts i aplica els pedaços) des de "
-"l'<arxiu tar>"
+"construeix mitjançant el %prep (desempaqueta les fonts i aplica els pedaços) "
+"des de l'<arxiu tar>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<arxiu tar>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
-msgstr "munta amb %build (%prep, després compila) des de l'<arxiu tar>"
+msgstr ""
+"construeix mitjançant el %build (%prep, després compila) des de l'<arxiu tar>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
-msgstr "munta amb %install (%prep, %build, instal·la) des de l'<arxiu tar>"
+msgstr ""
+"construeix mitjançant el %install (%prep, %build, instal·la) des de l'<arxiu "
+"tar>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verifica la secció %files des de l'<arxiu tar>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
-msgstr "munta els paquets font i binari des de l'<arxiu tar>"
+msgstr ""
+"construeix els paquets de les fonts i dels binaris des de l'<arxiu tar>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
-msgstr "munta el paquet binari des de l'<arxiu tar> només"
+msgstr "construeix el paquet dels binaris només des de l'<arxiu tar>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
-msgstr "munta els paquets font només des de l'<arxiu tar>"
+msgstr "construeix el paquet de les fonts només des de l'<arxiu tar>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
-msgstr "munta els paquets binaris des de <paquet font>"
+msgstr "construeix el paquet dels binaris des del <paquet de les fonts>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<paquet font>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr "munta amb %install (%prep, %build i instal·la) des del <paquet font>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
-msgstr "omet l'arrel de compilació"
+msgstr "substitueix l'arrel de la construcció"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "executa la construcció al directori actual"
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
-msgstr "suprimeix l'arbre del muntatge en acabar"
+msgstr "suprimeix l'arbre de la construcció en acabar"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignora ExcludeArch: directives del fitxer d'especificació"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "depura la màquina d'estat de fitxers"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
-msgstr "no executis cap fase del muntatge"
+msgstr "no executis cap de les etapes de la construcció"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
-msgstr "no verifiquis les dependències del muntatge"
+msgstr "no verifiquis les dependències de la construcció"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
+"genera capçaleres del paquet compatibles amb l'empaquetament rpm v3 (llegat)"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
-msgstr ""
+msgstr "no executis l'etapa %clean de la construcció"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "no executis l'etapa %prep de la construcció"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "no executis l'etapa %check de la construcció"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
-msgstr "no acceptis els msgstr d'i18N des d'un fitxer d'especificació"
+msgstr "no acceptis els msgstr d'i18N del fitxer spec"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
-msgstr "suprimeix els fonts en acabar"
+msgstr "suprimeix les fonts en acabar"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
-msgstr "suprimeix el fitxer d'especificació en acabar"
+msgstr "suprimeix el fitxer spec en acabar"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "vés directament a l'etapa especificada (només per a c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
-msgstr "omet plataforma objectiu"
+msgstr "substitueix la plataforma"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-"Opcions de muntatge amb [ <fitxer d'especificacions> | <arxiu tar> | <paquet "
-"font> ]:"
+"Opcions de construcció amb [ <fitxer spec> | <arxiu tar> | <paquet de les "
+"fonts> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Opcions comunes per a tots els modes rpm i executables:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
-msgstr "Han fallat les dependències de muntatge:\n"
+msgstr "Han fallat les dependències de la construcció:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "No s'ha pogut obrir el fitxer d'especificacions %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
-msgstr "No s'ha pogut obrir un conducte per al tar: %m\n"
+msgstr "Ha fallat l'obertura de la canonada per al tar: %m\n"
+
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "S'ha trobat més d'un fitxer spec a %s\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
-msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n"
+msgstr "Ha fallat la lectura del fitxer spec de %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
-msgstr "No s'ha pogut canviar el nom de %s per %s: %m\n"
+msgstr "Ha fallat el canvi de nom de %s a %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
-msgstr "No s'ha pogut obtenir l'estat de %s: %m\n"
+msgstr "Ha fallat l'obtenció de l'estat de %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "El fitxer %s no és un fitxer regular.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "El fitxer %s no sembla un fitxer d'especificacions.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
-msgstr "S'estan muntant les plataformes destí: %s\n"
+msgstr "Construcció per a les plataformes objectiu: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
-msgstr "S'està muntant per al destí %s\n"
+msgstr "Construcció per a l'objectiu %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "els arguments a --root (-r) han de començar per /"
+
+#: rpmdb.c:21
msgid "initialize database"
-msgstr "initialitza la base de dades"
+msgstr "inicialitza la base de dades"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-"torna a muntar les llistes invertides de la base de dades des de les "
-"capçaleres de paquets instal·lades"
+"reconstrueix la base de dades de les llistes inverses des de les capçaleres "
+"dels paquets instal·lats"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "verifica els fitxers de la base de dades"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+"exporta la base de dades al llistat de capçaleres de la sortida estàndard"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+"importa la base de dades des de la llista de capçaleres de l'entrada "
+"estàndard"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opcions de la base de dades:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "només es pot especificar un mode principal"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "verifica la signatura dels paquets"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importa una clau pública armada"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
-msgstr ""
+msgstr "no importis, però diguis si podria funcionar o no"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
-msgstr ""
+msgstr "llista les claus des de l'anell de claus RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
-msgstr ""
+msgstr "Opcions de l'anell de claus:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "no s'han donat arguments"
-#: rpmsign.c:25
-msgid "sign package(s)"
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Opcions de selecció de paquets, de consulta o verificació:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opcions de consulta (amb -q o --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opcions de verificació (amb -V o --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opcions d'instal·lació, actualització o supressió:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "només es pot realitzar un tipus consulta o verifica alhora"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "indicadors inesperats de la consulta"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "format inesperat de la consulta"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "origen inesperat de la consulta"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "només es pot forçar la instal·lació i l'actualització"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+"només es poden traslladar els fitxers durant la instal·lació del paquet"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "no es pot utilitzar l'opció --prefix amb --relocate o --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"només es poden utilitzar les opcions --relocate i --excludepath quan "
+"s'instal·lin paquets nous"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "només es pot utilitzar l'opció --prefix quan s'instal·lin paquets nous"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "els arguments a --prefix han de començar amb una /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
+"--hash (-h) només es pot especificar durant la instal·lació i la supressió "
+"del paquet"
-#: rpmsign.c:27
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"--percent només es pot especificar durant la instal·lació i la supressió del "
+"paquet"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --replacepkgs durant la instal·lació del "
+"paquet"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --excludedocs durant la instal·lació del "
+"paquet"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --includedocs durant la instal·lació del "
+"paquet"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "només es pot especificar una opció entre --excludedocs i --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --ignorearch durant la instal·lació del "
+"paquet"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --ignoreos durant la instal·lació del paquet"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --ignoresize durant la instal·lació del "
+"paquet"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+"només es pot especificar l'opció --allmatches durant la supressió del paquet"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+"només es pot especificar l'opció --allfiles durant la instal·lació del paquet"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"només es pot especificar l'opció --justdb durant la instal·lació i la "
+"supressió del paquet"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"només es poden especificar les opcions d'inhabilitació de scripts durant la "
+"instal·lació i la supressió del paquet"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"només es poden especificar les opcions d'inhabilitació de l'activador durant "
+"la instal·lació i la supressió del paquet"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps només es pot especificar durant la instal·lació, la supressió i la "
+"versificació del paquet"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"--test només es pot especificar durant la instal·lació i la supressió del "
+"paquet"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "no s'han donat paquets per a suprimir"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "no s'han donat paquets per a instal·lar"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "no s'han donat arguments per a consultar"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "no s'han proporcionat arguments per verificar"
+
+#: rpmsign.c:30
+msgid "sign package(s)"
+msgstr "signa els paquets"
+
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
-msgstr "signa els paquets (igual que --addsign)"
+msgstr "signa els paquets (idèntic a --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "suprimeix les signatures dels paquets"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opcions de la signatura:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "No es pot executar %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Heu d'establir «%%_gpg_name» al vostre fitxer de macros\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Introduïu la contrasenya:"
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "La contrasenya és correcta.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
-msgstr ""
+msgstr "analitza sintàcticament els fitxers spec per la sortida estàndard"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
-msgstr ""
+msgstr "consulta els fitxers spec"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
+msgstr "opera sobre els binaris dels rpm generats amb el spec (per defecte)"
+
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
-msgstr ""
+msgstr "opera sobre les fonts del rpm generat amb el spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
-msgstr "utilitza el format de consulta següent"
+msgstr "utilitza el següent format de consulta"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
-msgstr ""
+msgstr "Opcions de spec:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
-msgstr ""
+msgstr "no s'ha proporcionat arguments per analitzar sintàcticament"
#: build/build.c:120
#, c-format
msgid "Unable to open temp file: %s\n"
-msgstr ""
+msgstr "No es pot obrir el fitxer temporal: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
-msgstr ""
+msgstr "No es pot obrir el flux: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
-msgstr "Executant(%s): %s\n"
+msgstr "Execució(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Ha fallat l'execució de %s (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
-msgstr ""
+msgstr "S'ha produït un error en executar el scriptlet %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
-msgstr "L'estat de sortida de %s (%s) és erroni\n"
+msgstr "Estat incorrecte de sortida de %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -603,237 +695,317 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Errors del muntatge de l'RPM:\n"
+"Errors de construcció del RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "error de sintaxi mentre s'analitzava ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "error de sintaxi mentre s'analitzava &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "error de sintaxi mentre s'analitzava ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "error d'anàlisi a l'expressió\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "no hi ha hagut coincidències (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- només als nombres\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! només als nombres\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "els tipus han de coincidir\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / no és disponible per a les cadenes\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- no és disponible per a les cadenes\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& i || no són disponibles per a les cadenes\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "error de sintaxi a l'expressió\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
-msgstr "Manca '(' a %s %s\n"
+msgstr "Falta un «(» a %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
-msgstr "Manca ')' a %s(%s\n"
+msgstr "Falta un «)» a %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "L'element %s no és vàlid: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Manca %s a %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "%s() va seguit d'un caràcter que no és un espai en blanc: %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Sintaxi incorrecta: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
-msgstr "Especificació de mode incorrecta: %s(%s)\n"
+msgstr "mode incorrecte del spec: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
-msgstr "Especificació de dirmode incorrecta: %s(%s)\n"
+msgstr "dirmode incorrecte del spec: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
-msgstr ""
+msgstr "Longitud inusual de la configuració regional: \"%s\" a %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
-msgstr ""
+msgstr "Duplica la configuració regional %s al %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
-msgstr "Capacitat invàlida: %s\n"
+msgstr "Capacitat no vàlida: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
-msgstr "No s'ha muntat amb disponibilitat de fitxers\n"
+msgstr "No s'ha construït amb disponibilitat de fitxers\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
-msgstr "El fitxer ha de començar amb \"/\": %s\n"
+msgstr "El fitxer ha de començar amb «/»: %s\n"
+
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
-#: build/files.c:973
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
-msgstr "L'algorisme %u de resum del fitxer és desconegut, s'està usant MD5\n"
+msgstr "Es desconeix l'algorisme de resum del fitxer %u, es torna al MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "El fitxer apareix dues vegades: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
-msgstr ""
+msgstr "la lectura de l'enllaç simbòlic %s ha fallat: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
-msgstr "L'enllaç simbòlic apunta al BuildRoot: %s -> %s\n"
+msgstr "L'enllaç simbòlic apunta a l'arrel de la construcció: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "El camí està fora de l'arrel de la construcció: %s\n"
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
-msgstr ""
+msgstr "No es va trobar el directori: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "No s'ha trobat el fitxer: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "No és un directori: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: no es pot carregar l'etiqueta incorrecta (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
-msgstr "%s: ha fallat la clau pública.\n"
+msgstr "%s: ha fallat la lectura de la clau pública.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: no és una clau pública armada.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
+msgstr "%s: ha fallat la codificació\n"
+
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "no s'ha pogut crear el directori"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
-msgstr "El fitxer ha de començar amb \"/\": %s\n"
+msgstr "El fitxer necessita el «/» principal: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "El glob no ha trobat el fitxer: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
-msgstr ""
+msgstr "No s'ha pogut obrir el fitxer %s del %%files: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "línia: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
#, c-format
-msgid "Error reading %%files file %s: %m\n"
+msgid "Empty %%files file %s\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2200
+#, c-format
+msgid "Error reading %%files file %s: %m\n"
+msgstr "S'ha produït un error en llegir %%files del fitxer %s: %m\n"
+
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "El glob no ha trobat el fitxer: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "Més d'un fitxer en una línia: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
-msgstr "Fitxer no vàlid: %s: %s\n"
-
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Propietari/grup incorrecte: %s\n"
+msgstr "Fitxer incorrecte: %s: %s\n"
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
-msgstr "S'està comprovant fitxers no empaquetats: %s\n"
+msgstr "Comprovació per si hi ha fitxers no empaquetats: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -842,548 +1014,610 @@ msgstr ""
"Hi ha fitxers instal·lats però no empaquetats:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
#, c-format
-msgid "Processing files: %s\n"
+msgid "%s was mapped to multiple filenames"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3102
+#, c-format
+msgid "Processing files: %s\n"
+msgstr "Processament dels fitxers: %s\n"
+
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Els binaris dependents de l'arquitectura estan en el paquet noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "ha fallat la creació de l'arxiu al fitxer %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "ha fallat la creació de l'arxiu: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
-msgstr ""
+msgstr "No s'ha pogut obrir el fitxer %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: línia: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "El nom de màquina no es pot fer canònic: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "No s'ha pogut escriure les dades de %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "No s'ha pogut llegir les dades de %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "El nom de màquina no es pot fer canònic: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
-msgstr "Compressió de dades desconeguda: %s\n"
-
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "No es pot crear la regió de capçalera no modificable.\n"
+msgstr "Càrrega desconeguda de compressió: %s\n"
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "No s'ha pogut obrir el fitxer temporal.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "No s'ha pogut escriure la capçalera temporal\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Ha fallat la lectura del pitxer de política: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Dades CSA invàlides\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "No es pot tornar a carregar la capçalera de signatura.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "No es pot obrir %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "No es pot escriure el paquet: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "No s'ha pogut obrir el sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "No es pot llegir la capçalera de %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "No es pot escriure la capçalera a %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "S'ha escrit: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
-msgstr "S'està executant: \"%s\":\n"
+msgstr "S'està executant «%s»:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
-msgstr "Ha fallat l'execució de \"%s\" .\n"
+msgstr "Ha fallat l'execució de «%s».\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
-msgstr "Ha fallat la verificació del paquet \"%s\".\n"
+msgstr "Ha fallat la verificació del paquet «%s».\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "No es pot generar el nom de fitxer de sortida per al paquet %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "no es pot crear %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "línia %d: segon %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
-msgstr "les entrades del %%changelog han de començar amb *\n"
+msgstr "les entrades %%changelog han de començar amb *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
-msgstr "l'entrada de %%changelog no és completa\n"
+msgstr "Entrada incompleta del %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
-msgstr "la data de %%changelog no és correcta: %s\n"
+msgstr "data incorrecta al %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "el %%changelog no està en ordre cronològic descendent\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
-msgstr "manca el nom a %%changelog\n"
+msgstr "falta el nom a %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
-msgstr "no hi ha descripció a %%changelog\n"
+msgstr "sense descripció al %%changelog\n"
+
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "línia %d: segon %%changelog\n"
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
-msgstr "línia %d: s'ha produït un error en analitzar %%description: %s\n"
+msgstr ""
+"línia %d: S'ha produït un error en analitzar sintàcticament el "
+"%%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
-msgstr "línia %d: opció incorrecta %s: %s\n"
+msgstr "línia %d: Opció %s incorrecta: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "línia %d: massa noms: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "línia %d: no existeix Package: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "línia %d: segona descripció\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
-msgstr "línia %d: s'ha produït un error en analitzar %%files: %s\n"
+msgstr ""
+"línia %d: S'ha produït un error en analitzar sintàcticament el %%files: %s\n"
+
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
+"línia %d: S'ha produït un error en analitzar sintàcticament el %%policies: "
+"%s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
-msgstr ""
+msgstr "S'ha produït un error en analitzar sintàcticament el camp tag: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "línia %d: número incorrecte: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
-msgstr "línia %d: Numero dolent%s número: %u\n"
+msgstr "línia %d: Número incorrecte de no%s: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
-msgstr "línia %d: número %s incorrecte: %s\n"
+msgstr "línia %d: número incorrecte %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
-msgstr "%s %d definit múltiples vegades\n"
+msgstr "%s %d es va definir diverses vegades\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
-msgstr ""
+msgstr "S'està baixant %s a %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
-msgstr ""
+msgstr "No s'ha pogut baixar %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "S'ha exclòs l'arquitectura: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
-msgstr "No s'inclou l'arquitectura: %s\n"
+msgstr "No s'ha inclòs l'arquitectura: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "S'ha exclòs el SO: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "No s'ha inclòs el SO: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
-msgstr "El camp %s ha de ser present al paquet: %s\n"
+msgstr "El camp %s ha d'estar present al paquet: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
-msgstr "L'entrada %s és duplicada al paquet: %s\n"
+msgstr "L'entrada %s està duplicada al paquet: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "No s'ha pogut obrir la icona %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "No s'ha pogut llegir la icona %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
-msgstr "El tipus d'icona és desconegut: %s\n"
+msgstr "Tipus desconegut d'icona: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
-msgstr "línia %d: l'etiqueta pren un únic testimoni: %s\n"
+msgstr "línia %d: L'etiqueta pren un únic testimoni: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr ""
+msgid "line %d: %s in: %s\n"
+msgstr "línia %d: %s a: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr ""
+msgid "%s in: %s\n"
+msgstr "%s a: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
-msgstr "línia %d: l'etiqueta és malament formada: %s\n"
+msgstr "línia %d: Etiqueta mal formada: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "línia %d: l'etiqueta és buida: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
-msgstr "línia %d: els prefixos no poden acabar en «/»: %s \n"
+msgstr "línia %d: els prefixos no poden acabar amb «/»: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "línia %d: «Docdir» ha de començar per «/»: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "línia %d: el camp Epoch ha d'ésser un nombre sense signe: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
-msgstr "línia %d: %s és incorrecte: qualificadors: %s\n"
+msgstr "línia %d: %s incorrecte: qualificadors: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
-msgstr "línia %d: el format de «BuildArchitecture» és incorrecte: %s\n"
+msgstr "línia %d: Format incorrecte del BuildArchitecture: %s\n"
+
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr "linia %d: Només els subpaquets noarch estan suportats: %s\n"
+msgstr "línia %d: Només els subpaquets noarch estan suportats: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "S'ha produït un error intern: l'etiqueta %d és incorrecta\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
-msgstr ""
+msgstr "línia %d: %s està en desús: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
-msgstr "L'especificació del paquet és incorrecta: %s\n"
+msgstr "Especificació incorrecta del paquet: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "El paquet ja existeix: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
-msgstr "línia %d: l'etiqueta és desconeguda: %s\n"
+msgstr "línia %d: Etiqueta desconeguda: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} no pot estar buit\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
-msgstr "%%{buildroot} no pot ésser \"/\"\n"
+msgstr "%%{buildroot} no pot ser \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
-msgstr "La font és incorrecta: %s: %s\n"
+msgstr "Fonts incorrectes: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "No existeix el pedaç número %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch sense l'etiqueta \"Patch:\" corresponent\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "No existeix la font número %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
-msgstr "Falta l'etiqueta \"Source:\" en el fitxer d'especificacions\n"
+msgstr "Sense \"Source:\" etiqueta al fitxer spec\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
-msgstr "Hi ha hagut un error en analitzar %%setup: %s\n"
+msgstr "S'ha produït un error en analitzar sintàcticament el %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
-msgstr "línia %d: l'argument a %%setup és incorrecte: %s\n"
+msgstr "línia %d: Argument incorrecte al %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
-msgstr "línia %d: l'opció de %%setup %s és incorrecta: %s\n"
+msgstr "línia %d: Opció %s incorrecta del %%setup: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "El número de pedaç %s no és vàlid: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "línia %d: segon %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "No es permet ca dependència enriquida per a aquest tipus"
+
+#: build/parseReqs.c:232 build/parseReqs.c:307
+msgid "invalid dependency"
+msgstr "dependència no vàlida"
+
+#: build/parseReqs.c:267 lib/rpmds.c:1470
msgid "Version required"
+msgstr "Es requereix la versió"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
msgstr ""
-#: build/parseReqs.c:165
-msgid "invalid dependency"
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
-msgstr ""
+msgstr "línia %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "línia %d: els activadors han de tenir --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
-msgstr "línia %d: s'ha produït un error en analitzar %s: %s\n"
+msgstr "línia %d: S'ha produït un error en analitzar sintàcticament %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
-msgstr "línia %d: l'script intern ha d'acabar en «>»: %s\n"
+msgstr "línia %d: el script intern ha d'acabar amb «>»: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
-msgstr "línia %d: el programa d'script ha de començar per «/»: %s\n"
+msgstr "línia %d: el programa del script ha de començar per «/»: %s\n"
+
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "línia %d: Segon %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
-msgstr "línia %d: l'script intern no està disponible: %s\n"
+msgstr "línia %d: el script intern no està disponible: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "línia %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "No es pot obrir %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
-msgstr ""
+msgstr "%s:%d: S'esperava l'argument per %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr ""
+msgstr "línia %d: %%if sense tancar\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
-msgstr ""
+msgstr "%s:%d: condició incorrecta del %%if\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: s'ha obtingut un %%else sense %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: s'ha obtingut un %%endif sense %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
-msgstr "No s'ha trobat cap arquitectura compatible per al muntatge\n"
+msgstr "No s'ha trobat cap arquitectura compatible per a la construcció\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "El paquet no té %%description: %s\n"
@@ -1400,17 +1634,17 @@ msgstr ""
#: build/policies.c:101
msgid "Failed to get policies from header\n"
-msgstr ""
+msgstr "Ha fallat l'obtenció de les polítiques de les capçaleres\n"
#: build/policies.c:154
#, c-format
msgid "%%semodule requires a file path\n"
-msgstr ""
+msgstr "%%semodule requereix el camí a un fitxer\n"
#: build/policies.c:163
#, c-format
msgid "Failed to read policy file: %s\n"
-msgstr ""
+msgstr "Ha fallat la lectura del pitxer de política: %s\n"
#: build/policies.c:170
#, c-format
@@ -1420,7 +1654,7 @@ msgstr ""
#: build/policies.c:187
#, c-format
msgid "Failed to determine a policy name: %s\n"
-msgstr ""
+msgstr "Ha fallat la determinació d'un nom de política: %s\n"
#: build/policies.c:199
#, c-format
@@ -1432,478 +1666,587 @@ msgstr ""
#: build/policies.c:246
#, c-format
msgid "Error parsing %s: %s\n"
-msgstr ""
+msgstr "S'ha produït un error en analitzar sintàcticament %s: %s\n"
#: build/policies.c:252
#, c-format
msgid "Expecting %%semodule tag: %s\n"
-msgstr ""
+msgstr "S'esperava l'etiqueta %%semodule: %s\n"
#: build/policies.c:262
#, c-format
msgid "Missing module path in line: %s\n"
-msgstr ""
+msgstr "Falta el camí al mòdul en la línia: %s\n"
#: build/policies.c:268
#, c-format
msgid "Too many arguments in line: %s\n"
-msgstr ""
+msgstr "Hi ha massa arguments en la línia: %s\n"
#: build/policies.c:307
#, c-format
msgid "Processing policies: %s\n"
-msgstr ""
+msgstr "Processament de les polítiques: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
-msgstr ""
+msgstr "S'ignora l'expressió regular incorrecta %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "No s'ha pogut crear la canonada per a %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "No s'ha pogut executar %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "No s'ha pogut crear el procés fill de «%s»: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
-msgstr ""
+msgstr "ha fallat %s: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
-msgstr ""
+msgstr "ha fallat l'escriptura de totes les dades a %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Ha fallat la conversió de %s a enter gran.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
-msgstr ""
+msgstr "Classificador buit de fitxer\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
-msgstr ""
+msgstr "Sense atributs de fitxer configurats\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "Ha fallat magic_open(0x%x): %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "Ha fallat magic_load: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
-msgstr "Ha fallat el reconeixement del fitxer \"%s\": mode %06o %s\n"
+msgstr "Ha fallat el reconeixement del fitxer «%s»: mode %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "S'està cercant %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Ha fallat la cerca de %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-"ha fallat la consulta del fitxer d'especificació %s, no es pot analitzar\n"
+"ha fallat la consulta del fitxer spec %s, no es pot analitzar "
+"sintàcticament\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s error(%d) de %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Valor màgic incorrecte"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s error(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Capçalera dolenta/il·legible"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "opció de la bd no reconeguda: s'ignora «%s».\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "La mida de la capçalera és massa gran"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s té un valor numèric no vàlid i es va ignorar\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
+"%s té un valor de tipus «long» massa gran o massa petit i s'ha ignorat\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Tipus de fitxer desconegut"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
+"%s té un valor de tipus «enter» massa gran o massa petit i s'ha ignorat\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Manquen els enllaços durs"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "no es pot obtenir el blocatge %s a %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "No hi ha coincidència de resums"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "compartit"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Error intern"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exclusiu"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "El fitxer de l'arxiu no és a la capçalera"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "tipus d'índex %x no vàlid a %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " ha fallat - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "error(%d) en obtenir «%s» registres de l'índex %s: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "error(%d) en emmagatzemar el registre «%s» en %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "error(%d) en suprimir el registre «%s» de %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "error(%d) en afegir el registre #%d a la capçalera\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "error(%d) en treure el registre #%d de la capçalera\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "error(%d) en assignar la instància de nou paquet\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s és un Delta RPM i no es pot instal·lar directament\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
-msgstr "Les dades (%s) no estan disponibles al paquet %s\n"
+msgstr "Càrrega (%s) no admesa al paquet %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
-msgstr "el paquet %s ja s'ha afegit, s'està ignorant %s\n"
+msgstr "el paquet %s ja es va afegir i s'ignora %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
-msgstr "el paquet %s ja es va afegir, s'està reemplaçant per %s\n"
+msgstr "el paquet %s ja es va afegir, s'està substituint amb %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(no és un blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
-msgstr "(no és una xifra)"
+msgstr "(no és un número)"
+
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(no és una cadena)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(tipus no vàlid)"
-#: lib/formats.c:125
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(no és base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(tipus invàlid)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(no és un blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
-msgstr "(tipus d'XML invàlid)"
+msgstr "(tipus no vàlid d'XML)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(no és una signatura d'OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
-msgstr ""
+msgstr "Data no vàlida %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
-msgstr ""
+msgstr "normal"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
-msgstr ""
+msgstr "substituït"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
-msgstr ""
+msgstr "no instal·lat"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
-msgstr ""
+msgstr "compartit per xarxa"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
-msgstr ""
+msgstr "color incorrecte"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
-msgstr ""
+msgstr "falta"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
-msgstr ""
-
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "l'usuari %s no existeix - usant el root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "el grup %s no existeix - s'està usant el root\n"
+msgstr "(desconegut)"
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
-msgstr "%s desat com a %s\n"
+msgstr "%s s'ha desat com a %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
-msgstr "%s creat com a %s\n"
+msgstr "%s s'ha creat com a %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s: ha fallat la supressió: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "directori"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "fitxer"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "hdr load: DOLENT"
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-"etiqueta[%d]: dolenta, etiqueta %d tipus %d desplaçament %d compte %d\n"
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "capçalera SHA1: dolenta, no és hexadecimal\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "capçalera RSA: dolenta, no és binària\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "capçalera DSA: dolenta, no és binària\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "mida del blob(%d): dolenta, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "hdr magic: DOLENT"
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-"desplaçament de regió: dolent, etiqueta %d tipus %d desplaçament %d compte "
-"%d\n"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-"tros de regió: dolenta, etiqueta %d tipus %d desplaçament %d compte %d\n"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "la dimensió de la regió: dolenta, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "capçalera dimensió (%d): dolenta, la lectura ha retornat %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "sigh pad(%zd): DOLENT, ha llegit %zd bytes"
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "capçalera màgica: dolenta\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-"capçalera d'etiquetes: dolentes, número d'etiquetes (%d) fora de rang\n"
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "l'amplada del camp no és vàlida"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "capçalera de dades: dolenta, número de bytes(%d) fora de rang\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "capçalera blob(%zd): dolenta, la lectura ha retornat %d\n"
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "el format de l'etiqueta és buit"
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "càrrega de la capçalera: dolenta\n"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "el nom de l'etiqueta és buit"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: El rpmReadSignature ha fallat: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
-#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: No hi ha signatura disponible\n"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "s'esperava ] al final de la seqüència"
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: El headerRead ha fallat: %s"
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "no s'esperava ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "no s'esperava }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "s'esperava ? a l'expressió"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "s'esperava { després de ? a l'expressió"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "s'esperava } a l'expressió"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "s'esperava : després de ? a la subexpressió"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "s'esperava { després de : a l'expressió"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "s'esperava | al final de l'expressió"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iterador de seqüència que s'utilitza amb seqüències de diferents mides"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: El Fread ha fallat: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "predefineix MACRO amb el valor EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
-msgstr "defineix la MACRO amb el valor EXPR"
+msgstr "defineix la MACRO amb el valor de l'EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "des-defineix la MACRO"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MACRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "imprimeix l'expansió de la macro de l'EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
-msgstr "llegeix <FILE:...> en comptes dels fitxers per defecte"
+msgstr "llegeix <FITXER:...> en comptes dels fitxers per defecte"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FITXER:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "no habilitis cap complement"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
-msgstr "no verifiquis els resums dels fitxers"
+msgstr "no verifiquis els resums dels paquets"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
-msgstr "no verifiquis les capçaleres de la base de dades en obtenir-les"
+msgstr "no verifiquis les capçaleres de la base de dades quan s'obtinguin"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "no verifiquis les signatures del paquet"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
-msgstr "envia de la sortida estàndard a CMD"
+msgstr "envia de la sortida estàndard a l'ORDRE"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
-msgstr "CMD"
+msgstr "ORDRE"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
-msgstr "utilitza ROOT com a directori d'alt nivell"
+msgstr "utilitza l'ARREL com el directori de nivell superior"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
-msgstr "ROOT"
+msgstr "ARREL"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
-msgstr ""
+msgstr "utilitza la base de dades en el DIRECTORI"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
-msgstr ""
+msgstr "DIRECTORI"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
-msgstr "mostra etiquetes de consulta conegudes"
+msgstr "mostra les etiquetes conegudes de consulta"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
-msgstr "mostra rpmrc final i la configuració de macros"
+msgstr "mostra el rpmrc final i la configuració de les macros"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "proporciona sortides menys detallades"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "proporciona sortides més detallades"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
-msgstr "escriu la versió d'RPM que s'està usant"
+msgstr "escriu la versió del RPM que s'està utilitzant"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
-msgstr "depura la màquina d'estats del fitxer de dades"
+msgstr "depura la màquina d'estats del fitxer de càrrega"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
-msgstr "depura l'E/S de l'rpmio"
+msgstr "depura l'E/S de rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: la taula d'opcions no està ben configurada (%d)\n"
@@ -1914,23 +2257,23 @@ msgstr "els camins exclosos han de començar per /"
#: lib/poptI.c:64
msgid "relocations must begin with a /"
-msgstr "les reubicacions han de començar per /"
+msgstr "els trasllats han de començar amb /"
#: lib/poptI.c:67
msgid "relocations must contain a ="
-msgstr "les reubicacions han de contenir ="
+msgstr "els trasllats han de contenir un ="
#: lib/poptI.c:70
msgid "relocations must have a / following the ="
-msgstr "les reubicacions han de tenir un / seguit de ="
+msgstr "els trasllats han de tenir un / a continuació del ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-"instal·la tots els fitxers, fins i tot configuracions que podrien ser "
+"instal·la tots els fitxers, fins i tot les configuracions que podrien ser "
"ignorades"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1938,152 +2281,162 @@ msgstr ""
"suprimeix tots els paquets que coincideixen amb <paquet> (normalment es "
"genera un error si <paquet> especifica múltiples paquets)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
-msgstr "reubica els fitxers en un paquet no reubicable"
+msgstr "trasllada els fitxers al paquet sense translació"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
-msgstr "escriu els bucles de dependències com a avís"
+msgstr "escriu els bucles de dependències com advertències"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "suprimeix (desinstal·la) un paquet"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<paquet>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "no instal·lis fitxers de configuració"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
-msgstr "no instal·lis documentació"
+msgstr "no instal·lis la documentació"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
-msgstr "ignora fitxers amb un component inicial <camí> "
+msgstr "ignora els fitxers amb un component inicial <camí> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<camí>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "abreviatura de --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "actualitza els paquets si ja estan instal·lats"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
-msgstr "<fitxerPaquet>+"
+msgstr "<fitxer del paquet>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
-msgstr "escriu marques durant la instal·lació de paquets (millor amb -v)"
+msgstr "escriu marques durant la instal·lació dels paquets (millor amb -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "no verifiquis l'arquitectura del paquet"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "no verifiquis el sistema operatiu del paquet"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
-msgstr "no comprovis l'espai en disc abans d'instal·lar"
+msgstr "no comprovis l'espai del disc abans d'instal·lar"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "instal·la documentació"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr "instal·la paquets"
+msgstr "instal·la els paquets"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "actualitza la base de dades, però no modifiquis el sistema de fitxers"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "no verifiquis les dependències dels paquets"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
-msgstr "no verificar els resums dels fitxers"
+msgstr "no verifiquis els resums dels fitxers"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
-msgstr "no verificar els resums dels fitxers (obsolet)"
+msgstr "no verifiquis els resums dels fitxers (obsolet)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "no instal·lis els contexts de seguretat dels fitxers"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"no reordenis la instal·lació dels paquets per a satisfer les dependències"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "no executis els scriptlets del paquet"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
-msgstr "no executis cap scriptlet %%pre"
+msgstr "no executis el scriptlet %%pre (si n'hi hagués)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
-msgstr "no executis cap scriptlet %%post"
+msgstr "no executis el scriptlet %%post (si n'hi hagués)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
-msgstr "no executis cap scriptlet %%preun"
+msgstr "no executis el scriptlet %%preun (si n'hi hagués)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
-msgstr "no executis cap scriptlet %%postun"
+msgstr "no executis el scriptlet %%postun (si n'hi hagués)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "no executis el scriptlet %%pretrans (si n'hi hagués)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "no executis el scriptlet %%posttrans (si n'hi hagués)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "no executis cap scriptlet invocat per aquest paquet"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "no executis cap scriptlet %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "no executis cap scriptlet %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "no executis cap scriptlet %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "no executis cap scriptlet %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2091,384 +2444,421 @@ msgstr ""
"actualitza a una versió antiga del paquet (--force ho fa automàticament en "
"les actualitzacions)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
-msgstr "escriu els percentatges com a instal·lació de paquets"
+msgstr "escriu els percentatges en la instal·lació dels paquets"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
-msgstr "reubica el paquet a <dir>, si és reubicable"
+msgstr "trasllada el paquet al <dir>, si es pot traslladar"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
-msgstr "reubica els fitxers del camí <vell> al <nou>"
+msgstr "trasllada els fitxers del camí <antic> al <nou>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<vell>=<nou>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ignora els conflictes de fitxers entre paquets"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "reinstal·la si el paquet ja està present"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "no instal·lis, però digues si funcionarà correctament o no"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
-msgstr "actualitza paquets"
+msgstr "actualitza els paquets"
+
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "reinstal·la els paquets"
-#: lib/poptQV.c:67
+#: lib/poptQV.c:75
msgid "query/verify all packages"
-msgstr "comprova tots els paquets"
+msgstr "consulta o verifica tots els paquets"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
-msgstr "mode de comprovació de signatura"
+msgstr "mode rpm de comprovació de signatura"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
-msgstr "comprova a quins paquets pertany aquest fitxer"
+msgstr "consulta o verifica els paquets a què pertany aquest fitxer"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
-msgstr "comprova paquets en el grup"
+msgstr "consulta o verifica els paquets al grup"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
-msgstr "comprova un paquet"
+msgstr "consulta o verifica un fitxer del paquet"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
-msgstr "comprova quins paquets tenen identificador"
+msgstr "consulta o verifica els paquets amb l'identificador de paquet"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
-msgstr "comprova paquets amb identificació de capçalera"
+msgstr "consulta o verifica els paquets amb l'identificador de capçalera"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
-msgstr "mode de consulta"
+msgstr "mode rpm de consulta"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
-msgstr "comprova una instància de capçalera"
+msgstr "consulta o verifica una instància de capçalera"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
-msgstr "comprova els paquets de la transacció d'instal·lació"
+msgstr "consulta o verifica els paquets des de la transacció d'instal·lació"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "consulta els paquets exigits pel paquet"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
-msgstr "mode de verificació"
+msgstr "mode rpm de verificació"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
-msgstr "comprova les relacions de dependència dels paquets"
+msgstr "consulta o verifica els paquets que requereixen una dependència"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
-msgstr "comprova els paquets que satisfan les relacions de dependència"
+msgstr "consulta o verifica els paquets que proporcionen una dependència"
+
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "consulta o verifica els paquets que recomanin una dependència"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "consulta o verifica els paquets que suggereixin una dependència"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr "consulta o verifica els paquets que ampliïn una dependència"
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr "consulta o verifica els paquets que millorin una dependència"
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
-msgstr "no passis els arguments"
+msgstr "no englobis els arguments"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
-msgstr ""
-"no processis els fitxers que no pertanyin al paquet com a fitxers manifest"
+msgstr "no processis els fitxers que no pertanyin al paquet com els manifests"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "mostra tots els fitxers de configuració"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
-msgstr "mostra llista de fitxers de documentació"
+msgstr "mostra tots els fitxers de documentació"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "mostra llista de fitxers de documentació"
+msgstr "mostra tots els fitxers de llicència"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "mostra tots els fitxers de llicència"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
-msgstr "mostra informació bàsica del fitxer"
+msgstr "mostra la informació bàsica del fitxer"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "mostra tots els fitxers del paquet"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
-msgstr "omet fitxers %%ghost"
+msgstr "ignora els fitxers %%ghost"
+
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "ignora els fitxers %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
-msgstr "mostra l'estat dels fitxers de la llista"
+msgstr "mostra els estats dels fitxers llistats"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
-msgstr "no comprovis la mida dels fitxers"
+msgstr "no verifiquis la mida dels fitxers"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
-msgstr "no comprovis l'enllaç simbòlic dels fitxers"
+msgstr "no verifiquis l'enllaç simbòlic dels fitxers"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
-msgstr "no comprovis qui és el propietari dels fitxers"
+msgstr "no verifiquis qui és el propietari dels fitxers"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
-msgstr "no comprovis a quin grup pertanyen els fitxers"
+msgstr "no verifiquis a quin grup pertanyen els fitxers"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
-msgstr "no comprovis la data de modificació dels fitxers"
+msgstr "no verifiquis la data de modificació dels fitxers"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
-msgstr "no comprovis el mode dels fitxers"
+msgstr "no verifiquis el mode dels fitxers"
-#: lib/poptQV.c:233
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
+msgstr "no verifiquis els contextos de seguretat dels fitxers"
+
+#: lib/poptQV.c:264
msgid "don't verify capabilities of files"
msgstr "no verifiquis les capacitats dels fitxers"
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
-msgstr "no comprovis els contextos de seguretat dels fitxers"
-
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
-msgstr "no comprovis els fitxers del paquet"
+msgstr "no verifiquis els fitxers del paquet"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
-msgstr "no comprovis les relacions de dependència del paquet"
+msgstr "no verifiquis les relacions de dependència del paquet"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "no executis els scripts de verificació"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
-msgstr ""
+msgstr "Falten les funcionalitats rpmlib per a %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
-msgstr "s'espera un paquet de codi font, però s'ha trobat un de binari\n"
+msgstr ""
+"s'esperava un paquet de les fonts, però se n'ha trobat un dels binaris\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
-msgstr "el paquet font no conté un fitxer .spec\n"
+msgstr "el paquet de les fonts no conté cap fitxer .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
-msgstr "ha fallat el desempaquetat de l'arxiu%s%s: %s\n"
+msgstr "ha fallat el desempaquetatge de l'arxiu%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " al fitxer "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "ha fallat %s al fitxer %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "ha fallat %s: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "format incorrecte: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(no conté fitxers)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "reemplaçat "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "no instal·lat "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "xarxa compartida"
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "color incorrecte "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(cap estat) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(%3d desconegut) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "el paquet no té propietari dels fitxers/llistes de grup\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
-msgstr "el paquet no té ni propietari de fitxer ni llistes d'id\n"
+msgstr "el paquet no té ni propietari de fitxer ni llistes d'id.\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "el grup %s no conté cap paquet\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "cap paquet dispara %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "%s mal format: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "cap paquet concorda amb %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "cap paquet necessita %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "no hi ha cap paquet que recomani %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "no hi ha cap paquet que suggereixi %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "no hi ha cap paquet que ampliï %s\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "no hi ha cap paquet que millori %s\n"
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "cap paquet proporciona %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "fitxer %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "el fitxer %s no pertany a cap paquet\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "número de paquet invàlid: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
-msgstr ""
+msgstr "no s'ha pogut llegir el registre %u\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
-msgstr "no s'ha instal·lat el paquet %s\n"
+msgstr "el paquet %s no està instal·lat\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "etiqueta desconeguda: «%s»\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
-msgstr ""
+msgstr "%s: ha fallat la importació de la clau %d.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: ha fallat la lectura de la importació (%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-"%s: la regió de capçalera inmutable no s'ha pogut llegir. El paquet és "
-"corrupte?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NO ÉS CORRECTE"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "D'ACORD"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (CLAUS NO TROBADES:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (CLAUS NO FIABLES:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
-msgstr "%s: ha fallat l'apertura: %s\n"
+msgstr "%s: ha fallat l'obertura: %s\n"
#: lib/rpmchroot.c:43
#, c-format
msgid "Unable to open current directory: %m\n"
-msgstr ""
+msgstr "No es pot obrir el directori actual: %m\n"
#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
#, c-format
msgid "%s: chroot directory not set\n"
-msgstr ""
+msgstr "%s: directori chroot sense establir\n"
#: lib/rpmchroot.c:70
#, c-format
@@ -2478,221 +2868,453 @@ msgstr "No s'ha pogut canviar el directori root: %m\n"
#: lib/rpmchroot.c:95
#, c-format
msgid "Unable to restore root directory: %m\n"
+msgstr "No es pot restaurar el directori arrel: %m\n"
+
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "S'estan generant els %d índexs que falten, si us plau, espereu...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "no es pot obrir l'índex %s mitjançant %s - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "no s'ha establert cap dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: s'ignora"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "s'ha produït un error (%d) en emmagatzemar el registre #%d a %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: ha fallat regexec: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: ha fallat regcomp: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: s'ignora"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: s'ha obtingut malmesa la capçalera #%u -- s'ignora.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: no s'ha pogut llegir la capçalera a 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "no s'ha establert el dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "ha fallat en crear el directori %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "la capçalera #%u en la base de dades és incorrecta -- s'ignora.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "no es pot afegir el registre originalment a %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"no s'ha pogut reconstruir la base de dades: la base de dades original "
+"continua al seu lloc\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "no s'ha pogut substituir l'antiga base de dades amb la nova\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NO "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "SÃ"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
-msgstr ""
-"Les dependències PreReq:, Provides:, i Obsoletes: disposen de versionatge."
+msgstr "Les dependències PreReq:, Provides: i Obsoletes: suporten versions."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"els noms de fitxer s'han emmagatzemat com una tupla (dirName,baseName,"
-"dirIndex), no com a camí"
+"dirIndex), no com un camí."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
-msgstr "les dades del paquet es poden comprimir amb el bzip2."
+msgstr "la càrrega del paquet es pot comprimir mitjançant bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
-msgstr "Les dades del paquet es poden comprimir amb xz."
+msgstr "la càrrega del paquet es pot comprimir mitjançant xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
-msgstr "Les dades del paquet es poden comprimir amb bzip2."
+msgstr "la càrrega del paquet es pot comprimir mitjançant lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
-msgstr "els fitxer de les dades del paquet tenen el prefix «./»."
+msgstr "els fitxers de càrrega del paquet tenen el prefix «./»."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
"no s'ha proporcionat implícitament el nom-versió-alliberament del paquet."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "les etiquetes de la capçalera sempre s'ordenen després de carregar-se."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
-msgstr "l'íntèrpret de l'scriptlet pot emprar arguments de la capçalera."
+msgstr "l'intèrpret del scriptlet pot utilitzar arguments de la capçalera."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
"es pot instal·lar un conjunt d'enllaços durs a fitxer sense que estiguin "
"complets."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"els scriptlets del paquet poden accedir la base de dades rpm durant la "
-"instal·lació"
+"instal·lació."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
-msgstr "es poden emprar scripts en lua."
+msgstr "es poden utilitzar scripts en lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "l'algorisme de resum de fitxer és configurable per paquet"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "suport per a capacitats de fitxer POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
+"els scriptlets del paquet es poden expandir en el moment de la instal·lació."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "suporta els fitxers superiors als 4 GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "compatibilitat per a les dependències enriquides."
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "op desconegut de dependència enriquida '%.*s'"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Cal el nom"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "La dependència enriquida no comença amb '('"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "Falten argument a l'op de la dependència enriquida"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "Dependència enriquida buida"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "Dependència enriquida sense acabar: %s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr "No es poden encadenar diferents ops"
+
+#: lib/rpmds.c:1564
+#, fuzzy
+msgid "Can only chain and/or/with ops"
+msgstr "Únicament es poden encadenar ops AND i OR"
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Valor incorrecte del magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Capçalera incorrecta o il·legible"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "La mida de la capçalera és massa gran"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "El fitxer és massa gran per a l'arxiu"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Tipus de fitxer desconegut"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Falten fitxers"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "No hi ha coincidència de resums"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Error intern"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "El fitxer de l'arxiu no és a la capçalera"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " ha fallat - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (error 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
-msgstr "ha fallat l'apertura de %s: %s\n"
+msgstr "ha fallat l'obertura de %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr "S'ha superat el nivell màxim de recursivitat del manifest: %s\n"
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: no és un paquet rpm (o un manifest de paquet)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
-msgstr ""
+msgstr "S'està actualitzant o instal·lant...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
-msgstr ""
+msgstr "S'està netejant o suprimint...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "S'està preparant..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
-msgstr ""
+msgstr "S'estan preparant els paquets..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Dependències fallides:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: no és un paquet rpm (o un manifest de paquet): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "no es pot instal·lar %s\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "S'està obtenint %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
-msgstr "S'està ometent %s - ha fallat la transferència\n"
+msgstr "s'ignora %s - va fallar la transferència\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
-msgstr "el paquet %s no és reubicable\n"
+msgstr "el paquet %s no es pot traslladar\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "s'ha produït un error en llegir del fitxer %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
-msgstr "\"%s\" especifica múltiples paquets:\n"
+msgstr "«%s» especifica múltiples paquets:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "no es pot obrir %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "S'està instal·lant %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "no és un paquet rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
-msgstr "tipus de signatura invàlida"
+msgstr "tipus de signatura no vàlida"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
-msgstr "versió d'empaquetat RPM no suportada"
+msgstr "versió no suportada d'empaquetatge RPM"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "ha fallat la lectura: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
-msgstr ""
+msgstr "no és un paquet rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
-msgstr ""
+msgstr "no es pot crear el bloqueig %s a %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
-msgstr ""
+msgstr "a l'espera del bloqueig %s a %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
-msgstr ""
+msgstr "Ha fallat el dlopen %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
-msgstr ""
+msgstr "La resolució del símbol %s ha fallat: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr ""
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Complement %%__%s_%s no configurat\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
-msgstr ""
-
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
+msgstr "Complement %s no carregat\n"
#: lib/rpmprob.c:109
msgid "different"
@@ -2701,12 +3323,12 @@ msgstr "diferent"
#: lib/rpmprob.c:114
#, c-format
msgid "package %s is intended for a %s architecture"
-msgstr "el paquet %s és per a arquitectures %s"
+msgstr "el paquet %s està destinat a una arquitectura %s"
#: lib/rpmprob.c:118
#, c-format
msgid "package %s is intended for a %s operating system"
-msgstr "el paquet %s és per a sistemes operatius %s"
+msgstr "el paquet %s està destinat a un sistema operatiu %s"
#: lib/rpmprob.c:122
#, c-format
@@ -2716,18 +3338,19 @@ msgstr "el paquet %s ja s'ha instal·lat"
#: lib/rpmprob.c:125
#, c-format
msgid "path %s in package %s is not relocatable"
-msgstr "el camí %s del paquet %s no és reubicable"
+msgstr "el camí %s al paquet %s no es pot traslladar"
#: lib/rpmprob.c:130
#, c-format
msgid "file %s conflicts between attempted installs of %s and %s"
-msgstr "el fitxer %s té un conflicte amb els intents d'instal·lació de %s i %s"
+msgstr ""
+"el fitxer %s entra amb conflicte entre els intents d'instal·lació de %s i %s"
#: lib/rpmprob.c:135
#, c-format
msgid "file %s from install of %s conflicts with file from package %s"
msgstr ""
-"el fitxer %s de la instal·lació de %s té un conflicte amb un fitxer del "
+"el fitxer %s de la instal·lació de %s entra amb conflicte amb el fitxer del "
"paquet %s"
#: lib/rpmprob.c:140
@@ -2739,835 +3362,668 @@ msgstr "ja s'ha instal·lat el paquet %s, que és més nou que %s"
#, c-format
msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
msgstr ""
-"el paquet a instal·lar %s necessita %<PRIu64>%cB al sistema de fitxers %s"
+"la instal·lació del paquet %s necessita %<PRIu64>%cB al sistema de fitxers %s"
#: lib/rpmprob.c:155
#, c-format
msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
msgstr ""
-"el paquet a instal·lar %s necessita %<PRIu64> nodes-i al sistema de fitxers "
-"%s"
+"la instal·lació del paquet %s necessita %<PRIu64> nodes-i al sistema de "
+"fitxers %s"
#: lib/rpmprob.c:159
#, c-format
msgid "%s is needed by %s%s"
-msgstr "el paquet %s és requerit per %s%s"
+msgstr "el paquet %s és requerit pel paquet %s%s"
#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
msgid "(installed) "
-msgstr "(instalat) "
+msgstr "(instal·lat) "
#: lib/rpmprob.c:163
#, c-format
msgid "%s conflicts with %s%s"
-msgstr "%s té conflictes amb %s%s"
+msgstr "%s entra en conflicte amb %s%s"
#: lib/rpmprob.c:167
#, c-format
msgid "%s is obsoleted by %s%s"
-msgstr ""
+msgstr "%s està devaluat amb %s%s"
#: lib/rpmprob.c:172
#, c-format
msgid "unknown error %d encountered while manipulating package %s"
msgstr "error desconegut %d en manipular el paquet %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
-msgstr "falten el segon ':' a %s:%d\n"
+msgstr "falta el segon «:» a %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "falta el nom d'arquitectura a %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
-msgstr "Línia de dades incompleta a %s:%d\n"
+msgstr "Línia incompleta de dades a %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Massa arguments a la línia de dades a %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
-msgstr "Número d'arquitectura/S.O. incorrecte: %s (%s:%d)\n"
+msgstr "Número incorrecte d'arch/os: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
-msgstr "Línia per defecte incorrecta a %s:%d\n"
+msgstr "Línia incompleta per defecte a %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Massa arguments a la línia per defecte a %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
-msgstr "manca ':' (trobat a 0x%02x) a %s:%d\n"
+msgstr "falta un «;» (trobat a 0x%02x) a %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
-msgstr "manca un argument per a %s a %s:%d\n"
+msgstr "falta l'argument per %s a %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "no s'ha pogut obrir %s a %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
-msgstr "falta l'arquitecutra per a %s a %s:%d\n"
+msgstr "falta l'arquitectura per a %s a %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
-msgstr "opció incorrecte '%s' a %s:%d\n"
+msgstr "opció incorrecta «%s» a %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
+msgstr "La lectura del vector auxiliar ha fallat, /proc no està muntat?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Sistema desconegut: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "contacteu amb %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "No s'ha pogut obrir %s per a lectura: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "No s'ha cridat cap exec() després del fork() a l'scriptlet de lua\n"
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
-msgstr ""
+msgstr "No s'ha pogut restaurar el directori actual: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
-msgstr "no s'ha muntat la disponibilitat per a emprar scriptlets <lua>\n"
+msgstr "no s'ha construït amb la compatibilitat cap als scriptlets <lua>\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "No s'ha pogut crear el fitxer temporal per a %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "S'ha produït un error en duplicar el descriptor de fitxer: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "El fwrite ha fallat: %s"
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
-msgstr "Ha fallat l'scriptlet %s, waitpid(%d) rc %d: %s\n"
+msgstr "Ha fallat el scriptlet %s, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s ha fallat l'scriplet, senyal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
-msgstr "Ha fallat l'scriptlet %s, estat de sortida %d\n"
+msgstr "Ha fallat el scriptlet %s, estat de sortida %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Format desconegut"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
-msgstr ""
+msgstr "instal·la"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
-msgstr ""
+msgstr "esborra"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "no es pot obrir la base de dades Packages a %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
-msgstr "hi ha un '(' de més a l'etiqueta del paquet: %s\n"
+msgstr "hi ha un «(» de més a l'etiqueta del paquet: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
-msgstr "falta '(' a l'etiqueta del paquet: %s\n"
+msgstr "falta «(» a l'etiqueta del paquet: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
-msgstr "falta ')' a l'etiqueta del paquet: %s\n"
+msgstr "falta un «)» a l'etiqueta del paquet: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: ha fallat la lectura de la clau pública.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
-msgstr ""
+msgstr "transacció"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "mida sigh(%d): dolenta, la lectura ha retornat %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "magic sigh: dolent\n"
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "etiquetes sigh: dolentes, número d'etiquetes(%d) fora de rang\n"
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "dades sigh: dolentes, número de bytes(%d) fora de rang\n"
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "blob sigh(%d): dolent, lectura ha retornat %d\n"
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-"etiqueta sigh[%d]: dolenta, etiqueta %d tipus %d desplaçament %d compte %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "càrrega sigh: dolenta\n"
-#: lib/signature.c:219
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "emplenat sigh(%zd): dolent, s'han llegit %zd bytes\n"
-
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigSize sigh(%zd): dolent, ha fallat fstat(2)\n"
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-"La regió inmutable de la capçalera no s'ha pogut llegir. És possible que el "
-"paquet sigui corrupte\n"
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "Resum MD5:"
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Capçalera de resum SHA1:"
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "Capçalera "
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:178
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "failed"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "manca %c %s"
-
-#: lib/verify.c:422
+#: lib/rpmvs.c:188
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Dependències insatisfetes per a %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "manca { després de %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "manca } després de %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "el format de l'etiqueta és buit"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "el nom de l'etiqueta és buit"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "etiqueta desconeguda"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "s'esperava ] al final de la matriu"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "no s'esperava ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "no s'esperava }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "s'esperava ? a l'expressió"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "s'esperava { després de ? a l'expressió"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "s'esperava } a l'expressió"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "s'esperava : després de ? a la subexpressió"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "s'esperava { després de : a l'expressió"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "s'esperava | al final de l'expressió"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iterador de matrius emprat amb matrius de mides diferents"
-
-#: lib/rpmdb.c:97
+#: lib/rpmvs.c:195
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "no es pot obrir l'índex de %s emprant db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/rpmvs.c:206
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "no s'ha establert cap dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: s'està ignorant"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "s'ha produït un error (%d) en emmagatzemar el registre #%d a %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: ha fallat regexec: %s\n"
-
-#: lib/rpmdb.c:1596
+#: lib/rpmvs.c:261
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: ha fallat regcomp: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: s'està ignorant"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: s'ha obtingut la capçalera #%u malmesa -- s'està ignorant.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/rpmdb.c:2358
+#: lib/rpmvs.c:268
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "%s%s"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: no s'ha pogut llegir la capçalera a 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "error(%d) en establir els registres «%s» de l'índex %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "error(%d) en emmagatzemar el registre «%s» en %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "error(%d) en suprimir el registre «%s» de %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "error(%d) en assignar la instància de nou paquet\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "s'ha produït un error (%d) en obtenir «%s» registres de l'índex %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "error(%d) en emmagatzemar el registre %s a %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "no s'ha establert el dbpath"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "ha fallat en crear el directori %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "la capçalera #%u de la base de dades és incorrecta -- s'ignorarà.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "no es pot afegir el registre originalment a %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-"no s'ha pogut remuntar la base de dades: es continua fent servir la base de "
-"dades original\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "no s'ha pogut reemplaçar la base de dades antiga amb la nova\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "reemplaçeu els fitxers a %s amb fitxers de %s per a recuperar-ho"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "no s'ha pogut suprimir el directori %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d error(%d) de %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d error(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "no es pot obtenir el blocatge %s a %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "compartit"
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exclusiu"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "opció de la bd no reconeguda: s'ignora «%s».\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s té un valor numèric invàlid, s'ignorarà\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s té un valor de tipus «long» massa gran o massa petit, s'ignorarà\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-"%s té un valor de tipus «enter» massa llarg o massa petit, s'ignorarà\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Capçalera "
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "No es pot tornar a carregar la capçalera de signatura.\n"
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: lib/transaction.c:1397
+msgid "skipped"
+msgstr "s'ha ignorat"
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: lib/transaction.c:1397
+msgid "failed"
+msgstr "ha fallat"
-#: plugins/sepolicy.c:306
+#: lib/verify.c:263
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Duplica el nom de l'usuari o l'UID per a l'usuari %s\n"
-#: plugins/sepolicy.c:337
+#: lib/verify.c:284
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Duplica el nom del grup o el GID per al grup %s\n"
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
+#: lib/verify.c:395
+msgid "no state"
+msgstr "sense estat"
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr ""
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "estat desconegut"
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: lib/verify.c:448
#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "falta %c %s"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Dependències insatisfetes per a %s:\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
+msgid "Unable to reset nice value: %s"
+msgstr "No es pot restablir el valor de nice: %s"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
+msgid "Unable to reset I/O priority: %s"
+msgstr "No es pot restablir la prioritat de l'E/S: %s"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== actiu %d buit %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(buit)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(buit)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "La macro %%%s té un cos inacabat\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "La macro %%%s té opcions inacabades\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "La macro %%%s té un nom invàlid (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "La macro %%%s té un cos inacabat\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "La macro %%%s té opcions inacabades\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "La macro %%%s té un cos buit\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "La macro %%%s necessita un espai en blanc abans del cos\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
-msgstr "No s'ha expandit la macro %%%s\n"
+msgstr "Ha fallat l'expansió de la macro %%%s\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "La macro %%%s té un nom invàlid (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "La macro %%%s (%s) no s'ha emprat sota el nivell %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "S'ha definit la macro %%%s però no s'utilitza dins de l'àmbit\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Opció desconeguda %c a %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
+"Hi ha massa nivells de recursivitat en l'expansió de la macro. És probable "
+"que sigui a causa de la declaració recursiva de la macro.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "%c sense terminar: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Un %% precedeix una macro que no es pot analitzar\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "ha fallat la càrrega del fitxer de les macros %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== actiu %d buit %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "S'ha produït un error en crear el fitxer temporal %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Fitxer %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
-msgstr "El fitxer %s fa menys de %u bytes\n"
+msgstr "El fitxer %s és inferior als %u bytes\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "no s'ha pogut crear el directori"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[cap]"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(cap error)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "error fatal: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "error: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "advertència: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
-msgstr "sintaxi invàlida en l'scriptlet lua: %s\n"
+msgstr "sintaxi no vàlida en el scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
-msgstr "sintaxi invàlida en l'script lua: %s\n"
+msgstr "sintaxi no vàlida en el script lua: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
-msgstr "ha fallat l'script lua: %s\n"
+msgstr "ha fallat el script lua: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
-msgstr "sintaxi invàlida en el ftixer lua: %s\n"
+msgstr "sintaxi no vàlida al fitxer lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "Ha fallat el hook lua: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(cap error)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "error fatal: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "error: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "avís: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "l'assignació de memòria (%u bytes) ha retornat NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr "V%d %s/%s %s, id. de la clau %s"
+
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
+msgstr "(cap)"
+
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "s'ha produït un error en crear el directori temporal %s: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "s'ha produït un error en crear la FIFO fifo %s: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "s'ha produït un error en suprimir la FIFO fifo %s: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "s'ha produït un error en suprimir el directori fifo %s: %m\n"
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: ha fallat l'Fwrite: %s\n"
+msgstr "%s: ha fallat el fwrite: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Ha fallat el fread: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
-msgstr "%s: ha fallat l'Fflush: %s\n"
+msgstr "%s: ha fallat el fflush: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
-msgstr ""
+msgstr "Signatura PGP no suportada\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
-msgstr ""
+msgstr "Algoritme de dispersió PGP no suportat %u\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgstr "Algoritme de clau pública PGP no suportat %u\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "No s'ha pogut crear una canonada per a la signatura: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "No es pot executar %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "El fopen ha fallat\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "No s'ha pogut escriure a la canonada\n"
+
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr "No s'ha pogut llegir des del fitxer %s: %s\n"
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "ha fallat l'execució del gpg (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "el gpg no ha escrit la signatura\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "no es pot llegir la signatura\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
-msgstr "Ha fallat rpmMkTemp\n"
+msgstr "Ha fallat el rpmMkTemp\n"
+
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: ha fallat writeLead: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: El rpmReadSignature ha fallat: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: ha fallat el headerRead: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "No es poden signar els paquets RPM v3\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s ja conté una signatura idèntica i s'ignora\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: ha fallat rpmWriteSignature: %s\n"
+msgstr "%s: ha fallat el rpmWriteSignature: %s\n"
+
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: ha fallat el writeLead: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
+msgstr "ha fallat la substitució %s: %s\n"
+
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: ha fallat la lectura del manifest: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
-msgstr "no verifiquis la signatura de la capçalera i les dades"
+msgstr "no verifiquis la signatura de la capçalera i la càrrega"
diff --git a/po/cmn.po b/po/cmn.po
new file mode 100644
index 000000000..23a25cdee
--- /dev/null
+++ b/po/cmn.po
@@ -0,0 +1,3935 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 趙惟倫 <bluebat@member.fsf.org>, 2013
+# 趙惟倫 <bluebat@member.fsf.org>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: RPM\n"
+"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Chinese (Mandarin) (http://www.transifex.com/rpm-team/rpm/"
+"language/cmn/)\n"
+"Language: cmn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: cliutils.c:21 lib/poptI.c:29
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s:%s\n"
+
+#: cliutils.c:27 lib/poptALL.c:56
+#, c-format
+msgid "RPM version %s\n"
+msgstr "RPM 版本 %s\n"
+
+#: cliutils.c:32
+#, c-format
+msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
+msgstr "著作權所有 (C) 1998-2002 - Red Hat, Inc.\n"
+
+#: cliutils.c:33
+#, c-format
+msgid ""
+"This program may be freely redistributed under the terms of the GNU GPL\n"
+msgstr "此程å¼å…許在éµå®ˆ GNU GPL æ¢æ¬¾çš„å‰æ下自由散布\n"
+
+#: cliutils.c:53
+#, c-format
+msgid "creating a pipe for --pipe failed: %m\n"
+msgstr "以 --pipe 建立管線時失敗:%m\n"
+
+#: cliutils.c:62
+#, c-format
+msgid "exec failed\n"
+msgstr "執行失敗\n"
+
+#: rpm2archive.c:91 rpm2cpio.c:68
+#, c-format
+msgid "argument is not an RPM package\n"
+msgstr "引數ä¸æ˜¯ RPM 套件\n"
+
+#: rpm2archive.c:96 rpm2cpio.c:73
+#, c-format
+msgid "error reading header from package\n"
+msgstr "讀å–套件的標頭資訊時發生錯誤\n"
+
+#: rpm2archive.c:111 rpm2cpio.c:88
+#, c-format
+msgid "cannot re-open payload: %s\n"
+msgstr "無法é‡æ–°é–‹å•Ÿé…¬è¼‰ï¼š%s\n"
+
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "buildroot 已被指定,忽略 %s\n"
+
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgstr "從 <specfile> é€éŽ %prep (解包原始碼並套用修補程å¼) 來建置"
+
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<specfile>"
+
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
+msgstr "從 <specfile> é€éŽ %build (%prep,然後編譯) 來建置"
+
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
+msgstr "從 <specfile> é€éŽ %install (%prep,%build,然後安è£) 來建置"
+
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
+msgstr "從 <specfile> é©—è­‰ %files å€æ®µ"
+
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
+msgstr "根據 <specfile> 建置原始碼套件與二進ä½å¥—件"
+
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
+msgstr "根據 <specfile> åªå»ºç½®äºŒé€²ä½å¥—件"
+
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
+msgstr "根據 <specfile> åªå»ºç½®åŽŸå§‹ç¢¼å¥—件"
+
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr "從 <source package> é€éŽ %install (%prep,%build,然後安è£) 來建置"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgstr "從 <tarball> é€éŽ %prep (解包原始碼和套用修補檔) 來建置"
+
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
+msgstr "<tarball>"
+
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
+msgstr "從 <tarball> é€éŽ %build (%prep,然後編譯) 來建置"
+
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
+msgstr "從 <tarball> é€éŽ %install (%prep,%build,然後安è£) 來建置"
+
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
+msgstr "從 <tarball> é©—è­‰ %files å€æ®µ"
+
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
+msgstr "從 <tarball> 中建置原始碼套件與二進ä½å¥—件"
+
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
+msgstr "從 <tarball> 中åªå»ºç½®äºŒé€²ä½å¥—件"
+
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
+msgstr "從 <tarball> 中åªå»ºç½®åŽŸå§‹ç¢¼å¥—件"
+
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
+msgstr "從 <source package> 中建置二進ä½å¥—件"
+
+#: rpmbuild.c:212
+msgid "override build root"
+msgstr "強制覆寫建置根目錄"
+
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
+msgid "remove build tree when done"
+msgstr "完æˆå¾Œç§»é™¤å»ºç½®æ¨¹"
+
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
+msgstr "忽略 ExcludeArch:根據è¦æ ¼æª”的指示"
+
+#: rpmbuild.c:220
+msgid "debug file state machine"
+msgstr "除錯檔案狀態機器"
+
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
+msgstr "ä¸åŸ·è¡Œå»ºç½®ç¨‹åºè£¡çš„任何步驟"
+
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
+msgstr "ä¸é©—證建置相ä¾é—œä¿‚"
+
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+msgstr "產生與(舊)rpm v3 å°è£ç›¸å®¹çš„套件標頭"
+
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
+msgstr "ä¸åŸ·è¡Œçµ„建的 %clean 階段"
+
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
+#, c-format
+msgid "do not execute %check stage of the build"
+msgstr "ä¸åŸ·è¡Œçµ„建的 %check 階段"
+
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
+msgstr "ä¸æŽ¥å—來自è¦æ ¼æª”çš„ i18N msgstr"
+
+#: rpmbuild.c:239
+msgid "remove sources when done"
+msgstr "完æˆå¾Œç§»é™¤åŽŸå§‹ç¢¼æª”案"
+
+#: rpmbuild.c:241
+msgid "remove specfile when done"
+msgstr "完æˆå¾Œç§»é™¤è¦æ ¼æª”"
+
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
+msgstr "直接跳到指定的階段 (åªæœ‰ç”¨æ–¼ c,i)"
+
+#: rpmbuild.c:245
+msgid "override target platform"
+msgstr "無視目標平臺"
+
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+msgstr "組建é¸é …中使用 [ <specfile> | <tarball> | <source package> ]:"
+
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "用於所有 rpm 模å¼å’Œå¯åŸ·è¡Œæª”案的共åŒé¸é …:"
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr "相ä¾æ€§å»ºç½®å¤±æ•—:\n"
+
+#: rpmbuild.c:300
+#, c-format
+msgid "Unable to open spec file %s: %s\n"
+msgstr "無法開啟 %s è¦æ ¼æª”:%s\n"
+
+#: rpmbuild.c:363
+#, c-format
+msgid "Failed to open tar pipe: %m\n"
+msgstr "無法開啟 tar 管線:%m\n"
+
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
+msgstr "無法從 %s 讀å–è¦æ ¼æª”\n"
+
+#: rpmbuild.c:401
+#, c-format
+msgid "Failed to rename %s to %s: %m\n"
+msgstr "無法將 %s é‡æ–°å‘½å為 %s:%m\n"
+
+#: rpmbuild.c:479
+#, c-format
+msgid "failed to stat %s: %m\n"
+msgstr "無法檢視 %s 的狀態:%m\n"
+
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
+msgstr "%s ä¸æ˜¯é€šå¸¸çš„檔案。\n"
+
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
+msgstr "%s 似乎ä¸æ˜¯è¦æ ¼æª”。\n"
+
+#: rpmbuild.c:556
+#, c-format
+msgid "Building target platforms: %s\n"
+msgstr "建置目標平臺:%s\n"
+
+#: rpmbuild.c:564
+#, c-format
+msgid "Building for target %s\n"
+msgstr "建置目標 %s\n"
+
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "--root (-r) 的引數必須以「/ã€é–‹é ­"
+
+#: rpmdb.c:21
+msgid "initialize database"
+msgstr "åˆå§‹åŒ–資料庫"
+
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
+msgstr "從安è£çš„套件標頭é‡å»ºè³‡æ–™åº«çš„åå‘列表"
+
+#: rpmdb.c:26
+msgid "verify database files"
+msgstr "驗證資料庫檔案"
+
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
+msgid "Database options:"
+msgstr "資料庫é¸é …:"
+
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "åªèƒ½æŒ‡å®šä¸€å€‹ä¸»è¦å·¥ä½œæ¨¡å¼"
+
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
+msgstr "驗證套件簽å"
+
+#: rpmkeys.c:22
+msgid "import an armored public key"
+msgstr "匯入一個å—ä¿è­·çš„公鑰"
+
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
+msgstr "ä¸åŒ¯å…¥ï¼Œä½†æœƒåˆ†è¾¨æ˜¯å¦å®ƒæœ‰ä½œç”¨"
+
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
+msgstr "列出 RPM 鑰匙圈的金鑰"
+
+#: rpmkeys.c:36
+msgid "Keyring options:"
+msgstr "鑰匙圈é¸é …:"
+
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
+msgstr "沒有給定引數"
+
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "查詢/驗證所é¸å¥—件的é¸é …:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "查詢é¸é … (使用 -q 或 --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "é©—è­‰é¸é … (使用 -V 或 --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "安è£/å‡ç´š/抹除é¸é …:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "åªæœ‰æŸ¥è©¢/驗證兩種工作模å¼èƒ½è¢«åŒæ™‚實行"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "未é æœŸçš„查詢旗標"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "ä¸å¯é æ–™çš„查詢格å¼"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "ä¸å¯é æ–™çš„查詢來æº"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "åªæœ‰å®‰è£èˆ‡å‡ç´šå¯ä»¥å¼·è¿«åŸ·è¡Œ"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "檔案åªèƒ½åœ¨å¥—件安è£æ™‚é‡æ–°åˆ†é…ä½ç½®"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix ä¸èƒ½å’Œ --relocate 或 --excludepath åŒæ™‚使用"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr "--relocate å’Œ --excludepath åªèƒ½åœ¨å®‰è£æ–°å¥—件時使用"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix åªèƒ½åœ¨å®‰è£æ–°å¥—件時使用"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix 的引數必須以「/ã€é–‹é ­"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) åªèƒ½åœ¨å¥—件安è£èˆ‡æŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent åªèƒ½åœ¨å¥—件安è£èˆ‡æŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "--excludedocs å’Œ --includedocs 兩個é¸é …中åªèƒ½æŒ‡å®šä¸€å€‹"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches åªèƒ½åœ¨å¥—件抹除時指定"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles åªèƒ½åœ¨å¥—件安è£æ™‚指定"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb åªèƒ½åœ¨å¥—件安è£å’ŒæŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr "與指令稿åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨å¥—件安è£å’ŒæŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr "與觸發åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨å¥—件安è£å’ŒæŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr "--nodeps åªèƒ½åœ¨å¥—件安è£ã€æŠ¹é™¤èˆ‡é©—證時指定"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test åªèƒ½åœ¨å¥—件安è£èˆ‡æŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "沒有指定è¦æŠ¹é™¤çš„套件å稱"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "沒有指定è¦å®‰è£çš„套件å稱"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "沒有給定查詢引數"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "沒有給定驗證引數"
+
+#: rpmsign.c:30
+msgid "sign package(s)"
+msgstr "簽署套件"
+
+#: rpmsign.c:32
+msgid "sign package(s) (identical to --addsign)"
+msgstr "簽署套件 (與 --addsign å«ç¾©ç›¸åŒ)"
+
+#: rpmsign.c:34
+msgid "delete package signatures"
+msgstr "刪除套件簽å"
+
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "ç°½åé¸é …:"
+
+#: rpmsign.c:101
+#, c-format
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
+msgstr "您必須在您的巨集檔案中設定「%%_gpg_nameã€\n"
+
+#: rpmsign.c:114
+#, c-format
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
+
+#: rpmspec.c:25
+msgid "parse spec file(s) to stdout"
+msgstr "å°‡è¦æ ¼æª”案剖æžåˆ°æ¨™æº–輸出"
+
+#: rpmspec.c:27
+msgid "query spec file(s)"
+msgstr "查詢è¦æ ¼æª”案"
+
+#: rpmspec.c:29
+msgid "operate on binary rpms generated by spec (default)"
+msgstr "æ“作é€éŽè¦æ ¼æ‰€å»ºç«‹çš„äºŒé€²ä½ rpm (é è¨­)"
+
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
+msgid "operate on source rpm generated by spec"
+msgstr "æ“作é€éŽè¦æ ¼æ‰€å»ºç«‹çš„原始碼 rpm"
+
+#: rpmspec.c:35 lib/poptQV.c:221
+msgid "use the following query format"
+msgstr "使用以下的查詢格å¼"
+
+#: rpmspec.c:44
+msgid "Spec options:"
+msgstr "è¦æ ¼é¸é …:"
+
+#: rpmspec.c:91
+msgid "no arguments given for parse"
+msgstr "沒有任何引數用於剖æž"
+
+#: build/build.c:120
+#, c-format
+msgid "Unable to open temp file: %s\n"
+msgstr "無法開啟暫存檔案:%s\n"
+
+#: build/build.c:125
+#, c-format
+msgid "Unable to open stream: %s\n"
+msgstr "無法開啟串æµï¼š%s\n"
+
+#: build/build.c:158
+#, c-format
+msgid "Executing(%s): %s\n"
+msgstr "正在執行(%s):%s\n"
+
+#: build/build.c:163
+#, c-format
+msgid "Exec of %s failed (%s): %s\n"
+msgstr "執行 %s 失敗 (%s):%s\n"
+
+#: build/build.c:172
+#, c-format
+msgid "Error executing scriptlet %s (%s)\n"
+msgstr "執行指令稿片段 %s (%s) 時發生錯誤\n"
+
+#: build/build.c:178
+#, c-format
+msgid "Bad exit status from %s (%s)\n"
+msgstr "來自 %s çš„ä¸ç•¶é›¢é–‹ç‹€æ…‹ (%s)\n"
+
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
+msgid ""
+"\n"
+"\n"
+"RPM build errors:\n"
+msgstr ""
+"\n"
+"\n"
+"RPM 建置錯誤:\n"
+
+#: build/expression.c:215
+msgid "syntax error while parsing ==\n"
+msgstr "å‰–æž == 時有語法錯誤\n"
+
+#: build/expression.c:245
+msgid "syntax error while parsing &&\n"
+msgstr "å‰–æž && 時有語法錯誤\n"
+
+#: build/expression.c:254
+msgid "syntax error while parsing ||\n"
+msgstr "å‰–æž || 時有語法錯誤\n"
+
+#: build/expression.c:304
+msgid "parse error in expression\n"
+msgstr "表述å¼å‰–æžéŒ¯èª¤\n"
+
+#: build/expression.c:336
+msgid "unmatched (\n"
+msgstr "ä¸ç¬¦åˆçš„ (\n"
+
+#: build/expression.c:368
+msgid "- only on numbers\n"
+msgstr "- åªèƒ½ç”¨æ–¼æ•¸å­—\n"
+
+#: build/expression.c:384
+msgid "! only on numbers\n"
+msgstr "! åªèƒ½ç”¨æ–¼æ•¸å­—\n"
+
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
+msgid "types must match\n"
+msgstr "類型必須符åˆ\n"
+
+#: build/expression.c:439
+msgid "* / not suported for strings\n"
+msgstr "字串ä¸æ”¯æ´ *ã€/\n"
+
+#: build/expression.c:490
+msgid "- not suported for strings\n"
+msgstr "字串ä¸æ”¯æ´ -\n"
+
+#: build/expression.c:637
+msgid "&& and || not suported for strings\n"
+msgstr "字串ä¸æ”¯æ´ && å’Œ ||\n"
+
+#: build/expression.c:669
+msgid "syntax error in expression\n"
+msgstr "表述å¼ä¸­æœ‰èªžæ³•éŒ¯èª¤\n"
+
+#: build/files.c:343 build/files.c:524 build/files.c:743
+#, c-format
+msgid "Missing '(' in %s %s\n"
+msgstr "在 %s %s 中有éºæ¼çš„「(ã€\n"
+
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
+#, c-format
+msgid "Missing ')' in %s(%s\n"
+msgstr "在 %s(%s 中有éºæ¼çš„「)ã€\n"
+
+#: build/files.c:378 build/files.c:684
+#, c-format
+msgid "Invalid %s token: %s\n"
+msgstr "無效的 %s 符記:%s\n"
+
+#: build/files.c:490
+#, c-format
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
+
+#: build/files.c:539
+#, c-format
+msgid "Non-white space follows %s(): %s\n"
+msgstr "%s() 之後有éžç©ºç™½ç©ºæ ¼ï¼š%s\n"
+
+#: build/files.c:579
+#, c-format
+msgid "Bad syntax: %s(%s)\n"
+msgstr "ä¸ç•¶èªžæ³•ï¼š%s(%s)\n"
+
+#: build/files.c:588
+#, c-format
+msgid "Bad mode spec: %s(%s)\n"
+msgstr "ä¸ç•¶æ¨¡å¼è¦æ ¼ï¼š%s(%s)\n"
+
+#: build/files.c:600
+#, c-format
+msgid "Bad dirmode spec: %s(%s)\n"
+msgstr "ä¸ç•¶ç›®éŒ„模å¼è¦æ ¼ï¼š%s(%s)\n"
+
+#: build/files.c:705
+#, c-format
+msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
+msgstr "ä¸å°‹å¸¸çš„語å€é•·åº¦ï¼šã€Œ%sã€æ–¼ %%lang(%s)\n"
+
+#: build/files.c:712
+#, c-format
+msgid "Duplicate locale %s in %%lang(%s)\n"
+msgstr "è¤‡è£½èªžå€ %s æ–¼ %%lang(%s)\n"
+
+#: build/files.c:827
+#, c-format
+msgid "Invalid capability: %s\n"
+msgstr "無效的功能:%s\n"
+
+#: build/files.c:837
+msgid "File capability support not built in\n"
+msgstr "檔案功能支æ´æœªå…§å»ºæ–¼\n"
+
+#: build/files.c:888
+#, c-format
+msgid "File must begin with \"/\": %s\n"
+msgstr "檔案必須以「/ã€é–‹é ­ï¼š%s\n"
+
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
+#, c-format
+msgid "Unknown file digest algorithm %u, falling back to MD5\n"
+msgstr "ä¸æ˜Žæª”案摘è¦æ¼”算法 %u,權宜è½å›ž MD5\n"
+
+#: build/files.c:1074
+#, c-format
+msgid "File listed twice: %s\n"
+msgstr "列出了兩次的檔案:%s\n"
+
+#: build/files.c:1196
+#, c-format
+msgid "reading symlink %s failed: %s\n"
+msgstr "讀å–符號éˆçµ %s 失敗:%s\n"
+
+#: build/files.c:1204
+#, c-format
+msgid "Symlink points to BuildRoot: %s -> %s\n"
+msgstr "æŒ‡å‘ BuildRoot 的符號éˆçµï¼š%s -> %s\n"
+
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
+#, c-format
+msgid "Directory not found: %s\n"
+msgstr "找ä¸åˆ°ç›®éŒ„:%s\n"
+
+#: build/files.c:1387 lib/rpminstall.c:449
+#, c-format
+msgid "File not found: %s\n"
+msgstr "找ä¸åˆ°æª”案:%s\n"
+
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
+#, c-format
+msgid "%s: can't load unknown tag (%d).\n"
+msgstr "%s:無法呼å«ä¸æ˜Žçš„標籤 (%d)。\n"
+
+#: build/files.c:1598
+#, c-format
+msgid "%s: public key read failed.\n"
+msgstr "%s:公鑰讀入失敗。\n"
+
+#: build/files.c:1602
+#, c-format
+msgid "%s: not an armored public key.\n"
+msgstr "%s:ä¸æ˜¯ä¸€å€‹å—ä¿è­·çš„公鑰。\n"
+
+#: build/files.c:1611
+#, c-format
+msgid "%s: failed to encode\n"
+msgstr "%s:編碼失敗\n"
+
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "無法建立目錄"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
+#, c-format
+msgid "File needs leading \"/\": %s\n"
+msgstr "檔案需è¦ä»¥ã€Œ/ã€é–‹é ­ï¼š%s\n"
+
+#: build/files.c:2122
+#, c-format
+msgid "%%dev glob not permitted: %s\n"
+msgstr "%%dev ä¸å…許é€éŽ glob 解æžï¼š%s\n"
+
+#: build/files.c:2134
+#, c-format
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
+
+#: build/files.c:2136
+#, c-format
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
+
+#: build/files.c:2171
+#, c-format
+msgid "Could not open %%files file %s: %m\n"
+msgstr "無法開啟 %%files 檔案 %s:%m\n"
+
+#: build/files.c:2182
+#, c-format
+msgid "line: %s\n"
+msgstr "列:%s\n"
+
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
+#, c-format
+msgid "Error reading %%files file %s: %m\n"
+msgstr "è®€å– %%files 檔案 %s 時發生錯誤:%m\n"
+
+#: build/files.c:2223
+#, c-format
+msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "ä¸åˆæ³•çš„ _docdir_fmt %s:%s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "é€éŽ glob 解æžæ‰¾ä¸åˆ°æª”案:%s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
+#, c-format
+msgid "Can't mix special %s with other forms: %s\n"
+msgstr "無法混åˆç‰¹æ®Š %s 與其他表單:%s\n"
+
+#: build/files.c:2471
+#, c-format
+msgid "More than one file on a line: %s\n"
+msgstr "一列中超éŽä¸€å€‹æª”案:%s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
+#, c-format
+msgid "Bad file: %s: %s\n"
+msgstr "ä¸ç•¶æª”案:%s:%s\n"
+
+#: build/files.c:2725
+#, c-format
+msgid "Checking for unpackaged file(s): %s\n"
+msgstr "正在檢查未打包的檔案:%s\n"
+
+#: build/files.c:2738
+#, c-format
+msgid ""
+"Installed (but unpackaged) file(s) found:\n"
+"%s"
+msgstr ""
+"æ‰¾åˆ°å·²å®‰è£ (但未打包) 的檔案:\n"
+"%s"
+
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
+#, c-format
+msgid "Processing files: %s\n"
+msgstr "正在處ç†æª”案:%s\n"
+
+#: build/files.c:3124
+#, c-format
+msgid "Binaries arch (%d) not matching the package arch (%d).\n"
+msgstr "二進ä½æž¶æ§‹ (%d) 無法匹é…套件架構 (%d)。\n"
+
+#: build/files.c:3130
+msgid "Arch dependent binaries in noarch package\n"
+msgstr "noarch 套件中有ä¾è³´æž¶æ§‹çš„二進ä½æª”\n"
+
+#: build/pack.c:91
+#, c-format
+msgid "create archive failed on file %s: %s\n"
+msgstr "建立檔案 %s å°å­˜æ™‚失敗:%s\n"
+
+#: build/pack.c:94
+#, c-format
+msgid "create archive failed: %s\n"
+msgstr "建立å°å­˜æ™‚失敗:%s\n"
+
+#: build/pack.c:121
+#, c-format
+msgid "Could not open %s file: %s\n"
+msgstr "無法開啟 %s 檔案:%s\n"
+
+#: build/pack.c:138
+#, c-format
+msgid "%s: line: %s\n"
+msgstr "%s: 列:%s\n"
+
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
+
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
+
+#: build/pack.c:198
+#, c-format
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "無法標準化主機å稱:%s\n"
+
+#: build/pack.c:358
+#, c-format
+msgid "Unknown payload compression: %s\n"
+msgstr "ä¸æ˜Žé…¬è¼‰å£“縮:%s\n"
+
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
+
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "讀å–策略檔案時失敗:%s\n"
+
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
+
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
+
+#: build/pack.c:520
+#, c-format
+msgid "Could not open %s: %s\n"
+msgstr "無法開啟 %s:%s\n"
+
+#: build/pack.c:527
+#, c-format
+msgid "Unable to write package: %s\n"
+msgstr "無法寫入套件:%s\n"
+
+#: build/pack.c:611
+#, c-format
+msgid "Wrote: %s\n"
+msgstr "已寫入:%s\n"
+
+#: build/pack.c:630
+#, c-format
+msgid "Executing \"%s\":\n"
+msgstr "正在執行「%sã€ï¼š\n"
+
+#: build/pack.c:633
+#, c-format
+msgid "Execution of \"%s\" failed.\n"
+msgstr "「%sã€åŸ·è¡Œå¤±æ•—。\n"
+
+#: build/pack.c:637
+#, c-format
+msgid "Package check \"%s\" failed.\n"
+msgstr "套件檢查「%sã€å¤±æ•—。\n"
+
+#: build/pack.c:684
+#, c-format
+msgid "Could not generate output filename for package %s: %s\n"
+msgstr "無法產生套件 %s 的檔案å稱輸出:%s\n"
+
+#: build/pack.c:701
+#, c-format
+msgid "cannot create %s: %s\n"
+msgstr "無法建立 %s:%s\n"
+
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
+#, c-format
+msgid "line %d: second %s\n"
+msgstr "第 %d 列:第二個 %s\n"
+
+#: build/parseChangelog.c:185
+#, c-format
+msgid "bogus date in %%changelog: %s\n"
+msgstr "å‡é€ çš„日期於 %%changelog:%s\n"
+
+#: build/parseChangelog.c:218
+#, c-format
+msgid "%%changelog entries must start with *\n"
+msgstr "%%changelog æ¢ç›®å¿…須以 * 符號開頭\n"
+
+#: build/parseChangelog.c:226
+#, c-format
+msgid "incomplete %%changelog entry\n"
+msgstr "ä¸å®Œæ•´çš„ %%changelog æ¢ç›®\n"
+
+#: build/parseChangelog.c:237
+#, c-format
+msgid "bad date in %%changelog: %s\n"
+msgstr "%%changelog 中å«æœ‰ä¸ç•¶æ—¥æœŸï¼š%s\n"
+
+#: build/parseChangelog.c:242
+#, c-format
+msgid "%%changelog not in descending chronological order\n"
+msgstr "%%changelog 並éžéžæ¸›ç·¨å¹´é †åº\n"
+
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
+#, c-format
+msgid "missing name in %%changelog\n"
+msgstr "%%changelog 中éºæ¼å稱\n"
+
+#: build/parseChangelog.c:272
+#, c-format
+msgid "no description in %%changelog\n"
+msgstr "%%changelog 中沒有æè¿°\n"
+
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
+#: build/parseDescription.c:32
+#, c-format
+msgid "line %d: Error parsing %%description: %s\n"
+msgstr "第 %d åˆ—ï¼šå‰–æž %%description 時發生錯誤:%s\n"
+
+#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
+#: build/parseScript.c:321
+#, c-format
+msgid "line %d: Bad option %s: %s\n"
+msgstr "第 %d 列:ä¸ç•¶é¸é … %s:%s\n"
+
+#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
+#: build/parseScript.c:332
+#, c-format
+msgid "line %d: Too many names: %s\n"
+msgstr "第 %d 列:éŽå¤šå稱:%s\n"
+
+#: build/parseFiles.c:33
+#, c-format
+msgid "line %d: Error parsing %%files: %s\n"
+msgstr "第 %d åˆ—ï¼šå‰–æž %%files 時發生錯誤:%s\n"
+
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
+#: build/parsePolicies.c:32
+#, c-format
+msgid "line %d: Error parsing %%policies: %s\n"
+msgstr "第 %d åˆ—ï¼šå‰–æž %%policies 發生錯誤:%s\n"
+
+#: build/parsePreamble.c:71
+#, c-format
+msgid "Error parsing tag field: %s\n"
+msgstr "剖æžæ¨™ç±¤æ¬„ä½æ™‚發生錯誤:%s\n"
+
+#: build/parsePreamble.c:164
+#, c-format
+msgid "line %d: Bad number: %s\n"
+msgstr "第 %d 列:ä¸ç•¶çš„編號:%s\n"
+
+#: build/parsePreamble.c:170
+#, c-format
+msgid "line %d: Bad no%s number: %u\n"
+msgstr "第 %d 列:ä¸ç•¶çš„ no%s 數字:%u\n"
+
+#: build/parsePreamble.c:233
+#, c-format
+msgid "line %d: Bad %s number: %s\n"
+msgstr "第 %d 列:ä¸ç•¶çš„ %s 數字:%s\n"
+
+#: build/parsePreamble.c:247
+#, c-format
+msgid "%s %d defined multiple times\n"
+msgstr "%s %d 被定義許多次\n"
+
+#: build/parsePreamble.c:292
+#, c-format
+msgid "Downloading %s to %s\n"
+msgstr "正在下載 %s 到 %s\n"
+
+#: build/parsePreamble.c:295
+#, c-format
+msgid "Couldn't download %s\n"
+msgstr "無法下載 %s\n"
+
+#: build/parsePreamble.c:439
+#, c-format
+msgid "Architecture is excluded: %s\n"
+msgstr "被排除的架構:%s\n"
+
+#: build/parsePreamble.c:444
+#, c-format
+msgid "Architecture is not included: %s\n"
+msgstr "未包å«çš„架構:%s\n"
+
+#: build/parsePreamble.c:449
+#, c-format
+msgid "OS is excluded: %s\n"
+msgstr "被排除的作業系統:%s\n"
+
+#: build/parsePreamble.c:454
+#, c-format
+msgid "OS is not included: %s\n"
+msgstr "未包å«çš„作業系統:%s\n"
+
+#: build/parsePreamble.c:480
+#, c-format
+msgid "%s field must be present in package: %s\n"
+msgstr "%s 欄ä½å¿…須出ç¾æ–¼å¥—件中:%s\n"
+
+#: build/parsePreamble.c:503
+#, c-format
+msgid "Duplicate %s entries in package: %s\n"
+msgstr "套件中有é‡è¤‡çš„ %s æ¢ç›®ï¼š%s\n"
+
+#: build/parsePreamble.c:568
+#, c-format
+msgid "Unable to open icon %s: %s\n"
+msgstr "無法開啟圖示 %s:%s\n"
+
+#: build/parsePreamble.c:584
+#, c-format
+msgid "Unable to read icon %s: %s\n"
+msgstr "無法讀å–圖示 %s:%s\n"
+
+#: build/parsePreamble.c:594
+#, c-format
+msgid "Unknown icon type: %s\n"
+msgstr "ä¸æ˜Žçš„圖示類型:%s\n"
+
+#: build/parsePreamble.c:608
+#, c-format
+msgid "line %d: Tag takes single token only: %s\n"
+msgstr "第 %d 列:標籤åªéœ€å–®ä¸€ç¬¦è¨˜ï¼š%s\n"
+
+#: build/parsePreamble.c:616
+#, c-format
+msgid "line %d: %s in: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:618
+#, c-format
+msgid "%s in: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:637
+#, c-format
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
+#, c-format
+msgid "line %d: Malformed tag: %s\n"
+msgstr "第 %d 列:格å¼ä¸ç•¶çš„標籤:%s\n"
+
+#: build/parsePreamble.c:745
+#, c-format
+msgid "line %d: Empty tag: %s\n"
+msgstr "第 %d 列:空的標籤:%s\n"
+
+#: build/parsePreamble.c:806
+#, c-format
+msgid "line %d: Prefixes must not end with \"/\": %s\n"
+msgstr "第 %d 列:å‰ç¶´ä¸èƒ½ä»¥ã€Œ/ã€çµå°¾ï¼š%s\n"
+
+#: build/parsePreamble.c:818
+#, c-format
+msgid "line %d: Docdir must begin with '/': %s\n"
+msgstr "第 %d 列:Docdir 必須以「/ã€é–‹é ­ï¼š%s\n"
+
+#: build/parsePreamble.c:831
+#, c-format
+msgid "line %d: Epoch field must be an unsigned number: %s\n"
+msgstr "第 %d 列:Epoch 欄ä½å¿…須是無正負號的數字:%s\n"
+
+#: build/parsePreamble.c:868
+#, c-format
+msgid "line %d: Bad %s: qualifiers: %s\n"
+msgstr "第 %d 列:ä¸ç•¶ %s:修飾詞:%s\n"
+
+#: build/parsePreamble.c:902
+#, c-format
+msgid "line %d: Bad BuildArchitecture format: %s\n"
+msgstr "第 %d 列:ä¸ç•¶ BuildArchitecture æ ¼å¼ï¼š%s\n"
+
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
+#, c-format
+msgid "line %d: Only noarch subpackages are supported: %s\n"
+msgstr "第 %d 列:åªæœ‰æ”¯æ´ noarch å­å¥—è£æ¨¡çµ„:%s\n"
+
+#: build/parsePreamble.c:934
+#, c-format
+msgid "Internal error: Bogus tag %d\n"
+msgstr "內部錯誤:å‡é€ çš„標籤 %d\n"
+
+#: build/parsePreamble.c:1032
+#, c-format
+msgid "line %d: %s is deprecated: %s\n"
+msgstr "第 %d 列:%s å·²éŽæ™‚:%s\n"
+
+#: build/parsePreamble.c:1093
+#, c-format
+msgid "Bad package specification: %s\n"
+msgstr "ä¸ç•¶å¥—件è¦æ ¼ï¼š%s\n"
+
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
+
+#: build/parsePreamble.c:1144
+#, c-format
+msgid "line %d: Unknown tag: %s\n"
+msgstr "第 %d 列:ä¸æ˜Žæ¨™ç±¤ï¼š%s\n"
+
+#: build/parsePreamble.c:1176
+#, c-format
+msgid "%%{buildroot} couldn't be empty\n"
+msgstr "%%{buildroot} ä¸å¯æ˜¯ç©ºçš„\n"
+
+#: build/parsePreamble.c:1180
+#, c-format
+msgid "%%{buildroot} can not be \"/\"\n"
+msgstr "%%{buildroot} ä¸å¯ç‚ºã€Œ/ã€\n"
+
+#: build/parsePrep.c:29
+#, c-format
+msgid "Bad source: %s: %s\n"
+msgstr "ä¸ç•¶åŽŸå§‹ç¢¼ï¼š%s:%s\n"
+
+#: build/parsePrep.c:74
+#, c-format
+msgid "No patch number %u\n"
+msgstr "沒有修補編號 %u\n"
+
+#: build/parsePrep.c:76
+#, c-format
+msgid "%%patch without corresponding \"Patch:\" tag\n"
+msgstr "%%patch å»ç„¡ç›¸æ‡‰çš„「Patch:ã€æ¨™ç±¤\n"
+
+#: build/parsePrep.c:164
+#, c-format
+msgid "No source number %u\n"
+msgstr "沒有原始碼編號 %u\n"
+
+#: build/parsePrep.c:166
+msgid "No \"Source:\" tag in the spec file\n"
+msgstr "è¦æ ¼æª”內無「Source:ã€æ¨™ç±¤\n"
+
+#: build/parsePrep.c:300
+#, c-format
+msgid "Error parsing %%setup: %s\n"
+msgstr "å‰–æž %%setup 時發生錯誤:%s\n"
+
+#: build/parsePrep.c:311
+#, c-format
+msgid "line %d: Bad arg to %%setup: %s\n"
+msgstr "第 %d 列:%%setup 中出ç¾ä¸ç•¶å¼•æ•¸ï¼š%s\n"
+
+#: build/parsePrep.c:326
+#, c-format
+msgid "line %d: Bad %%setup option %s: %s\n"
+msgstr "第 %d 列:ä¸ç•¶ %%setup é¸é … %s:%s\n"
+
+#: build/parsePrep.c:495
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#: build/parsePrep.c:508
+#, c-format
+msgid "Invalid patch number %s: %s\n"
+msgstr "無效的修補編號 %s:%s\n"
+
+#: build/parsePrep.c:535
+#, c-format
+msgid "line %d: second %%prep\n"
+msgstr "第 %d 列:第二個 %%prep\n"
+
+#: build/parseReqs.c:52
+msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
+msgstr "ä¾å­˜å­—組必須以英數字ã€_ 或 / é–‹é ­"
+
+#: build/parseReqs.c:57
+msgid "Versioned file name not permitted"
+msgstr "ä¸å…許標上版本的檔案å稱"
+
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
+
+#: build/parseReqs.c:232 build/parseReqs.c:307
+msgid "invalid dependency"
+msgstr "無效的ä¾å­˜æ€§"
+
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "所需版本"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
+#, c-format
+msgid "line %d: %s: %s\n"
+msgstr "第 %d 列:%s:%s\n"
+
+#: build/parseScript.c:263
+#, c-format
+msgid "line %d: triggers must have --: %s\n"
+msgstr "第 %d åˆ—ï¼šè§¸ç™¼å™¨å¿…é ˆåŒ…å« --:%s\n"
+
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
+#, c-format
+msgid "line %d: Error parsing %s: %s\n"
+msgstr "第 %d åˆ—ï¼šå‰–æž %s 時發生錯誤:%s\n"
+
+#: build/parseScript.c:293
+#, c-format
+msgid "line %d: internal script must end with '>': %s\n"
+msgstr "第 %d 列:內部指令稿必須以「>ã€çµå°¾ï¼š%s\n"
+
+#: build/parseScript.c:299
+#, c-format
+msgid "line %d: script program must begin with '/': %s\n"
+msgstr "第 %d 列:指令稿程å¼å¿…須以「/ã€é–‹é ­ï¼š%s\n"
+
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
+#, c-format
+msgid "line %d: Second %s\n"
+msgstr "第 %d 列:第二個 %s\n"
+
+#: build/parseScript.c:386
+#, c-format
+msgid "line %d: unsupported internal script: %s\n"
+msgstr "第 %d 列:ä¸æ”¯æ´çš„內部指令稿:%s\n"
+
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
+#, c-format
+msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
+msgstr "第 %d 列:解譯器引數ä¸å…許存在觸發器中:%s\n"
+
+#: build/parseSpec.c:190
+#, c-format
+msgid "line %d: %s\n"
+msgstr "第 %d 列:%s\n"
+
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
+#, c-format
+msgid "Unable to open %s: %s\n"
+msgstr "無法開啟 %s:%s\n"
+
+#: build/parseSpec.c:351
+#, c-format
+msgid "%s:%d: Argument expected for %s\n"
+msgstr "%s:%d:é æœŸç”¨æ–¼ %s 的引數\n"
+
+#: build/parseSpec.c:373
+#, c-format
+msgid "line %d: Unclosed %%if\n"
+msgstr "第 %d 列:未關閉的 %%if\n"
+
+#: build/parseSpec.c:378
+#, c-format
+msgid "line %d: unclosed macro or bad line continuation\n"
+msgstr "第 %d 列:未關閉的巨集或ä¸ç•¶çš„列延續\n"
+
+#: build/parseSpec.c:420
+#, c-format
+msgid "%s:%d: bad %%if condition\n"
+msgstr "%s:%d:ä¸ç•¶çš„ %%if æ¢ä»¶\n"
+
+#: build/parseSpec.c:428
+#, c-format
+msgid "%s:%d: Got a %%else with no %%if\n"
+msgstr "%s:%d:有個 %%else 沒有å°æ‡‰ %%if\n"
+
+#: build/parseSpec.c:439
+#, c-format
+msgid "%s:%d: Got a %%endif with no %%if\n"
+msgstr "%s:%d:有個 %%endif 沒有å°æ‡‰ %%if\n"
+
+#: build/parseSpec.c:460
+#, c-format
+msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d:異常的 %%include 敘述\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
+msgid "No compatible architectures found for build\n"
+msgstr "找ä¸åˆ°å¯ä¾›å»ºç½®çš„相容架構\n"
+
+#: build/parseSpec.c:912
+#, c-format
+msgid "Package has no %%description: %s\n"
+msgstr "套件沒有 %%description:%s\n"
+
+#: build/policies.c:87
+#, c-format
+msgid "Policy module '%s' duplicated with overlapping types\n"
+msgstr "策略模組 %s 有é‡è¤‡çš„é‡ç–Šé¡žåž‹\n"
+
+#: build/policies.c:93
+#, c-format
+msgid "Base modules '%s' and '%s' have overlapping types\n"
+msgstr "基本模組 %s 與 %s 有é‡ç–Šçš„é¡žåž‹\n"
+
+#: build/policies.c:101
+msgid "Failed to get policies from header\n"
+msgstr "從標頭æå–策略時失敗\n"
+
+#: build/policies.c:154
+#, c-format
+msgid "%%semodule requires a file path\n"
+msgstr "%%semodule 需è¦æª”案路徑\n"
+
+#: build/policies.c:163
+#, c-format
+msgid "Failed to read policy file: %s\n"
+msgstr "讀å–策略檔案時失敗:%s\n"
+
+#: build/policies.c:170
+#, c-format
+msgid "Failed to encode policy file: %s\n"
+msgstr "編碼策略檔案時失敗:%s\n"
+
+#: build/policies.c:187
+#, c-format
+msgid "Failed to determine a policy name: %s\n"
+msgstr "確定策略å稱時失敗:%s\n"
+
+#: build/policies.c:199
+#, c-format
+msgid ""
+"'%s' type given with other types in %%semodule %s. Compacting types to "
+"'%s'.\n"
+msgstr "%s 類型於 %%semodule %s 中與其他類型給定。壓縮類型為 %s。\n"
+
+#: build/policies.c:246
+#, c-format
+msgid "Error parsing %s: %s\n"
+msgstr "å‰–æž %s 時發生錯誤:%s\n"
+
+#: build/policies.c:252
+#, c-format
+msgid "Expecting %%semodule tag: %s\n"
+msgstr "é æœŸ %%semodule 標籤:%s\n"
+
+#: build/policies.c:262
+#, c-format
+msgid "Missing module path in line: %s\n"
+msgstr "缺少模組路徑於列號:%s\n"
+
+#: build/policies.c:268
+#, c-format
+msgid "Too many arguments in line: %s\n"
+msgstr "太多引數於列號:%s\n"
+
+#: build/policies.c:307
+#, c-format
+msgid "Processing policies: %s\n"
+msgstr "處ç†ç­–略:%s\n"
+
+#: build/rpmfc.c:160
+#, c-format
+msgid "Ignoring invalid regex %s\n"
+msgstr "忽略無效的正è¦è¡¨ç¤ºå¼ %s\n"
+
+#: build/rpmfc.c:266
+#, c-format
+msgid "Couldn't create pipe for %s: %m\n"
+msgstr "無法為 %s 建立管線:%m\n"
+
+#: build/rpmfc.c:289
+#, c-format
+msgid "Couldn't exec %s: %s\n"
+msgstr "無法執行 %s:%s\n"
+
+#: build/rpmfc.c:294 lib/rpmscript.c:320
+#, c-format
+msgid "Couldn't fork %s: %s\n"
+msgstr "無法分支 %s:%s\n"
+
+#: build/rpmfc.c:377
+#, c-format
+msgid "%s failed: %x\n"
+msgstr "%s 失敗:%x\n"
+
+#: build/rpmfc.c:381
+#, c-format
+msgid "failed to write all data to %s: %s\n"
+msgstr "無法寫入所有資料至 %s:%s\n"
+
+#: build/rpmfc.c:1032
+msgid "Empty file classifier\n"
+msgstr "空的檔案分類器\n"
+
+#: build/rpmfc.c:1041
+msgid "No file attributes configured\n"
+msgstr "無設定檔案特性\n"
+
+#: build/rpmfc.c:1060
+#, c-format
+msgid "magic_open(0x%x) failed: %s\n"
+msgstr "magic_open(0x%x) 失敗:%s\n"
+
+#: build/rpmfc.c:1066
+#, c-format
+msgid "magic_load failed: %s\n"
+msgstr "magic_load 失敗:%s\n"
+
+#: build/rpmfc.c:1108
+#, c-format
+msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
+msgstr "檔案「%sã€è¾¨è­˜å¤±æ•—ï¼šæ¨¡å¼ %06o %s\n"
+
+#: build/rpmfc.c:1309
+#, c-format
+msgid "Finding %s: %s\n"
+msgstr "正在尋找 %s:%s\n"
+
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
+#, c-format
+msgid "Failed to find %s:\n"
+msgstr "找ä¸åˆ° %s:\n"
+
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
+#, c-format
+msgid "query of specfile %s failed, can't parse\n"
+msgstr "%s è¦æ ¼æª”查詢失敗,無法剖æž\n"
+
+#: lib/backend/db3.c:97
+#, c-format
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "無法辨識的資料庫é¸é …:「%s〠已忽略。\n"
+
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s 有無效的數值,略éŽ\n"
+
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s 有éŽå¤§æˆ–éŽå°çš„ long 數值,略éŽ\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s 有éŽå¤§æˆ–éŽå°çš„整數值,略éŽ\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "無法å–å¾— %s æ–¼ %s/%s 的鎖定\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "已共享"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "排他"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "無效的索引類型 %x 於 %s/%s\n"
+
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "錯誤(%d) 發生於å–得「%sã€è¨˜éŒ„自 %s 索引:%s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "儲存記錄「%2$sã€åˆ° %3$s 時發生錯誤(%1$d)\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "從 %3$s 移除記錄「%2$sã€æ™‚發生錯誤(%1$d)\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "錯誤(%d) 發生於加入標頭 #%d 記錄\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "錯誤(%d) 發生於移除標頭 #%d 記錄\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "分é…新套件實體時發生錯誤(%d)\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
+#, c-format
+msgid "%s is a Delta RPM and cannot be directly installed\n"
+msgstr "%s 是個差異 RPM 而無法直接安è£\n"
+
+#: lib/depends.c:97
+#, c-format
+msgid "Unsupported payload (%s) in package %s\n"
+msgstr "未支æ´çš„酬載 (%s) 於套件 %s\n"
+
+#: lib/depends.c:377
+#, c-format
+msgid "package %s was already added, skipping %s\n"
+msgstr "套件 %s å·²è¢«åŠ å…¥ï¼Œè·³éŽ %s\n"
+
+#: lib/depends.c:378
+#, c-format
+msgid "package %s was already added, replacing with %s\n"
+msgstr "套件 %s 已被加入,以 %s 替æ›\n"
+
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(ä¸æ˜¯ blob)"
+
+#: lib/formats.c:43
+msgid "(not a number)"
+msgstr "(ä¸æ˜¯ä¸€å€‹æ•¸å­—)"
+
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(ä¸æ˜¯å­—串)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(無效型態)"
+
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
+msgstr "%c"
+
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
+msgstr "%Y %b %d %a"
+
+#: lib/formats.c:253
+msgid "(not base64)"
+msgstr "(ä¸æ˜¯ base64)"
+
+#: lib/formats.c:313
+msgid "(invalid xml type)"
+msgstr "(無效 xml 類型)"
+
+#: lib/formats.c:358
+msgid "(not an OpenPGP signature)"
+msgstr "(ä¸æ˜¯å€‹ OpenPGP ç°½å)"
+
+#: lib/formats.c:369
+#, c-format
+msgid "Invalid date %u"
+msgstr "無效的日期 %u"
+
+#: lib/formats.c:417
+msgid "normal"
+msgstr "一般"
+
+#: lib/formats.c:420 lib/verify.c:393
+msgid "replaced"
+msgstr "已替æ›"
+
+#: lib/formats.c:423 lib/verify.c:387
+msgid "not installed"
+msgstr "未安è£"
+
+#: lib/formats.c:426 lib/verify.c:389
+msgid "net shared"
+msgstr "已網路分享"
+
+#: lib/formats.c:429 lib/verify.c:391
+msgid "wrong color"
+msgstr "錯誤色彩"
+
+#: lib/formats.c:432
+msgid "missing"
+msgstr "éºå¤±"
+
+#: lib/formats.c:435
+msgid "(unknown)"
+msgstr "(ä¸æ˜Ž)"
+
+#: lib/fsm.c:745
+#, c-format
+msgid "%s saved as %s\n"
+msgstr "%s 已被å¦å­˜ç‚º %s\n"
+
+#: lib/fsm.c:798
+#, c-format
+msgid "%s created as %s\n"
+msgstr "%s 已建立為 %s \n"
+
+#: lib/fsm.c:1082
+#, c-format
+msgid "%s %s: remove failed: %s\n"
+msgstr "%s %s:移除失敗:%s\n"
+
+#: lib/fsm.c:1083
+msgid "directory"
+msgstr "目錄"
+
+#: lib/fsm.c:1083
+msgid "file"
+msgstr "檔案"
+
+#: lib/header.c:285
+#, c-format
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
+
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
+
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
+
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
+
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
+
+#: lib/header.c:1841
+#, c-format
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
+
+#: lib/header.c:1876
+#, c-format
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
+#, c-format
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
+
+#: lib/header.c:1890
+#, c-format
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
+
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1909
+#, c-format
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
+
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
+
+#: lib/header.c:1949
+#, c-format
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "無效的欄ä½å¯¬åº¦"
+
+#: lib/headerfmt.c:362
+#, c-format
+msgid "missing { after %%"
+msgstr ""
+
+#: lib/headerfmt.c:384
+#, c-format
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "空白標籤格å¼"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "空白標籤å稱"
+
+#: lib/headerfmt.c:413
+#, c-format
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] é æœŸåœ¨é™£åˆ—çš„çµå°¾"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "未é æœŸçš„ ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "未é æœŸçš„ }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? é æœŸæ–¼è¡¨è¿°å¼ä¸­"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ é æœŸæ–¼è¡¨è¿°å¼ä¸­çš„ ? 之後"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} é æœŸæ–¼è¡¨è¿°å¼ä¸­"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": é æœŸè·Ÿè‘— ? å­è¡¨è¿°å¼"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ é æœŸæ–¼è¡¨è¿°å¼ä¸­ : 之後"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| é æœŸæ–¼è¡¨è¿°å¼çš„çµå°¾"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "用於ä¸åŒå¤§å°é™£åˆ—的陣列迭代器"
+
+#: lib/poptALL.c:154
+#, c-format
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
+
+#: lib/poptALL.c:188
+msgid "predefine MACRO with value EXPR"
+msgstr "é å…ˆä»¥å€¼ EXPR 定義 MACRO"
+
+#: lib/poptALL.c:189 lib/poptALL.c:192
+msgid "'MACRO EXPR'"
+msgstr "「MACRO EXPRã€"
+
+#: lib/poptALL.c:191
+msgid "define MACRO with value EXPR"
+msgstr "定義 MACRO 值為 EXPR"
+
+#: lib/poptALL.c:194
+msgid "undefine MACRO"
+msgstr ""
+
+#: lib/poptALL.c:195
+msgid "MACRO"
+msgstr ""
+
+#: lib/poptALL.c:197
+msgid "print macro expansion of EXPR"
+msgstr "åˆ—å° EXPR 的巨集展開"
+
+#: lib/poptALL.c:198
+msgid "'EXPR'"
+msgstr "「EXPRã€"
+
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
+msgid "read <FILE:...> instead of default file(s)"
+msgstr "è®€å– <FILE:…> 以代替é è¨­æª”案"
+
+#: lib/poptALL.c:203 lib/poptALL.c:222
+msgid "<FILE:...>"
+msgstr "<FILE:…>"
+
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
+msgid "don't verify package digest(s)"
+msgstr "ä¸é©—證套件摘è¦"
+
+#: lib/poptALL.c:213
+msgid "don't verify database header(s) when retrieved"
+msgstr "æ“·å–時ä¸é©—證資料庫標頭"
+
+#: lib/poptALL.c:215
+msgid "don't verify package signature(s)"
+msgstr "ä¸é©—證套件簽å"
+
+#: lib/poptALL.c:218
+msgid "send stdout to CMD"
+msgstr "ç™¼é€ stdout 至 CMD"
+
+#: lib/poptALL.c:219
+msgid "CMD"
+msgstr "CMD"
+
+#: lib/poptALL.c:224
+msgid "use ROOT as top level directory"
+msgstr "使用 ROOT åšç‚ºæœ€é ‚層目錄"
+
+#: lib/poptALL.c:225
+msgid "ROOT"
+msgstr "ROOT"
+
+#: lib/poptALL.c:227
+msgid "use database in DIRECTORY"
+msgstr "使用「DIRECTORYã€å…§çš„資料庫"
+
+#: lib/poptALL.c:228
+msgid "DIRECTORY"
+msgstr "DIRECTORY"
+
+#: lib/poptALL.c:231
+msgid "display known query tags"
+msgstr "顯示已知的查詢標籤"
+
+#: lib/poptALL.c:233
+msgid "display final rpmrc and macro configuration"
+msgstr "顯示完整的 rpmrc 與巨集組態"
+
+#: lib/poptALL.c:235
+msgid "provide less detailed output"
+msgstr "æ供較少細節的輸出"
+
+#: lib/poptALL.c:237
+msgid "provide more detailed output"
+msgstr "æ供較多細節的輸出"
+
+#: lib/poptALL.c:239
+msgid "print the version of rpm being used"
+msgstr "列å°æ­£ä½¿ç”¨çš„ rpm 版本資訊"
+
+#: lib/poptALL.c:245
+msgid "debug payload file state machine"
+msgstr "å°é…¬è¼‰æª”案狀態機器除錯"
+
+#: lib/poptALL.c:251
+msgid "debug rpmio I/O"
+msgstr "除錯 rpmio I/O"
+
+#: lib/poptALL.c:310
+#, c-format
+msgid "%s: option table misconfigured (%d)\n"
+msgstr "%s:é¸é …表格設定ä¸ç•¶ (%d)\n"
+
+#: lib/poptI.c:52
+msgid "exclude paths must begin with a /"
+msgstr "被排除的路徑必須以 / 開頭"
+
+#: lib/poptI.c:64
+msgid "relocations must begin with a /"
+msgstr "é‡æ–°åˆ†é…ä½ç½®å¿…須以 / é–‹é ­"
+
+#: lib/poptI.c:67
+msgid "relocations must contain a ="
+msgstr "é‡æ–°åˆ†é…ä½ç½®å¿…須包å«ä¸€å€‹ ="
+
+#: lib/poptI.c:70
+msgid "relocations must have a / following the ="
+msgstr "é‡æ–°åˆ†é…ä½ç½®å¿…須有個 / 跟在 = 之後"
+
+#: lib/poptI.c:118
+msgid "install all files, even configurations which might otherwise be skipped"
+msgstr "安è£æ‰€æœ‰æª”案,å³ä½¿çµ„æ…‹å¯èƒ½è¢«ç•¥éŽ"
+
+#: lib/poptI.c:122
+msgid ""
+"remove all packages which match <package> (normally an error is generated if "
+"<package> specified multiple packages)"
+msgstr ""
+"ç§»é™¤æ‰€æœ‰ç¬¦åˆ <package> 的套件 (如果 <package> 被指定為多個套件,常會導致錯誤"
+"出ç¾)"
+
+#: lib/poptI.c:127
+msgid "relocate files in non-relocatable package"
+msgstr "å°ä¸å¯é‡æ–°åˆ†é…ä½ç½®çš„套件é‡æ–°åˆ†é…檔案ä½ç½®"
+
+#: lib/poptI.c:131
+msgid "print dependency loops as warning"
+msgstr "列å°ç›¸ä¾é—œä¿‚迴圈åšç‚ºè­¦å‘Š"
+
+#: lib/poptI.c:135
+msgid "erase (uninstall) package"
+msgstr "抹除 (解除安è£) 套件"
+
+#: lib/poptI.c:135
+msgid "<package>+"
+msgstr "<package>+"
+
+#: lib/poptI.c:138 lib/poptI.c:175
+msgid "do not install configuration files"
+msgstr "ä¸å®‰è£çµ„態檔案"
+
+#: lib/poptI.c:141 lib/poptI.c:180
+msgid "do not install documentation"
+msgstr "ä¸å®‰è£æ–‡ä»¶"
+
+#: lib/poptI.c:143
+msgid "skip files with leading component <path> "
+msgstr "ç•¥éŽä»¥ <path> 部件開頭的檔案"
+
+#: lib/poptI.c:144
+msgid "<path>"
+msgstr "<path>"
+
+#: lib/poptI.c:147
+msgid "short hand for --replacepkgs --replacefiles"
+msgstr "--replacepkgs 與 --replacefiles 的速寫"
+
+#: lib/poptI.c:151
+msgid "upgrade package(s) if already installed"
+msgstr "如果套件已安è£ï¼Œä¾¿å‡ç´šå¥—件"
+
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
+msgid "<packagefile>+"
+msgstr "<packagefile>+"
+
+#: lib/poptI.c:154
+msgid "print hash marks as package installs (good with -v)"
+msgstr "套件安è£æ™‚åˆ—å° Hash 標記 (å’Œ -v 一起用會更好)"
+
+#: lib/poptI.c:157
+msgid "don't verify package architecture"
+msgstr "ä¸è¦é©—證套件架構"
+
+#: lib/poptI.c:160
+msgid "don't verify package operating system"
+msgstr "ä¸è¦é©—證套間作葉系統"
+
+#: lib/poptI.c:163
+msgid "don't check disk space before installing"
+msgstr "安è£å‰ä¸æª¢æŸ¥ç£ç¢Ÿç©ºé–“"
+
+#: lib/poptI.c:165
+msgid "install documentation"
+msgstr "安è£æ–‡ä»¶"
+
+#: lib/poptI.c:168
+msgid "install package(s)"
+msgstr "安è£å¥—件"
+
+#: lib/poptI.c:171
+msgid "update the database, but do not modify the filesystem"
+msgstr "更新資料庫,但ä¸ä¿®æ”¹æª”案系統"
+
+#: lib/poptI.c:177
+msgid "do not verify package dependencies"
+msgstr "ä¸é©—證套件相ä¾æ€§"
+
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
+msgid "don't verify digest of files"
+msgstr "ä¸è¦é©—證檔案的摘è¦"
+
+#: lib/poptI.c:185
+msgid "don't verify digest of files (obsolete)"
+msgstr "ä¸è¦é©—è­‰æª”æ¡ˆçš„æ‘˜è¦ (棄用)"
+
+#: lib/poptI.c:187
+msgid "don't install file security contexts"
+msgstr "ä¸å®‰è£æª”案安全情境資料"
+
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
+msgid "do not reorder package installation to satisfy dependencies"
+msgstr "ä¸é‡æ–°æŽ’列套件安è£é †åºä»¥æ»¿è¶³ç›¸ä¾é—œä¿‚"
+
+#: lib/poptI.c:197
+msgid "do not execute package scriptlet(s)"
+msgstr "ä¸åŸ·è¡Œå¥—件指令稿片段"
+
+#: lib/poptI.c:201
+#, c-format
+msgid "do not execute %%pre scriptlet (if any)"
+msgstr "ä¸åŸ·è¡Œ %%pre 指令稿稿片段 (如果有)"
+
+#: lib/poptI.c:204
+#, c-format
+msgid "do not execute %%post scriptlet (if any)"
+msgstr "ä¸åŸ·è¡Œ %%post 指令稿片段 (如果有)"
+
+#: lib/poptI.c:207
+#, c-format
+msgid "do not execute %%preun scriptlet (if any)"
+msgstr "ä¸åŸ·è¡Œ %%preun 指令稿片段 (如果有)"
+
+#: lib/poptI.c:210
+#, c-format
+msgid "do not execute %%postun scriptlet (if any)"
+msgstr "ä¸åŸ·è¡Œ %%postun 指令稿片段 (如果有)"
+
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
+msgid "do not execute any scriptlet(s) triggered by this package"
+msgstr "ä¸åŸ·è¡Œä»»ä½•æ­¤å¥—件觸發的指令稿片段"
+
+#: lib/poptI.c:222
+#, c-format
+msgid "do not execute any %%triggerprein scriptlet(s)"
+msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerprein 指令稿片段"
+
+#: lib/poptI.c:225
+#, c-format
+msgid "do not execute any %%triggerin scriptlet(s)"
+msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerin 指令稿片段"
+
+#: lib/poptI.c:228
+#, c-format
+msgid "do not execute any %%triggerun scriptlet(s)"
+msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerun 指令稿片段"
+
+#: lib/poptI.c:231
+#, c-format
+msgid "do not execute any %%triggerpostun scriptlet(s)"
+msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerpostun 指令稿片段"
+
+#: lib/poptI.c:235
+msgid ""
+"upgrade to an old version of the package (--force on upgrades does this "
+"automatically)"
+msgstr "å‡ç´šåˆ°å¥—件的舊版本 (在å‡ç´šä½œæ¥­ä¸­åŠ å…¥ --force 會自動進行)"
+
+#: lib/poptI.c:239
+msgid "print percentages as package installs"
+msgstr "當套件安è£æ™‚列å°é€²åº¦ç™¾åˆ†æ¯”"
+
+#: lib/poptI.c:241
+msgid "relocate the package to <dir>, if relocatable"
+msgstr "如果å¯ä»¥é‡æ–°åˆ†é…ä½ç½®ï¼Œä¾¿æŠŠå¥—件é‡æ–°åˆ†é…至 <dir>"
+
+#: lib/poptI.c:242
+msgid "<dir>"
+msgstr "<dir>"
+
+#: lib/poptI.c:244
+msgid "relocate files from path <old> to <new>"
+msgstr "將檔案從路徑 <old> é‡æ–°é…置到 <new>"
+
+#: lib/poptI.c:245
+msgid "<old>=<new>"
+msgstr "<old>=<new>"
+
+#: lib/poptI.c:248
+msgid "ignore file conflicts between packages"
+msgstr "忽略套件之間的檔案è¡çª"
+
+#: lib/poptI.c:251
+msgid "reinstall if the package is already present"
+msgstr "如果套件已經存在則é‡æ–°å®‰è£"
+
+#: lib/poptI.c:253
+msgid "don't install, but tell if it would work or not"
+msgstr "ä¸å®‰è£ï¼Œåªå›žå ±ä½œæ¥­æ˜¯å¦èƒ½é‹ä½œ"
+
+#: lib/poptI.c:256
+msgid "upgrade package(s)"
+msgstr "å‡ç´šå¥—件"
+
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
+msgid "query/verify all packages"
+msgstr "查詢/驗證所有套件"
+
+#: lib/poptQV.c:77
+msgid "rpm checksig mode"
+msgstr "rpm 檢查簽å模å¼"
+
+#: lib/poptQV.c:79
+msgid "query/verify package(s) owning file"
+msgstr "查詢/驗證套件æ“有的檔案"
+
+#: lib/poptQV.c:81
+msgid "query/verify package(s) in group"
+msgstr "查詢/驗證套件所屬的群組"
+
+#: lib/poptQV.c:83
+msgid "query/verify a package file"
+msgstr "查詢/驗證一個套件檔案"
+
+#: lib/poptQV.c:86
+msgid "query/verify package(s) with package identifier"
+msgstr "以套件的識別符查詢/驗證套件"
+
+#: lib/poptQV.c:88
+msgid "query/verify package(s) with header identifier"
+msgstr "以標頭識別符查詢/驗證套件"
+
+#: lib/poptQV.c:91
+msgid "rpm query mode"
+msgstr "rpm 查詢模å¼"
+
+#: lib/poptQV.c:93
+msgid "query/verify a header instance"
+msgstr "查詢/驗證標頭實體"
+
+#: lib/poptQV.c:95
+msgid "query/verify package(s) from install transaction"
+msgstr "從安è£ç•°å‹•ä½œæ¥­æŸ¥è©¢/驗證套件"
+
+#: lib/poptQV.c:97
+msgid "query the package(s) triggered by the package"
+msgstr "查詢套件所觸發的套件"
+
+#: lib/poptQV.c:99
+msgid "rpm verify mode"
+msgstr "rpm 驗證模å¼"
+
+#: lib/poptQV.c:101
+msgid "query/verify the package(s) which require a dependency"
+msgstr "查詢/驗證需è¦æŸäº›ç›¸ä¾å¥—件的套件"
+
+#: lib/poptQV.c:103
+msgid "query/verify the package(s) which provide a dependency"
+msgstr "查詢/é©—è­‰æä¾›æŸäº›ç›¸ä¾å¥—件的套件"
+
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
+msgid "do not glob arguments"
+msgstr "ä¸ä»¥ glob 解æžå¼•æ•¸"
+
+#: lib/poptQV.c:116
+msgid "do not process non-package files as manifests"
+msgstr "ä¸ä»¥æ¸…單形å¼è™•ç†éžå¥—件檔案"
+
+#: lib/poptQV.c:193
+msgid "list all configuration files"
+msgstr "列出所有組態檔案"
+
+#: lib/poptQV.c:195
+msgid "list all documentation files"
+msgstr "列出所有文件檔案"
+
+#: lib/poptQV.c:197
+msgid "list all license files"
+msgstr ""
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "列出所有組態檔案"
+
+#: lib/poptQV.c:201
+msgid "dump basic file information"
+msgstr "傾å°åŸºæœ¬æª”案資訊"
+
+#: lib/poptQV.c:205
+msgid "list files in package"
+msgstr "列出套件內的檔案"
+
+#: lib/poptQV.c:210
+#, c-format
+msgid "skip %%ghost files"
+msgstr "ç•¥éŽ %%ghost 檔案"
+
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "ç•¥éŽ %%ghost 檔案"
+
+#: lib/poptQV.c:223
+msgid "display the states of the listed files"
+msgstr "顯示列出的檔案的狀態"
+
+#: lib/poptQV.c:241
+msgid "don't verify size of files"
+msgstr "ä¸é©—證檔案大å°"
+
+#: lib/poptQV.c:244
+msgid "don't verify symlink path of files"
+msgstr "ä¸é©—證檔案的符號éˆçµè·¯å¾‘"
+
+#: lib/poptQV.c:247
+msgid "don't verify owner of files"
+msgstr "ä¸é©—證檔案的æ“有者"
+
+#: lib/poptQV.c:250
+msgid "don't verify group of files"
+msgstr "ä¸é©—證檔案的群組"
+
+#: lib/poptQV.c:253
+msgid "don't verify modification time of files"
+msgstr "ä¸é©—證檔案的修改時間"
+
+#: lib/poptQV.c:256 lib/poptQV.c:259
+msgid "don't verify mode of files"
+msgstr "ä¸é©—證檔案的模å¼"
+
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
+msgstr "ä¸é©—證檔案的安全情境"
+
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "ä¸é©—證檔案的能力"
+
+#: lib/poptQV.c:266
+msgid "don't verify files in package"
+msgstr "ä¸é©—證套件內的檔案"
+
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
+msgid "don't verify package dependencies"
+msgstr "ä¸é©—證套件的相ä¾é—œä¿‚"
+
+#: lib/poptQV.c:271 lib/poptQV.c:274
+msgid "don't execute verify script(s)"
+msgstr "ä¸åŸ·è¡Œé©—證指令稿"
+
+#: lib/psm.c:146
+#, c-format
+msgid "Missing rpmlib features for %s:\n"
+msgstr "缺少 rpmlib 的特色用於 %s:\n"
+
+#: lib/psm.c:183
+msgid "source package expected, binary found\n"
+msgstr "é æœŸæ˜¯åŽŸå§‹ç¢¼å¥—件,但å»æ‰¾åˆ°äºŒé€²ä½å¥—件\n"
+
+#: lib/psm.c:194
+msgid "source package contains no .spec file\n"
+msgstr "åŽŸå§‹ç¢¼å¥—ä»¶å…§æœªåŒ…å« .spec 檔案\n"
+
+#: lib/psm.c:606
+#, c-format
+msgid "unpacking of archive failed%s%s: %s\n"
+msgstr "解包å°å­˜æª”失敗 %s%s:%s\n"
+
+#: lib/psm.c:607
+msgid " on file "
+msgstr " 於檔案 "
+
+#: lib/query.c:108
+#, c-format
+msgid "incorrect format: %s\n"
+msgstr "æ ¼å¼ä¸æ­£ç¢ºï¼š%s\n"
+
+#: lib/query.c:120
+msgid "(contains no files)\n"
+msgstr "(未包å«æª”案)\n"
+
+#: lib/query.c:161
+msgid "normal "
+msgstr "正常 "
+
+#: lib/query.c:164
+msgid "replaced "
+msgstr "è¢«æ›¿æ› "
+
+#: lib/query.c:167
+msgid "not installed "
+msgstr "æœªå®‰è£ "
+
+#: lib/query.c:170
+msgid "net shared "
+msgstr "已網路共享 "
+
+#: lib/query.c:173
+msgid "wrong color "
+msgstr "錯誤色彩 "
+
+#: lib/query.c:176
+msgid "(no state) "
+msgstr "(無狀態) "
+
+#: lib/query.c:179
+#, c-format
+msgid "(unknown %3d) "
+msgstr "(ä¸æ˜Žçš„ %3d) "
+
+#: lib/query.c:199
+msgid "package has not file owner/group lists\n"
+msgstr "套件內沒有檔案æ“有者/群組記錄\n"
+
+#: lib/query.c:233
+msgid "package has neither file owner or id lists\n"
+msgstr "套件內沒有檔案æ“æœ‰è€…åŠ ID 列表\n"
+
+#: lib/query.c:321
+#, c-format
+msgid "group %s does not contain any packages\n"
+msgstr "群組 %s å…§ä¸åŒ…å«ä»»ä½•å¥—件\n"
+
+#: lib/query.c:328
+#, c-format
+msgid "no package triggers %s\n"
+msgstr "沒有套件會觸發 %s\n"
+
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
+#, c-format
+msgid "malformed %s: %s\n"
+msgstr "æ ¼å¼ä¸ç•¶çš„ %s:%s\n"
+
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
+#, c-format
+msgid "no package matches %s: %s\n"
+msgstr "æ²’æœ‰å¥—ä»¶ç¬¦åˆ %s:%s\n"
+
+#: lib/query.c:387
+#, c-format
+msgid "no package requires %s\n"
+msgstr "æ²’æœ‰å¥—ä»¶éœ€è¦ %s\n"
+
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
+#, c-format
+msgid "no package provides %s\n"
+msgstr "沒有套件æä¾› %s\n"
+
+#: lib/query.c:455
+#, c-format
+msgid "file %s: %s\n"
+msgstr "檔案 %s:%s\n"
+
+#: lib/query.c:458
+#, c-format
+msgid "file %s is not owned by any package\n"
+msgstr "檔案 %s ä¸è¢«ä»»ä½•å¥—件æ“有\n"
+
+#: lib/query.c:469
+#, c-format
+msgid "invalid package number: %s\n"
+msgstr "無效的套件編號:%s\n"
+
+#: lib/query.c:476
+#, c-format
+msgid "record %u could not be read\n"
+msgstr "記錄 %u 無法讀å–\n"
+
+#: lib/query.c:491 lib/rpminstall.c:690
+#, c-format
+msgid "package %s is not installed\n"
+msgstr "套件 %s 尚未安è£\n"
+
+#: lib/query.c:525
+#, c-format
+msgid "unknown tag: \"%s\"\n"
+msgstr "ä¸æ˜Žçš„標籤:「%sã€\n"
+
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
+#, c-format
+msgid "%s: key %d import failed.\n"
+msgstr "%s:金鑰 %d 匯入失敗。\n"
+
+#: lib/rpmchecksig.c:66
+#, c-format
+msgid "%s: key %d not an armored public key.\n"
+msgstr "%s:金鑰 %d ä¸æ˜¯å—ä¿è­·çš„公鑰。\n"
+
+#: lib/rpmchecksig.c:111
+#, c-format
+msgid "%s: import read failed(%d).\n"
+msgstr "%s:匯入時讀å–失敗(%d)。\n"
+
+#: lib/rpmchecksig.c:131
+#, c-format
+msgid "Fread failed: %s"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "ä¸æ­£ç¢º"
+
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "正確"
+
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
+#, c-format
+msgid "%s: open failed: %s\n"
+msgstr "%s:開啟失敗:%s\n"
+
+#: lib/rpmchroot.c:43
+#, c-format
+msgid "Unable to open current directory: %m\n"
+msgstr "無法開啟目å‰çš„目錄:%m\n"
+
+#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
+#, c-format
+msgid "%s: chroot directory not set\n"
+msgstr "%s:chroot 目錄未設定\n"
+
+#: lib/rpmchroot.c:70
+#, c-format
+msgid "Unable to change root directory: %m\n"
+msgstr "無法變更根目錄:%m\n"
+
+#: lib/rpmchroot.c:95
+#, c-format
+msgid "Unable to restore root directory: %m\n"
+msgstr "無法還原根目錄:%m\n"
+
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "正在產生 %d 個缺少的索引,請ç¨å¾……\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "尚未設定 dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader:跳éŽ"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "儲存記錄 #%2$d 到 %3$s 時發生錯誤(%1$d)\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s:regexec 失敗:%s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s:regcomp 失敗:%s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator:跳éŽ"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb:已擷å–æ壞的標頭 #%u -- è·³éŽã€‚\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s:無法讀å–ä½æ–¼ 0x%x 的標頭\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "尚未設定 dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "建立目錄 %s 時失敗:%s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "在資料庫中有ä¸ç•¶çš„標頭 #%u -- è·³éŽã€‚\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "無法加入原本ä½æ–¼ %u 的記錄\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "é‡å»ºè³‡æ–™åº«æ™‚失敗:原來的資料庫ä¿æŒåŽŸç‹€\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "以新的資料庫å–代舊的資料庫時失敗ï¼\n"
+
+#: lib/rpmds.c:744
+msgid "NO "
+msgstr "å¦ "
+
+#: lib/rpmds.c:744
+msgid "YES"
+msgstr "是"
+
+#: lib/rpmds.c:1221
+msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
+msgstr "PreReq:ã€Provides:ã€ä»¥åŠ Obsoletes: 相ä¾æ€§æ”¯æ´ç‰ˆæœ¬ã€‚"
+
+#: lib/rpmds.c:1224
+msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
+msgstr "檔案å稱儲存為 (dirNameã€baseNameã€dirIndex) 字組,而éžè·¯å¾‘。"
+
+#: lib/rpmds.c:1228
+msgid "package payload can be compressed using bzip2."
+msgstr "套件酬載å¯ä»¥ä½¿ç”¨ bzip2 壓縮。"
+
+#: lib/rpmds.c:1233
+msgid "package payload can be compressed using xz."
+msgstr "套件酬載å¯ä»¥ä½¿ç”¨ xz 壓縮。"
+
+#: lib/rpmds.c:1236
+msgid "package payload can be compressed using lzma."
+msgstr "套件酬載å¯ä»¥ä½¿ç”¨ lzma 壓縮。"
+
+#: lib/rpmds.c:1240
+msgid "package payload file(s) have \"./\" prefix."
+msgstr "套件酬載檔案有「./ã€å‰ç¶´ã€‚"
+
+#: lib/rpmds.c:1243
+msgid "package name-version-release is not implicitly provided."
+msgstr "套件的「å稱-版本-釋出編號ã€æ²’有隱å«æ€§åœ°æ供。"
+
+#: lib/rpmds.c:1246
+msgid "header tags are always sorted after being loaded."
+msgstr "標頭標籤總在載入之後排åºã€‚"
+
+#: lib/rpmds.c:1249
+msgid "the scriptlet interpreter can use arguments from header."
+msgstr "指令稿片段解譯器å¯ä»¥ä½¿ç”¨ä¾†è‡ªæ¨™é ­çš„引數。"
+
+#: lib/rpmds.c:1252
+msgid "a hardlink file set may be installed without being complete."
+msgstr "硬éˆçµæª”案組也許沒有被完整安è£ã€‚"
+
+#: lib/rpmds.c:1255
+msgid "package scriptlets may access the rpm database while installing."
+msgstr "套件指令稿片段在安è£éŽç¨‹ä¸­å¯ä»¥å­˜å– rpm 資料庫。"
+
+#: lib/rpmds.c:1259
+msgid "internal support for lua scripts."
+msgstr "lua 指令稿的內部支æ´ã€‚"
+
+#: lib/rpmds.c:1263
+msgid "file digest algorithm is per package configurable"
+msgstr "檔案摘è¦æ¼”算法å¯ä¾å„套件組é…"
+
+#: lib/rpmds.c:1267
+msgid "support for POSIX.1e file capabilities"
+msgstr "æ”¯æ´ POSIX.1e 檔案的能力"
+
+#: lib/rpmds.c:1271
+msgid "package scriptlets can be expanded at install time."
+msgstr "套件指令片段å¯ä»¥æ–¼å®‰è£æœŸé–“展開。"
+
+#: lib/rpmds.c:1274
+msgid "dependency comparison supports versions with tilde."
+msgstr "ä¾å­˜æ€§çš„比較支æ´é™„有波折號的版本。"
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "ä¸ç•¶é­”法數字"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "ä¸ç•¶æˆ–無法讀å–的標頭"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "標頭尺寸éŽå¤§"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "檔案太大而無法å°å­˜"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "ä¸æ˜Žæª”案類型"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "摘è¦ä¸ç¬¦"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "內部錯誤"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "在標頭中沒有å°å­˜æª”"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " 失敗 - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
+#, c-format
+msgid "open of %s failed: %s\n"
+msgstr "開啟 %s 失敗:%s\n"
+
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
+#, c-format
+msgid "%s: not an rpm package (or package manifest)\n"
+msgstr "%s:ä¸æ˜¯ä¸€å€‹ rpm 套件 (或套件清單)\n"
+
+#: lib/rpminstall.c:142
+#, c-format
+msgid "Updating / installing...\n"
+msgstr "æ›´æ–°/安è£â€¦\n"
+
+#: lib/rpminstall.c:144
+#, c-format
+msgid "Cleaning up / removing...\n"
+msgstr "清ç†/移除…\n"
+
+#: lib/rpminstall.c:193
+msgid "Preparing..."
+msgstr "準備…"
+
+#: lib/rpminstall.c:195
+msgid "Preparing packages..."
+msgstr "準備套件…"
+
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
+msgid "Failed dependencies:\n"
+msgstr "相ä¾é—œä¿‚失敗:\n"
+
+#: lib/rpminstall.c:323
+#, c-format
+msgid "%s: not an rpm package (or package manifest): %s\n"
+msgstr "%s:ä¸æ˜¯ä¸€å€‹ rpm 套件 (或套件清單):%s\n"
+
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
+#, c-format
+msgid "%s cannot be installed\n"
+msgstr "%s 無法安è£\n"
+
+#: lib/rpminstall.c:490
+#, c-format
+msgid "Retrieving %s\n"
+msgstr "æ“·å– %s\n"
+
+#: lib/rpminstall.c:502
+#, c-format
+msgid "skipping %s - transfer failed\n"
+msgstr "è·³éŽ %s - 轉移失敗\n"
+
+#: lib/rpminstall.c:572
+#, c-format
+msgid "package %s is not relocatable\n"
+msgstr "套件 %s ä¸èƒ½é‡æ–°åˆ†é…ä½ç½®\n"
+
+#: lib/rpminstall.c:603
+#, c-format
+msgid "error reading from file %s\n"
+msgstr "讀å–檔案 %s 時發生錯誤\n"
+
+#: lib/rpminstall.c:697
+#, c-format
+msgid "\"%s\" specifies multiple packages:\n"
+msgstr "「%sã€æŒ‡å®šå¤šå€‹å¥—件:\n"
+
+#: lib/rpminstall.c:736
+#, c-format
+msgid "cannot open %s: %s\n"
+msgstr "無法開啟 %s:%s\n"
+
+#: lib/rpminstall.c:742
+#, c-format
+msgid "Installing %s\n"
+msgstr "æ­£åœ¨å®‰è£ %s\n"
+
+#: lib/rpmlead.c:95
+msgid "not an rpm package"
+msgstr "ä¸¦éž rpm 套件"
+
+#: lib/rpmlead.c:99
+msgid "illegal signature type"
+msgstr "無效的簽åé¡žåž‹"
+
+#: lib/rpmlead.c:103
+msgid "unsupported RPM package version"
+msgstr "未支æ´çš„ RPM 套件版本"
+
+#: lib/rpmlead.c:118
+#, c-format
+msgid "read failed: %s (%d)\n"
+msgstr "讀å–失敗:%s (%d)\n"
+
+#: lib/rpmlead.c:121
+msgid "not an rpm package\n"
+msgstr "ä¸¦éž rpm 套件\n"
+
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
+#, c-format
+msgid "can't create %s lock on %s (%s)\n"
+msgstr "無法建立 %s 鎖定於 %s (%s)\n"
+
+#: lib/rpmlock.c:133
+#, c-format
+msgid "waiting for %s lock on %s\n"
+msgstr "等待 %s 鎖定於 %s\n"
+
+#: lib/rpmplugins.c:65
+#, c-format
+msgid "Failed to dlopen %s %s\n"
+msgstr "dlopen %s %s 時失敗\n"
+
+#: lib/rpmplugins.c:73
+#, c-format
+msgid "Failed to resolve symbol %s: %s\n"
+msgstr "解æžç¬¦è™Ÿ %s 時失敗:%s\n"
+
+#: lib/rpmplugins.c:154
+#, c-format
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr ""
+
+#: lib/rpmplugins.c:199
+#, c-format
+msgid "Plugin %s not loaded\n"
+msgstr "%s æ’件未載入\n"
+
+#: lib/rpmprob.c:109
+msgid "different"
+msgstr "ä¸åŒ"
+
+#: lib/rpmprob.c:114
+#, c-format
+msgid "package %s is intended for a %s architecture"
+msgstr "套件 %s 是é‡å° %s 架構"
+
+#: lib/rpmprob.c:118
+#, c-format
+msgid "package %s is intended for a %s operating system"
+msgstr "套件 %s 是é‡å° %s 作業系統"
+
+#: lib/rpmprob.c:122
+#, c-format
+msgid "package %s is already installed"
+msgstr "套件 %s 已經安è£"
+
+#: lib/rpmprob.c:125
+#, c-format
+msgid "path %s in package %s is not relocatable"
+msgstr "在套件 %2$s 中的路徑 %1$s 無法é‡æ–°åˆ†é…ä½ç½®"
+
+#: lib/rpmprob.c:130
+#, c-format
+msgid "file %s conflicts between attempted installs of %s and %s"
+msgstr "åœ¨è©¦åœ–å®‰è£ %2$s å’Œ %3$s 之間產生檔案 %1$s è¡çª"
+
+#: lib/rpmprob.c:135
+#, c-format
+msgid "file %s from install of %s conflicts with file from package %s"
+msgstr "從 %2$s 安è£çš„檔案 %1$s 與來自套件 %3$s 的檔案產生è¡çª"
+
+#: lib/rpmprob.c:140
+#, c-format
+msgid "package %s (which is newer than %s) is already installed"
+msgstr "套件 %s (比 %s é‚„æ–°) 已經安è£"
+
+#: lib/rpmprob.c:145
+#, c-format
+msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
+msgstr "安è£å¥—件 %s éœ€è¦ %<PRIu64>%cB æ–¼ %s 檔案系統之上"
+
+#: lib/rpmprob.c:155
+#, c-format
+msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
+msgstr "安è£å¥—件 %s éœ€è¦ %<PRIu64> inodes æ–¼ %s 檔案系統之上"
+
+#: lib/rpmprob.c:159
+#, c-format
+msgid "%s is needed by %s%s"
+msgstr "%s 被 %s%s 需è¦"
+
+#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
+msgid "(installed) "
+msgstr "(已安è£) "
+
+#: lib/rpmprob.c:163
+#, c-format
+msgid "%s conflicts with %s%s"
+msgstr "%s 與 %s%s è¡çª"
+
+#: lib/rpmprob.c:167
+#, c-format
+msgid "%s is obsoleted by %s%s"
+msgstr "%s 已被 %s%s 淘汰"
+
+#: lib/rpmprob.c:172
+#, c-format
+msgid "unknown error %d encountered while manipulating package %s"
+msgstr "é­é‡ä¸æ˜ŽéŒ¯èª¤ %d 於處ç†å¥—件 %s 之時"
+
+#: lib/rpmrc.c:222
+#, c-format
+msgid "missing second ':' at %s:%d\n"
+msgstr "在 %s:%d 處éºæ¼ç¬¬äºŒå€‹ã€Œ:ã€\n"
+
+#: lib/rpmrc.c:225
+#, c-format
+msgid "missing architecture name at %s:%d\n"
+msgstr "在 %s:%d 處éºæ¼æž¶æ§‹å稱\n"
+
+#: lib/rpmrc.c:370
+#, c-format
+msgid "Incomplete data line at %s:%d\n"
+msgstr "ä¸å®Œæ•´è³‡æ–™åˆ—ä½æ–¼ %s:%d\n"
+
+#: lib/rpmrc.c:375
+#, c-format
+msgid "Too many args in data line at %s:%d\n"
+msgstr "在資料列的 %s:%d 中有éŽå¤šå¼•æ•¸\n"
+
+#: lib/rpmrc.c:382
+#, c-format
+msgid "Bad arch/os number: %s (%s:%d)\n"
+msgstr "ä¸ç•¶æž¶æ§‹/作業系統編號:%s (%s:%d)\n"
+
+#: lib/rpmrc.c:413
+#, c-format
+msgid "Incomplete default line at %s:%d\n"
+msgstr "ä¸å®Œæ•´é è¨­åˆ—ä½æ–¼ %s:%d\n"
+
+#: lib/rpmrc.c:418
+#, c-format
+msgid "Too many args in default line at %s:%d\n"
+msgstr "在é è¨­åˆ—çš„ %s:%d 中有éŽå¤šå¼•æ•¸\n"
+
+#: lib/rpmrc.c:523
+#, c-format
+msgid "missing ':' (found 0x%02x) at %s:%d\n"
+msgstr "éºæ¼ã€Œ:ã€(找到 0x%02x) ä½æ–¼ %s:%d\n"
+
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
+#, c-format
+msgid "missing argument for %s at %s:%d\n"
+msgstr "%s éºæ¼å¼•æ•¸ä½æ–¼ %s:%d\n"
+
+#: lib/rpmrc.c:551
+#, c-format
+msgid "cannot open %s at %s:%d: %m\n"
+msgstr "無法開啟 %s 於 %s:%d:%m\n"
+
+#: lib/rpmrc.c:564
+#, c-format
+msgid "missing architecture for %s at %s:%d\n"
+msgstr "%s éºæ¼æž¶æ§‹ä½æ–¼ %s:%d\n"
+
+#: lib/rpmrc.c:632
+#, c-format
+msgid "bad option '%s' at %s:%d\n"
+msgstr "ä¸ç•¶é¸é …「%sã€ä½æ–¼ %s:%d\n"
+
+#: lib/rpmrc.c:972
+msgid "Failed to read auxiliary vector, /proc not mounted?\n"
+msgstr "讀å–輔助å‘é‡æ™‚失敗,/proc 未掛載?\n"
+
+#: lib/rpmrc.c:1469
+#, c-format
+msgid "Unknown system: %s\n"
+msgstr "ä¸æ˜Žç³»çµ±ï¼š%s\n"
+
+#: lib/rpmrc.c:1471
+#, c-format
+msgid "Please contact %s\n"
+msgstr "è«‹è¯çµ¡ %s\n"
+
+#: lib/rpmrc.c:1604
+#, c-format
+msgid "Unable to open %s for reading: %m.\n"
+msgstr "無法開啟 %s 以供讀å–:%m。\n"
+
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
+#, c-format
+msgid "Unable to restore current directory: %m"
+msgstr "無法還原目å‰çš„目錄:%m"
+
+#: lib/rpmscript.c:149 rpmio/macro.c:855
+msgid "<lua> scriptlet support not built in\n"
+msgstr "<lua> 指令稿片段支æ´æœªå…§å»º\n"
+
+#: lib/rpmscript.c:278
+#, c-format
+msgid "Couldn't create temporary file for %s: %s\n"
+msgstr "無法建立暫存檔用於 %s:%s\n"
+
+#: lib/rpmscript.c:313
+#, c-format
+msgid "Couldn't duplicate file descriptor: %s: %s\n"
+msgstr "無法複製檔案æ述符號:%s:%s\n"
+
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
+#, c-format
+msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
+msgstr "%s 指令稿片段失敗,waitpid(%d) rc %d:%s\n"
+
+#: lib/rpmscript.c:375
+#, c-format
+msgid "%s scriptlet failed, signal %d\n"
+msgstr "%s 指令稿片段失敗,信號 %d\n"
+
+#: lib/rpmscript.c:378
+#, c-format
+msgid "%s scriptlet failed, exit status %d\n"
+msgstr "%s 指令稿片段失敗,離開狀態 %d\n"
+
+#: lib/rpmtd.c:248
+msgid "Unknown format"
+msgstr "ä¸æ˜Žæ ¼å¼"
+
+#: lib/rpmte.c:729
+msgid "install"
+msgstr "安è£"
+
+#: lib/rpmte.c:730
+msgid "erase"
+msgstr "抹除"
+
+#: lib/rpmts.c:100
+#, c-format
+msgid "cannot open Packages database in %s\n"
+msgstr "無法開啟套件資料庫 %s\n"
+
+#: lib/rpmts.c:199
+#, c-format
+msgid "extra '(' in package label: %s\n"
+msgstr "é¡å¤–的「(ã€å­˜åœ¨æ–¼å¥—件標貼中:%s\n"
+
+#: lib/rpmts.c:217
+#, c-format
+msgid "missing '(' in package label: %s\n"
+msgstr "套件標貼éºæ¼ã€Œ(ã€ï¼š%s\n"
+
+#: lib/rpmts.c:225
+#, c-format
+msgid "missing ')' in package label: %s\n"
+msgstr "套件標貼éºæ¼ã€Œ)ã€ï¼š%s\n"
+
+#: lib/rpmts.c:284
+#, c-format
+msgid "%s: reading of public key failed.\n"
+msgstr "%s:讀å–公鑰時失敗。\n"
+
+#: lib/rpmts.c:1142
+msgid "transaction"
+msgstr "異動作業"
+
+#: lib/rpmvs.c:152
+#, c-format
+msgid "%s tag %u: invalid type %u"
+msgstr ""
+
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
+
+#: lib/rpmvs.c:178
+#, c-format
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
+
+#: lib/rpmvs.c:188
+#, c-format
+msgid "%s tag %u: invalid size %u"
+msgstr ""
+
+#: lib/rpmvs.c:195
+#, c-format
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
+
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
+msgstr ""
+
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
+msgstr ""
+
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
+
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
+
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
+
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "標頭 "
+
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
+
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "無法é‡æ–°è¼‰å…¥ç°½å標頭。\n"
+
+#: lib/transaction.c:1397
+msgid "skipped"
+msgstr "已跳éŽ"
+
+#: lib/transaction.c:1397
+msgid "failed"
+msgstr "已失敗"
+
+#: lib/verify.c:263
+#, c-format
+msgid "Duplicate username or UID for user %s\n"
+msgstr ""
+
+#: lib/verify.c:284
+#, c-format
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr ""
+
+#: lib/verify.c:395
+msgid "no state"
+msgstr ""
+
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr ""
+
+#: lib/verify.c:448
+#, c-format
+msgid "missing %c %s"
+msgstr "éºæ¼ %c %s"
+
+#: lib/verify.c:503
+#, c-format
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "未滿足 %s çš„ä¾å­˜æ€§ï¼š\n"
+
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
+msgstr ""
+
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
+msgstr ""
+
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
+msgstr ""
+
+#: rpmio/digest_nss.c:79
+#, c-format
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
+
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(清空)"
+
+#: rpmio/macro.c:316
+#, c-format
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(清空)\n"
+
+#: rpmio/macro.c:483
+#, c-format
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "巨集 %%%s 具有未終çµçš„é¸é …\n"
+
+#: rpmio/macro.c:495 rpmio/macro.c:533
+#, c-format
+msgid "Macro %%%s has unterminated body\n"
+msgstr "巨集 %%%s 具有未終çµçš„主體\n"
+
+#: rpmio/macro.c:551
+#, c-format
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
+
+#: rpmio/macro.c:557
+#, c-format
+msgid "Macro %%%s has empty body\n"
+msgstr "巨集 %%%s 具有空的主體\n"
+
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
+#, c-format
+msgid "Macro %%%s failed to expand\n"
+msgstr "巨集 %%%s 展開時失敗\n"
+
+#: rpmio/macro.c:607
+#, c-format
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "巨集 %%%s 具有無效的å稱 (%%undefine)\n"
+
+#: rpmio/macro.c:637
+#, c-format
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
+
+#: rpmio/macro.c:761
+#, c-format
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "在 %2$s(%3$s) 中有ä¸æ˜Žçš„é¸é … %1$c\n"
+
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
+msgstr "在巨集展開中有太多層的éžè¿´ã€‚它似乎是éžè¿´çš„巨集宣告所造æˆçš„。\n"
+
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
+#, c-format
+msgid "Unterminated %c: %s\n"
+msgstr "未終çµçš„ %c:%s\n"
+
+#: rpmio/macro.c:1182
+#, c-format
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "在無法剖æžçš„巨集之後跟著一個 %%\n"
+
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== 作用中 %d 清空 %d\n"
+
+#: rpmio/rpmfileutil.c:258
+#, c-format
+msgid "error creating temporary file %s: %m\n"
+msgstr "建立暫存檔 %s 時發生錯誤:%m\n"
+
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
+#, c-format
+msgid "File %s: %s\n"
+msgstr "檔案 %s:%s\n"
+
+#: rpmio/rpmfileutil.c:332
+#, c-format
+msgid "File %s is smaller than %u bytes\n"
+msgstr "檔案 %s å°æ–¼ %u ä½å…ƒçµ„\n"
+
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[ç„¡]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(無錯誤)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "åš´é‡éŒ¯èª¤ï¼š"
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "錯誤:"
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "警告:"
+
+#: rpmio/rpmlua.c:523
+#, c-format
+msgid "invalid syntax in lua scriptlet: %s\n"
+msgstr "無效的語法於 lua 指令稿片段:%s\n"
+
+#: rpmio/rpmlua.c:541
+#, c-format
+msgid "invalid syntax in lua script: %s\n"
+msgstr "無效的語法於 lua 指令稿:%s\n"
+
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
+#, c-format
+msgid "lua script failed: %s\n"
+msgstr "lua 指令稿失敗:%s\n"
+
+#: rpmio/rpmlua.c:560
+#, c-format
+msgid "invalid syntax in lua file: %s\n"
+msgstr "lua 檔案內有無效語法:%s\n"
+
+#: rpmio/rpmlua.c:756
+#, c-format
+msgid "lua hook failed: %s\n"
+msgstr "lua 攔截指令失敗:%s\n"
+
+#: rpmio/rpmmalloc.c:25
+#, c-format
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "記憶體é…ç½® (%u ä½å…ƒçµ„) 回傳 NULL。\n"
+
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr "V%d %s/%s %s,金鑰識別號 %s"
+
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr "(ç„¡)"
+
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
+#, c-format
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: Fwrite 失敗:%s\n"
+
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s:Fread 失敗:%s\n"
+
+#: sign/rpmgensig.c:177
+#, c-format
+msgid "%s: Fflush failed: %s\n"
+msgstr "%s:Fflush 失敗:%s\n"
+
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr "未支æ´çš„ PGP ç°½å\n"
+
+#: sign/rpmgensig.c:208
+#, c-format
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr "未支æ´çš„ PGP 雜湊演算法 %u\n"
+
+#: sign/rpmgensig.c:221
+#, c-format
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr "未支æ´çš„ PGP 公鑰演算法 %u\n"
+
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "無法執行 %s:%s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:312
+#, c-format
+msgid "gpg exec failed (%d)\n"
+msgstr "gpg 執行失敗 (%d)\n"
+
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "寫入簽å時 gpg 失敗\n"
+
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "無法讀å–ç°½å\n"
+
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
+msgstr "rpmMkTemp 失敗\n"
+
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
+#, c-format
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
+#, c-format
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s:rpmReadSignature 失敗:%s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s:headerRead 失敗:%s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "無法簽署 RPM v3 套件\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s 已經å«æœ‰ç›¸åŒçš„ç°½å,跳éŽ\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
+#, c-format
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s:rpmWriteSignature 失敗:%s\n"
+
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s:writeLead 失敗:%s\n"
+
+#: sign/rpmgensig.c:812
+#, c-format
+msgid "replacing %s failed: %s\n"
+msgstr "ç½®æ› %s 時失敗:%s\n"
+
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
+#, c-format
+msgid "%s: read manifest failed: %s\n"
+msgstr "%s:讀å–清單失敗:%s\n"
+
+#: tools/rpmgraph.c:219
+msgid "don't verify header+payload signature"
+msgstr "ä¸é©—證標頭+酬載簽å"
diff --git a/po/cs.po b/po/cs.po
index 91f1a9843..0c6f4b151 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Czech (http://www.transifex.com/rpm-team/rpm/language/cs/)\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,498 +43,560 @@ msgstr "Tento program lze volně šířit podle podmínek GNU GPL\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "vytvoření roury pro --pipe selhalo: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "spuštění selhalo\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "parametr není RPM balíÄek\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "chyba pÅ™i pÅ™i Ätení hlaviÄky balíÄku\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "nemohu znovu otevřít payload: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Volby dotazů (s -q nebo --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Vollby kontroly (s -V nebo --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Volby pro Instalaci/Aktualizaci/Mazání:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "SpoleÄné volby pro vÅ¡echny rpm režimy a spustitelné soubory:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "najednou lze provést jen jeden typ dotazu Äi ověření"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "neoÄekávaný příznak pro dotaz"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "neoÄekávaný formát dotazu"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "neoÄekávaný zdroj dotazu"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "specifikovat lze jen jeden hlavní režim"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "soubory mohou být pÅ™emístÄ›ny jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "nemohu použít --prefix s --relocate nebo --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate a --excludepath je možno použít jen pÅ™i instalaci nových balíÄků"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix je možno použít jen pÅ™i instalaci nových balíÄků"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "parametry pro --prefix musejí zaÄínat znakem /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "použít lze jen jeden z parametrů --excludedocs a --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles může být použit jen pÅ™i instalaci balíÄků"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb může být použit jen pÅ™i instalaci a odstraňování balíÄků"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"volba pro potlaÄení skriptů může být použita jen pÅ™i instalaci nebo pÅ™i "
-"odstraňování balíÄků"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"volba pro potlaÄení triggerů může být použita jen pÅ™i instalaci nebo "
-"odstraňování balíÄků"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "parametry pro --root (-r) musejí zaÄínat znakem /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "nezadány žádné balíÄky pro vymazání"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "nezadány žádné balíÄky pro instalaci"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "k dotazu nezadány žádné parametry"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "pro kontrolu nezadány žádné balíÄky"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot byl již nastaven, ignoruji %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"sestavení podle %prep (rozbalení zdrojových kódů a aplikace patchů) podle "
"<spec_soubor>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<spec_soubor>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "sestavení podle %build (%prep, pak kompilace) podle <spec_soubor>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"sestavení podle %install (%prep, %build, pak install) podle <spec_soubor>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "kontrola Äásti %files ve <spec_soubor>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "vytvoÅ™ení zdrojového a binárního balíÄku podle <spec_soubor>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "vytvoÅ™ení pouze binárního balíÄku podle <spec_soubor>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "vytvoÅ™ení zdrojového balíÄku podle <spec_soubor>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<zdrojový balíÄek>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr "sestavení podle %%install (vÄetnÄ› %prep, %build) ze <zdrojový balíÄek>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"sestavení podle %prep (rozbalení zdrojových kódů, aplikace patchů) z "
"<tar_soubor>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tar_soubor>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "sestavení podle %build (%prep, pak kompilace) z <tar_soubor>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "sestavení podle %%install (%prep, %build, pak install) z <tar_soubor>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "kontrola Äásti %files z <tar_soubor>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "vytvoÅ™ení zdrojového a binárního balíÄku z <tar_soubor>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "vytvoÅ™ení pouze binárního balíÄku z <tar_soubor>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "vytvoÅ™ení pouze zdrojového balíÄku z <tar_soubor>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "vytvoÅ™ení binárního balíÄku ze <zdrojový balíÄek>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<zdrojový balíÄek>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr "sestavení podle %%install (vÄetnÄ› %prep, %build) ze <zdrojový balíÄek>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "build root předefinován"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "po dokonÄení odstranit sestavovací strom"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorovat ExcludeArch: direktivy ve spec souboru"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "ladit nástroj stavu souborů"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "nespouÅ¡tÄ›t žádné etapy vytváření balíÄku"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "nekontrolovat závislosti balíÄků"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "neakceptovat i18N popisky ze spec souboru"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "po dokonÄení odstranit zdrojové kódy"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "po dokonÄení odstranit spec soubor"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "pÅ™eskoÄit přímo na urÄenou etapu (pouze pro c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "cílová platforma předefinována"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"Sestavovací volby s [ <spec_soubor> | <tar_soubor> | <zdrojový_balíÄek> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "SpoleÄné volby pro vÅ¡echny rpm režimy a spustitelné soubory:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Chybné závislosti při sestavování:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Nelze otevřít spec soubor %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Nelze otevřít rouru pro tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Nelze Äíst spec soubor z %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Nelze přejmenovat %s na %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "nemohu zjistit stav %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Soubor %s není obyÄejný soubor.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Nezdá se, že by %s byl spec soubor.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Sestavuji cílové platformy: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Sestavuji pro cíl %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "parametry pro --root (-r) musejí zaÄínat znakem /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "inicializuj databázi"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "znovu sestav obrácené seznamy z instalovaných hlaviÄek balíÄků"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "zkontrolovat databázové soubory"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Volby databáze:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "specifikovat lze jen jeden hlavní režim"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "ověřit podpis v balíÄku"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importuj obrnÄ›ný veÅ™ejný klíÄ"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "nezadány žádné parametry"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Volby dotazů (s -q nebo --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Vollby kontroly (s -V nebo --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Volby pro Instalaci/Aktualizaci/Mazání:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "najednou lze provést jen jeden typ dotazu Äi ověření"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "neoÄekávaný příznak pro dotaz"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "neoÄekávaný formát dotazu"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "neoÄekávaný zdroj dotazu"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "soubory mohou být pÅ™emístÄ›ny jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "nemohu použít --prefix s --relocate nebo --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate a --excludepath je možno použít jen pÅ™i instalaci nových balíÄků"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix je možno použít jen pÅ™i instalaci nových balíÄků"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "parametry pro --prefix musejí zaÄínat znakem /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "použít lze jen jeden z parametrů --excludedocs a --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles může být použit jen pÅ™i instalaci balíÄků"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb může být použit jen pÅ™i instalaci a odstraňování balíÄků"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"volba pro potlaÄení skriptů může být použita jen pÅ™i instalaci nebo pÅ™i "
+"odstraňování balíÄků"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"volba pro potlaÄení triggerů může být použita jen pÅ™i instalaci nebo "
+"odstraňování balíÄků"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "nezadány žádné balíÄky pro vymazání"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "nezadány žádné balíÄky pro instalaci"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "k dotazu nezadány žádné parametry"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "pro kontrolu nezadány žádné balíÄky"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "podepsat balíÄek (identické s --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "vymazat podpisy balíÄku"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Volby signatury:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Nemohu spustit %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Je nutné nastavit \"%%_gpg_name\" ve vašem souboru maker\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Vložte heslovou frázi: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Heslová fráze je v pořádku.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "použij následující formát dotazů"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -543,32 +605,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Provádění(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Spuštění %s selhalo (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Špatný návratový kód z %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -578,235 +645,315 @@ msgstr ""
"\n"
"chyby sestavení RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "chyba syntaxe při zpracování ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "chyba syntaxe při zpracování &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "chyba syntaxe při zpracování ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "chyba při parsování ve výrazu\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "nedoplněná (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- jen na Äíslech\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! jen na Äíslech\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "typy musí souhlasit\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / nejsou podporovány pro řetězce\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- není podporováno pro řetězce\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& a || není podporováno pro řetězce\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "chyba syntaxe ve výrazu\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Chybí '(' v %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Chybí ')' v %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Neplatný %s token: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Chybějící %s v %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Následuje neprázdný znak %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Špatná syntaxe: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Špatná práva spec: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Špatná práva adresáře: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Soubor musí zaÄínat na \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Soubor uveden dvakrát: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolická linka ukazuje na BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Soubor nenalezen: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: nemohu nahrát neznámou znaÄku (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: Ätení veÅ™ejného klíÄe selhalo.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: není obrnÄ›ný veÅ™ejný klíÄ.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Soubor potřebuje úvodní \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Soubor nenalezen globem: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Nemohu otevřít %%files soubor %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "řádek: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Soubor nenalezen globem: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Špatný soubor: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Špatný vlastník/skupina: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Kontroluji nezabalené soubory: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -815,548 +962,605 @@ msgstr ""
"Nalezeny instalované, ale nezabalené soubory:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: řádek: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Nemohu získat jméno poÄítaÄe: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Nemohu zapsat payload do %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Nemohu pÅ™eÄíst payload z %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Nemohu získat jméno poÄítaÄe: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Neznámá komprese payloadu: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Nemohu vytvoÅ™it nezmÄ›nitelný region hlaviÄky.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Nelze otevřít doÄasný soubor.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Nemohu zapsat doÄasnou hlaviÄku\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Nelze Äíst spec soubor z %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Špatná CSA data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Nemohu znovu pÅ™eÄíst hlaviÄku podpisu.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Nemohu otevřít %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Nemohu zapsat balíÄek: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Nemohu otevřít cíl pro podepsání %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Nemohu pÅ™eÄíst hlaviÄku z %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Nemohu zapsat hlaviÄku do %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Zapsáno: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Nemohu vygenerovat jméno souboru pro balíÄek %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "nemohu vytvořit %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "řádek: %d: druhý %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "Položky v %%changelog musí zaÄínat znakem *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "nekompletní položka v %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "špatný datum v %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog není seÅ™azen sestupnÄ› podle Äasu\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "chybějící jméno v %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "žádný popis v %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "řádek %d: Chyba při parsování %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "řádek %d: špatná volba %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "řádek %d: Příliš mnoho jmen: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "řádek %d: BalíÄek neexistuje: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "řádek %d: Druhé description\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "řádek %d: Chyba při parsování %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "řádek %d: Å patné Äíslo: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "řádek %d: Å patné Äíslo %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Architektura je vyřazena: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Architektura není zahrnuta: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS je vyřazen: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS není zahrnut: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "Položka %s musí být v balíÄku přítomna: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Duplikovaná položka %s v balíÄku: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Nemohu otevřít ikonu %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Nemohu pÅ™eÄíst ikonu %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Neznámý typ ikony: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "řádek %d: ZnaÄka má jen jeden token: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "řádek %d: PoÄkozená znaÄka: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "řádek %d: Prázdná znaÄka: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "řádek %d: Prefixy nesmí konÄit znakem \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "řádek %d: Docdir musí zaÄínat na '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "řádek %d: Å patné urÄení %s: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "řádek %d: Špatný formát BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Interní chyba: Å patná znaÄka: %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Å patná specifikace balíÄku: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "BalíÄek již existuje: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "řádek %d: Neznámá znaÄka: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Špatný zdrojový soubor: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Chyba při parsování %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "řádek %d: Špatný parametr v %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "řádek %d: Špatná volba v %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Neplatné Äíslo záplaty %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "řádek %d: druhý %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "řádek %d: spouště (triggery) musí mít --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "řádek %d: Chyba při parsování %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "řádek %d: vnitÅ™ní skript musí konÄit na '>': %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "řádek %d: jméno skriptu musí zaÄínat na '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "řádek %d: Druhý %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "řádek %d: nepodporovaný interní skript: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "řádek %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Nemohu otevřít %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%else bez poÄíteÄního %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endif bez poÄáteÄního %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Nenalezeny žádné kompatibilní architektury pro sestavení\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "BalíÄek nemá žádné %%description: %s\n"
@@ -1427,450 +1631,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Nemohu vytvořit rouru pro %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Nemohu spustit %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Nemohu provést fork %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) selhalo: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load selhal: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Hledám %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Selhalo vyhledání %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "dotaz na spec soubor %s selhal, nemohu parsovat\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(chyba: 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Å patné magické Äíslo"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Å patná nebo neÄitelná hlaviÄka"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "nerozpoznaný db parametr: \"%s\" ignorován.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Velikost hlaviÄky je pÅ™iliÅ¡ velká"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s má neplatnou Äíselnou hodnotu, pÅ™eskakuji\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s má příliš velkou nebo příliš malou long hodnotu, přeskakuji\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s má příliš velkou nebo příliš malou int hodnotu, přeskakuji\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "nemohu získat zámek %s na %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "sdílen"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exkluzivní"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Neznámý typ souboru"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Chybějící hardlink(y)"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "chyba(%d) při ukládání záznamu \"%s\" do %s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "chyba(%d) v odstraňování \"%s\" z %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Interní chyba"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Soubor z archivu není v hlaviÄce"
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "chyba(%d) pÅ™i alokaci nové instance balíÄku\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr "selhal - "
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s is a Delta RPM a nemůže být přímo instalován\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Nepodporovaný payload (%s) in balíÄku %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "balíÄek %s byl již pÅ™idán, pÅ™eskakuji %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "balíÄek %s byl již pÅ™idán, nahrazuji ho s %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(není blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(není Äíslo)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(neplatný typ)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(není base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(neplatný typ)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(není blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(neplatný typ xml)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(není OpenPGP podpis)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "uživatel %s neexistuje - použit uživatel root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "skupina %s neexistuje - použita skupina root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s uloženo jako %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s vytvořen jako %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "znaÄka[%d]: Å PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: Å PATNÃ, není v hexa\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: Å PATNÃ, není binární\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: Å PATNÃ, není binární\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "velikost blobu(%d): Å PATNÃ, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "offset regionu: Å PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "trailer regionu: Å PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "velikost regionu: Å PATNÃ, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr velikost (%d): Å PATNÃ, Ätení vrátilo %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: Å PATNÃ\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr znaÄky: Å PATNÉ, poÄet znaÄek (%d) mimo rozsah\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr data: Å PATNÃ, bajtů (%d) mimo rozsah\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): Å PATNÃ, Ätení vrátilo %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "nahrátí hdr: ŠPATNÉ\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "prázdný formát znaÄky"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature selhalo: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "prázdné jméno znaÄky"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Žádný podpis k dispozici\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead selhal: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "na konci pole oÄekáváno ]"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "neoÄekávaná ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "neoÄekávaná }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "ve výrazu oÄekáván ?"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "ve výrazu je po ? oÄekávána {"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "ve výrazu je oÄekávána }"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "v podvýrazu je po ? oÄekávána :"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "ve výrazu je po : oÄekávána {"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "na konci výrazu je oÄekáváno |"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iterátor pole použitý s poli jiné délky"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread selhalo: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "předefinuj <makro> s hodnotou <výraz>"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'<makro> <výraz>'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "definuj <makro> s hodnotou <výraz>"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "vypsat expanzi makra <výraz>"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'<výraz>'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "Äíst <soubor:...> místo implicitního souboru"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<SOUBOR:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "nekontrolovat souhrny balíÄku"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "nekontrolovat získané hlaviÄky databáze"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "nekontrolovat podpisy balíÄku"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "odeslat stdout do <příkazu>"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "<příkaz>"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "použít <adr> jako adresář nejvyšší úrovně"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "<adr>"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "zobrazit známé znaÄky pro dotazy"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "zobrazit finální konfiguraci rpmrc a maker"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "poskytnout výstu s méně detaily"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "poskytnout detailnější výstup"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "vypsat používanou verzi rpm"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "ladit nástroj stavu souboru payload"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "ladit rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: tabulka voleb špatně nakonfigurována (%d)\n"
@@ -1891,12 +2206,12 @@ msgstr "přemístění musejí obsahovat ="
msgid "relocations must have a / following the ="
msgstr "přemístění musejí mít za znakem = znak /"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"nainstalovat všechny soubory i konfigurace, které by se jinak mohly vynechat"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1904,151 +2219,161 @@ msgstr ""
"odstranit vÅ¡echny balíÄky odpovídající <balíÄku> (obvykle se generuje chyba, "
"specifikuje-li <balíÄek> více balíÄků)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "pÅ™emístÄ›ní souborů v nepÅ™emístitelném balíÄku"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "zobraz závislostní smyÄky jako varování"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "smazat (deinstalovat) balíÄek"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<balíÄek>"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "neinstaluj konfiguraÄní soubory"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "neinstalovat dokumentaci"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "pÅ™eskoÄit soubory s úvodní cestou <cesta> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<cesta>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "zkratka pro --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "aktualizace balíÄku jestliže je již nainstalován"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<soubor_balíÄku>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "bÄ›hem instalace balíÄku zobrazit dvojité křížky (dobré s -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "nekontrolovat architekturu balíÄku"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "nekontrolovat operaÄní systém balíÄku"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "nekontrolovat volné místo na disku před instalací"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "nainstalovat dokumentaci"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "nainstalovat balíÄky"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "upravit databázi, ale neupravovat systém souborovů"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "nekontrolovat závislosti balíÄků"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "neinstalovat bezpeÄnostní kontexty souboru"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "pro vyÅ™eÅ¡ení závislostí nemÄ›nit poÅ™adí instalace balíÄků"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "nespouÅ¡tÄ›t žádné skripty urÄené pro balíÄky"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "nespouštět žádné skripty (jsou-li nějaké)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "nespouštět žádné skripty (jsou-li nějaké)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "nespouštět žádné skripty (jsou-li nějaké)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "nespouštět žádné skripty (jsou-li nějaké)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "nespouÅ¡tÄ›t žádné skripty aktivované tímto balíÄkem"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "nespouÅ¡tÄ›t žádné skripty urÄené pro balíÄky"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "nespouÅ¡tÄ›t žádné instalaÄní skripty"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "nespouÅ¡tÄ›t žádné instalaÄní skripty"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "nespouÅ¡tÄ›t žádné instalaÄní skripty"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2056,369 +2381,407 @@ msgstr ""
"aktualizovat na starou verzi balíÄku (--force to dÄ›lá pÅ™i aktualizacích "
"automaticky)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "bÄ›hem instalace balíÄku zobrazit procenta"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "přemístit soubory do <adr>, jsou-li přemístitelné"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<adresář>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "přemístit soubory ze <staré_cesty> do <nové_cesty>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<stará_cesta>=<nová_cesta>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ignoruj souborové konflikty mezi balíÄky"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "pÅ™einstalovat, i když je již balíÄek přítomen"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "neinstalovat ale sdÄ›lit, zda-li by to fungovalo Äi nikoli"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "aktualizace balíÄku"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "dotázat/ověřit vÅ¡echny balíÄky"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "režim rpm checksig"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "dotaz/ověření balíÄků vlastnícího soubor"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "dotaz/ověření balíÄků ve skupinÄ›"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "dotázat/ověřit soubor balíÄku"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "dotaz/ověření balíÄků s identifikátorem balíÄku"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "dotaz/ověření balíÄků s hlaviÄkovým identifikátorem"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "režim dotazů"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "dotaz/ověření hlaviÄkové instance"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "dotaz/ověření balíÄků z instalaÄní transakce"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "dotaz na balíÄky aktivované balíÄkem"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "režim kontroly"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "dotaz/ověření balíÄků vyžadujících závislost"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "dotaz/ověření balíÄků poskytujících závislost"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "neseparuj argumenty"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "nezpracovávej nebalíÄkové soubory jako seznamy"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "vypsat vÅ¡echny konfiguraÄní soubory"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "vypsat všechny soubory s dokumentací"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "vypsat všechny soubory s dokumentací"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "vypsat vÅ¡echny konfiguraÄní soubory"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "zobrazit základní informace o souborech"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "vypsat soubory v balíÄku"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "vynechat %%ghost soubory"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "vynechat %%ghost soubory"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "zobrazit stav vypsaných souborů"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "nekontrolovat velikost souborů"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "nekontrolovat cesty symbolických linek"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "nekontrolovat vlastníka souborů"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "nekontrolovat skupinu souborů"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "nekontrolovat Äas zmÄ›ny souboru"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "nekontrolovat mód souborů"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr ""
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "nekontrolovat bezpeÄnostní kontexty souboru"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr ""
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "nekontrolovat soubory v balíÄku"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "nekontrolovat závislosti balíÄků"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "nespouštět kontrolní skripty"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "oÄekávám balíÄek se zdrojovými kódy, nalezen vÅ¡ak binární\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "zdrojový balíÄek neobsahuje .spec soubor\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "rozbalování archívu selhalo %s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " na souboru "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s selhal na souboru %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s selhalo: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "nesprávný formát: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(neobsahuje žádné soubory)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normální "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "nahrazen "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "neinstalován "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "sdílen v síti "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "špatná barva "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(chybí stav) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(neznámý %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "balíÄek nemá vlastníka souboru ani seznamy skupin\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "balíÄek nemá vlastníka souboru ani seznamy id\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "skupina %s neobsahuje žádné balíÄky\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "žádný balíÄek neaktivuje %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "poškozený %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "žádný balíÄek se neshoduje s %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "žádný balíÄek nevyžaduje %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "žádný balíÄek neposkytuje %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "soubor %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "soubor %s nevlastní žádný balíÄek\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "neplatné Äíslo balíÄku: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "balíÄek %s není nainstalován\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "neznámá znaÄka: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: importní Ätení selhalo(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-"%s: NezmÄ›nitelná oblast hlaviÄky nemůže být Ätena. PoÅ¡kozený balíÄek?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NENÃ OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr "(CHYBÄšJÃCÃ KLÃÄŒE:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr "(NEDÅ®VÄšRYHODNÉ KLÃÄŒE:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: otevření selhalo: %s\n"
@@ -2443,212 +2806,441 @@ msgstr "Není možné změnit kořenový adresář: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "nebyla nastavena dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: přeskakuji"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "chyba(%d) ukládání záznamu #%d do %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec selhal: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp selhal: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: přeskakuji"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: poÅ¡kozená hlaviÄka #%u získáno -- pÅ™eskakuji.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: nemohu Äíst hlaviÄku na 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "žádný dbpath nebyl nastaven"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "selhání při vytváření adresáře %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "hlaviÄka #%u v databázi je Å¡patná -- pÅ™eskakuji.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "nemohu přidat záznam původně na %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "selhalo znovusestavení databáze: původní databáze zůstává na místě\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "selhalo nahrazení staré databáze novou databází!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NE "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "ANO"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:, Provides:, a Obsoletes: verze pro podporu závislostí."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr "jména souborů uložená jako diName,baseName,dirIndex, ne jako cesta."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "payload balíÄku může být komprimován pomocí bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "payload balíÄku může být komprimován pomocí lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "soubory payloadu balíÄku mají pÅ™edponu \"./\"."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "NVR balíÄku není implicitnÄ› zprostÅ™edkována."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "znaÄky hlaviÄky jsou vždy setřízeny po nahrátí."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "interpret skriptletů může použít argumenty z hlaviÄky."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "hardlinkovaný soubor může být instalován bez toho, aby byl kompletní."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr "skriptlety balíÄku mohou pÅ™istupovat k rpm databázi pÅ™i instalaci."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "interní podpora pro lua skripty."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Å patné magické Äíslo"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Å patná nebo neÄitelná hlaviÄka"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Velikost hlaviÄky je pÅ™iliÅ¡ velká"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Neznámý typ souboru"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Interní chyba"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Soubor z archivu není v hlaviÄce"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr "selhal - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "otevření %s selhalo: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Připravuji..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Selhalé závislosti:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: není rpm balíÄkem (nebo seznamem balíÄků): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s nemůže být nainstalován\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Získávám %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "balíÄek %s není pÅ™emístitelný\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "chyba pÅ™i vytváření doÄasného souboru %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "nemohu otevřít %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Instaluji: %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "není rpm balíÄek"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "nepovolený typ podpisu"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "nepodporovaná verze RPM balíÄku"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "Ätení selhalo: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "jiný"
@@ -2722,796 +3314,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "neznámá chyba %d vznikla pÅ™i manipulaci s balíÄkem %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "chybí druhé ':' na %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "chybí jméno architektury na %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Neúplný datový řádek %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Příliš mnoho argumentů na datovém řádku na %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Å patné Äíslo architektury nebo operaÄního systému: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Neúplný implicitní řádek na %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Příliš mnoho argumentů v implicitním řádku na %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "chybějící ':' (nalezeno 0x%02x) na %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "chybí argument pro %s na %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "nemohu otevřít %s na %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "chybí arcitektura pro %s na %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "špatný parametr'%s' na %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Neznámý systém: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Prosím kontaktujte %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Nemohu otevřít %s pro Ätení: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s scriptlet selhal, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s skriplet selhal, signál %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "provedení %s skripletu selhalo, návratový kód: %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "nemohu otevřít Packages databázi v %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "nadbyteÄná '(' v názvu balíÄku: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "chybÄ›jící '(' v názvu balíÄku: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "chybÄ›jící ')' v názvu balíÄku: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh velikost(%d): Å PATNÃ, Ätení vrátilo %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: Å PATNÃ\n"
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh znaÄky: Å PATNÉ, poÄet znaÄek(%d) mimo rozsah\n"
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh data: Å PATNÃ, poÄet bajtů(%d) mimo rozsah\n"
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): Å PATNÃ, Ätení vrátilo %d\n"
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh znaÄka[%d]: Å¡PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh nahání: šPATNÉ\n"
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh zarovnání(%zd): Å PATNÉ, Ätení %zd bajtů\n"
-
-#: lib/signature.c:235
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): Å PATNÃ, fstat(2) selhal\n"
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "NezmÄ›nitelná oblast hlaviÄky nemůže být Ätena. PoÅ¡kozený balíÄek?\n"
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 digest:"
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "SHA1 digest v hlaviÄce:"
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "HlaviÄka "
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:158
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "chybí %c %s"
-
-#: lib/verify.c:422
+#: lib/rpmvs.c:178
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Nesplněné závislosti pro %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "chybí { po %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "po %{ chybí }"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "prázdný formát znaÄky"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "prázdné jméno znaÄky"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "neznámá znaÄka"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "na konci pole oÄekáváno ]"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "neoÄekávaná ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "neoÄekávaná }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "ve výrazu oÄekáván ?"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "ve výrazu je po ? oÄekávána {"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "ve výrazu je oÄekávána }"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "v podvýrazu je po ? oÄekávána :"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "ve výrazu je po : oÄekávána {"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "na konci výrazu je oÄekáváno |"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iterátor pole použitý s poli jiné délky"
-
-#: lib/rpmdb.c:97
+#: lib/rpmvs.c:188
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "nemohu otevřít %s index pomocí db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/rpmvs.c:195
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "nebyla nastavena dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: přeskakuji"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "chyba(%d) ukládání záznamu #%d do %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec selhal: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp selhal: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: přeskakuji"
-
-#: lib/rpmdb.c:1897
+#: lib/rpmvs.c:206
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: poÅ¡kozená hlaviÄka #%u získáno -- pÅ™eskakuji.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/rpmdb.c:2349
+#: lib/rpmvs.c:261
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: nemohu Äíst hlaviÄku na 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "chyba(%d) nastavování \"%s\" záznamů z %s indexu\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "chyba(%d) při ukládání záznamu \"%s\" do %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "chyba(%d) v odstraňování \"%s\" z %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "chyba(%d) pÅ™i alokaci nové instance balíÄku\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "chyba(%d) získávání \"%s\" záznamů z %s indexu\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "chyba(%d) při ukládání záznamu %s do %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "žádný dbpath nebyl nastaven"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "selhání při vytváření adresáře %s: %s\n"
-
-#: lib/rpmdb.c:2910
+#: lib/rpmvs.c:268
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "hlaviÄka #%u v databázi je Å¡patná -- pÅ™eskakuji.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "nemohu přidat záznam původně na %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "selhalo znovusestavení databáze: původní databáze zůstává na místě\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "selhalo nahrazení staré databáze novou databází!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "nahraÄ soubory v %s soubory z %s k obnovení"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "selhalo odstranění adresáře %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d chyba(%d) z %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d chyba(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "nemohu získat zámek %s na %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "sdílen"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exkluzivní"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "%s%s"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "nerozpoznaný db parametr: \"%s\" ignorován.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s má neplatnou Äíselnou hodnotu, pÅ™eskakuji\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s má příliš velkou nebo příliš malou long hodnotu, přeskakuji\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s má příliš velkou nebo příliš malou int hodnotu, přeskakuji\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "HlaviÄka "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Nemohu znovu pÅ™eÄíst hlaviÄku podpisu.\n"
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: plugins/sepolicy.c:416
+#: lib/verify.c:263
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: lib/verify.c:284
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: lib/verify.c:448
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "chybí %c %s"
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
+#: lib/verify.c:503
+#, c-format
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Nesplněné závislosti pro %s:\n"
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktivní %d prázdné %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(prázdné)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(prázdné)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makro %%%s má neukonÄené tÄ›lo\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makro %%%s má neukonÄené parametry\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makro %%%s má nepřípustné jméno (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makro %%%s má neukonÄené tÄ›lo\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makro %%%s má neukonÄené parametry\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Makro %%%s má prázdné tělo\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Selhalo vyhodnocení makra %%%s\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Makro %%%s má nedovolené jméno (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) nebylo použito pod úrovní %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Neznámý parametr %c v %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "NeukonÄené %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Po %% následuje nezpracovatelné makro\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktivní %d prázdné %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(žádná chyba)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "fatální chyba:"
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "chyba: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "varování: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "neplatná syntax v lua skriptletu: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "neplatná syntax v lua skriptu: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua skript selhal: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "neplatné syntax v lua souboru: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua obsloužení selhalo: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: rpmio/rpmmalloc.c:25
+#, c-format
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "alokace paměti (%u bajtů) vrátila NULL.\n"
+
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(žádná chyba)"
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "fatální chyba:"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "chyba: "
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "varování: "
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:62
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "alokace paměti (%u bajtů) vrátila NULL.\n"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:83
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite selhalo: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread selhalo: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush selhal: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Nemohu spustit %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Nemohu vytvořit rouru pro podepsání: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "spuštění gpg selhalo (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg selhal při zápisu podpisu\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "nemohu pÅ™eÄíst podpis\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp selhal\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead selhalo: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature selhalo: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr ""
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: Fwrite selhalo: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead selhalo: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: Ätení seznamu selhalo: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "neověřuj podpis hlaviÄky a payloadu"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
deleted file mode 100644
index a71ef75f1..000000000
--- a/po/cs_CZ.po
+++ /dev/null
@@ -1,3484 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: RPM\n"
-"Report-Msgid-Bugs-To: http://rpm.org/\n"
-"POT-Creation-Date: 2012-11-05 10:07+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
-"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/rpm/language/cs_CZ/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: cs_CZ\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-
-#: cliutils.c:21 lib/poptI.c:29
-#, c-format
-msgid "%s: %s\n"
-msgstr ""
-
-#: cliutils.c:27 lib/poptALL.c:55
-#, c-format
-msgid "RPM version %s\n"
-msgstr ""
-
-#: cliutils.c:32
-#, c-format
-msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
-msgstr ""
-
-#: cliutils.c:33
-#, c-format
-msgid ""
-"This program may be freely redistributed under the terms of the GNU GPL\n"
-msgstr ""
-
-#: cliutils.c:53
-#, c-format
-msgid "creating a pipe for --pipe failed: %m\n"
-msgstr ""
-
-#: cliutils.c:63
-#, c-format
-msgid "exec failed\n"
-msgstr ""
-
-#: rpm2cpio.c:63
-#, c-format
-msgid "argument is not an RPM package\n"
-msgstr ""
-
-#: rpm2cpio.c:68
-#, c-format
-msgid "error reading header from package\n"
-msgstr ""
-
-#: rpm2cpio.c:83
-#, c-format
-msgid "cannot re-open payload: %s\n"
-msgstr ""
-
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr ""
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr ""
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr ""
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr ""
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr ""
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr ""
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr ""
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr ""
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid ""
-"--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr ""
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr ""
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr ""
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr ""
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr ""
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr ""
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr ""
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:129
-#, c-format
-msgid "verify %files section from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:142
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
-msgstr ""
-
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:151
-#, c-format
-msgid "verify %files section from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
-msgstr ""
-
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr ""
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-
-#: rpmbuild.c:171
-msgid "override build root"
-msgstr ""
-
-#: rpmbuild.c:173
-msgid "remove build tree when done"
-msgstr ""
-
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
-msgstr ""
-
-#: rpmbuild.c:177
-msgid "debug file state machine"
-msgstr ""
-
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
-msgstr ""
-
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
-msgstr ""
-
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
-msgstr ""
-
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
-msgstr ""
-
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
-msgstr ""
-
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
-msgstr ""
-
-#: rpmbuild.c:194
-msgid "remove sources when done"
-msgstr ""
-
-#: rpmbuild.c:196
-msgid "remove specfile when done"
-msgstr ""
-
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
-msgstr ""
-
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
-msgstr ""
-
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
-msgstr ""
-
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
-msgstr ""
-
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
-msgstr ""
-
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
-msgstr ""
-
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
-msgstr ""
-
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
-msgstr ""
-
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
-msgstr ""
-
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
-msgstr ""
-
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
-msgstr ""
-
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
-msgstr ""
-
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
-msgstr ""
-
-#: rpmdb.c:22
-msgid "initialize database"
-msgstr ""
-
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
-msgstr ""
-
-#: rpmdb.c:27
-msgid "verify database files"
-msgstr ""
-
-#: rpmdb.c:33
-msgid "Database options:"
-msgstr ""
-
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
-msgstr ""
-
-#: rpmkeys.c:26
-msgid "import an armored public key"
-msgstr ""
-
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
-msgstr ""
-
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
-msgstr ""
-
-#: rpmkeys.c:40
-msgid "Keyring options:"
-msgstr ""
-
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
-msgstr ""
-
-#: rpmsign.c:25
-msgid "sign package(s)"
-msgstr ""
-
-#: rpmsign.c:27
-msgid "sign package(s) (identical to --addsign)"
-msgstr ""
-
-#: rpmsign.c:29
-msgid "delete package signatures"
-msgstr ""
-
-#: rpmsign.c:35
-msgid "Signature options:"
-msgstr ""
-
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr ""
-
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
-msgstr ""
-
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr ""
-
-#: rpmsign.c:117
-#, c-format
-msgid "Pass phrase is good.\n"
-msgstr ""
-
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr ""
-
-#: rpmspec.c:26
-msgid "parse spec file(s) to stdout"
-msgstr ""
-
-#: rpmspec.c:28
-msgid "query spec file(s)"
-msgstr ""
-
-#: rpmspec.c:30
-msgid "operate on binary rpms generated by spec (default)"
-msgstr ""
-
-#: rpmspec.c:32
-msgid "operate on source rpm generated by spec"
-msgstr ""
-
-#: rpmspec.c:36 lib/poptQV.c:189
-msgid "use the following query format"
-msgstr ""
-
-#: rpmspec.c:45
-msgid "Spec options:"
-msgstr ""
-
-#: rpmspec.c:90
-msgid "no arguments given for parse"
-msgstr ""
-
-#: build/build.c:120
-#, c-format
-msgid "Unable to open temp file: %s\n"
-msgstr ""
-
-#: build/build.c:126
-#, c-format
-msgid "Unable to open stream: %s\n"
-msgstr ""
-
-#: build/build.c:161
-#, c-format
-msgid "Executing(%s): %s\n"
-msgstr ""
-
-#: build/build.c:168
-#, c-format
-msgid "Exec of %s failed (%s): %s\n"
-msgstr ""
-
-#: build/build.c:177
-#, c-format
-msgid "Error executing scriptlet %s (%s)\n"
-msgstr ""
-
-#: build/build.c:184
-#, c-format
-msgid "Bad exit status from %s (%s)\n"
-msgstr ""
-
-#: build/build.c:291
-msgid ""
-"\n"
-"\n"
-"RPM build errors:\n"
-msgstr ""
-
-#: build/expression.c:216
-msgid "syntax error while parsing ==\n"
-msgstr ""
-
-#: build/expression.c:246
-msgid "syntax error while parsing &&\n"
-msgstr ""
-
-#: build/expression.c:255
-msgid "syntax error while parsing ||\n"
-msgstr ""
-
-#: build/expression.c:305
-msgid "parse error in expression\n"
-msgstr ""
-
-#: build/expression.c:337
-msgid "unmatched (\n"
-msgstr ""
-
-#: build/expression.c:369
-msgid "- only on numbers\n"
-msgstr ""
-
-#: build/expression.c:385
-msgid "! only on numbers\n"
-msgstr ""
-
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
-msgid "types must match\n"
-msgstr ""
-
-#: build/expression.c:440
-msgid "* / not suported for strings\n"
-msgstr ""
-
-#: build/expression.c:491
-msgid "- not suported for strings\n"
-msgstr ""
-
-#: build/expression.c:638
-msgid "&& and || not suported for strings\n"
-msgstr ""
-
-#: build/expression.c:671
-msgid "syntax error in expression\n"
-msgstr ""
-
-#: build/files.c:327 build/files.c:496 build/files.c:710
-#, c-format
-msgid "Missing '(' in %s %s\n"
-msgstr ""
-
-#: build/files.c:337 build/files.c:632 build/files.c:720 build/files.c:779
-#, c-format
-msgid "Missing ')' in %s(%s\n"
-msgstr ""
-
-#: build/files.c:362 build/files.c:651
-#, c-format
-msgid "Invalid %s token: %s\n"
-msgstr ""
-
-#: build/files.c:465
-#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr ""
-
-#: build/files.c:511
-#, c-format
-msgid "Non-white space follows %s(): %s\n"
-msgstr ""
-
-#: build/files.c:547
-#, c-format
-msgid "Bad syntax: %s(%s)\n"
-msgstr ""
-
-#: build/files.c:556
-#, c-format
-msgid "Bad mode spec: %s(%s)\n"
-msgstr ""
-
-#: build/files.c:568
-#, c-format
-msgid "Bad dirmode spec: %s(%s)\n"
-msgstr ""
-
-#: build/files.c:672
-#, c-format
-msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
-msgstr ""
-
-#: build/files.c:679
-#, c-format
-msgid "Duplicate locale %s in %%lang(%s)\n"
-msgstr ""
-
-#: build/files.c:794
-#, c-format
-msgid "Invalid capability: %s\n"
-msgstr ""
-
-#: build/files.c:804
-msgid "File capability support not built in\n"
-msgstr ""
-
-#: build/files.c:853
-#, c-format
-msgid "File must begin with \"/\": %s\n"
-msgstr ""
-
-#: build/files.c:974
-#, c-format
-msgid "Unknown file digest algorithm %u, falling back to MD5\n"
-msgstr ""
-
-#: build/files.c:1002
-#, c-format
-msgid "File listed twice: %s\n"
-msgstr ""
-
-#: build/files.c:1124
-#, c-format
-msgid "reading symlink %s failed: %s\n"
-msgstr ""
-
-#: build/files.c:1132
-#, c-format
-msgid "Symlink points to BuildRoot: %s -> %s\n"
-msgstr ""
-
-#: build/files.c:1346
-#, c-format
-msgid "Directory not found: %s\n"
-msgstr ""
-
-#: build/files.c:1347
-#, c-format
-msgid "File not found: %s\n"
-msgstr ""
-
-#: build/files.c:1538
-#, c-format
-msgid "%s: can't load unknown tag (%d).\n"
-msgstr ""
-
-#: build/files.c:1544
-#, c-format
-msgid "%s: public key read failed.\n"
-msgstr ""
-
-#: build/files.c:1548
-#, c-format
-msgid "%s: not an armored public key.\n"
-msgstr ""
-
-#: build/files.c:1557
-#, c-format
-msgid "%s: failed to encode\n"
-msgstr ""
-
-#: build/files.c:1602
-#, c-format
-msgid "File needs leading \"/\": %s\n"
-msgstr ""
-
-#: build/files.c:1626
-#, c-format
-msgid "%%dev glob not permitted: %s\n"
-msgstr ""
-
-#: build/files.c:1639
-#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr ""
-
-#: build/files.c:1640 lib/rpminstall.c:426
-#, c-format
-msgid "File not found by glob: %s\n"
-msgstr ""
-
-#: build/files.c:1676
-#, c-format
-msgid "Could not open %%files file %s: %m\n"
-msgstr ""
-
-#: build/files.c:1683
-#, c-format
-msgid "line: %s\n"
-msgstr ""
-
-#: build/files.c:1690
-#, c-format
-msgid "Error reading %%files file %s: %m\n"
-msgstr ""
-
-#: build/files.c:1712
-#, c-format
-msgid "illegal _docdir_fmt %s: %s\n"
-msgstr ""
-
-#: build/files.c:1866
-#, c-format
-msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
-
-#: build/files.c:1883
-#, c-format
-msgid "More than one file on a line: %s\n"
-msgstr ""
-
-#: build/files.c:2011
-#, c-format
-msgid "Bad file: %s: %s\n"
-msgstr ""
-
-#: build/files.c:2036 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr ""
-
-#: build/files.c:2070
-#, c-format
-msgid "Checking for unpackaged file(s): %s\n"
-msgstr ""
-
-#: build/files.c:2083
-#, c-format
-msgid ""
-"Installed (but unpackaged) file(s) found:\n"
-"%s"
-msgstr ""
-
-#: build/files.c:2114
-#, c-format
-msgid "Processing files: %s\n"
-msgstr ""
-
-#: build/files.c:2127
-#, c-format
-msgid "Binaries arch (%d) not matching the package arch (%d).\n"
-msgstr ""
-
-#: build/files.c:2133
-msgid "Arch dependent binaries in noarch package\n"
-msgstr ""
-
-#: build/pack.c:50
-#, c-format
-msgid "create archive failed on file %s: %s\n"
-msgstr ""
-
-#: build/pack.c:53
-#, c-format
-msgid "create archive failed: %s\n"
-msgstr ""
-
-#: build/pack.c:80
-#, c-format
-msgid "Could not open %s file: %s\n"
-msgstr ""
-
-#: build/pack.c:96
-#, c-format
-msgid "%s: line: %s\n"
-msgstr ""
-
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr ""
-
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:206
-#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:310
-#, c-format
-msgid "Unknown payload compression: %s\n"
-msgstr ""
-
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr ""
-
-#: build/pack.c:440
-#, c-format
-msgid "Could not open %s: %s\n"
-msgstr ""
-
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
-msgstr ""
-
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:523
-#, c-format
-msgid "Wrote: %s\n"
-msgstr ""
-
-#: build/pack.c:542
-#, c-format
-msgid "Executing \"%s\":\n"
-msgstr ""
-
-#: build/pack.c:545
-#, c-format
-msgid "Execution of \"%s\" failed.\n"
-msgstr ""
-
-#: build/pack.c:549
-#, c-format
-msgid "Package check \"%s\" failed.\n"
-msgstr ""
-
-#: build/pack.c:598
-#, c-format
-msgid "Could not generate output filename for package %s: %s\n"
-msgstr ""
-
-#: build/pack.c:615
-#, c-format
-msgid "cannot create %s: %s\n"
-msgstr ""
-
-#: build/parseBuildInstallClean.c:35
-#, c-format
-msgid "line %d: second %s\n"
-msgstr ""
-
-#: build/parseChangelog.c:114
-#, c-format
-msgid "bogus date in %%changelog: %s\n"
-msgstr ""
-
-#: build/parseChangelog.c:146
-#, c-format
-msgid "%%changelog entries must start with *\n"
-msgstr ""
-
-#: build/parseChangelog.c:154
-#, c-format
-msgid "incomplete %%changelog entry\n"
-msgstr ""
-
-#: build/parseChangelog.c:169
-#, c-format
-msgid "bad date in %%changelog: %s\n"
-msgstr ""
-
-#: build/parseChangelog.c:174
-#, c-format
-msgid "%%changelog not in descending chronological order\n"
-msgstr ""
-
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
-#, c-format
-msgid "missing name in %%changelog\n"
-msgstr ""
-
-#: build/parseChangelog.c:200
-#, c-format
-msgid "no description in %%changelog\n"
-msgstr ""
-
-#: build/parseDescription.c:32
-#, c-format
-msgid "line %d: Error parsing %%description: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
-#, c-format
-msgid "line %d: Bad option %s: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
-#, c-format
-msgid "line %d: Too many names: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr ""
-
-#: build/parseFiles.c:33
-#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
-msgstr ""
-
-#: build/parsePolicies.c:32
-#, c-format
-msgid "line %d: Error parsing %%policies: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:69
-#, c-format
-msgid "Error parsing tag field: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:162
-#, c-format
-msgid "line %d: Bad number: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:168
-#, c-format
-msgid "line %d: Bad no%s number: %u\n"
-msgstr ""
-
-#: build/parsePreamble.c:231
-#, c-format
-msgid "line %d: Bad %s number: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:245
-#, c-format
-msgid "%s %d defined multiple times\n"
-msgstr ""
-
-#: build/parsePreamble.c:290
-#, c-format
-msgid "Downloading %s to %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:293
-#, c-format
-msgid "Couldn't download %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:432
-#, c-format
-msgid "Architecture is excluded: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:437
-#, c-format
-msgid "Architecture is not included: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:442
-#, c-format
-msgid "OS is excluded: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:447
-#, c-format
-msgid "OS is not included: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:473
-#, c-format
-msgid "%s field must be present in package: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:496
-#, c-format
-msgid "Duplicate %s entries in package: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:554
-#, c-format
-msgid "Unable to open icon %s: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:570
-#, c-format
-msgid "Unable to read icon %s: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:580
-#, c-format
-msgid "Unknown icon type: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:594
-#, c-format
-msgid "line %d: Tag takes single token only: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:614
-#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:617
-#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:623
-#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:646
-#, c-format
-msgid "line %d: Malformed tag: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:654
-#, c-format
-msgid "line %d: Empty tag: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:715
-#, c-format
-msgid "line %d: Prefixes must not end with \"/\": %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:727
-#, c-format
-msgid "line %d: Docdir must begin with '/': %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:740
-#, c-format
-msgid "line %d: Epoch field must be an unsigned number: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:777
-#, c-format
-msgid "line %d: Bad %s: qualifiers: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:804
-#, c-format
-msgid "line %d: Bad BuildArchitecture format: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:814
-#, c-format
-msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:830
-#, c-format
-msgid "Internal error: Bogus tag %d\n"
-msgstr ""
-
-#: build/parsePreamble.c:915
-#, c-format
-msgid "line %d: %s is deprecated: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:978
-#, c-format
-msgid "Bad package specification: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:1015
-#, c-format
-msgid "line %d: Unknown tag: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:1047
-#, c-format
-msgid "%%{buildroot} couldn't be empty\n"
-msgstr ""
-
-#: build/parsePreamble.c:1051
-#, c-format
-msgid "%%{buildroot} can not be \"/\"\n"
-msgstr ""
-
-#: build/parsePrep.c:28
-#, c-format
-msgid "Bad source: %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:73
-#, c-format
-msgid "No patch number %u\n"
-msgstr ""
-
-#: build/parsePrep.c:75
-#, c-format
-msgid "%%patch without corresponding \"Patch:\" tag\n"
-msgstr ""
-
-#: build/parsePrep.c:152
-#, c-format
-msgid "No source number %u\n"
-msgstr ""
-
-#: build/parsePrep.c:154
-msgid "No \"Source:\" tag in the spec file\n"
-msgstr ""
-
-#: build/parsePrep.c:261
-#, c-format
-msgid "Error parsing %%setup: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:272
-#, c-format
-msgid "line %d: Bad arg to %%setup: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:287
-#, c-format
-msgid "line %d: Bad %%setup option %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:446
-#, c-format
-msgid "%s: %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:459
-#, c-format
-msgid "Invalid patch number %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:486
-#, c-format
-msgid "line %d: second %%prep\n"
-msgstr ""
-
-#: build/parseReqs.c:112
-msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
-msgstr ""
-
-#: build/parseReqs.c:137
-msgid "Versioned file name not permitted"
-msgstr ""
-
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr ""
-
-#: build/parseReqs.c:165
-msgid "invalid dependency"
-msgstr ""
-
-#: build/parseReqs.c:181
-#, c-format
-msgid "line %d: %s: %s\n"
-msgstr ""
-
-#: build/parseScript.c:192
-#, c-format
-msgid "line %d: triggers must have --: %s\n"
-msgstr ""
-
-#: build/parseScript.c:202 build/parseScript.c:265
-#, c-format
-msgid "line %d: Error parsing %s: %s\n"
-msgstr ""
-
-#: build/parseScript.c:214
-#, c-format
-msgid "line %d: internal script must end with '>': %s\n"
-msgstr ""
-
-#: build/parseScript.c:220
-#, c-format
-msgid "line %d: script program must begin with '/': %s\n"
-msgstr ""
-
-#: build/parseScript.c:258
-#, c-format
-msgid "line %d: Second %s\n"
-msgstr ""
-
-#: build/parseScript.c:301
-#, c-format
-msgid "line %d: unsupported internal script: %s\n"
-msgstr ""
-
-#: build/parseScript.c:318
-#, c-format
-msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
-msgstr ""
-
-#: build/parseSpec.c:209
-#, c-format
-msgid "line %d: %s\n"
-msgstr ""
-
-#: build/parseSpec.c:252
-#, c-format
-msgid "Unable to open %s: %s\n"
-msgstr ""
-
-#: build/parseSpec.c:286
-#, c-format
-msgid "%s:%d: Argument expected for %s\n"
-msgstr ""
-
-#: build/parseSpec.c:308
-#, c-format
-msgid "line %d: Unclosed %%if\n"
-msgstr ""
-
-#: build/parseSpec.c:313
-#, c-format
-msgid "line %d: unclosed macro or bad line continuation\n"
-msgstr ""
-
-#: build/parseSpec.c:355
-#, c-format
-msgid "%s:%d: bad %%if condition\n"
-msgstr ""
-
-#: build/parseSpec.c:363
-#, c-format
-msgid "%s:%d: Got a %%else with no %%if\n"
-msgstr ""
-
-#: build/parseSpec.c:374
-#, c-format
-msgid "%s:%d: Got a %%endif with no %%if\n"
-msgstr ""
-
-#: build/parseSpec.c:392
-#, c-format
-msgid "%s:%d: malformed %%include statement\n"
-msgstr ""
-
-#: build/parseSpec.c:669
-msgid "No compatible architectures found for build\n"
-msgstr ""
-
-#: build/parseSpec.c:703
-#, c-format
-msgid "Package has no %%description: %s\n"
-msgstr ""
-
-#: build/policies.c:87
-#, c-format
-msgid "Policy module '%s' duplicated with overlapping types\n"
-msgstr ""
-
-#: build/policies.c:93
-#, c-format
-msgid "Base modules '%s' and '%s' have overlapping types\n"
-msgstr ""
-
-#: build/policies.c:101
-msgid "Failed to get policies from header\n"
-msgstr ""
-
-#: build/policies.c:154
-#, c-format
-msgid "%%semodule requires a file path\n"
-msgstr ""
-
-#: build/policies.c:163
-#, c-format
-msgid "Failed to read policy file: %s\n"
-msgstr ""
-
-#: build/policies.c:170
-#, c-format
-msgid "Failed to encode policy file: %s\n"
-msgstr ""
-
-#: build/policies.c:187
-#, c-format
-msgid "Failed to determine a policy name: %s\n"
-msgstr ""
-
-#: build/policies.c:199
-#, c-format
-msgid ""
-"'%s' type given with other types in %%semodule %s. Compacting types to "
-"'%s'.\n"
-msgstr ""
-
-#: build/policies.c:246
-#, c-format
-msgid "Error parsing %s: %s\n"
-msgstr ""
-
-#: build/policies.c:252
-#, c-format
-msgid "Expecting %%semodule tag: %s\n"
-msgstr ""
-
-#: build/policies.c:262
-#, c-format
-msgid "Missing module path in line: %s\n"
-msgstr ""
-
-#: build/policies.c:268
-#, c-format
-msgid "Too many arguments in line: %s\n"
-msgstr ""
-
-#: build/policies.c:307
-#, c-format
-msgid "Processing policies: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:108
-#, c-format
-msgid "Ignoring invalid regex %s\n"
-msgstr ""
-
-#: build/rpmfc.c:204
-#, c-format
-msgid "Couldn't create pipe for %s: %m\n"
-msgstr ""
-
-#: build/rpmfc.c:229
-#, c-format
-msgid "Couldn't exec %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:234 lib/rpmscript.c:255
-#, c-format
-msgid "Couldn't fork %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:317
-#, c-format
-msgid "%s failed: %x\n"
-msgstr ""
-
-#: build/rpmfc.c:321
-#, c-format
-msgid "failed to write all data to %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
-msgid "Empty file classifier\n"
-msgstr ""
-
-#: build/rpmfc.c:918
-msgid "No file attributes configured\n"
-msgstr ""
-
-#: build/rpmfc.c:938
-#, c-format
-msgid "magic_open(0x%x) failed: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:944
-#, c-format
-msgid "magic_load failed: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:986
-#, c-format
-msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
-msgstr ""
-
-#: build/rpmfc.c:1166
-#, c-format
-msgid "Finding %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
-#, c-format
-msgid "Failed to find %s:\n"
-msgstr ""
-
-#: build/spec.c:404
-#, c-format
-msgid "query of specfile %s failed, can't parse\n"
-msgstr ""
-
-#: lib/cpio.c:364
-#, c-format
-msgid "(error 0x%x)"
-msgstr ""
-
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr ""
-
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr ""
-
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr ""
-
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
-
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr ""
-
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr ""
-
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr ""
-
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr ""
-
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr ""
-
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr ""
-
-#: lib/depends.c:68
-#, c-format
-msgid "%s is a Delta RPM and cannot be directly installed\n"
-msgstr ""
-
-#: lib/depends.c:72
-#, c-format
-msgid "Unsupported payload (%s) in package %s\n"
-msgstr ""
-
-#: lib/depends.c:348
-#, c-format
-msgid "package %s was already added, skipping %s\n"
-msgstr ""
-
-#: lib/depends.c:349
-#, c-format
-msgid "package %s was already added, replacing with %s\n"
-msgstr ""
-
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
-msgid "(not a number)"
-msgstr ""
-
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
-msgstr ""
-
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
-msgstr ""
-
-#: lib/formats.c:314
-msgid "(not base64)"
-msgstr ""
-
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
-msgid "(invalid xml type)"
-msgstr ""
-
-#: lib/formats.c:434
-msgid "(not an OpenPGP signature)"
-msgstr ""
-
-#: lib/formats.c:446
-#, c-format
-msgid "Invalid date %u"
-msgstr ""
-
-#: lib/formats.c:512
-msgid "normal"
-msgstr ""
-
-#: lib/formats.c:515
-msgid "replaced"
-msgstr ""
-
-#: lib/formats.c:518
-msgid "not installed"
-msgstr ""
-
-#: lib/formats.c:521
-msgid "net shared"
-msgstr ""
-
-#: lib/formats.c:524
-msgid "wrong color"
-msgstr ""
-
-#: lib/formats.c:527
-msgid "missing"
-msgstr ""
-
-#: lib/formats.c:530
-msgid "(unknown)"
-msgstr ""
-
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
-#, c-format
-msgid "%s saved as %s\n"
-msgstr ""
-
-#: lib/fsm.c:1543
-#, c-format
-msgid "%s created as %s\n"
-msgstr ""
-
-#: lib/fsm.c:1845
-#, c-format
-msgid "%s %s: remove failed: %s\n"
-msgstr ""
-
-#: lib/fsm.c:1846
-msgid "directory"
-msgstr ""
-
-#: lib/fsm.c:1846
-msgid "file"
-msgstr ""
-
-#: lib/package.c:146
-#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr ""
-
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr ""
-
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr ""
-
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr ""
-
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr ""
-
-#: lib/package.c:296
-#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr ""
-
-#: lib/package.c:322 lib/signature.c:142
-#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:331 lib/signature.c:151
-#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:358 lib/signature.c:185
-#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr ""
-
-#: lib/package.c:427
-#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr ""
-
-#: lib/package.c:436
-#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr ""
-
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr ""
-
-#: lib/package.c:452
-#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr ""
-
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr ""
-
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
-#, c-format
-msgid "%s: No signature available\n"
-msgstr ""
-
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr ""
-
-#: lib/package.c:629 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
-#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr ""
-
-#: lib/poptALL.c:157
-msgid "predefine MACRO with value EXPR"
-msgstr ""
-
-#: lib/poptALL.c:158 lib/poptALL.c:161
-msgid "'MACRO EXPR'"
-msgstr ""
-
-#: lib/poptALL.c:160
-msgid "define MACRO with value EXPR"
-msgstr ""
-
-#: lib/poptALL.c:163
-msgid "print macro expansion of EXPR"
-msgstr ""
-
-#: lib/poptALL.c:164
-msgid "'EXPR'"
-msgstr ""
-
-#: lib/poptALL.c:166 lib/poptALL.c:180
-msgid "read <FILE:...> instead of default file(s)"
-msgstr ""
-
-#: lib/poptALL.c:167 lib/poptALL.c:181
-msgid "<FILE:...>"
-msgstr ""
-
-#: lib/poptALL.c:170
-msgid "don't verify package digest(s)"
-msgstr ""
-
-#: lib/poptALL.c:172
-msgid "don't verify database header(s) when retrieved"
-msgstr ""
-
-#: lib/poptALL.c:174
-msgid "don't verify package signature(s)"
-msgstr ""
-
-#: lib/poptALL.c:177
-msgid "send stdout to CMD"
-msgstr ""
-
-#: lib/poptALL.c:178
-msgid "CMD"
-msgstr ""
-
-#: lib/poptALL.c:183
-msgid "use ROOT as top level directory"
-msgstr ""
-
-#: lib/poptALL.c:184
-msgid "ROOT"
-msgstr ""
-
-#: lib/poptALL.c:186
-msgid "use database in DIRECTORY"
-msgstr ""
-
-#: lib/poptALL.c:187
-msgid "DIRECTORY"
-msgstr ""
-
-#: lib/poptALL.c:190
-msgid "display known query tags"
-msgstr ""
-
-#: lib/poptALL.c:192
-msgid "display final rpmrc and macro configuration"
-msgstr ""
-
-#: lib/poptALL.c:194
-msgid "provide less detailed output"
-msgstr ""
-
-#: lib/poptALL.c:196
-msgid "provide more detailed output"
-msgstr ""
-
-#: lib/poptALL.c:198
-msgid "print the version of rpm being used"
-msgstr ""
-
-#: lib/poptALL.c:204
-msgid "debug payload file state machine"
-msgstr ""
-
-#: lib/poptALL.c:210
-msgid "debug rpmio I/O"
-msgstr ""
-
-#: lib/poptALL.c:277
-#, c-format
-msgid "%s: option table misconfigured (%d)\n"
-msgstr ""
-
-#: lib/poptI.c:52
-msgid "exclude paths must begin with a /"
-msgstr ""
-
-#: lib/poptI.c:64
-msgid "relocations must begin with a /"
-msgstr ""
-
-#: lib/poptI.c:67
-msgid "relocations must contain a ="
-msgstr ""
-
-#: lib/poptI.c:70
-msgid "relocations must have a / following the ="
-msgstr ""
-
-#: lib/poptI.c:114
-msgid ""
-"install all files, even configurations which might otherwise be skipped"
-msgstr ""
-
-#: lib/poptI.c:118
-msgid ""
-"remove all packages which match <package> (normally an error is generated if"
-" <package> specified multiple packages)"
-msgstr ""
-
-#: lib/poptI.c:123
-msgid "relocate files in non-relocatable package"
-msgstr ""
-
-#: lib/poptI.c:127
-msgid "print dependency loops as warning"
-msgstr ""
-
-#: lib/poptI.c:131
-msgid "erase (uninstall) package"
-msgstr ""
-
-#: lib/poptI.c:131
-msgid "<package>+"
-msgstr ""
-
-#: lib/poptI.c:134 lib/poptI.c:171
-msgid "do not install configuration files"
-msgstr ""
-
-#: lib/poptI.c:137 lib/poptI.c:176
-msgid "do not install documentation"
-msgstr ""
-
-#: lib/poptI.c:139
-msgid "skip files with leading component <path> "
-msgstr ""
-
-#: lib/poptI.c:140
-msgid "<path>"
-msgstr ""
-
-#: lib/poptI.c:143
-msgid "short hand for --replacepkgs --replacefiles"
-msgstr ""
-
-#: lib/poptI.c:147
-msgid "upgrade package(s) if already installed"
-msgstr ""
-
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
-msgid "<packagefile>+"
-msgstr ""
-
-#: lib/poptI.c:150
-msgid "print hash marks as package installs (good with -v)"
-msgstr ""
-
-#: lib/poptI.c:153
-msgid "don't verify package architecture"
-msgstr ""
-
-#: lib/poptI.c:156
-msgid "don't verify package operating system"
-msgstr ""
-
-#: lib/poptI.c:159
-msgid "don't check disk space before installing"
-msgstr ""
-
-#: lib/poptI.c:161
-msgid "install documentation"
-msgstr ""
-
-#: lib/poptI.c:164
-msgid "install package(s)"
-msgstr ""
-
-#: lib/poptI.c:167
-msgid "update the database, but do not modify the filesystem"
-msgstr ""
-
-#: lib/poptI.c:173
-msgid "do not verify package dependencies"
-msgstr ""
-
-#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206
-msgid "don't verify digest of files"
-msgstr ""
-
-#: lib/poptI.c:181
-msgid "don't verify digest of files (obsolete)"
-msgstr ""
-
-#: lib/poptI.c:183
-msgid "don't install file security contexts"
-msgstr ""
-
-#: lib/poptI.c:187
-msgid "do not reorder package installation to satisfy dependencies"
-msgstr ""
-
-#: lib/poptI.c:191
-msgid "do not execute package scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:195
-#, c-format
-msgid "do not execute %%pre scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:198
-#, c-format
-msgid "do not execute %%post scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:201
-#, c-format
-msgid "do not execute %%preun scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:204
-#, c-format
-msgid "do not execute %%postun scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:207
-msgid "do not execute any scriptlet(s) triggered by this package"
-msgstr ""
-
-#: lib/poptI.c:210
-#, c-format
-msgid "do not execute any %%triggerprein scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:213
-#, c-format
-msgid "do not execute any %%triggerin scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:216
-#, c-format
-msgid "do not execute any %%triggerun scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:219
-#, c-format
-msgid "do not execute any %%triggerpostun scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
-msgid ""
-"upgrade to an old version of the package (--force on upgrades does this "
-"automatically)"
-msgstr ""
-
-#: lib/poptI.c:231
-msgid "print percentages as package installs"
-msgstr ""
-
-#: lib/poptI.c:233
-msgid "relocate the package to <dir>, if relocatable"
-msgstr ""
-
-#: lib/poptI.c:234
-msgid "<dir>"
-msgstr ""
-
-#: lib/poptI.c:236
-msgid "relocate files from path <old> to <new>"
-msgstr ""
-
-#: lib/poptI.c:237
-msgid "<old>=<new>"
-msgstr ""
-
-#: lib/poptI.c:240
-msgid "ignore file conflicts between packages"
-msgstr ""
-
-#: lib/poptI.c:243
-msgid "reinstall if the package is already present"
-msgstr ""
-
-#: lib/poptI.c:245
-msgid "don't install, but tell if it would work or not"
-msgstr ""
-
-#: lib/poptI.c:248
-msgid "upgrade package(s)"
-msgstr ""
-
-#: lib/poptQV.c:67
-msgid "query/verify all packages"
-msgstr ""
-
-#: lib/poptQV.c:69
-msgid "rpm checksig mode"
-msgstr ""
-
-#: lib/poptQV.c:71
-msgid "query/verify package(s) owning file"
-msgstr ""
-
-#: lib/poptQV.c:73
-msgid "query/verify package(s) in group"
-msgstr ""
-
-#: lib/poptQV.c:75
-msgid "query/verify a package file"
-msgstr ""
-
-#: lib/poptQV.c:78
-msgid "query/verify package(s) with package identifier"
-msgstr ""
-
-#: lib/poptQV.c:80
-msgid "query/verify package(s) with header identifier"
-msgstr ""
-
-#: lib/poptQV.c:83
-msgid "rpm query mode"
-msgstr ""
-
-#: lib/poptQV.c:85
-msgid "query/verify a header instance"
-msgstr ""
-
-#: lib/poptQV.c:87
-msgid "query/verify package(s) from install transaction"
-msgstr ""
-
-#: lib/poptQV.c:89
-msgid "query the package(s) triggered by the package"
-msgstr ""
-
-#: lib/poptQV.c:91
-msgid "rpm verify mode"
-msgstr ""
-
-#: lib/poptQV.c:93
-msgid "query/verify the package(s) which require a dependency"
-msgstr ""
-
-#: lib/poptQV.c:95
-msgid "query/verify the package(s) which provide a dependency"
-msgstr ""
-
-#: lib/poptQV.c:98
-msgid "do not glob arguments"
-msgstr ""
-
-#: lib/poptQV.c:100
-msgid "do not process non-package files as manifests"
-msgstr ""
-
-#: lib/poptQV.c:171
-msgid "list all configuration files"
-msgstr ""
-
-#: lib/poptQV.c:173
-msgid "list all documentation files"
-msgstr ""
-
-#: lib/poptQV.c:175
-msgid "dump basic file information"
-msgstr ""
-
-#: lib/poptQV.c:179
-msgid "list files in package"
-msgstr ""
-
-#: lib/poptQV.c:184
-#, c-format
-msgid "skip %%ghost files"
-msgstr ""
-
-#: lib/poptQV.c:191
-msgid "display the states of the listed files"
-msgstr ""
-
-#: lib/poptQV.c:209
-msgid "don't verify size of files"
-msgstr ""
-
-#: lib/poptQV.c:212
-msgid "don't verify symlink path of files"
-msgstr ""
-
-#: lib/poptQV.c:215
-msgid "don't verify owner of files"
-msgstr ""
-
-#: lib/poptQV.c:218
-msgid "don't verify group of files"
-msgstr ""
-
-#: lib/poptQV.c:221
-msgid "don't verify modification time of files"
-msgstr ""
-
-#: lib/poptQV.c:224 lib/poptQV.c:227
-msgid "don't verify mode of files"
-msgstr ""
-
-#: lib/poptQV.c:230
-msgid "don't verify capabilities of files"
-msgstr ""
-
-#: lib/poptQV.c:233
-msgid "don't verify file security contexts"
-msgstr ""
-
-#: lib/poptQV.c:235
-msgid "don't verify files in package"
-msgstr ""
-
-#: lib/poptQV.c:237 tools/rpmgraph.c:218
-msgid "don't verify package dependencies"
-msgstr ""
-
-#: lib/poptQV.c:240 lib/poptQV.c:243
-msgid "don't execute verify script(s)"
-msgstr ""
-
-#: lib/psm.c:212
-#, c-format
-msgid "Missing rpmlib features for %s:\n"
-msgstr ""
-
-#: lib/psm.c:254
-msgid "source package expected, binary found\n"
-msgstr ""
-
-#: lib/psm.c:307
-msgid "source package contains no .spec file\n"
-msgstr ""
-
-#: lib/psm.c:836
-#, c-format
-msgid "unpacking of archive failed%s%s: %s\n"
-msgstr ""
-
-#: lib/psm.c:837
-msgid " on file "
-msgstr ""
-
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
-#, c-format
-msgid "incorrect format: %s\n"
-msgstr ""
-
-#: lib/query.c:123
-msgid "(contains no files)\n"
-msgstr ""
-
-#: lib/query.c:156
-msgid "normal "
-msgstr ""
-
-#: lib/query.c:159
-msgid "replaced "
-msgstr ""
-
-#: lib/query.c:162
-msgid "not installed "
-msgstr ""
-
-#: lib/query.c:165
-msgid "net shared "
-msgstr ""
-
-#: lib/query.c:168
-msgid "wrong color "
-msgstr ""
-
-#: lib/query.c:171
-msgid "(no state) "
-msgstr ""
-
-#: lib/query.c:174
-#, c-format
-msgid "(unknown %3d) "
-msgstr ""
-
-#: lib/query.c:194
-msgid "package has not file owner/group lists\n"
-msgstr ""
-
-#: lib/query.c:225
-msgid "package has neither file owner or id lists\n"
-msgstr ""
-
-#: lib/query.c:314
-#, c-format
-msgid "group %s does not contain any packages\n"
-msgstr ""
-
-#: lib/query.c:321
-#, c-format
-msgid "no package triggers %s\n"
-msgstr ""
-
-#: lib/query.c:332 lib/query.c:351 lib/query.c:367
-#, c-format
-msgid "malformed %s: %s\n"
-msgstr ""
-
-#: lib/query.c:342 lib/query.c:357 lib/query.c:372
-#, c-format
-msgid "no package matches %s: %s\n"
-msgstr ""
-
-#: lib/query.c:380
-#, c-format
-msgid "no package requires %s\n"
-msgstr ""
-
-#: lib/query.c:388
-#, c-format
-msgid "no package provides %s\n"
-msgstr ""
-
-#: lib/query.c:420
-#, c-format
-msgid "file %s: %s\n"
-msgstr ""
-
-#: lib/query.c:423
-#, c-format
-msgid "file %s is not owned by any package\n"
-msgstr ""
-
-#: lib/query.c:434
-#, c-format
-msgid "invalid package number: %s\n"
-msgstr ""
-
-#: lib/query.c:441
-#, c-format
-msgid "record %u could not be read\n"
-msgstr ""
-
-#: lib/query.c:454 lib/rpminstall.c:654
-#, c-format
-msgid "package %s is not installed\n"
-msgstr ""
-
-#: lib/query.c:488
-#, c-format
-msgid "unknown tag: \"%s\"\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:44
-#, c-format
-msgid "%s: key %d import failed.\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:48
-#, c-format
-msgid "%s: key %d not an armored public key.\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:93
-#, c-format
-msgid "%s: import read failed(%d).\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:119
-#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
-msgstr ""
-
-#: lib/rpmchecksig.c:386
-msgid "OK"
-msgstr ""
-
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr ""
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ""
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr ""
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ""
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
-#, c-format
-msgid "%s: open failed: %s\n"
-msgstr ""
-
-#: lib/rpmchroot.c:43
-#, c-format
-msgid "Unable to open current directory: %m\n"
-msgstr ""
-
-#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
-#, c-format
-msgid "%s: chroot directory not set\n"
-msgstr ""
-
-#: lib/rpmchroot.c:70
-#, c-format
-msgid "Unable to change root directory: %m\n"
-msgstr ""
-
-#: lib/rpmchroot.c:95
-#, c-format
-msgid "Unable to restore root directory: %m\n"
-msgstr ""
-
-#: lib/rpmds.c:489
-msgid "NO "
-msgstr ""
-
-#: lib/rpmds.c:489
-msgid "YES"
-msgstr ""
-
-#: lib/rpmds.c:933
-msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
-msgstr ""
-
-#: lib/rpmds.c:936
-msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
-msgstr ""
-
-#: lib/rpmds.c:940
-msgid "package payload can be compressed using bzip2."
-msgstr ""
-
-#: lib/rpmds.c:945
-msgid "package payload can be compressed using xz."
-msgstr ""
-
-#: lib/rpmds.c:948
-msgid "package payload can be compressed using lzma."
-msgstr ""
-
-#: lib/rpmds.c:952
-msgid "package payload file(s) have \"./\" prefix."
-msgstr ""
-
-#: lib/rpmds.c:955
-msgid "package name-version-release is not implicitly provided."
-msgstr ""
-
-#: lib/rpmds.c:958
-msgid "header tags are always sorted after being loaded."
-msgstr ""
-
-#: lib/rpmds.c:961
-msgid "the scriptlet interpreter can use arguments from header."
-msgstr ""
-
-#: lib/rpmds.c:964
-msgid "a hardlink file set may be installed without being complete."
-msgstr ""
-
-#: lib/rpmds.c:967
-msgid "package scriptlets may access the rpm database while installing."
-msgstr ""
-
-#: lib/rpmds.c:971
-msgid "internal support for lua scripts."
-msgstr ""
-
-#: lib/rpmds.c:975
-msgid "file digest algorithm is per package configurable"
-msgstr ""
-
-#: lib/rpmds.c:979
-msgid "support for POSIX.1e file capabilities"
-msgstr ""
-
-#: lib/rpmds.c:983
-msgid "package scriptlets can be expanded at install time."
-msgstr ""
-
-#: lib/rpmds.c:986
-msgid "dependency comparison supports versions with tilde."
-msgstr ""
-
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
-#, c-format
-msgid "open of %s failed: %s\n"
-msgstr ""
-
-#: lib/rpmgi.c:136
-#, c-format
-msgid "%s: not an rpm package (or package manifest)\n"
-msgstr ""
-
-#: lib/rpminstall.c:141
-#, c-format
-msgid "Updating / installing...\n"
-msgstr ""
-
-#: lib/rpminstall.c:143
-#, c-format
-msgid "Cleaning up / removing...\n"
-msgstr ""
-
-#: lib/rpminstall.c:192
-msgid "Preparing..."
-msgstr ""
-
-#: lib/rpminstall.c:194
-msgid "Preparing packages..."
-msgstr ""
-
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
-msgid "Failed dependencies:\n"
-msgstr ""
-
-#: lib/rpminstall.c:321
-#, c-format
-msgid "%s: not an rpm package (or package manifest): %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
-#, c-format
-msgid "%s cannot be installed\n"
-msgstr ""
-
-#: lib/rpminstall.c:464
-#, c-format
-msgid "Retrieving %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:476
-#, c-format
-msgid "skipping %s - transfer failed\n"
-msgstr ""
-
-#: lib/rpminstall.c:542
-#, c-format
-msgid "package %s is not relocatable\n"
-msgstr ""
-
-#: lib/rpminstall.c:570
-#, c-format
-msgid "error reading from file %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:661
-#, c-format
-msgid "\"%s\" specifies multiple packages:\n"
-msgstr ""
-
-#: lib/rpminstall.c:700
-#, c-format
-msgid "cannot open %s: %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:706
-#, c-format
-msgid "Installing %s\n"
-msgstr ""
-
-#: lib/rpmlead.c:100
-msgid "not an rpm package"
-msgstr ""
-
-#: lib/rpmlead.c:104
-msgid "illegal signature type"
-msgstr ""
-
-#: lib/rpmlead.c:108
-msgid "unsupported RPM package version"
-msgstr ""
-
-#: lib/rpmlead.c:123
-#, c-format
-msgid "read failed: %s (%d)\n"
-msgstr ""
-
-#: lib/rpmlead.c:126
-msgid "not an rpm package\n"
-msgstr ""
-
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
-#, c-format
-msgid "can't create %s lock on %s (%s)\n"
-msgstr ""
-
-#: lib/rpmlock.c:106
-#, c-format
-msgid "waiting for %s lock on %s\n"
-msgstr ""
-
-#: lib/rpmplugins.c:59
-#, c-format
-msgid "Failed to dlopen %s %s\n"
-msgstr ""
-
-#: lib/rpmplugins.c:66
-#, c-format
-msgid "Failed to resolve symbol %s: %s\n"
-msgstr ""
-
-#: lib/rpmplugins.c:87
-#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr ""
-
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
-#, c-format
-msgid "Plugin %s not loaded\n"
-msgstr ""
-
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
-#: lib/rpmprob.c:109
-msgid "different"
-msgstr ""
-
-#: lib/rpmprob.c:114
-#, c-format
-msgid "package %s is intended for a %s architecture"
-msgstr ""
-
-#: lib/rpmprob.c:118
-#, c-format
-msgid "package %s is intended for a %s operating system"
-msgstr ""
-
-#: lib/rpmprob.c:122
-#, c-format
-msgid "package %s is already installed"
-msgstr ""
-
-#: lib/rpmprob.c:125
-#, c-format
-msgid "path %s in package %s is not relocatable"
-msgstr ""
-
-#: lib/rpmprob.c:130
-#, c-format
-msgid "file %s conflicts between attempted installs of %s and %s"
-msgstr ""
-
-#: lib/rpmprob.c:135
-#, c-format
-msgid "file %s from install of %s conflicts with file from package %s"
-msgstr ""
-
-#: lib/rpmprob.c:140
-#, c-format
-msgid "package %s (which is newer than %s) is already installed"
-msgstr ""
-
-#: lib/rpmprob.c:145
-#, c-format
-msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
-msgstr ""
-
-#: lib/rpmprob.c:155
-#, c-format
-msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
-msgstr ""
-
-#: lib/rpmprob.c:159
-#, c-format
-msgid "%s is needed by %s%s"
-msgstr ""
-
-#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
-msgid "(installed) "
-msgstr ""
-
-#: lib/rpmprob.c:163
-#, c-format
-msgid "%s conflicts with %s%s"
-msgstr ""
-
-#: lib/rpmprob.c:167
-#, c-format
-msgid "%s is obsoleted by %s%s"
-msgstr ""
-
-#: lib/rpmprob.c:172
-#, c-format
-msgid "unknown error %d encountered while manipulating package %s"
-msgstr ""
-
-#: lib/rpmrc.c:194
-#, c-format
-msgid "missing second ':' at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:197
-#, c-format
-msgid "missing architecture name at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:342
-#, c-format
-msgid "Incomplete data line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:347
-#, c-format
-msgid "Too many args in data line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:354
-#, c-format
-msgid "Bad arch/os number: %s (%s:%d)\n"
-msgstr ""
-
-#: lib/rpmrc.c:385
-#, c-format
-msgid "Incomplete default line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:390
-#, c-format
-msgid "Too many args in default line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:494
-#, c-format
-msgid "missing ':' (found 0x%02x) at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:511 lib/rpmrc.c:543
-#, c-format
-msgid "missing argument for %s at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:522
-#, c-format
-msgid "cannot open %s at %s:%d: %m\n"
-msgstr ""
-
-#: lib/rpmrc.c:535
-#, c-format
-msgid "missing architecture for %s at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:602
-#, c-format
-msgid "bad option '%s' at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:926
-msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
-
-#: lib/rpmrc.c:1348
-#, c-format
-msgid "Unknown system: %s\n"
-msgstr ""
-
-#: lib/rpmrc.c:1349
-#, c-format
-msgid "Please contact %s\n"
-msgstr ""
-
-#: lib/rpmrc.c:1590
-#, c-format
-msgid "Unable to open %s for reading: %m.\n"
-msgstr ""
-
-#: lib/rpmscript.c:75
-#, c-format
-msgid "Unable to restore current directory: %m"
-msgstr ""
-
-#: lib/rpmscript.c:86
-msgid "<lua> scriptlet support not built in\n"
-msgstr ""
-
-#: lib/rpmscript.c:221
-#, c-format
-msgid "Couldn't create temporary file for %s: %s\n"
-msgstr ""
-
-#: lib/rpmscript.c:248
-#, c-format
-msgid "Couldn't duplicate file descriptor: %s: %s\n"
-msgstr ""
-
-#: lib/rpmscript.c:272
-#, c-format
-msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
-msgstr ""
-
-#: lib/rpmscript.c:276
-#, c-format
-msgid "%s scriptlet failed, signal %d\n"
-msgstr ""
-
-#: lib/rpmscript.c:279
-#, c-format
-msgid "%s scriptlet failed, exit status %d\n"
-msgstr ""
-
-#: lib/rpmtd.c:258
-msgid "Unknown format"
-msgstr ""
-
-#: lib/rpmte.c:868
-msgid "install"
-msgstr ""
-
-#: lib/rpmte.c:869
-msgid "erase"
-msgstr ""
-
-#: lib/rpmts.c:92
-#, c-format
-msgid "cannot open Packages database in %s\n"
-msgstr ""
-
-#: lib/rpmts.c:192
-#, c-format
-msgid "extra '(' in package label: %s\n"
-msgstr ""
-
-#: lib/rpmts.c:210
-#, c-format
-msgid "missing '(' in package label: %s\n"
-msgstr ""
-
-#: lib/rpmts.c:218
-#, c-format
-msgid "missing ')' in package label: %s\n"
-msgstr ""
-
-#: lib/rpmts.c:278
-#, c-format
-msgid "%s: reading of public key failed.\n"
-msgstr ""
-
-#: lib/rpmts.c:1085
-msgid "transaction"
-msgstr ""
-
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr ""
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr ""
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr ""
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr ""
-
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr ""
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr ""
-
-#: lib/transaction.c:1409
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1409
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr ""
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr ""
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr ""
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr ""
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr ""
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr ""
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr ""
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr ""
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr ""
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr ""
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr ""
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
-
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
-#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr ""
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr ""
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
-msgstr ""
-
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr ""
-
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr ""
-
-#: rpmio/macro.c:594
-#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr ""
-
-#: rpmio/macro.c:600
-#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr ""
-
-#: rpmio/macro.c:605
-#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr ""
-
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr ""
-
-#: rpmio/macro.c:649
-#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr ""
-
-#: rpmio/macro.c:743
-#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr ""
-
-#: rpmio/macro.c:825
-#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
-msgstr ""
-
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr ""
-
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:245
-#, c-format
-msgid "error creating temporary file %s: %m\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
-#, c-format
-msgid "File %s: %s\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
-
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
-msgstr ""
-
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr ""
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr ""
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr ""
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr ""
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr ""
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
-msgstr ""
-
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
-msgstr ""
-
-#: sign/rpmgensig.c:87
-#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:97
-#, c-format
-msgid "%s: Fflush failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:131
-#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
-msgstr ""
-
-#: sign/rpmgensig.c:144
-#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
-
-#: sign/rpmgensig.c:174
-#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
-
-#: sign/rpmgensig.c:216
-#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr ""
-
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
-msgstr ""
-
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr ""
-
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
-msgstr ""
-
-#: tools/rpmgraph.c:142
-#, c-format
-msgid "%s: read manifest failed: %s\n"
-msgstr ""
-
-#: tools/rpmgraph.c:220
-msgid "don't verify header+payload signature"
-msgstr ""
diff --git a/po/da.po b/po/da.po
index b0e76551c..e4675eeb9 100644
--- a/po/da.po
+++ b/po/da.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Danish (http://www.transifex.com/rpm-team/rpm/language/da/)\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,490 +43,552 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "eksekvering mislykkedes\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "parameter er ikke en RPM-pakke\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "fejl ved læsning af hovedet på pakke\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "kan ikke genåbne pakkeindhold: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Forespørgselstilvalg (med -q eller --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Verifikationstilvalg (med -V eller --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "kun én af forespørgsel/verificér kan udføres ad gangen"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "uventet forespørgselsflag"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "uventet forespørgselsformat"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "uventet forespørgselskilde"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "kun ét hovedtilvalg kan angives"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "filer kan kun omrokeres under installation"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr "--relocate og --excludepath kan kun bruges, når nye pakker installeres"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix kan kun bruges, når nye pakker installeres"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "parametre til --prefix skal starte med et /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs kan kun angives ved installation"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs kan kun angives ved installation"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs kan kun angives ved installation"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "kun én af --excludedocs og --includedocs kan angives"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch kan kun angives ved installation"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos kan kun angives ved installation"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize kan kun angives ved installation"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches kan kun angives ved installation"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles kan kun angives ved installation"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb kan kun angives ved installation og sletning"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "parameteren til --root (-r) skal starte med et /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "ingen pakker angivet ved installation"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "ingen parametre angivet ved forespørgsel"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "ingen parametre angivet ved verifikation"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr ""
"buildroot allerede angivet, ignorerer %s\n"
"\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "opbyg gennem %prep (udpak kilder og påfør lapper) ud fra <spec-fil>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<spec-fil>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "opbyg gennem %build (%prep, så oversæt) ud fra <spec-fil>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "opbyg gennem %install (%prep, %build, så installér) ud fra <spec-fil>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "verificér afsnittet %files ud fra <spec-fil>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "opbyg kilde- og binærpakke ud fra <spec-fil>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "opbyg kun binærpakke ud fra <spec-fil>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "opbyg kun kildepakke ud fra <spec-fil>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<kildepakke>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"opbyg gennem %install (%prep, %build, så installér) ud fra <kildepakke>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "opbyg gennem %prep (udpak kilder og påfør lapper) ud fra <tararkiv>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tararkiv>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "opbyg gennem %build (%prep, så oversæt) ud fra <tararkiv>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "opbyg gennem %install (%prep, %build, så installér) ud fra <tararkiv>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verificér afsnittet %files fra <tararkiv>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "opbyg kilde- og binærpakker ud fra <tararkiv>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "opbyg kun binærpakke ud fra <tararkiv>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "opbyg kun kildepakke ud fra <tararkiv>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "opbyg binærpakke ud fra <kildepakke>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<kildepakke>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"opbyg gennem %install (%prep, %build, så installér) ud fra <kildepakke>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "gennemtving opbygningsrod"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "fjern bygge-træ ved afslutning"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorér 'ExcludeArch':-angivelser fra spec-fil"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "udfør ingen stadier af opbygningen"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "acceptér ikke i18N msgstr'er fra spec-fil"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "fjern kilder ved afslutning"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "fjern spec-fil ved afslutning"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "spring direkte til angivet stadium (kun for c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "gennemtving målplatform"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Opbygningstilvalg med [ <spec-fil> | <tararkiv> | <kildepakke> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Kan ikke åbne spec-fil %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Kunne ikke åbne tar-videreførsel: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Kunne ikke læse spec-fil fra %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Kunne ikke omdøbe %s til %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "kunne ikke finde %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Filen %s er ikke en regulær fil.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Filen %s synes ikke at være en spec-fil.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Opbygger mål-platforme: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Opbygger for mål %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "parameteren til --root (-r) skal starte med et /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "initialisér database"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "genopbyg omvendte databaselister ud fra installerede pakkehoveder"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr ""
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Databasetilvalg:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "kun ét hovedtilvalg kan angives"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Forespørgselstilvalg (med -q eller --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Verifikationstilvalg (med -V eller --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr ""
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "kun én af forespørgsel/verificér kan udføres ad gangen"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "uventet forespørgselsflag"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "uventet forespørgselsformat"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "uventet forespørgselskilde"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "filer kan kun omrokeres under installation"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr "--relocate og --excludepath kan kun bruges, når nye pakker installeres"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix kan kun bruges, når nye pakker installeres"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "parametre til --prefix skal starte med et /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs kan kun angives ved installation"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs kan kun angives ved installation"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs kan kun angives ved installation"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "kun én af --excludedocs og --includedocs kan angives"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch kan kun angives ved installation"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos kan kun angives ved installation"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize kan kun angives ved installation"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches kan kun angives ved installation"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles kan kun angives ved installation"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb kan kun angives ved installation og sletning"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "ingen pakker angivet ved installation"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "ingen parametre angivet ved forespørgsel"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "ingen parametre angivet ved verifikation"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
-msgstr "Signaturtilvalg"
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:108
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "Signaturtilvalg"
+
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Du skal angive \"%%_gpg_name\" i din makrofil\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Indtast adgangskode: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Adgangskode godkendt.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "brug følgende forespørgselsformat"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -535,32 +597,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Udfører(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Udførelse af %s mislykkedes (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Fejl-afslutningsstatus fra %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -570,785 +637,922 @@ msgstr ""
"\n"
"RPM opbygningsfejl:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "syntaksfejl under tolkning af ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "syntaksfejl under tolkning af &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "syntaksfejl under tolkning af ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "tolkningsfejl i udtryk\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "uparret (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- kun for tal\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! kun for tal\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "typer skal passe sammen\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / understøttes ikke for strenge\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- understøttes ikke for strenge\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& og || understøttes ikke for strenge\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "syntaksfejl i udtryk\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Manglende '(' i %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Manglende ')' i %s %s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Ugyldigt %s-symbol: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Ikke-mellemrum efterfølger %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Ugyldig syntaks: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Ugyldig tilstandsangivelse: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Ugyldig dirmode-spec: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Fil skal begynde med \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Fil angivet to gange: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolsk lænke peger på BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Fil ikke fundet: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Fil kræver foranstillet \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Fil ikke fundet med glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "linie: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Fil ikke fundet med glob: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Ugyldig fil: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Ugyldig ejer/gruppe: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Kunne ikke kanonisere værtsnavn: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Kunne ikke skrive pakkeindhold til %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Kunne ikke læse pakkeindhold fra %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Kunne ikke kanonisere værtsnavn: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Kunne ikke åbne midlertidig fil.\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Kunne ikke læse spec-fil fra %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Ugyldige CSA-data\n"
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Kunne ikke åbne %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Kunne ikke skrive pakke: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Kunne ikke åbne sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Kunne ikke læse hoved fra %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Kunne ikke skrive hoved til %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Skrev: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Kunne ikke generere filnavn til oprettelse af pakke %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "kan ikke oprette %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "linie %d: anden %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "'%%changelog'-indgange skal starte med *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "ufærdig '%%changelog'-indgang\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "ugyldig dato i %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "navn mangler i %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "ingen beskrivelse i %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "linie %d: Fejl ved tolkning af %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "linie %d: Ugyldigt tilvalg %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "line %d: For mange navne: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "line %d: Pakken eksisterer ikke: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "linie %d: Anden beskrivelse\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "linie %d: Fejl ved tolkning af %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "linie %d: Ugyldigt tal: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "linie %d: Ugyldigt %s-tal: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Arkitekturen er ekskluderet: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Arkitekturen er ikke inkluderet: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS er ekskluderet: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS is ikke inkluderet: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "'%s'-felt skal være tilstede i pakke : %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Flere '%s'-indgange i pakke: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Kunne ikke åbne ikon %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Kunne ikke læse ikon %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Ukendt ikontype: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "linie %d: Forkert udformet mærke: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "linie %d: Tomt mærke: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "linie %d: Præfikser kan ikke ende på \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "linie %d: Docdir skal starte med '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "linie %d: Ugyldig %s: angivere: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "linie %d: Ugyldigt 'BuildArchitecture'-format: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Intern fejl: Falsk mærke %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Ugyldig pakkeangivelse: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Pakken eksisterer allerede: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "linie %d: Ukendt mærke: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Ugyldig kilde: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Fejl ved tolking af %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "linie %d: Ugyldigt '%%setup'-tilvalg %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "linie %d: anden %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "linie %d: udløsere skal have --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "linie %d: Fejl under tolkning af %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "linie %d: skriptprogram skal starte med '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "linie %d: Anden %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "linie %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
"Kunne ikke åbne %s: %s\n"
"\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Fik et %%else uden et %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Fik et %%endif uden et %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Pakke har ingen %%description: %s\n"
@@ -1419,450 +1623,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Kunne ikke udføre %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Kunne ikke fraspalte ny proces til %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Kunne ikke finde %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "forespørgsel af spec-fil %s mislykkedes, kunne ikke tolkes\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(fejl 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Ugyldigt magisk tal"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Ugyldigt/ulæseligt hoved"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Hovedstørrelse er for stor"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s har ugyldig talværdi, overspringes\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s har for stor eller lille 'long'-værdi, overspringes\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s har for stor eller lille heltalsværdi, overspringes\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "kan ikke opnå %s lås på %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "delt"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "eksklusiv"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Ukendt filtype"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Intern fejl"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " mislykkedes - "
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "fejl(%d) under allokering af ny pakkeinstans\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(ikke et tal)"
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "bruger %s eksisterer ikke - bruger root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "gruppe %s eksisterer ikke - bruger root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s gemt som %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s oprettet som %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ingen tilgængelig signatur\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:581
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "tomt mærkeformat"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "tomt mærkenavn"
+
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] forventet ved slutningen af tabel"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "uventet ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "uventet }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? forventet i udtryk"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ forventet efter ? i udtryk"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} forventet i udtryk"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": forventet efter ?-underudtryk"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ forventet efter : i udtryk"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| forventet ved slutningen af udtryk"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread mislykkedes: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "vis kendte forespørgselsmærker"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "vis den endelige rpmrc og makrokonfiguration"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "medtag mindre detaljerede oplysninger"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "medtag mere detaljerede oplysninger"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "vis versionen af rpm som benyttes"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "aflus rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1883,13 +2198,13 @@ msgstr "omrokeringer skal indeholde et ="
msgid "relocations must have a / following the ="
msgstr "i omrokeringer skal = efterfølges af /"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"installér alle filer -- også konfigurationsfiler, der ellers skulle "
"overspringes"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1897,152 +2212,162 @@ msgstr ""
"fjern alle pakker, som passer med <pakke> (normalt ville det medføre en "
"fejl, hvis <pakke> angav flere pakker)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "slet (afinstallér) pakke"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "installér ikke dokumentation"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "overspring filer med foranstillet komponent <sti> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "forkortelse for --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<pakkefil>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "udlæs #'er efterhånden som pakken installeres (virker sammen med -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "tjek ikke pakkens arkitektur"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "tjek ikke pakkens operativsystem"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "tjek ikke om der er diskplads, før der installeres"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "installér dokumentation"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "opdatér databasen, men rør ikke filsystemet"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "undlad at tjekke pakkers afhængighedskrav"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"ændr ikke pakkernes installationsrækkefølge for at opfylde afhængigheder"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2050,368 +2375,407 @@ msgstr ""
"opgradér til en ældre version af pakken (--force gør ikke dette automatisk "
"ved opgraderinger)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "vis procenter efterhånden som pakken installeres"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "omdirigér pakken til <katalog>, hvis omdirigérbar"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<katalog>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "geninstallér hvis pakken allerede er installeret"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "installér ikke, men fortæl om det ville lykkes eller ej"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "forespørg/verificér alle pakker"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "forespørg/verificér pakke(r), der ejer filen"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "forespørg/verificér pakke(r) i gruppen"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm forespørgselstilstand"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "forespørg pakke(r), der udløses af pakken"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm verifikationstilstand"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "forespørg/verificér pakke(r), der stiller et krav"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "forespørg/verificér pakke(r), der tilfredsstiller et krav"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "vis alle konfigurationsfiler"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "vis alle dokumentationsfiler"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "vis alle dokumentationsfiler"
+msgstr ""
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "vis alle konfigurationsfiler"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "vis grundlæggende filinformation"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "vis liste over filerne i pakken"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "vis filernes status"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "verificér ikke filerne i pakke"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "kildepakke forventet, binær fundet\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "kildepakke indeholder ingen .spec-fil\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "udpakning af arkiv mislykkedes%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " for fil "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "ugyldigt format: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "erstattet "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "ej installeret"
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "ej delt "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(ingen status)"
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(ukendt %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "pakke har hverken filejerskabs- eller id-lister\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "gruppe %s indeholder ingen pakker\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "ingen pakker udløser %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "ingen pakker kræver %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "ingen pakker tilfører %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "fil %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "filen %s tilhører ingen pakke\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "ugyldigt pakkenummer: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "pakken %s er ikke installeret\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "IKKE O.K."
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "O.K."
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (MANGLENDE NØGLER: "
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (IKKE-BETROEDE NØGLER:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: åbning mislykkedes: %s\n"
@@ -2436,212 +2800,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "der er ikke sat nogen dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: kan ikke læse hoved ved 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "der ikke sat nogen dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "kunne ikke genopbygge database: original-databasen beholdes\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "kunne ikke erstatte gammel database med ny database!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Ugyldigt magisk tal"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Ugyldigt/ulæseligt hoved"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Hovedstørrelse er for stor"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Ukendt filtype"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Intern fejl"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " mislykkedes - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "Ã¥bning af %s mislykkedes %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Forbereder..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s kunne ikke installeres\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Modtager %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "fejl ved læsning fra filen %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "kunne ikke åbne %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Installerer %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "læsning mislykkedes: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2716,798 +3309,635 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "ukendt fejl %d under arbejdet med pakken %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "manglende andet ':' ved %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "manglende navn på arkitektur ved %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Ufærdig datalinie ved %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "For mange parametre på datalinie ved %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Ugyldigt arch/os-tal: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Ufuldstændig standardlinie ved %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "For mange parametre i standardlinie ved %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "manglende ':' (fandt 0x%02x) ved %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "manglende parameter til %s ved %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "manglende arkitektur for %s ved %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "ugyldig tilvalg '%s' ved %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
"Ukendt system: %s\n"
"\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "kunne ikke åbne Packages-database i %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:268
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/signature.c:489
-msgid "Header "
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "skipped"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr ""
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "manglende { efter %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "manglende } efter %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "tomt mærkeformat"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "tomt mærkenavn"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "ukendt mærke"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] forventet ved slutningen af tabel"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "uventet ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "uventet }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? forventet i udtryk"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ forventet efter ? i udtryk"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} forventet i udtryk"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": forventet efter ?-underudtryk"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ forventet efter : i udtryk"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| forventet ved slutningen af udtryk"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "kan ikke åbne '%s'-indeks ved brug af db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "der er ikke sat nogen dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:1318
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1415
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:1897
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(tom)"
-#: lib/rpmdb.c:2349
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(tom)\n"
-#: lib/rpmdb.c:2358
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makroen %%%s har uafsluttede parametre\n"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: kan ikke læse hoved ved 0x%x\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makroen %%%s har et uafsluttet indhold (body)\n"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
+msgid "Macro %%%s has empty body\n"
+msgstr "Makroen %%%s har intet indhold\n"
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "fejl(%d) under allokering af ny pakkeinstans\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "fejl(%d) ved hentning af \"%s\"-poster fra '%s'-indekset\n"
+msgid "Macro %%%s failed to expand\n"
+msgstr "Makroen %%%s kunne ikke udfoldes\n"
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:607
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "fejl(%d) ved gemning af post %s i %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "der ikke sat nogen dbpath"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "Makroen %%%s har ugyldigt navn (%%undefine)\n"
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:637
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:761
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr ""
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "Ukendt tilvalg %c i %s(%s)\n"
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "kunne ikke genopbygge database: original-databasen beholdes\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "kunne ikke erstatte gammel database med ny database!\n"
-
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "erstat filer i %s med filer fra %s for at genoprette"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "kunne ikke fjerne katalog %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d fejl(%d) fra %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d fejl(%d): %s\n"
+msgid "Unterminated %c: %s\n"
+msgstr "Uafsluttet %c: %s\n"
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "kan ikke opnå %s lås på %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "delt"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "eksklusiv"
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "Et %% efterfølges af en makro, der ikke kan tolkes\n"
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktiv %d tom %d\n"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s har ugyldig talværdi, overspringes\n"
+msgid "error creating temporary file %s: %m\n"
+msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s har for stor eller lille 'long'-værdi, overspringes\n"
+msgid "File %s: %s\n"
+msgstr "Fil %s: %s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s har for stor eller lille heltalsværdi, overspringes\n"
+msgid "File %s is smaller than %u bytes\n"
+msgstr "Filen %s er mindre end %u byte\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(ingen fejl)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "fatal fejl: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "fejl: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "advarsel: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "hukommelsesallokering (%u byte) returnerede NULL.\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktiv %d tom %d\n"
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(tom)"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(tom)\n"
+msgid "error delete fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makroen %%%s har et uafsluttet indhold (body)\n"
+msgid "error delete directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makroen %%%s har et ugyldig navn (%%define)\n"
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: Fwrite mislykkedes: %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makroen %%%s har uafsluttede parametre\n"
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread mislykkedes: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr "Makroen %%%s har intet indhold\n"
+msgid "%s: Fflush failed: %s\n"
+msgstr ""
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr "Makroen %%%s kunne ikke udfoldes\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "Makroen %%%s har ugyldigt navn (%%undefine)\n"
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) blev ikke brugt under niveau %d\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "Ukendt tilvalg %c i %s(%s)\n"
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr "Uafsluttet %c: %s\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr "Et %% efterfølges af en makro, der ikke kan tolkes\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:302
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s: %s\n"
-msgstr "Fil %s: %s\n"
+msgid "gpg exec failed (%d)\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "Filen %s er mindre end %u byte\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "gpg kunne ikke skrive signaturen\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "kunne ikke læse signaturen\n"
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(ingen fejl)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "fatal fejl: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "fejl: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "advarsel: "
-
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:622
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "hukommelsesallokering (%u byte) returnerede NULL.\n"
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: Fwrite mislykkedes: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: rpmWriteSignature mislykkedes: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead mislykkedes: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr "gpg kunne ikke skrive signaturen\n"
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "kunne ikke læse signaturen\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead mislykkedes: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: rpmWriteSignature mislykkedes: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: læs manifest mislykkedes: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/de.po b/po/de.po
index 95c691d28..b13a32257 100644
--- a/po/de.po
+++ b/po/de.po
@@ -3,17 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Roman Spirgi <bigant@fedoraproject.org>, 2012.
-# Roman Spirgi <rspirgi@gmail.com>, 2011.
+# Ettore Atalan <atalanttore@googlemail.com>, 2016
+# Roman Spirgi <bigant@fedoraproject.org>, 2012
+# Roman Spirgi <rspirgi@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-12-10 20:59+0000\n"
-"Last-Translator: Roman Spirgi <bigant@fedoraproject.org>\n"
-"Language-Team: German (http://www.transifex.com/projects/p/rpm/language/"
-"de/)\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: German (http://www.transifex.com/rpm-team/rpm/language/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -46,558 +46,626 @@ msgstr ""
#: cliutils.c:53
#, c-format
msgid "creating a pipe for --pipe failed: %m\n"
-msgstr "erzeugen einer Pipe für --pipe fehlgeschlagen: %m\n"
+msgstr "Erzeugen einer Pipe für --pipe fehlgeschlagen: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "Ausführung fehlgeschlagen\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "Argument ist kein RPM-Paket\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "Fehler beim Lesen des Paket-Headers\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
-msgstr "Kann Nutzdaten nicht erneut öffnen: %s\n"
+msgstr "Nutzdaten können nicht erneut geöffnet werden: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Abfragen/überprüfen der Paketauswahl:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Abfrage-Optionen (mit -q oder --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Überprüfungsoptionen (mit -V oder --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Installations-/Aktualisierungs-/Deinstallationsoptionen:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Gemeinsame Optionen für alle RPM-Modi und Ausführungen:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr ""
-"Nur eine Art von Abfragen/Überprüfungen kann jeweils durchgeführt werden"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "Unerwartete Abfrage-Parameter"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "Unerwartetes Abfrage-Format"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "Unerwartete Abfrage-Quelle"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "Nur ein wichtiger Modus kann angegeben werden"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "Nur Installation und Upgrade kann erzwungen werden"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "Dateien können nur bei der Paket-Installation verschoben werden"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-"--prefix kann nicht zusammen mit --relocate oder --excludepath verwendet "
-"werden"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "BuildRoot wurde bereits angegeben, %s wird ignoriert\n"
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-"--relocate und --excludepath dürfen nur bei der Installation neuer Pakete "
-"benutzt werden"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix darf nur bei der Installation neuer Pakete benutzt werden"
+"%prep (Quellen entpacken, Patches übernehmen) der <Spec-Datei> durchlaufen"
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "Argumente für --prefix müssen mit einem / beginnen"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<Spec-Datei>"
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-"--hash (-h) kann nur während der Paket-Installation oder -Deinstallation "
-"angegeben werden"
+"%build (%prep, anschließendes Kompilieren) der <Spec-Datei> durchlaufen"
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-"--percent kann nur während der Paket-Installation oder -Deinstallation "
-"angegeben werden"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs darf nur während der Paket-Installation angegeben werden"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs darf nur während der Paket-Installation angegeben werden"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs darf nur während der Paket-Installation angegeben werden"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "entweder --excludedocs oder --includedocs darf angegeben werden"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch darf nur während der Paket-Installation angegeben werden"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos darf nur während der Paket-Installation angegeben werden"
+"%install (%prep, %build, anschließendes Installieren) der <Spec-Datei> "
+"durchlaufen"
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize darf nur während der Paket-Installation angegeben werden"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
+msgstr "%files-Abschnitt der <Spec-Datei> überprüfen"
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-"--allmatches darf nur während der Paket-Deinstallation angegeben werden"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
+msgstr "Quell- und Binär-Paket von <Spec-Datei> bauen"
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles darf nur während der Paket-Installation angegeben werden"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
+msgstr "Nur ein Binär-Paket von <Spec-Datei> bauen"
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb darf nur während der Paket-Installation oder -Deinstallation "
-"angegeben werden"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
+msgstr "Nur ein Quell-Paket von <Spec-Datei> bauen"
-#: rpmqv.c:221
+#: rpmbuild.c:161
+#, c-format
msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-"Optionen zum Deaktivieren von Skripten können nur während der Paket-"
-"Installation oder -Deinstallation angegeben werden"
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"Optionen zum Deaktivieren von Trigger können nur während der Paket-"
-"Installation oder -Deinstallation angegeben werden"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<Quell-Paket>"
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-"--nodeps kann nur während der Paket-Installation, -Deinstallation und -"
-"Überprüfung angegeben werden"
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-"--test kann nur während der Paket-Installation oder -Deinstallation "
-"angegeben werden"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "Argumente für --root (-r) müssen mit einem / beginnen"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "Es wurden keine Pakete für die Deinstallation angegeben"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "Es wurden keine Pakete für die Installation angegeben"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "Es wurden keine Argumente für die Abfrage angegeben"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "Es wurden keine Argumente für die Überprüfung angegeben"
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr "BuildRoot wurde bereits angegeben, ignoriere %s\n"
+"%install (%prep, %build, anschließendes Installieren) des <Quell-Pakets> "
+"durchlaufen"
-#: rpmbuild.c:120
+#: rpmbuild.c:170
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgid "verify %files section from <source package>"
msgstr ""
-"%prep (Quellen entpacken, Patches übernehmen) der <Spec-Datei> durchlaufen"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr "<Spec-Datei>"
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-"%build (%prep, anschliessendes Kompilieren) der <Spec-Datei> durchlaufen"
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-"%install (%prep, %build, anschliessendes Installieren) der <Spec-Datei> "
-"durchlaufen"
-#: rpmbuild.c:129
-#, c-format
-msgid "verify %files section from <specfile>"
-msgstr "Überprüfe %files-Abschnitt der <Spec-Datei>"
-
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
-msgstr "Baue Source- und Binär-Paket von <Spec-Datei>"
-
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
-msgstr "Baue nur ein Binär-Paket von <Spec-Datei>"
-
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
-msgstr "Baue nur ein Source-Paket von <Spec-Datei>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"%prep (Quellen entpacken, Patches übernehmen) des <Tar-Archivs> durchlaufen"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<Tar-Archiv>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-"%build (%prep, anschliessendes Kompilieren) des <Tar-Archivs> durchlaufen"
+"%build (%prep, anschließendes Kompilieren) des <Tar-Archivs> durchlaufen"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-"%install (%prep, %build, anschliessendes Installieren) des <Tar-Archivs> "
+"%install (%prep, %build, anschließendes Installieren) des <Tar-Archivs> "
"durchlaufen"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
-msgstr "Überprüfe %files-Abschnitt des <Tar-Archivs>"
+msgstr "%files-Abschnitt des <Tar-Archivs> überprüfen"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
-msgstr "Baue Source- und Binär-Paket vom <Tar-Archiv>"
+msgstr "Quell- und Binär-Paket vom <Tar-Archiv> bauen"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
-msgstr "Baue nur ein Binär-Paket vom <Tar-Archiv>"
+msgstr "Nur ein Binär-Paket vom <Tar-Archiv> bauen"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
-msgstr "Baue nur ein Source-Paket vom <Tar-Archiv>"
+msgstr "Nur ein Quell-Paket vom <Tar-Archiv> bauen"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
-msgstr "Baue ein Binär-Paket vom <Source-Paket>"
+msgstr "Ein Quell-Paket vom <Source-Paket> bauen"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<Source-Paket>"
+#: rpmbuild.c:212
+msgid "override build root"
+msgstr "BuildRoot überschreiben"
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-"%install (%prep, %build, anschliessendes Installieren) des <Source-Pakets> "
-"durchlaufen"
-#: rpmbuild.c:171
-msgid "override build root"
-msgstr "Ãœberschreibe BuildRoot"
-
-#: rpmbuild.c:173
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "Erstellungsdateibaum nach Beendigung löschen"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ExcludeArch ignorieren: Anweisungen der Spec-Datei"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
-msgstr "Debugge Datei-Status"
+msgstr "Datei-Status debuggen"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "Keine der Phasen des Erstellungsvorganges ausführen"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "Keine Überprüfung der Paket-Abhängigkeiten"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-"Generiere Paket-Header, die mit veralteten RPM-Paketen (v3) kompatibel sind"
+"Paket-Header generieren, die mit veralteten RPM-Paketen (v3) kompatibel sind"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
+msgstr "%clean-Abschnitt des Bauvorgangs nicht ausführen"
+
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "%check-Abschnitt des Bauvorgangs nicht ausführen"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "Keine i18n-Ãœbersetzungen der Spec-Datei zulassen"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "Quelldateien nach Beendigung löschen"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "Spec-Datei nach Beendigung löschen"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
-msgstr "Springe direkt zur angegeben Phase (nur für c, i)"
+msgstr "Direkt zur angegeben Phase springen (nur für c, i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
-msgstr "Ãœberschreibe Zielplattform"
+msgstr "Zielplattform überschreiben"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-"Erstellungsoptionen mit [ <Spec-Datei> | <Tar-Archiv> | <Source-Paket> ]:"
+"Erstellungsoptionen mit [ <Spec-Datei> | <Tar-Archiv> | <Quell-Paket> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Gemeinsame Optionen für alle RPM-Modi und Ausführungen:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Fehlgeschlagene Paket-Abhängigkeiten:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Die Spec-Datei %s kann nicht geöffnet werden: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Die Tar-Pipe konnte nicht geöffnet werden: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
-msgstr "Konnte Spec-Datei von %s nicht lesen\n"
+msgstr "Spec-Datei konnte nicht von %s gelesen werden\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
-msgstr "Konnte %s nicht in %s umbenennen: %m\n"
+msgstr "%s konnte nicht in %s umbenannt werden: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "Aufruf von stat für %s nicht möglich: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
-msgstr "Die Datei %s ist keine normale Datei.\n"
+msgstr "Die Datei %s ist keine reguläre Datei.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Die Datei %s scheint keine Spec-Datei zu sein.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
-msgstr "Baue für die Zielplattform(en): %s\n"
+msgstr "Für folgende Zielplattform(en) wird gebaut: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
-msgstr "Baue für das Ziel %s\n"
+msgstr "Für das Ziel %s wird gebaut\n"
+
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "Argumente für --root (-r) müssen mit einem / beginnen"
-#: rpmdb.c:22
+#: rpmdb.c:21
msgid "initialize database"
-msgstr "Initialisiere Datenbank"
+msgstr "Datenbank initialisieren"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-"Erstelle invertierte Datenbank-Liste anhand der installierten Paket-Header"
+"Invertierte Datenbank-Liste anhand der installierten Paket-Header erstellen"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
-msgstr "Überprüfe Datenbank-Dateien"
+msgstr "Datenbank-Dateien überprüfen"
+
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "Datenbank in die Header-Liste in der Standardeingabe exportieren"
-#: rpmdb.c:33
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "Datenbank aus der Header-Liste in der Standardeingabe importieren"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Datenbank-Optionen:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "Nur ein Hauptmodus kann angegeben werden"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
-msgstr "Überprüfe Paket-Signatur(en)"
+msgstr "Paket-Signatur(en) überprüfen"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
-msgstr "Importiere einen gepanzerten öffentlichen Schlüssel"
+msgstr "Einen gepanzerten öffentlichen Schlüssel importieren"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
+"Nicht importieren, aber ermitteln, ob es funktionieren würde oder nicht"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "Schlüssel des RPM-Schlüsselbundes auflisten"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Signatur-Optionen:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "Es wurden keine Argumente angegeben"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Abfragen/überprüfen der Paketauswahl:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Abfrage-Optionen (mit -q oder --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Überprüfungsoptionen (mit -V oder --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Installations-/Aktualisierungs-/Deinstallationsoptionen:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr ""
+"Nur eine Art von Abfragen/Überprüfungen kann jeweils durchgeführt werden"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "Unerwartete Abfrage-Parameter"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "Unerwartetes Abfrage-Format"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "Unerwartete Abfrage-Quelle"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "Nur Installation und Aktualisierung kann erzwungen werden"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "Dateien können nur bei der Paket-Installation verschoben werden"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+"--prefix kann nicht zusammen mit --relocate oder --excludepath verwendet "
+"werden"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate und --excludepath dürfen nur bei der Installation neuer Pakete "
+"benutzt werden"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix darf nur bei der Installation neuer Pakete benutzt werden"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "Argumente für --prefix müssen mit einem / beginnen"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"--hash (-h) kann nur während der Paket-Installation oder -Deinstallation "
+"angegeben werden"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"--percent kann nur während der Paket-Installation oder -Deinstallation "
+"angegeben werden"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "entweder --excludedocs oder --includedocs darf angegeben werden"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+"--allmatches darf nur während der Paket-Deinstallation angegeben werden"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles darf nur während der Paket-Installation angegeben werden"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb darf nur während der Paket-Installation oder -Deinstallation "
+"angegeben werden"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"Optionen zum Deaktivieren von Skripten können nur während der Paket-"
+"Installation oder -Deinstallation angegeben werden"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"Optionen zum Deaktivieren von Trigger können nur während der Paket-"
+"Installation oder -Deinstallation angegeben werden"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps kann nur während der Paket-Installation, -Deinstallation und -"
+"Überprüfung angegeben werden"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"--test kann nur während der Paket-Installation oder -Deinstallation "
+"angegeben werden"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "Es wurden keine Pakete für die Deinstallation angegeben"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "Es wurden keine Pakete für die Installation angegeben"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "Es wurden keine Argumente für die Abfrage angegeben"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "Es wurden keine Argumente für die Überprüfung angegeben"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "Paket(e) signieren"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
-msgstr "Signiere Paket(e) (identisch mit --addsign)"
+msgstr "Paket(e) signieren (identisch mit --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
-msgstr "Lösche Paket-Signatur(en)"
+msgstr "Paket-Signatur(en) löschen"
+
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
-#: rpmsign.c:35
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Signatur-Optionen:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Konnte %s nicht ausführen: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
-msgstr "\"%%_gpg_name\" muss in der Makro-Datei gesetzt sein\n"
-
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Bitte das Passwort eingeben: "
+msgstr "»%%_gpg_name« muss in der Makro-Datei gesetzt sein\n"
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Das Passwort ist richtig.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
-msgstr ""
+msgstr "Auswertung der Spec-Datei(en) in die Standardausgabe leiten"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "Spec-Datei(en) abfragen"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-"Arbeite mit dem binären RPMS, das aus der Spezifikation erstellt wurde "
+"Mit den binären RPMs arbeiten, die aus der Spezifikation erstellt wurden "
"(Standard)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
-msgstr "Arbeite mit Quell-RPM, das aus der Spezifikation erstellt wurde"
+msgstr "Mit Quell-RPM arbeiten, das aus der Spezifikation erstellt wurde"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "Folgendes Abfrage-Format benutzen"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Spec-Optionen:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
-msgstr ""
+msgstr "Keine Argumente zur Auswertung angegeben"
#: build/build.c:120
#, c-format
msgid "Unable to open temp file: %s\n"
msgstr "Temp-Datei konnte nicht geöffnet werden: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
-msgstr "Stream konnte nicht geöffnet werden: %s\n"
+msgstr "Datenstrom konnte nicht geöffnet werden: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Ausführung(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Ausführung von %s fehlgeschlagen (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
-msgstr ""
+msgstr "Fehler bei der Ausführung des Skriptlets %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Fehler-Status beim Beenden von %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -607,235 +675,315 @@ msgstr ""
"\n"
"Fehler beim Bauen des RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
-msgstr "Syntax-Fehler beim Parsen von ==\n"
+msgstr "Syntax-Fehler beim Auswerten von ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
-msgstr "Syntax-Fehler beim Parsen von &&\n"
+msgstr "Syntax-Fehler beim Auswerten von &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
-msgstr "Syntax-Fehler beim Parsen von ||\n"
+msgstr "Syntax-Fehler beim Auswerten von ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
-msgstr "Fehler beim Parsen des Ausdrucks\n"
+msgstr "Fehler beim Auswerten des Ausdrucks\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "Unerwartete (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- nur bei Zahlen\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! nur bei Zahlen\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "Typen müssen übereinstimmen\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
-msgstr "* / nicht unterstützt für Strings\n"
+msgstr "* / nicht unterstützt für Zeichenketten\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
-msgstr "- nicht unterstützt für Strings\n"
+msgstr "- nicht unterstützt für Zeichenketten\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
-msgstr "&& und || nicht unterstützt für Strings\n"
+msgstr "&& und || nicht unterstützt für Zeichenketten\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "Syntax-Fehler im Ausdruck\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
-msgstr "Fehlende '(' bei %s %s\n"
+msgstr "Fehlende »(« bei %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
-msgstr "Fehlende ')' bei %s(%s\n"
+msgstr "Fehlende »)« bei %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
-msgstr "Ungültiges %s Zeichen: %s\n"
+msgstr "Ungültiges %s-Zeichen: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Fehlendes %s bei %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
-msgstr "Druckbarem Zeichen folgt %s(): %s\n"
+msgstr "Darstellbarem Zeichen folgt %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Ungültiger Syntax: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Ungültige Dateiberechtigungen: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Ungültige Verzeichnisberechtigungen: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
-msgstr ""
+msgstr "Ungültige Länge der Locale: »%s« in %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
-msgstr ""
+msgstr "Doppelte Locale %s in %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Ungültige Fähigkeit: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Dateifähigkeits-Unterstützung nicht eingebaut\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
-msgstr "Datei muss mit \"/\" beginnen: %s\n"
+msgstr "Datei muss mit »/« beginnen: %s\n"
+
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
-#: build/files.c:973
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
-msgstr "Unbekannter Datei--Auszug-Algorithmus %u, gehe zurück zu MD5\n"
+msgstr "Unbekannter Prüfsummen-Algorithmus %u, es wird auf MD5 ausgewichen\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Datei doppelt aufgelistet: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
-msgstr ""
+msgstr "Lesen des symbolischen Links %s fehlgeschlagen: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolischer Link zeigt auf den BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "Pfad ist außerhalb von BuildRoot: %s\n"
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Verzeichnis nicht gefunden: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Datei nicht gefunden: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Kein Verzeichnis: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
-msgstr "%s: Kann den unbekannten Tag (%d) nicht laden.\n"
+msgstr "%s: Unbekannter Tag (%d) kann nicht geladen werden.\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: Lesen des öffentlichen Schlüssels fehlgeschlagen.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: Ist kein gepanzerter öffentlicher Schlüssel.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: Verschlüsselung fehlgeschlagen\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "Erzeugen des Verzeichnisses fehlgeschlagen"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
-msgstr "Datei benötigt führenden \"/\": %s\n"
+msgstr "Datei benötigt führenden »/«: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
-msgstr ""
+msgstr "%%dev-glob ist unzulässig: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Verzeichnis von Glob nicht gefunden: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Datei von \"glob\" nicht gefunden: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
-msgstr "Datei %s aus %%files konnte nicht geöffnet: %m\n"
+msgstr "Datei %s aus %%files konnte nicht geöffnet werden: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "Zeile: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "Leere Datei %s in %%files\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
-msgstr ""
+msgstr "Fehler beim Lesen der Datei %s in %%files: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "Ungültiges _docdir_fmt %s: %s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Datei von »glob« nicht gefunden: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
+msgstr "Spezielles %s kann nicht mit anderen Formen gemischt werden: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "Mehr als eine Datei in einer Zeile: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Ungültige Datei: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Ungültiger Eigentümer/Gruppe: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
-msgstr "Prüfe auf nicht gepackte Datei(en): %s\n"
+msgstr "Auf nicht gepackte Datei(en) wird geprüft: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -844,554 +992,612 @@ msgstr ""
"Installierte (aber nicht gepackte) Datei(en) gefunden:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
-msgstr "Verarbeite Daten: %s\n"
+msgstr "Dateien werden verarbeitet: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
+"Architektur der Binärdateien (%d) entspricht nicht der Paketarchitektur "
+"(%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
-msgstr "Architekturabhängige Binärdateien in noarch-Paket\n"
+msgstr "Architekturabhängige Binärdateien in »noarch«-Paket\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "Erstellen der Archivdatei fehlgeschlagen bei Datei %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "Erstellen der Archivdatei fehlgeschlagen: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
-msgstr ""
-"Konnte %s-Datei nicht öffnen: %s\n"
-"\n"
+msgstr "%s-Datei konnte nicht geöffnet werden: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: Zeile: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Rechnername konnte nicht erkannt werden: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Konnte Nutzdaten nicht nach %s schreiben: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Konnte Nutzdaten von %s nicht lesen: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Rechnername konnte nicht erkannt werden: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
-msgstr "Unbekannte Nutzdaten.Kompression: %s\n"
+msgstr "Unbekannte Nutzdaten-Kompression: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Konnte keine unveränderliche Header-Region erstellen.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Datei %s kann nicht durchsucht werden: %s\n"
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Kann temporäre Datei nicht öffnen.\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Lesen der Richtlinien-Datei fehlgeschlagen: %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Kann den temporären Header nicht schreiben\n"
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Ungültige CSA-Daten\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Kann den Header der Signatur nicht erneut laden.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
-msgstr "Konnte %s nicht öffnen: %s\n"
+msgstr "%s konnte nicht geöffnet werden: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
-msgstr "Kann das Paket nicht schreiben: %s\n"
-
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Konnte Signatur-Ziel %s nicht öffnen: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Konnte Header von %s nicht lesen: %s\n"
+msgstr "Paket konnte nicht geschrieben werden: %s\n"
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Konnte Header nicht nach %s schreiben: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Erstellt: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
-msgstr "Ausschluss \"%s\":\n"
+msgstr "»%s« wird ausgeführt:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
-msgstr "Ausschluss von \"%s\" fehlgeschlagen.\n"
+msgstr "Ausführung von »%s« ist fehlgeschlagen.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
-msgstr "Paket-Prüfung \"%s\" fehlgeschlagen.\n"
+msgstr "Paket-Prüfung »%s« fehlgeschlagen.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
-msgstr "Konnte den Dateinamen für das Paket %s nicht generieren: %s\n"
+msgstr "Dateiname für das Paket %s konnte nicht generiert werden: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
-msgstr "Kann Datei %s nicht erstellen: %s\n"
+msgstr "%s konnte nicht erstellt werden: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "Zeile %d: Zweites %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr ""
+msgstr "Ungültiges Datum in %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog-Einträge müssen mit einem * beginnen\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "Unvollständiger %%changelog-Eintrag\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "Ungültiges Datum im %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog ist nicht in absteigender Reihenfolge\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
-msgstr "Fehlender Name im %%changelog\n"
+msgstr "Name im %%changelog fehlt\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "Keine Beschreibung im %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "Zeile %d: zweites %%changelog\n"
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
-msgstr "Zeile %d: Fehler beim Parsen von %%description: %s\n"
+msgstr "Zeile %d: Fehler beim Auswerten von %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "Zeile %d: Ungültige Option %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "Zeile %d: Zu viele Namen: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "Zeile: %d: Paket existiert nicht: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "Zeile %d: Zweite Beschreibung\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
-msgstr "Zeile %d: Fehler beim Parsen von %%files: %s\n"
+msgstr "Zeile %d: Fehler beim Auswerten von %%files: %s\n"
+
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
-msgstr "Zeile %d: Fehler beim Parsen von %%policies: %s\n"
+msgstr "Zeile %d: Fehler beim Auswerten von %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
-msgstr ""
+msgstr "Fehler beim Auswerten des Tag-Feldes: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "Zeile %d: Ungültige Nummer: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "Zeile %d: Ungültige no%s-Nummer: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
-msgstr "Zeile %d: Ungültige %s Nummer: %s\n"
+msgstr "Zeile %d: Ungültige %s-Nummer: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d ist mehrfach definiert\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
-msgstr "%s herunterladen nach %s\n"
+msgstr "%s wird nach %s heruntergeladen\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
"%s konnte nicht heruntergeladen werden\n"
"\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Architektur ist ausgeschlossen: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Architektur ist nicht einbezogen: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "Betriebssystem ist ausgeschlossen: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "Betriebssystem ist nicht einbezogen: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "%s-Feld muss im Paket vorhanden sein: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Doppelte %s-Einträge im Paket: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
-msgstr "Kann Icon %s nicht öffnen: %s\n"
+msgstr "Symbol %s kann nicht geöffnet werden: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
-msgstr "Kann Icon %s nicht lesen: %s\n"
+msgstr "Symbol %s kann nicht gelesen werden: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
-msgstr "Unbekannter Icon-Typ: %s\n"
+msgstr "Unbekannter Symbol-Typ: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "Zeile %d: Tag benötigt nur ein Zeichen: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "Zeile %d: Ungültiges Zeichen '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr "Zeile %d: %s in: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "Zeile %d: Ungültiges Zeichen in: %s\n"
+msgid "%s in: %s\n"
+msgstr "%s in: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "Zeile %d: Ungültiges Zeichen \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "Ungültiges Zeichen '%c' (0x%x)"
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "Ungültige Sequenz \"..\""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "Zeile %d: Missgebildeter Tag: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "Zeile %d: Leerer Tag: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
-msgstr "Zeile %d: Präfixe dürfen nicht mit einem \"/\" enden: %s\n"
+msgstr "Zeile %d: Präfixe dürfen nicht mit einem »/« enden: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-"Zeile %d: Das Dokumentationsverzeichnis muss mit einem \"/\" beginnen: %s\n"
+"Zeile %d: Das Dokumentationsverzeichnis muss mit einem »/« beginnen: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "Zeile %d: Das Epoch-Feld muss eine vorzeichenlose Zahl sein: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "Zeile %d: Ungültig %s: Kennzeichner: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "Zeile %d: Ungültiges BuildArchitecture-Format: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr "Zeile %d: Nur noarch-Unterpakete werden unterstützt: %s\n"
+msgstr "Zeile %d: Nur »noarch«-Unterpakete werden unterstützt: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Interner Fehler: Falscher Tag %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "Zeile %d: %s ist veraltet: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Ungültige Paket-Spezifikation: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Paket ist bereits vorhanden: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "Zeile %d: Unbekannter Tag: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} kann nicht leer sein\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
-msgstr "%%{buildroot} kann nicht \"/\" sein\n"
+msgstr "%%{buildroot} kann nicht »/« sein\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Ungültige Quelle: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
-msgstr "Keine Patch-Nummer %u\n"
+msgstr "Kein Patch mit der Nummer %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
-msgstr "%%patch ohne korrespondierenden \"Patch:\"-Tag\n"
+msgstr "%%patch ohne korrespondierenden »Patch:«-Tag\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
-msgstr "Keine Source-Nummer %u\n"
+msgstr "Keine Quelle mit der Nummer %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
-msgstr "Kein \"Source\"-Tag in Spec-Datei\n"
+msgstr "Kein »Source«-Tag in Spec-Datei\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
-msgstr "Fehler beim Parsen von %%setup: %s\n"
+msgstr "Fehler beim Auswerten von %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "Zeile %d: Ungültiges Argument für %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "Zeile %d: Ungültige %%setup-Option %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Ungültige Patch-Nummer %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "Zeile %d: Zweites %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-"Token mit Abhängigkeiten müssen alphanumerisch, mit '_' oder '/' beginnen"
+"Token mit Abhängigkeiten müssen mit alphanumerischem Zeichen, »_« oder »/« "
+"beginnen"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
-msgstr ""
+msgstr "Versionierter Dateiname ist nicht erlaubt"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Version benötigt"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "Ungültige Abhängigkeit"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Version wird benötigt"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
-msgstr ""
+msgstr "Zeile %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "Zeile %d: Trigger benötigen --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
-msgstr "Zeile %d: Fehler beim Parsen von %s: %s\n"
+msgstr "Zeile %d: Fehler beim Auswerten von %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
-msgstr "Zeile %d: Internes Skript muss mit '>' enden: %s\n"
+msgstr "Zeile %d: Internes Skript muss mit »>« enden: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
-msgstr "Zeile %d: Skript/Programm muss mit '/' beginnen: %s\n"
+msgstr "Zeile %d: Skript/Programm muss mit »/« beginnen: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "Zeile %d: Zweites %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "Zeile %d: Nicht unterstütztes internes Skript: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
#, c-format
-msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
+msgid "line %d: file trigger condition must begin with '/': %s"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseScript.c:410
+#, c-format
+msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
+msgstr "Zeile %d: Interpreter-Argumente sind in Triggern nicht erlaubt: %s\n"
+
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "Zeile %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Öffnen von %s fehlgeschlagen: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
-msgstr ""
+msgstr "%s:%d: Argument wurde für %s erwartet\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr ""
+msgstr "Zeile %d: Nicht geschlossenes %%if\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
-msgstr ""
+msgstr "Zeile %d: Nicht geschlossenes Makro oder ungültige Zeilenfortsetzung\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
-msgstr ""
+msgstr "%s:%d: Ungültige %%if-Bedingung\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%else ohne %%if erhalten\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endif ohne %%if erhalten\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d: missgebildete %%include-Anweisung\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "Kodierung %s wird vom System nicht unterstützt\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Pakt %s: Ungültige %s-Kodierung in %s: %s - %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
-msgstr "Keine für das Bauen kompatible Architektur gefunden\n"
+msgstr "Keine für das Bauen kompatiblen Architekturen gefunden\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Paket hat keine %%description: %s\n"
@@ -1422,7 +1628,7 @@ msgstr ""
#: build/policies.c:163
#, c-format
msgid "Failed to read policy file: %s\n"
-msgstr "Lesevorgang fehlgeschlagen Richtlinien-Datei: %s\n"
+msgstr "Lesen der Richtlinien-Datei fehlgeschlagen: %s\n"
#: build/policies.c:170
#, c-format
@@ -1440,478 +1646,594 @@ msgid ""
"'%s' type given with other types in %%semodule %s. Compacting types to "
"'%s'.\n"
msgstr ""
+"»%s«-Type zusammen mit anderen Typen in %%semodule %s angegeben. Typen "
+"werden zu »%s« zusammengefasst.\n"
#: build/policies.c:246
#, c-format
msgid "Error parsing %s: %s\n"
-msgstr "Fehler beim Parsen von %s: %s\n"
+msgstr "Fehler beim Auswerten von %s: %s\n"
#: build/policies.c:252
#, c-format
msgid "Expecting %%semodule tag: %s\n"
msgstr ""
-"Erwarte %%semodule Kennzeichen: %s\n"
+"%%semodule-Tag wird erwartet: %s\n"
"\n"
#: build/policies.c:262
#, c-format
msgid "Missing module path in line: %s\n"
-msgstr "Fehlender Modul-Pfad bei Zeile %s\n"
+msgstr "Fehlender Modul-Pfad in Zeile: %s\n"
#: build/policies.c:268
#, c-format
msgid "Too many arguments in line: %s\n"
-msgstr "Zu viele Argumente in der Datenzeile bei %s\n"
+msgstr "Zu viele Argumente in der Zeile: %s\n"
#: build/policies.c:307
#, c-format
msgid "Processing policies: %s\n"
-msgstr "Verarbeite Richtlinien: %s\n"
+msgstr "Richtlinien werden verarbeitet: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
-msgstr "Ungültiger Regex-Ausdruck %s wird ignoriert\n"
+msgstr "Ungültiger regulärer Ausdruck %s wird ignoriert\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
-msgstr "Konnte keine Pipe für %s erzeugen: %m\n"
+msgstr "Pipe für %s konnte nicht erzeugt werden: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
-msgstr "Konnte %s nicht ausführen: %s\n"
+msgstr "%s konnte nicht ausgeführt werden: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
-msgstr "Konnte fork %s nicht ausführen: %s\n"
+msgstr "fork %s konnte nicht ausgeführt werden: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s fehlgeschlagen: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
-msgstr "Konnte nicht all Daten nach %s: %s schreiben\n"
+msgstr "Nicht alle Daten konnten nach %s geschrieben werden: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Umwandlung von %s in einen langen Integer fehlgeschlagen.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
-msgstr ""
+msgstr "Leerer Dateiklassifizierer\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Keine Dateiattribute konfiguriert\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) fehlgeschlagen: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load fehlgeschlagen: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
-msgstr "Erkennung der Datei \"%s\" fehlgeschlagen: Modus %06o %s\n"
+msgstr "Erkennung der Datei »%s« fehlgeschlagen: Modus %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
-msgstr "Finde %s: %s\n"
+msgstr "%s wird gesucht: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
-msgstr "Fehlgeschlagenes zu finden %s:\n"
+msgstr "%s konnte nicht gefunden werden:\n"
+
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
-#: build/spec.c:404
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
-msgstr "Abfragen der Spec-Datei %s fehlgeschlagen, kann nicht geparst werden\n"
+msgstr ""
+"Abfragen der Spec-Datei %s fehlgeschlagen, kann nicht ausgewertet werden\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(Fehler 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s Fehler(%d) von %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Ungültige Magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s Fehler(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Ungültiger Header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "Unbekannte Datenbank-Option: »%s« wird ignoriert.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Header zu gross"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s hat einen ungültigen numerischen Wert, wird übersprungen\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s hat einen zu großen oder zu kleinen Wert, wird übersprungen\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
+"%s hat einen zu großen oder zu kleinen Integer-Wert, wird übersprungen\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Unbekannter Datei-Typ"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "Keine %s-Sperre auf %s/%s\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Fehlende harte Verlinkung(en)"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "gemeinsam"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Prüfsumme stimmt nicht überein"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exklusiv"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Interner Fehler"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "Ungültiger Indextyp %x auf %s/%s\n"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Archiv-Datei nicht im Header"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "Fehler(%d) beim Holen der Datensätze »%s« aus dem %s-Index: %s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " fehlgeschlagen - "
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "Fehler(%d) beim Speichern des Datensatzes »%s« in %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "Fehler(%d) beim Entfernen des Datensatzes »%s« aus %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "Fehler(%d) beim Hinzufügen des Datensatzes für Header #%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "Fehler(%d) beim Entfernen des Datensatzes für Header #%d\n"
-#: lib/depends.c:68
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "Fehler(%d) beim Reservieren einer neuen Paket-Instanz\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
-msgstr "%s ist ein Delta RPM und kann nicht direkt installiert werden\n"
+msgstr "%s ist ein Delta-RPM und kann nicht direkt installiert werden\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
-msgstr "Nicht unterstütze Nutzlast (%s) in Paket %s\n"
+msgstr "Nicht unterstütze Nutzdaten (%s) in Paket %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
-msgstr "Paket %s wurde bereits hinzugefügt, überspringe %s\n"
+msgstr "Paket %s wurde bereits hinzugefügt, %s wird übersprungen\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
-msgstr "Paket %s wurde bereits hinzugefügt, ersetze es durch %s\n"
+msgstr "Paket %s wurde bereits hinzugefügt, wird durch %s ersetzt\n"
+
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(kein Blob)"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(keine Nummer)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(keine Zeichenkette)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(ungültiger Typ)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(nicht Base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(ungültiger Typ)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(kein Blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(ungültiger XML-Typ)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(keine OpenPGP-Signatur)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "Ungültiges Datum %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normal"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "ersetzt"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "nicht installiert"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "Netzwerk-Mitbenutzung"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "Falsche Farbe"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "fehlt"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(unbekannt)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(kein String)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "Benutzer %s existiert nicht - benutze Root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "Gruppe %s existiert nicht - benutze Root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s als %s gesichert\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s erstellt als %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s: Entfernen fehlgeschlagen: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "Verzeichnis"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "Datei"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "Tag[%d]: UNGÃœLTIG, Tag %d, Typ %d, Offset %d, Count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: UNGÃœLTIG, nicht hexadezimal\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: UNGÜLTIG, nicht binär\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: UNGÜLTIG, nicht binär\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "Blob-Grösse(%d): UNGÜLTIG, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "Regionsoffset: UNGÜLTIG, Tag %d, Typ %d, Offset %d, Zähler %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "Regionstrailer: UNGÜLTIG, Tag %d, Typ %d, Offset %d, Zähler %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "Regionsgrösse: UNGÜLTIG, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr Grösse(%d): UNGÜLTIG, lesen lieferte %d zurück\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: UNGÃœLTIG\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr Tags: UNGÃœLTIG, Nummer der Tags (%d) ausserhalb des Bereichs\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "ungültige Feldbreite"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr Tags: UNGÃœLTIG, Nummer der Bytes (%d) ausserhalb des Bereichs\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr Blob(%zd): UNGÜLTIG, lesen lieferte %d zurück\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr Load: UNGÃœLTIG\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "Leeres Tag-Format"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature fehlgeschlagen: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "Leerer Tag-Name"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Keine Signatur verfügbar\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead fehlgeschlagen: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] erwartet am Ende des Arrays"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "Unerwartete ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "Unerwartete }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? im Ausdruck erwartet"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ nach dem ? im Ausdruck erwartet"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} im Ausdruck erwartet"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": erwartet ein ? im Unterausdruck"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ nach dem : im Ausdruck erwartet"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| am Ende des Ausdrucks erwartet"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "Zählvariable wird mit ungleich großem Array benutzt"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread fehlgeschlagen: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
+"%s: Fehler: --pipe wurde mehrmals angegeben (inkompatible »popt«-Aliase?)\n"
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "MAKRO mit Wert AUSDRUCK vordefinieren"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
-msgstr "'MAKRO AUSDRUCK'"
+msgstr "»MAKRO AUSDRUCK«"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "MAKRO mit Wert AUSDRUCK definieren"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "Definition von MAKRO zurücksetzen"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MAKRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "Makro-Ausdehnung des AUSDRUCKS anzeigen"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
-msgstr "'AUSDRUCK'"
+msgstr "»AUSDRUCK«"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
-msgstr "lese <DATEI:...> anstatt der Standard-Datei(en)"
+msgstr "<DATEI:...> anstatt der Standard-Datei(en) lesen"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<DATEI:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "Keinerlei Plugins aktivieren"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
-msgstr "Paket-Kurzfassung nicht überprüfen"
+msgstr "Paket-Prüfsummen nicht verifizieren"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "Datenbank-Header beim Abrufen nicht überprüfen"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "Paket-Signatur(en) nicht überprüfen"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
-msgstr "Sende Standardausgabe an CMD"
+msgstr "Standardausgabe an CMD senden"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
-msgstr "benutze WURZELVERZEICHNIS als oberstes Verzeichnis"
+msgstr "WURZELVERZEICHNIS als oberstes Verzeichnis verwenden"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "WURZELVERZEICHNIS"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "Datenbank in VERZEICHNIS benutzen"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "VERZEICHNIS"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
-msgstr "Zeige bekannte Abfrage-Tags"
+msgstr "Bekannte Abfrage-Tags anzeigen"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
-msgstr "Zeige endgültige rpmrc- und Makro-Konfiguration"
+msgstr "Endgültige rpmrc- und Makro-Konfiguration anzeigen"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
-msgstr "Zeige weniger informative Ausgabe"
+msgstr "Weniger informative Ausgabe anzeigen"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
-msgstr "Zeige detailliertere Ausgabe"
+msgstr "Detailliertere Ausgabe anzeigen"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
-msgstr "Zeige benutzte RPM-Version"
+msgstr "Benutzte RPM-Version anzeigen"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
-msgstr "Debugge Nutzdaten-Dateistatus"
+msgstr "Nutzdaten-Dateistatus debuggen"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
-msgstr "Debugge rpmio Ein-/Ausgabe"
+msgstr "rpmio-Ein-/Ausgabe debuggen"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: Optionstabelle ist falsch konfiguriert (%d)\n"
@@ -1932,166 +2254,176 @@ msgstr "Verschiebungen müssen ein = enthalten"
msgid "relocations must have a / following the ="
msgstr "Verschiebungen müssen einen / nach dem = enthalten"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-"Installiere alle Dateien, sogar Konfigurationsdateien, die sonst "
+"Alle Dateien installieren, sogar Konfigurationsdateien, die sonst "
"möglicherweise übersprungen werden"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-"Entferne alle Pakete, die mit <Paket> übereinstimmen (normalerweise wird "
+"Alle Pakete entfernen, die mit <Paket> übereinstimmen (normalerweise wird "
"eine Fehlermeldung angezeigt, wenn <Paket> auf mehrere Pakete zutrifft)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
-msgstr "Verschiebe Dateien eines nicht verschiebbaren Pakets"
+msgstr "Dateien eines nicht verschiebbaren Pakets verschieben"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
-msgstr "Zeige Abhängigkeitsschleifen als Warnung"
+msgstr "Abhängigkeitsschleifen als Warnung anzeigen"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
-msgstr "Lösche (deinstalliere) Paket"
+msgstr "Paket löschen (deinstallieren)"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<Paket>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
-msgstr "Installiere keine Konfigurationsdateien"
+msgstr "Keine Konfigurationsdateien installieren"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
-msgstr "Installiere keine Dokumentation"
+msgstr "Keine Dokumentation installieren"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
-msgstr "Ãœberspringe Dateien mit beginnendem <Pfad> "
+msgstr "Dateien überspringen, die mit <Pfad> beginnen"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<Pfad>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "Abkürzung für --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
-msgstr "Aktualisiere Paket(e), wenn bereits installiert"
+msgstr "Paket(e) aktualisieren, wenn bereits installiert"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<Paket-Datei>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
-msgstr "Zeige Rautezeichen während der Installation (empfehlenswert mit -v)"
+msgstr "Rautezeichen während der Installation (empfehlenswert mit -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "Keine Überprüfung der Paket-Architektur"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "Keine Überprüfung des Paket-Betriebssystems"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "Keine Überprüfung des Festplattenspeichers vor der Installation"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
-msgstr "Installiere Dokumentation"
+msgstr "Dokumentation installieren"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr "Installiere Paket(e)"
+msgstr "Paket(e) installieren"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
-msgstr "Aktualisiere die Datenbank, aber verändere nichts im Dateisystem"
+msgstr "Die Datenbank aktualisieren, aber nichts im Dateisystem verändern"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "Keine Überprüfung der Paket-Abhängigkeiten"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "Keine Überprüfung der Prüfsumme der Dateien"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "Keine Überprüfung der Prüfsumme der Dateien (veraltet)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
-msgstr "Installiere keine Sicherheitskontext-Dateien"
+msgstr "Keine Sicherheitskontext-Dateien installieren"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"Paket-Installation nicht neu sortieren, um die Abhängigkeiten zu erfüllen"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "Keine Paket-Scriptlets ausführen"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "%%pre-Scriptlet nicht ausführen (wenn vorhanden)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "%%post-Scriptlet nicht ausführen (wenn vorhanden)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "%%preun-Scriptlet nicht ausführen (wenn vorhanden)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "%%postun-Scriptlet nicht ausführen (wenn vorhanden)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "%%pretrans-Scriptlet nicht ausführen (wenn vorhanden)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "%%posttrans-Scriptlet nicht ausführen (wenn vorhanden)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "Keine Scriptlets dieses Pakets ausführen"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "%%triggerprein-Scriptlets nicht ausführen"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "%%triggerin-Scriptlets nicht ausführen"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "%%triggerun-Scriptlets nicht ausführen"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "%%triggerpostun-Scriptlets nicht ausführen"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "keine Erfassungaktionen ausführen"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2099,373 +2431,411 @@ msgstr ""
"Aktualisierung auf eine alte Version des Pakets (--force macht das bei "
"Aktualisierungen automatisch)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
-msgstr "Zeige Prozentangabe bei der Paket-Installation"
+msgstr "Prozentangabe bei der Paket-Installation anzeigen"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-"Verschiebe das Paket, wenn es verschiebbar ist, in das Verzeichnis "
-"<Verzeichnis>"
+"Das Paket, wenn es verschiebbar ist, in das Verzeichnis <Verzeichnis> "
+"verschieben"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<Verzeichnis>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
-msgstr "verschiebe Dateien von <alter Pfad> nach <neuer Pfad>"
+msgstr "Dateien von <alter Pfad> nach <neuer Pfad> verschieben"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<alter Pfad>=<neuer Pfad>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
-msgstr "Ignoriere Datei-Konflikte zwischen Paketen"
+msgstr "Datei-Konflikte zwischen Paketen ignorieren"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
-msgstr "Installiere erneut, wenn das Paket bereits vorhanden ist"
+msgstr "Erneut installieren, wenn das Paket bereits vorhanden ist"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "Nicht installieren - nur anzeigen, ob es funktionieren würde"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "Paket(e) aktualisieren"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "Paket(e) erneut installieren"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "Abfrage aller Pakete"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "Abfrage-Modus der Signatur"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "Abfragen/überprüfen eines Pakets, das die Datei besitzt"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "Abfragen/überprüfen eines Pakets einer Gruppe"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "Abfragen/überprüfen einer Paket-Datei"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "Abfragen/überprüfen von Paketen mit der Paket-Kennung"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "Abfragen/überprüfen von Paketen mit Header-Kennung"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "Abfrage-Modus"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "Abfragen/überprüfen einer Header-Instanz"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "Abfragen/überprüfen von Paketen einer Installation"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "Abfragen eines Pakets gesteuert vom Paket"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "Überprüfungsmodus"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "Abfrage nach Paketen, die die Fähigkeit benötigen"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "Abfrage nach Paketen, die die Fähigkeit bereitstellen"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
-msgstr "\"Globe\" nicht nach Argumenten"
+msgstr "»Globe« nicht nach Argumenten"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "Dateien nicht als Paket-Liste verarbeiten"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "Alle Konfigurationsdateien anzeigen"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "Alle Dokumentationsdateien anzeigen"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "Alle Dokumentationsdateien anzeigen"
+msgstr "Alle Lizenzdateien anzeigen"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "Alle Lizenzdateien anzeigen"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "Grundlegende Datei-Informationen auflisten"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "Alle Dateien im Paket auflisten"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
-msgstr "Ãœberspringe %%ghost-Dateien"
+msgstr "%%ghost-Dateien überspringen"
+
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "%%ghost-Dateien überspringen"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "Anzeigen der Zustände der aufgelisteten Dateien"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
-msgstr "Keine Grössenüberprüfung der Dateien"
+msgstr "Keine Größenüberprüfung der Dateien"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "Keine Überprüfung der symbolischen Links der Dateien"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "Keine Überprüfung der Eigentümer der Dateien"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "Keine Überprüfung der Gruppen der Dateien"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "Keine Überprüfung der letzten Bearbeitungszeit der Dateien"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "Keine Überprüfung der Berechtigungen der Dateien"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "Keine Fähigkeitsprüfung der Dateien"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "Keine Überprüfung des Sicherheitskontexts"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "Keine Fähigkeitsprüfung der Dateien"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "Keine Überprüfung der Dateien im Paket"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "Keine Überprüfung der Paket-Abhängigkeiten"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "Kein(e) Überprüfungsskript(e) ausführen"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Fehlende rpmlib-Features für %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
-msgstr "Source-Paket erwartet, Binär-Paket entdeckt\n"
+msgstr "Quell-Paket erwartet, Binär-Paket entdeckt\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
-msgstr "Source-Paket enthält keine Spec-Datei\n"
+msgstr "Quell-Paket enthält keine Spec-Datei\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "Entpacken des Archivs fehlgeschlagen%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " bei Datei "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s fehlgeschlagen bei Datei %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s fehlgeschlagen: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "Ungültiges Format: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(enthält keine Dateien)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "ersetzt "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "nicht installiert"
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
-msgstr "geshared "
+msgstr "im Netz freigegeben"
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "falsche Farbe "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(kein Status) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(unbekannt %3d)"
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "Paket hat keine Eigentümer-/Gruppen-Liste\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "Paket weder Eigentümer- noch ID-Liste\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "Gruppe %s enthält keine Pakete\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "Keine Paket-Trigger %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "Missgebildet: %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "Kein Paket stimmt mit %s überein: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "Kein Paket benötigt %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "Kein Paket empfiehlt %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "Kein Paket schlägt %s vor\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "Kein Paket erweitert %s\n"
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
-msgstr "Kein Paket bietet %s\n"
+msgstr "Kein Paket stellt %s bereit\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "Datei %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "Die Datei %s gehört zu keinem Paket\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "Ungültige Paket-Nummer: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
-msgstr "Eintrag %u konnte nicht gelesen werden\n"
+msgstr "Datensatz %u konnte nicht gelesen werden\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "Das Paket %s ist nicht installiert\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
-msgstr "Unbekannter Tag: \"%s\"\n"
+msgstr "Unbekannter Tag: »%s«\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
"%s: Import des Schlüssels %d fehlgeschlagen.\n"
"\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
-msgstr "%s: Schlüssel %d nicht gesicherter öffentlicher Schlüssel.\n"
+msgstr "%s: Schlüssel %d ist kein gesicherter öffentlicher Schlüssel.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: Importieren fehlgeschlagen (%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-"%s: Immuner Header-Bereich konnte nicht gelesen werden. Korruptes Paket?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NICHT OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (FEHLENDE SCHLÃœSSEL:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (UNBESTÄTIGTE SCHLÜSSEL:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: Öffnen fehlgeschlagen: %s\n"
@@ -2483,228 +2853,454 @@ msgstr "%s: chroot-Verzeichnis nicht gesetzt\n"
#: lib/rpmchroot.c:70
#, c-format
msgid "Unable to change root directory: %m\n"
-msgstr "Wechseln des Wurzel.Verzeichnis fehlgeschlagen: %m\n"
+msgstr "Wechseln des Wurzelverzeichnisses fehlgeschlagen: %m\n"
#: lib/rpmchroot.c:95
#, c-format
msgid "Unable to restore root directory: %m\n"
-msgstr "Root-Verzeichnis kann nicht wiederhergestellt werden: %m\n"
+msgstr "Wurzelverzeichnis kann nicht wiederhergestellt werden: %m\n"
+
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "%d fehlende(r) Index(e), bitte warten...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "%s-Index kann nicht mittels %s geöffnet werden - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "Datenbank-Pfad wurde nicht gesetzt\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: wird übersprungen"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "Fehler(%d) beim Speichern des Datensatzes #%d in %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec fehlgeschlagen: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp fehlgeschlagen: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: wird übersprungen"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: Beschädigten Header #%u erhalten -- wird übersprungen.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: Header bei 0x%x kann nicht gelesen werden\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "Datenbank-Pfad wurde nicht gesetzt"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "Anlegen des Verzeichnisses %s fehlgeschlagen: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "Header #%u in der Datenbank ist ungültig -- wird übersprungen.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "Ursprünglicher Datensatz %u kann nicht hinzugefügt werden\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"Neu bauen der Datenbank fehlgeschlagen: Datenbank verbleibt entsprechend\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "Konnte die alte Datenbank nicht durch die neue ersetzen!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NEIN "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "JA"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
-msgstr "PreReq:, Provides:, und Obsoletes: unterstützen Versionen."
+msgstr ""
+"»PreReq:«-, »Provides:«- und »Obsoletes:«-Abhängigkeiten unterstützen "
+"Versionen."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"Dateiname(n) als (dirName,baseName,dirIndex)-Tupel gespeichert, nicht als "
"Pfad."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "Paket-Nutzdaten können mit bzip2 komprimiert werden."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "Paket-Nutzdaten können mit xz komprimiert werden."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "Paket-Nutzdaten können mit lzma komprimiert werden."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
-msgstr "Dateien der Paket-Nutzdaten haben \"./\" als Präfix"
+msgstr "Dateien der Paket-Nutzdaten haben »./« als Präfix"
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "Paket Name-Version-Release wird nicht unbedingt bereitgestellt."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "Header-Tags werden immer nach dem Laden sortiert."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "Der Scriptlet-Interpreter kann Argumente aus dem Header benutzen."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
-msgstr ""
-"Eine harte Verlinkung kann auch ohne eine komplette Installation angelegt "
-"werden."
+msgstr "Eine harte Dateiverknüpfung ohne Ziel ist installierbar."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"Paket-Scriptlets können während der Installation auf die RPM-Datenbank "
"zugreifen."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "Interne Unterstützung für LUA-Scripte"
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "Datei-Prüfsummen-Algorithmus ist pro Paket konfigurierbar"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "Unterstützung für POSIX.1e-Dateifähigkeiten"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "Paket-Scriptlets können während der Installation entpackt werden."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
+msgstr "Abhängigkeitsvergleich unterstützt Versionen mit Tilde."
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "Dateien größer als 4 GB werden unterstützt"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Name wird benötigt"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Ungültige Magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Ungültiger oder unlesbarer Header"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Header zu groß"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Datei ist zu groß für das Archiv"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Unbekannter Datei-Typ"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Fehlende Datei(en)"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Prüfsummen stimmen nicht überein"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Interner Fehler"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Archiv-Datei nicht im Header"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " fehlgeschlagen - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (Fehler 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "Öffnen von %s fehlgeschlagen: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: Kein RPM-Paket (oder Paket-Liste)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
-msgstr ""
-"Aktualisierung/ Installation...\n"
-"\n"
+msgstr "Aktualisierung/ Installation …\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
-msgstr "Aufräumen/ Entfernen...\n"
+msgstr "Aufräumen/ Entfernen …\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
-msgstr "Vorbereiten..."
+msgstr "Vorbereiten …"
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
-msgstr "Pakete vorbereiten..."
+msgstr "Pakete vorbereiten …"
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
-msgstr "Fehlgeschlagende Abhängigkeiten:\n"
+msgstr "Fehlgeschlagene Abhängigkeiten:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: Kein RPM-Paket (oder Paket-Liste): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s kann nicht installiert werden\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
-msgstr "Empfange %s\n"
+msgstr "%s wird geholt\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
-msgstr "überspringe %s - Übertragung fehlgeschlagen\n"
+msgstr "%s wird übersprungen - Übertragung fehlgeschlagen\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "Paket %s ist nicht verschiebbar\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "Fehler beim Lesen von Datei %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
-msgstr "\"%s\" bezeichnet mehrere Pakete:\n"
+msgstr "»%s« bezeichnet mehrere Pakete:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
-msgstr "Kann %s nicht öffnen: %s\n"
+msgstr "%s kann nicht geöffnet werden: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
-msgstr "Installiere %s\n"
+msgstr "%s wird installiert\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "ist kein RPM-Paket"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
-msgstr "Illegaler Signatur-Typ"
+msgstr "Ungültiger Signatur-Typ"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "nicht unterstützte RPM-Paket-Version"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "Lesen fehlgeschlagen: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "kein RPM-Paket\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
-msgstr ""
-"kann keine %s Blockierung auf %s (%s) erstellen\n"
-"\n"
+msgstr "%s-Sperre auf %s kann nicht erstellt werden (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
-msgstr "warte auf %s Blockierung auf %s\n"
+msgstr "Auf %s-Sperre auf %s wird gewartet\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
-msgstr "Dlopen %s %s fehlgeschlagen\n"
+msgstr "»dlopen« %s %s fehlgeschlagen\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
-msgstr "Auflösen des Symbols fehlgeschlagen %s: %s\n"
+msgstr "Auflösen des Symbols %s fehlgeschlagen: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr ""
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Plugin %%__%s_%s ist nicht konfiguriert\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
-msgstr "Plugin %s nicht geladen\n"
-
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
+msgstr "Plugin %s ist nicht geladen\n"
#: lib/rpmprob.c:109
msgid "different"
@@ -2784,797 +3380,637 @@ msgstr "%s wird ersetzt durch %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "Unbekannter Fehler %d trat während dem Verarbeiten des Pakets %s auf"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
-msgstr "Fehlender zweiter ':' bei %s:%d\n"
+msgstr "Fehlender zweiter »:« bei %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "Fehlender Architektur-Name bei %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Unvollständige Datenzeile bei %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Zu viele Argumente in der Datenzeile bei %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
-msgstr "Ungültige Architektur/Betriebssystem-Nummer: %s (%s:%d)\n"
+msgstr "Ungültige Architektur-/Betriebssystem-Nummer: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Unvollständige Standardzeile bei %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Zu viele Argumente in der Standardzeile bei %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
-msgstr "Fehlender ':' (0x%02x gefunden) bei %s:%d\n"
+msgstr "Fehlender »:« (0x%02x gefunden) bei %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "Fehlendes Argument für %s bei %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
-msgstr "Kann %s bei %s:%d nicht öffnen: %m\n"
+msgstr "%s bei %s:%d kann nicht geöffnet werden: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "Fehlende Architektur für %s bei %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
-msgstr "Ungültige Option '%s' bei %s:%d\n"
+msgstr "Ungültige Option »%s« bei %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
+"»Auxiliary vector« kann nicht gelesen werden, ist /proc nicht eingehängt?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Unbekanntes System: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Bitte (in Englisch) %s kontaktieren\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
-msgstr "Kann %s nicht zum Lesen öffnen: %m.\n"
+msgstr "%s kann nicht zum Lesen geöffnet werden: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
-msgstr ""
+msgstr "Aktuelles Verzeichnis kann nicht wiederhergestellt werden: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "<lua>-Scriptlet-Unterstützung nicht eingebaut\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
-msgstr "Konnte keine temporäre Datei erzeugen für %s: %s\n"
+msgstr "Temporäre Datei für %s konnte nicht angelegt werden: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
-msgstr "Konnte Datei-Beschreiber nicht duplizieren: %s: %s\n"
+msgstr "Datei-Deskriptor konnte nicht dupliziert werden: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "Fwrite fehlgeschlagen: %s"
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s Scriptlet fehlgeschlagen, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s Scriptlet fehlgeschlagen, Signal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s Scriptlet fehlgeschlagen, Beenden-Status %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Unbekanntes Format"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "installieren"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "löschen"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
-msgstr "Kann Paket-Datenbank in %s nicht öffnen\n"
+msgstr "Paket-Datenbank in %s kann nicht geöffnet werden\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
-msgstr "Zusätzliche '(' im Paket-Bezeichnung: %s\n"
+msgstr "Zusätzliche »(« in Paket-Bezeichnung: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
-msgstr "Fehlende '(' im Paket-Label: %s\n"
+msgstr "Fehlende »(« in Paket-Bezeichnung: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
-msgstr "Fehlende ')' im Paket-Bezeichung: %s\n"
+msgstr "Fehlende »)« in Paket-Bezeichnung: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: Lesen des öffentlichen Schlüssels fehlgeschlagen.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "Transaktion"
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh-Grösse(%d): UNGÜLTIG, lesen lieferte %d zurück\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh Magic: UNGÃœLTIG\n"
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh-Tags: UNGÃœLTIG, Nummer der Tags (%d) ausserhalb des Bereichs\n"
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh-Daten: UNGÃœLTIG, Nummer der Bytes (%d) ausserhalb des Bereichs\n"
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh-Blob(%d): UNGÜLTIG, lesen lieferte %d zurück\n"
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh-Tag[%d]: UNGÜLTIG, Tag %d, Typ %d, Offset %d, Zähler %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh-Load: UNGÃœLTIG\n"
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh-Pad(%zd): UNGÃœLTIG, lese %zd Byte\n"
-
-#: lib/signature.c:235
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): UNGÃœLTIG, fstat(2) fehlgeschlagen\n"
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Immuner Header-Bereich konnte nicht gelesen werden. Korruptes Paket?\n"
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5-Kurzfassung: "
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "SHA1-Kurzfassung des Headers: "
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "Header "
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:158
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr "übersprungen"
-
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr "fehlgeschlagen"
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "fehlend %c %s"
-
-#: lib/verify.c:422
+#: lib/rpmvs.c:178
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Unerfüllte Abhängigkeiten für %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "Fehlende { nach %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "Fehlende } nach %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "Leeres Tag-Format"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "Unbekannter Tag"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "Unbekannter Tag"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] erwartet am Ende des Arrays"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "Unerwartete ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "Unerwartete }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? im Ausdruck erwartet"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ nach dem ? im Ausdruck erwartet"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} im Ausdruck erwartet"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": erwartet ein ? im Unterausdruck"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ nach dem : im Ausdruck erwartet"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| am Ende des Ausdrucks erwartet"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "Zählvariable wird mit ungleich grossem Array benutzt"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Generiere %d fehlende Index(e), bitte warten...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "Kann den %s-Index nicht öffnen, benutze db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/rpmvs.c:188
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "Kein Datenbank-Pfad wurde gesetzt\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: Ãœberspringe"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "Fehler(%d) beim Speichern des Eintrags #%d in %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec fehlgeschlagen: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp fehlgeschlagen: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: Ãœberspringe"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: Beschädigten Header #%u erhalten -- überspringe.\n"
-
-#: lib/rpmdb.c:2250
+#: lib/rpmvs.c:195
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/rpmdb.c:2349
+#: lib/rpmvs.c:206
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/rpmdb.c:2358
+#: lib/rpmvs.c:261
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: Kann den Header bei 0x%x nicht lesen\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "Fehler(%d) beim Setzen von \"%s\"-Einträgen des %s-Indexes\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "Fehler(%d) beim Speichern des Eintrags \"%s\" in %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "Fehler(%d) beim Entfernen des Eintrags \"%s\" aus %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "Fehler(%d) beim Reservieren einer neuen Paket-Instanz\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "Fehler(%d) beim Lesen \"%s\"-Einträgen des %s-Indexes\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "Fehler(%d) beim Speichern des Eintrags %s in %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "Kein Datenbank-Pfad wurde gesetzt"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "Erzeugen des Verzeichnises %s fehlgeschlagen: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "Header #%u in der Datenbank ist ungültig -- überspringe.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "Kann ursprünglichen Eintrag %u nicht hinzufügen\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-"Neu bauen der Datenbank fehlgeschlagen: Datenbank verbleibt entsprechend\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "Konnte die alte Datenbank nicht durch die neue ersetzen!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "Ersetze Dateien in %s mit Dateien aus %s für eine Wiederherstellung"
-#: lib/rpmdb.c:2960
+#: lib/rpmvs.c:268
#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "Entfernen des Verzeichnisses %s fehlgeschlagen: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d-Fehler (%d) von %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d-Fehler (%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "Keine %s-Sperre auf %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "verteilt"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exklusiv"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "%s%s"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "Unbekannte Datenbank-Option: \"%s\" ignoriert.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s hat einen ungültigen numerischen Wert, übersprungen\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s hat einen zu grossen oder zu kleinen Wert, übersprungen\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s hat einen zu grossen oder zu kleinen Integer-Wert, übersprungen\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Header "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Header der Signatur kann nicht erneut geladen werden.\n"
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
+#: lib/transaction.c:1397
+msgid "skipped"
+msgstr "übersprungen"
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
+#: lib/transaction.c:1397
+msgid "failed"
+msgstr "fehlgeschlagen"
-#: plugins/sepolicy.c:416
+#: lib/verify.c:263
#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr ""
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Doppelter Benutzername oder Benutzer-ID für Benutzer %s\n"
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: lib/verify.c:284
#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Doppelter Gruppenname oder Gruppen-ID für Gruppe %s\n"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+#: lib/verify.c:395
+msgid "no state"
+msgstr "kein Status"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "unbekannter Status"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: lib/verify.c:448
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "fehlend %c %s"
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
+#: lib/verify.c:503
+#, c-format
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Unerfüllte Abhängigkeiten für %s:\n"
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktiv %d leer %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(leer)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(leer)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makro %%%s hat keinen terminierten Hauptteil\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makro %%%s hat nicht terminierte Optionen\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makro %%%s hat einen ungültigen Namen (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makro %%%s hat einen nicht terminierten Hauptteil\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makro %%%s hat keine terminierten Optionen\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Makro %%%s hat einen leeren Hauptteil\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "Makro %%%s benötigt Leerzeichen vor dem Hauptteil\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Makro %%%s konnte nicht erweitert werden\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Makro %%%s hat einen ungültigen Namen (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) wurde nicht unter Level %d benutzt\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
+"Makro %%%s ist definiert, wird aber nicht innerhalb des Bereichs verwendet\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Unbekannte Option %c in %s (%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
+"Zu viele Rekursionsebenen bei der Expansion des Makros. Dies wird "
+"wahrscheinlich durch eine rekursive Makro-Deklaration verursacht.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Nicht terminiertes %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
-msgstr "Ein %% ist gefolgt von einem nicht parsbaren Makro\n"
+msgstr "Auf %% folgt ein nicht auswertbares Makro\n"
+
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "Laden der Makro-Datei %s ist fehlgeschlagen"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktiv %d leer %d\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "Fehler beim Erstellen der temporären Datei %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Datei %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Datei %s ist kleiner als %u Byte\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "Erzeugen des Verzeichnises fehlgeschlagen"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[kein]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(kein Fehler)"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "Schwerwiegender Fehler: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "Fehler: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "Warnung: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
-msgstr "Ungültige Syntax in lua-Scriptlet: %s\n"
+msgstr "Ungültige Syntax in Lua-Scriptlet: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
-msgstr "Ungültige Syntax in lua-Script: %s\n"
+msgstr "Ungültige Syntax in Lua-Script: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
-msgstr "lua-Script fehlgeschlagen: %s\n"
+msgstr "Lua-Script fehlgeschlagen: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
-msgstr "Ungültige Syntax in lua-Datei: %s\n"
+msgstr "Ungültige Syntax in Lua-Datei: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
-msgstr "lua hook fehlgeschlagen: %s\n"
-
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(kein Fehler)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "Schwerwiegender Fehler: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "Fehler: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "Warnung: "
+msgstr "Lua-Hook fehlgeschlagen: %s\n"
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "Speicherbelegung (%u Byte) lieferte NULL zurück.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, Schlüssel-ID %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
+msgstr "(keine)"
+
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite fehlgeschlagen: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: »fread« fehlgeschlagen: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush fehlgeschlagen: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
-msgstr ""
+msgstr "Nicht unterstützte PGP-Signatur\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
-msgstr ""
+msgstr "Nicht unterstützter PGP-Prüfsummenalgorithmus %u\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgstr "Nicht unterstützter PGP-Algorithmus %u für öffentlichen Schlüssel\n"
+
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "%s konnte nicht ausgeführt werden: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "Fopen fehlgeschlagen\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "In die Pipe konnte nicht geschrieben werden\n"
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Konnte kein Pipe zum Signieren erzeugen: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr "Aus Datei %s konnte nicht gelesen werden: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
-msgstr "GPG fehlgeschlagen (%d)\n"
+msgstr "Ausführung von GPG fehlgeschlagen (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "GPG konnte die Signatur nicht schreiben\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
-msgstr "Konnte die Signatur nicht lesen\n"
+msgstr "Signatur konnte nicht gelesen werden\n"
+
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMk Temp fehlgeschlagen\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead fehlgeschlagen: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature fehlgeschlagen: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: headerRead fehlgeschlagen: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "RPM-Pakete der Version 3 können nicht signiert werden\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s enthält bereits eine identische Signatur, wird übersprungen\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature fehlgeschlagen: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead fehlgeschlagen: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
+msgstr "Ersetzen von %s fehlgeschlagen: %s\n"
+
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: Lesen der Paket-Liste fehlgeschlagen: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "Keine Überprüfung der Header- und Nutzdaten-Signatur"
diff --git a/po/el.po b/po/el.po
index 4eb643396..76d02aed3 100644
--- a/po/el.po
+++ b/po/el.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Duke_Dux <duke.dux@gmail.com>, 2011.
+# Duke_Dux <duke.dux@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/rpm/language/el/)\n"
+"Language-Team: Greek (http://www.transifex.com/rpm-team/rpm/language/el/)\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -46,487 +46,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "δημιουÏγία μίας σωλήνωσης για --αποτυχία σωλήνωσης: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "αποτυχία εκτέλεσης\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "το ÏŒÏισμα αυτό δεν είναι ένα RPM πακέτο\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "σφάλμα κατά την ανάγνωση της κεφαλίδας από το πακέτο\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "δεν γίνεται το επανάνοιγμα του ωφέλιμου φόÏτου: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Επιλογές επαλήθευσης (με -V ή --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Επιλογές Εγκατάστασης/Αναβάθμισης/ΔιαγÏαφής:"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Κοινές επιλογές για όλα τα εκτελέσιμα και τις λειτουÏγίες rpm:"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
+msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:125
-msgid "unexpected query flags"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:161
+#: rpmbuild.c:167 rpmbuild.c:208
msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
msgstr ""
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
msgstr ""
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:216
+msgid "remove build tree when done"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:220
+msgid "debug file state machine"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
msgstr ""
-#: rpmqv.c:256
-msgid "no packages given for erase"
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmqv.c:314
-msgid "no arguments given for verify"
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmbuild.c:99
+#: rpmbuild.c:234
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:239
+msgid "remove sources when done"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:241
+msgid "remove specfile when done"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
+msgstr ""
+
+#: rpmbuild.c:245
+msgid "override target platform"
+msgstr ""
+
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Κοινές επιλογές για όλα τα εκτελέσιμα και τις λειτουÏγίες rpm:"
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr ""
+
+#: rpmbuild.c:300
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:363
+#, c-format
+msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:401
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
+#: rpmbuild.c:479
+#, c-format
+msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:151
+#: rpmbuild.c:556
#, c-format
-msgid "verify %files section from <tarball>"
+msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
+#: rpmbuild.c:564
+#, c-format
+msgid "Building for target %s\n"
msgstr ""
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
msgstr ""
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
+#: rpmdb.c:21
+msgid "initialize database"
msgstr ""
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
+#: rpmdb.c:26
+msgid "verify database files"
msgstr ""
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmdb.c:28
+msgid "export database to stdout header list"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmdb.c:31
+msgid "import database from stdin header list"
msgstr ""
-#: rpmbuild.c:173
-msgid "remove build tree when done"
+#: rpmdb.c:38
+msgid "Database options:"
msgstr ""
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
msgstr ""
-#: rpmbuild.c:177
-msgid "debug file state machine"
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
msgstr ""
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
+#: rpmkeys.c:22
+msgid "import an armored public key"
msgstr ""
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
msgstr ""
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
+#: rpmkeys.c:36
+msgid "Keyring options:"
msgstr ""
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
msgstr ""
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
msgstr ""
-#: rpmbuild.c:194
-msgid "remove sources when done"
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
msgstr ""
-#: rpmbuild.c:196
-msgid "remove specfile when done"
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Επιλογές επαλήθευσης (με -V ή --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Επιλογές Εγκατάστασης/Αναβάθμισης/ΔιαγÏαφής:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
msgstr ""
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
+#: rpmqv.c:126
+msgid "unexpected query flags"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
+#: rpmqv.c:129
+msgid "unexpected query format"
msgstr ""
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+#: rpmqv.c:132
+msgid "unexpected query source"
msgstr ""
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
msgstr ""
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
msgstr ""
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
msgstr ""
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
msgstr ""
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
msgstr ""
-#: rpmdb.c:22
-msgid "initialize database"
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
msgstr ""
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
msgstr ""
-#: rpmdb.c:27
-msgid "verify database files"
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
msgstr ""
-#: rpmdb.c:33
-msgid "Database options:"
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
msgstr ""
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
msgstr ""
-#: rpmkeys.c:26
-msgid "import an armored public key"
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
msgstr ""
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:40
-msgid "Keyring options:"
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr ""
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr ""
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr ""
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr ""
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -535,473 +597,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr ""
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2039 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
+msgid "Bad file: %s: %s\n"
msgstr ""
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:434
#, c-format
-msgid "Could not open %s: %s\n"
+msgid "Failed to read %jd bytes in file %s: %s\n"
msgstr ""
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:468
+#: build/pack.c:453
#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:479
+#: build/pack.c:520
#, c-format
-msgid "Unable to read header from %s: %s\n"
+msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:489
+#: build/pack.c:527
#, c-format
-msgid "Unable to write header to %s: %s\n"
+msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1009,341 +1144,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1414,450 +1618,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Το μέγεθος της κεφαλίδας είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Άγνωστος Ï„Ïπος αÏχείου"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "ΕσωτεÏικό σφάλμα"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr ""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr ""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1878,527 +2193,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr ""
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr ""
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr ""
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
-#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:128
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
msgstr ""
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2423,212 +2787,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Το μέγεθος της κεφαλίδας είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Άγνωστος Ï„Ïπος αÏχείου"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "ΕσωτεÏικό σφάλμα"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr ""
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2702,796 +3295,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:268
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s%s"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/transaction.c:1426
-msgid "failed"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:263
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: lib/verify.c:284
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:2250
+#: lib/verify.c:448
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:2358
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2448
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:551
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:557
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:562
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:566
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:607
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:637
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/macro.c:1182
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/macro.c:1197
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/macro.c:1578
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: plugins/sepolicy.c:218
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+msgid "File %s: %s\n"
msgstr ""
-#: plugins/sepolicy.c:231
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+#: rpmio/rpmlog.c:194
+msgid "error: "
msgstr ""
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: rpmio/macro.c:185
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: rpmio/macro.c:323
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/macro.c:364
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%3d<%*s(empty)\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: rpmio/macro.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:208
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:221
#, c-format
-msgid "File %s: %s\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:270
#, c-format
-msgid "File %s is smaller than %u bytes\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: sign/rpmgensig.c:302
#, c-format
-msgid "invalid syntax in lua script: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: sign/rpmgensig.c:312
#, c-format
-msgid "lua script failed: %s\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/eo.po b/po/eo.po
index c8ba14a6e..b7deda7a2 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Keith Bowes <zooplah@gmail.com>, 2013.
-# Keith <zooplah@gmail.com>, 2011.
+# Keith Bowes <zooplah@gmail.com>, 2011,2013
+# Keith Bowes <zooplah@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2013-01-13 06:09+0000\n"
-"Last-Translator: Keith Bowes <zooplah@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.com/projects/p/rpm/language/"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Esperanto (http://www.transifex.com/rpm-team/rpm/language/"
"eo/)\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
@@ -48,500 +48,565 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "krei pipon por --pipe malsukcesis: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "plenumo malsukcesis\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
-msgstr "parametro ne estas RPM-pako\n"
+msgstr "parametro ne estas RPM-pakaĵo\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
-msgstr "eraro dum legi kapon de pako\n"
+msgstr "eraro dum legi kapon de pakaĵo\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "ne eblas remalfermi ÅarÄon: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Elektoj por mendu/konstatu elektitan pakon:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Mendantaj elektoj (kun -q aÅ­ --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Konstatantaj elektoj (kun -V aÅ­ --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Elektoj por instali/promocii/forigi:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Kutimaj elektoj por ĉiuj rpm-aj reÄimoj kaj programoj:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "unu tipon de mendu/konstatu oni rajtas fari je fojo"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "neatenditaj mendo-flagoj"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "neatendita mendo-aranÄo"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "neatendita mendo-fonto"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "nur unu ĉefa reÄimo povas esti specifita"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "nur instalado kaj promociado povas esti devigita"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "dosieroj nur povas esti relokitaj dum pako-instalado"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "--prefix malkongruas kun --relocate kaj - -excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate kaj --excludepath povas esti uzata nur dum instali novajn pakojn"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix povas esti uzata nur dum instali novajn pakojn"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "parametroj de --prefix devas komenciÄi per /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr "--hash (-h) nur eblas dum pakaĵa instalado aŭ forigado"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr "--percent nur eblas dum pakaĵa instalado aŭ forigado"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "oni povas specifi la parametron --replacepkgs nur dum pako-instalado"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "oni povas specifi la parametron --excludedocs nur dum pako-instalado"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "oni povas specifi la parametron --includedocs nur dum pako-instalado"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "oni ne rajtas kune uzi la parametrojn --excludedocs kaj --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "oni povas specifi la parametron --ignorearch nur dum pako-instalado"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "oni povas specifi la parametron --ignoreos nur dum pako-instalado"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "oni povas specifi la parametron --ignoresize nur dum pako-instalado"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "oni povas specifi la parametron --hash (-h) nur dum pako-forviÅado"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "oni povas specifi la parametron --allfiles nur dum pako-instalado"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"oni povas specifi la parametron --justdb nur dum instalado kaj forviÅado de "
-"pako"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"oni povas uzi parametrojn por malaktivigi programetojn nur dum instalado kaj "
-"forviÅado de pako"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"oni povas uzi parametrojn por malaktivigi instigilojn nur dum instalado kaj "
-"forviÅado de pako"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"oni povas specifi la parametron --nodeps nur dum instalado, konstatado kaj "
-"forviÅado de pako"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-"oni povas specifi la parametron --hash (-h) nur dum instalado kaj forviÅado "
-"de pako"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "argumentoj de --root (-r) devas komenciÄi per /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "neniuj pakoj donitaj por forigi"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "neniuj pakoj donitaj por instali"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "neniuj parametroj donitaj por mendi"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "neniuj argumentoj donitaj por konstati"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot jam specifita, %s ignorata\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "munti per %prep (elpaki fontotekstojn kaj fliki) laÅ­ <spec-dosiero>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<spec-dosiero>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "munti per %build (%prep, tiam traduki) laÅ­ <spec-dosiero>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "munti per %install (%prep, %build, tiam instali) laÅ­ <spec-dosiero>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "konstati la sekcion %file laÅ­ <spec-dosiero>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
-msgstr "munti fontotekstan kaj plenumeblan pakojn laÅ­ <spec-dosiero>"
+msgstr "munti fontotekstan kaj plenumeblan pakaĵojn laŭ <spec-dosiero>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
-msgstr "munti nur plenumeblan pakon laÅ­ <spec-dosiero>"
+msgstr "munti nur plenumeblan pakaĵon laŭ <spec-dosiero>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
-msgstr "munti nur fontotekstan pakon laÅ­ <spec-dosiero>"
+msgstr "munti nur fontotekstan pakaĵon laŭ <spec-dosiero>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+"muntado per %prep (malpaki fontotekstojn kaj apliki flikaĵojn) laŭ "
+"<fontoteksta pakaĵo>"
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<fontoteksta pakaĵo>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr "munti per %build (%prep, poste traduki) laŭ <fontoteskta pakaĵo>"
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"munti per %install (%prep, %build, tiam instali) laŭ <fontoteksta pakaĵo>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr "konstati sekcion %files laŭ <fontoteksta pakaĵo>"
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr "munti fontotekstajn kaj plenumeblajn pakaĵojn laŭ <fontoteksta pakaĵo>"
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "munti nur plenumeblan pakaĵon laŭ <fontoteksta pakaĵo>"
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr "munti nur fontotekstan pakaĵon laŭ <fontoteksta pakaĵo>"
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "munti per %prep (elpaki fontotekstojn kaj fliki) laÅ­ <tar-dosiero>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tar-dosiero>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "munti per %build (%prep, tiam traduki) laÅ­ <tar-dosiero>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "munti per %install (%prep, %build, tiam instali) laÅ­ <tar-dosiero>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "konstati sekcion %files laÅ­ <tar-dosiero>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
-msgstr "munti fontotekstan kaj plenumeblan pakojn laÅ­ <tar-dosiero>"
+msgstr "munti fontotekstan kaj plenumeblan pakaĵojn laŭ <tar-dosiero>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
-msgstr "munti nur plenumeblan pakon laÅ­ <tar-dosiero>"
+msgstr "munti nur plenumeblan pakaĵon laŭ <tar-dosiero>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
-msgstr "munti nur fontotekstan pakon laÅ­ <tar-dosiero>"
+msgstr "munti nur fontotekstan pakaĵon laŭ <tar-dosiero>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
-msgstr "munti plenumeblan pakon laÅ­ <fontoteksta pako>"
-
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<fontoteksta pako>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"munti per %install (%prep, %build, tiam instali) laÅ­ <fontoteksta pako>"
+msgstr "munti plenumeblan pakaĵon laŭ <fontoteksta pakaĵo>"
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "superregi muntan radikon"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "plenumi muntaĵon en la nuna dosierujo"
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "forigi muntan arbon post finita"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
-msgstr "ignoru la direktivojn ExcludeArch: el spec-dosiero"
+msgstr "ignori la direktivojn ExcludeArch: el spec-dosiero"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "senerarigi dosierstatan maÅinon"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
-msgstr "ne plenumigu iun ajn etapon de la muntado"
+msgstr "ne plenumigi iun ajn etapon de la muntado"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
-msgstr "ne konstatu muntaĵo-dependaĵojn"
+msgstr "ne konstati muntaĵo-dependaĵojn"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
-msgstr "generu pako-kapo(j)n kongrua(j)n kun (malmoderna) pakado de rpm 3"
+msgstr "generi pakaĵo-kapo(j)n kongrua(j)n kun (malmoderna) pakado de rpm 3"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr "ne plenumigi la etapon %clean por la muntado"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "Ne plenumigu stadion %prep de la munto"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr "ne plenumigi la etapon %check por la muntado"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
-msgstr "ne akceptu tradukojn el spec-dosiero"
+msgstr "ne akcepti tradukojn el spec-dosiero"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "forigi fontotekstojn post kiam finita"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "forigi spec-dosieron post kiam finita"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "preterlasi rekte al specifita etapo (nur por c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "superregi celan platformon"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-"Multaj elektoj je [ <spec-dosiero> | <tar-dosiero> | <fontoteksta pako> ]:"
+"Multaj elektoj je [ <spec-dosiero> | <tar-dosiero> | <fontoteksta pakaĵo> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Kutimaj elektoj por ĉiuj rpm-aj reÄimoj kaj programoj:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Malsukcesintaj muntaj dependaĵoj:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Ne eblas malfermi spec-dosieron %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Malsukcesis malfermi tar-tubon: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "Trovis pli ol unu spec-dosieron en %s\n"
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Malsukcesis legi spec-dosieron je %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Malsukcesis alinomi %s al %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "malsukcesis stat-i: %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Dosiero %s ne estas regula dosiero.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Dosiero %s ne aspektas kiel spec-dosiero.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Platformoj por kiu munti: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Muntanta por celon %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "argumentoj de --root (-r) devas komenciÄi per /"
+
+#: rpmdb.c:21
msgid "initialize database"
-msgstr "iniciatu datumbazon"
+msgstr "iniciati datumbazon"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
-msgstr "remuntu listojn inversigitajn de la datumbazo el instalitaj pako-kapoj"
+msgstr ""
+"remunti listojn inversigitajn de la datumbazo el instalitaj pakaĵo-kapoj"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
-msgstr "konstatu datumbazajn dosierojn"
+msgstr "konstati datumbazajn dosierojn"
+
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "eksporta datumbazo al ĉefeliga ĉapolisto"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "importa datumbazo el ĉefeniga ĉapolisto"
-#: rpmdb.c:33
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Datumbazo-elektoj:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "nur unu ĉefa reÄimo povas esti specifita"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
-msgstr "konstatu pako-pretendo(j)n"
+msgstr "konstati pakaĵo-pretendo(j)n"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
-msgstr "importu Åirmitan publikan Ålosilon"
+msgstr "importi Åirmitan publikan Ålosilon"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
-msgstr "ne importu, sed diru al Äi se Äi funkcius aÅ­ ne"
+msgstr "ne importi, sed diri al Äi se Äi funkcius aÅ­ ne"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "listigi Ålosilojn el RPM-Ålosilaro"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Åœlosilaro-elektoj:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "neniuj parametroj donitaj"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Elektoj por mendi/konstati elektitan pakaĵon:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Mendantaj elektoj (kun -q aÅ­ --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Konstatantaj elektoj (kun -V aÅ­ --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Elektoj por instali/promocii/forigi:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "unu tipon de mendo/konstato oni rajtas fari je fojo"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "neatenditaj mendo-flagoj"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "neatendita mendo-aranÄo"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "neatendita mendo-fonto"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "nur instalado kaj promociado povas esti devigita"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "dosieroj nur povas esti relokitaj dum pakaĵo-instalado"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix malkongruas kun --relocate kaj - -excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate kaj --excludepath povas esti uzata nur dum instali novajn pakaĵojn"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix povas esti uzata nur dum instali novajn pakaĵojn"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "parametroj de --prefix devas komenciÄi per /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) nur eblas dum pakaĵa instalado aŭ forigado"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent nur eblas dum pakaĵa instalado aŭ forigado"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "oni povas specifi la parametron --replacepkgs nur dum pakaĵo-instalado"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "oni povas specifi la parametron --excludedocs nur dum pakaĵo-instalado"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "oni povas specifi la parametron --includedocs nur dum pakaĵo-instalado"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "oni ne rajtas kune uzi la parametrojn --excludedocs kaj --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "oni povas specifi la parametron --ignorearch nur dum pakaĵo-instalado"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "oni povas specifi la parametron --ignoreos nur dum pakaĵo-instalado"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "oni povas specifi la parametron --ignoresize nur dum pakaĵo-instalado"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "oni povas specifi la parametron --hash (-h) nur dum pakaĵo-forviÅado"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "oni povas specifi la parametron --allfiles nur dum pakaĵo-instalado"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"oni povas specifi la parametron --justdb nur dum instalado kaj forviÅado de "
+"pakaĵo"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"oni povas uzi parametrojn por malaktivigi skriptojn nur dum instalado kaj "
+"forviÅado de pakaĵo"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"oni povas uzi parametrojn por malaktivigi instigilojn nur dum instalado kaj "
+"forviÅado de pakaĵo"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"oni povas specifi la parametron --nodeps nur dum instalado, konstatado kaj "
+"forviÅado de pakaĵo"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"oni povas specifi la parametron --hash (-h) nur dum instalado kaj forviÅado "
+"de pakaĵo"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "neniuj pakaĵoj donitaj por forigi"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "neniuj pakaĵoj donitaj por instali"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "neniuj parametroj donitaj por mendi"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "neniuj argumentoj donitaj por konstati"
+
+#: rpmsign.c:30
msgid "sign package(s)"
-msgstr "pretendi pako(j)n"
+msgstr "pretendi pakaĵo(j)n"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
-msgstr "pretendi pako(j)n (identa je --addsign)"
+msgstr "pretendi pakaĵo(j)n (identa je --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
-msgstr "forigi pako-pretendojn"
+msgstr "forigi pakaĵo-pretendojn"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Pretendo-elektojn:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Ne eblas plenumigi: %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Vi devas valorizi \"%%_gpg_name\" en via makro-dosiero\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Enmetu pasfrazon:"
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Pasfrazo bonas.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Kontrolado de pasfrazo malsukcesis aÅ­ GPG-Ålosilo eksvalidiÄis.\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "montri ĉe ordinara eligo spec-dosiero(j)n"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "konstati spec-dosiero(j)n"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
-msgstr "operaciu je dekumaj rpm-oj generitaj de spec (apriora)"
+msgstr "operacii je dekumaj rpm-oj generitaj de spec (apriora)"
+
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "operacii je fontotekstaj rpm-oj generitaj de spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "uzu la jenan mendo-formaton"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Spec-elektoj:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "neniuj parametroj donitaj por analizi"
@@ -550,32 +615,37 @@ msgstr "neniuj parametroj donitaj por analizi"
msgid "Unable to open temp file: %s\n"
msgstr "Ne eblas malfermi provizoran dosieron: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Ne eblas malfermi fluon: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Plenumiganta (%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Plenumigo de %s malsukcesis (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
-msgstr "Eraro dum plenumigi pako-programeto(j)n %s (%s)\n"
+msgstr "Eraro dum plenumigi pakaĵo-skripteton %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Misa elirstato el %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -585,235 +655,315 @@ msgstr ""
"\n"
"Muntaj eraroj ĉe RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "sintaksa eraro dum analizi ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "sintaksa eraro dum analizi &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "Sintaksa eraro dum analizi ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "analiza eraro ĉe esprimo\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "( sen )\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- nur por nobroj\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! nur por nombroj\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "tipoj devas esti kongruaj\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / ne por ĉenoj\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- no por ĉenoj\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& kaj || ne por ĉenoj\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "sintaksa eraro en esprimo\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Manka '(' en %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Manka ')' en %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Nevalida ero %s: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Manka %s en %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Blankospacoj ne povas sekvi: %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "FuÅa sintakso: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "FuÅa reÄimo-specifo: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "FuÅa dosierujo-specifo: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Neordinara longo de lokaĵaro: \"%s\" en %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Duplika lokaĵaro %s en %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Nevalida kapablo: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Dosiero-kapabla rego ne integra\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Dosiero devas komenciÄi per \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Nekonata algoritmo %u por dosieraj resumoj, uzanta je MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Dosiero listigita dufoje: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "legado de mola ligilo %s malsukcesis: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
-msgstr "Mola ligilo almontras al BuildRoot: %s -> %s\n"
+msgstr "Mola ligilo almontriÄas al BuildRoot: %s -> %s\n"
+
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "Vojo estas ekster buildroot: %s\n"
-#: build/files.c:1345
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Dosierujo ne trovita: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Dosiero ne trovita: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Ne dosierujo: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: ne eblas Åargi nekonatan etikedon (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: legi publikan Ålosilon malsukcesis.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: ne Åirmita publika Ålosilo.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: malsukcesis kodiÄi\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "malsukcesis krei dosierujon"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Dosiero devas havi antaÅ­an \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "Amaso %%dev ne permesata:%s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Dosierujo ne trovita laÅ­ amaso: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Dosiero ne trovita laÅ­ amaso: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Ne eblis malfermi %%files file %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "linio: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "Vaka dosiero %%files %s\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "eraro dum legi dosieron %%files %s: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr "nepermesita _docdir_fmt %s: %s\n"
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Dosiero ne trovita laÅ­ amaso: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr "Ne eblas kunmiksi specialan %s-on kun aliaj formoj: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr "Pli ol unu dosiero en linio: %s\n"
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "FuÅa dosiero: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "FuÅa estro/grupo: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Kontrolanta ne pakita(j)n dosiero(j)n: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -822,554 +972,613 @@ msgstr ""
"Insalita(j) (sed ne pakita(j) dosiero(j) trovita(j):\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Procedanta dosierojn: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
"Platformo (%d) de la plenumebla dosiero ne kongruas la pakaĵan platformon "
"(%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
-msgstr "Platformo-dependaj dosieroj en platformo-sendependa pako\n"
+msgstr "Platformo-dependaj dosieroj en platformo-sendependa pakaĵo\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr "kreado de arkivo malsukcesis ĉe dosiero %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr "kreado de arkivo malsukcesis: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Ne eblis malfermi dosieron %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: linio: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Ne eblis kanonigi gastiganto-nomon: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Ne eblas skribi ÅarÄon al %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Ne eblas legi ÅarÄon el %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Ne eblis kanonigi gastiganto-nomon: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Nekonata kunpremo-tipo de ÅarÄo: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Ne eblas krei regionon por neÅanÄebla kapo.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Ne eblas malfermi provizoran dosieron.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Ne eblis serĉi en dosiero %s: %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Ne eblas skribi provizoran kapon\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Malsukcesis legi konduto-dosieron: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "FuÅa CSA-datumo\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Ne eblas reÅargi pretendo-kapon.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Ne eblas malfermi: %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
-msgstr "Ne eblas skribi pakon: %s\n"
-
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Ne eblas malfermi celon %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Ne eblas legi kapon el %s: %s\n"
+msgstr "Ne eblas skribi pakaĵon: %s\n"
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Ne eblas skribi kapon al %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Skribis: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
-msgstr "PlenumiÄanta \"%s\":\n"
+msgstr "Plenumigo de \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Plenumigo de \"%s\" malsukcesis.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
-msgstr "Pako-controlo \"%s\" malsukcesis.\n"
+msgstr "Pakaĵo-kontrolo \"%s\" malsukcesis.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
-msgstr "Ne eblas generi eligan dosiernomon por pako %s: %s\n"
+msgstr "Ne eblas generi eligan dosiernomon por pakaĵo %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "ne eblas krei %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "line %d: dua %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr "fuÅa dato en %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "eroj %%changelog devas komenciÄi per *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "nefinita ero %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "fuÅa dato en %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog ne en malsupreniranta historia ordigo\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "manka nomo en %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "neniu priskribo en %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "linio %d: dua %%changelog\n"
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "linio %d: Eraro dum analizo de %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "linio %d: FuÅa elekto %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "linio %d: Tro da nomoj: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "linio %d: Pako ne ekzistas: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "linio %d: dua priskribo\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "linio %d: Eraro dum analizo de %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "linio %d: Eraro dum analizo de %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Eraro dum analizo de etikeda kampo: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "linio %d: FuÅa numero: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "linio %d: FuÅa numero no%s: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "linio %d: FuÅa numero %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d difinita plurfoje\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "ElÅutanta el %s al %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Ne eblis elÅuti: %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Platformo estas ne malpermesata: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Platformo estas ne inkluzivita: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "Operaciumo estas ekskluzivita: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "Operaciumo estas ne inkluzivita: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
-msgstr "kampo %s devas ĉeesti en pako: %s\n"
+msgstr "kampo %s devas ĉeesti en pakaĵo: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
-msgstr "Duplikaj eroj %s en pako: %s\n"
+msgstr "Duplikaj eroj %s en pakaĵo: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Ne eblas malfermi piktogramon %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Ne eblas legi piktogramon %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Nekonata piktogramo-tipo: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "linio %d: Etikedo devas havi nur unu eron: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "linio %d: Nevalida signo '%c' en: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr "linio %d: %s en: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "linio %d: Nevalida signo en: %s\n"
+msgid "%s in: %s\n"
+msgstr "%s en: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "linio %d: Nevalida sinsekvo \"..\" en: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "Nevalida signo '%c' (0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "Vevalida sinsekvo \"..\""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "linio %d: Misformita etikedo: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "linio %d: Vaka etikedo: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "linio %d: Oni ne rajtas fini prefikson kun \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "linio %d: Docdir devas komenciÄi per '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "linio %d: Epoko-kampo devas esti sensignuma: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "linio %d: FuÅa %s: kvalifikiloj: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "linio %d: FuÅa aranÄo de BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr "linio %d: Nur subpakoj noarch estas permesataj: %s\n"
+msgstr "linio %d: Nur subpakaĵoj noarch estas permesataj: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Interna eraro: FuÅa etikedo %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "linio %d: %s estas malfavorita: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
-msgstr "FuÅa pako-specifo: %s\n"
+msgstr "FuÅa pakaĵo-specifo: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Pako jam ekzistas: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "linio %d: Nekonata etikedo: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} devas ne vaki\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "ne eblas, ke %%{buildroot} estu \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "FuÅa fonto: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Neniu flikaĵa numero %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch sen responda etikedo \"Patch:\"\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Neniu fonta numero %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Neniu etikedo \"Source:\" en la spec-dosiero\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Eraro dum analizo de %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "linio %d: FuÅa elekto ĉe %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "linio %d: FuÅa elekto ĉe %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Nevalida flikaĵo-numero %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "linio %d: dua %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr "Dependaĵo-eroj devas komenciÄi per nombro, litero, '_' aÅ­ '/'"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "Dosiernomo kun eldono ne permesata"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Eldono necesas"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "Neniuj riĉaj dependaĵoj permesataj por tiu tipo"
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "nevalida dependaĵo"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Eldono necesas"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "Nur absolutaj vojoj estas permesataj en dosieraj instigiloj"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+"Instigilo plenumata de la sama pakaĵo jam estas difinita en spec-dosiero"
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "linio %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "linio %d: instigiloj devas enhavi: --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "linio %d: Eraro dum analizo de %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
-msgstr "linio %d: ena programeto devas finiÄi per '>': %s\n"
+msgstr "linio %d: interna skripto devas finiÄi per '>': %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
-msgstr "linio %d: programeto devas komenciÄi per '/': %s\n"
+msgstr "linio %d: skripto devas komenciÄi per '/': %s\n"
+
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+"linio %d: Prioritatoj estas permesataj nur por dosieraj instigiloj: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "linio %d: Dua %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
-msgstr "linio %d: ne rekonas enan programeton: %s\n"
+msgstr "linio %d: ne rekonas internan skripton: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
"lino %d: interpretilaj parametroj ne estas permesataj en instigiloj: %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "linio %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr "Makroo etendita en komento en linio %d: %s\n"
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ne eblas malfermi: %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s: %d: Parametroj anticipitaj por %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr "linio %d: Nefermita %%if\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "linio %d: nefinita makroo aÅ­ fuÅa linio-daÅ­rigo\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: fuÅa kondiĉo ĉe %%if\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d %%else sen %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endif sen %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr "%s:%d: misformita frazo %%include\n"
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "kodoprezento %s ne regata de sistemo\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Pakaĵo %s: nevalida kodoprezento %s en %s: %s - %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Neniuj kongruaj platformoj trovitaj por muntaĵo\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
-msgstr "Pako ne enhavas: %%description: %s\n"
+msgstr "Pakaĵo ne enhavas: %%description: %s\n"
#: build/policies.c:87
#, c-format
@@ -1439,450 +1648,564 @@ msgstr "Tro da parametroj en linio: %s\n"
msgid "Processing policies: %s\n"
msgstr "Traktanta kondutojn: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignoris nevalidan regulesprimon %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Ne eblis krei tubon por %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Ne eblis plenumigi: %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Ne eblis forki: %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s malsukcesis: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "malsukcesis skribi ĉiujn datumojn al %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Konvertado de %s al longa entjero malsukcesis.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Vaka dosiero-klasifikilo\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Neniuj dosieraj atributoj elektitaj\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) malsukcesis: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load malsukcesis: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Rekono de dosiero \"%s\" malsukcesis: reÄimo %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Serĉi: %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Malsukcesis trovi: %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "mendo de spec-dosiero %s malsukcesis, ne eblas analizi\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(eraro 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "eraro %s(%d) el %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "FuÅa magiaĵo"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "eraro %s(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "FuÅa kapo"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "nekonata elekto en db: \"%s\" ignorita.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Kapo-grando tro granda"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s haves nevalidan nombran valoron, preterlasita\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr "Dosiero tro granda por arkivo"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr ""
+"%s havas tro grandan aÅ­ mangrandan longentjeran valoron, preterlasita\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Nekonata dosiertipo"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
+"%s havas tro grandan aÅ­ malgrandan mallongentjeran valoron, preterlasita\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Manka(j) malmola(j) ligilo(j)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "ne eblas atingi Åloson %s ĉe %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Malkongrueco ĉe resumo"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "kunuzata"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Interna eraro"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "ekskluziva"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Arkivo-dosiero ne en kapo"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "nevalida indeksa tipo %x ĉe %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " malsukcesis - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "eraro(%d) dum ricevi rikordojn \"%s\" el indekso %s: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "eraro(%d) konservi rikordon \"%s\" en %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "eraro(%d) dum forigi rikordon \"%s\" el %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "eraro(%d) aldonanta en kapo rikordon #%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "eraro(%d) foriganta el kapo rikordon #%d\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "eraro(%d) dum generi novan okazon de pakaĵo\n"
-#: lib/depends.c:68
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s estas Pera RPM kaj ne estas rekte instalebla\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
-msgstr "Ne komprenata ÅarÄo (%s) en pako %s\n"
+msgstr "Ne komprenata ÅarÄo (%s) en pakaĵo %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
-msgstr "pako %s jam aldoniÄis, preterlasanta %s\n"
+msgstr "pakaĵo %s jam aldoniÄis, preterlasanta %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
-msgstr "pako %s jam aldoniÄis, anstataÅ­igante per %s\n"
+msgstr "pakaĵo %s jam aldoniÄis, anstataÅ­igante per %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(ne amaso)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(ne cifero)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(ne ĉeno)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(nevalida tipo)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%Y-%d-%b (%a)"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(ne base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(nevalida tipo)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(ne amaso)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(nevalida XML-tipo)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(ne OpenPGP-pretendo)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "Nevalida dato %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normala"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "anstataÅ­ita"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "ne instalita"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "rete kunuzita"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "malÄusta koloro"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "manka"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(nekonata)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(ne ĉeno)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "uzanto %s ne ekzistas - mi uzos la ĉefuzanton\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "grupo %s ne ekzistas - uzos la ĉefgrupon\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s konservita kiel %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s kreita kiel %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr "%s %s: forigo malsukcesis: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr "dosierujo"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr "dosiero"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "preterlasanta %sn %s kun nekonstatebla pretendo\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "preterlanata je %s kun nekonstatebla pretendo\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "hdr-ÅarÄo: FUÅœA"
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "etikedo[%d]: FUŜä, etikedo %d tipo %d malsameco %d numero %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr "regiona etikedo: FUÅœA, etikedo %d tipo %d deÅovo %d nombro %d"
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "nu SHA1: FUÅœA, ne deksesuma\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr "regiona deÅovo: FUÅœA, etikedo %d tipo %d deÅovo %d nombro %d"
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "nu RSA: FUÅœA, ne plenumebla\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr "regiona vosto: FUÅœA, etikedo %d tipo %d deÅovo %d nombro %d"
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "nu DSA: FUÅœA, ne plenumebla\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "amaso-grando (%d): FUÅœA, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
-msgstr "regiona etikedo: FUÅœA, etikedo %d tipo %d malsameco %d numero %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr "hdr-grando (%d): FUÅœA, legado donis valoron %d"
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "hdr-magio: FUÅœA"
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "regiona malsameco: FUÅœA, etikedo %d tipo %d malsameco %d numero %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr "hdr-etikedoj: FUÅœA, nombro da etikedoj(%d) ekster skalo"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "regiona antaŭaĵo: FUŜA, etikedo %d tipo %d malsameco %d numero %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr "hdr-datumoj: FUÅœAJ, nombro da bajto(%d) ekster skalo"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "regiona grandeco, FUÅœA, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr "hdr-maso(%zd): FUÅœA, legado donis la valoron %d"
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "kapo-grando(%d), FUÅœA, lego donis la valoron %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "suspira pad(%zd): FUÅœA, legis %zd bajtojn"
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "kapo-magiaĵo: FUŜA\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "kapo-etikedoj: FUÅœA, nombro da etikedoj (%d) ekster skalo\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr "maso-grando (%d): FUÅœA, 8 + 16 * il(%d) + dl(%d)"
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "nevalida kampa larÄo"
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "kapo-datumoj: FUÅœA, numero da bajtoj(%d) ekster skalo\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "kapo-amaso(%zd): FUÅœA donis la valoron %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "kapo-Åargo: FUÅœA\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "vaka etikeda aranÄo"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignure malsucksis: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "vaka etikeda nomo"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Neniu pretendo havebla\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead malsukcesis: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] anticipita je fino de tabelo"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "neatendita ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "neatendita }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? atendita en esprimo"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ atendita post ? en esprimo"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} atendita en esprimo"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": atendita post subesprimo kun ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ atendita post : en esprimo"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| atendita je la fino de la esprimo"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "tabela iteraciilo uzata kun tabeloj kun diversaj grandoj"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread malsukcesis: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
+"%s: eraro: pli ol unu --pipe specifita (ĉu nekongruaj popt-kromnomoj?)\n"
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
-msgstr "anataÅ­difini MAKROO kun valoro ESPR"
+msgstr "anataÅ­difini MAKROO-on kun valoro ESPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MAKROO ESPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "difini MAKROON kun valoro EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "maldefini MAKROO-on"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MAKROO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
-msgstr "eligu makroan vastiÄon de ESPR"
+msgstr "eligi makroan etendiÄon de ESPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'ESPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
-msgstr "legu <DOSIERON:...> anstataÅ­ apriora(j)n dosiero(j)n"
+msgstr "legi <DOSIERON:...> anstataÅ­ apriora(j)n dosiero(j)n"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<DOSIERO:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "aktivigi neniujn kromprogramojn"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
-msgstr "ne konstatu pako-resumo(j)n"
+msgstr "ne konstati pakaĵo-resumo(j)n"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
-msgstr "ne konstatu datumbazo-kapo(j)n kiam akiritajn"
+msgstr "ne konstati datumbazo-kapo(j)n kiam akiritajn"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
-msgstr "ne konstatu pako-pretendo(j)n"
+msgstr "ne konstati pakaĵo-pretendo(j)n"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
-msgstr "sendu ordinaran eligon al KMD"
+msgstr "sendi ordinaran eligon al KMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "KMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
-msgstr "uzu RADIKON kiel komenco-dosierujon"
+msgstr "uzi RADIKON kiel komenco-dosierujon"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "RADIKO"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
-msgstr "uzu datumbazon en DOSIERUJO"
+msgstr "uzi datumbazon en DOSIERUJO"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "DOSIERUJO"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
-msgstr "elmontru konatajn mendo-etikedojn"
+msgstr "elmontri konatajn mendo-etikedojn"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
-msgstr "elmontru finan agordon de rpmrc kaj makrooj"
+msgstr "elmontri finan agordon de rpmrc kaj makrooj"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
-msgstr "eligu malpli detale"
+msgstr "eligi malpli detale"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
-msgstr "eligu pli detale"
+msgstr "eligi pli detale"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
-msgstr "eligu la eldonon de rpm, kion vi uzas"
+msgstr "eligi la eldonon de rpm, kion vi uzas"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
-msgstr "senerarigu la statmaÅinan dosieron de la ÅarÄo"
+msgstr "senerarigi la statmaÅinan dosieron de la ÅarÄo"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
-msgstr "senarigu rpmio-eneligon"
+msgstr "senarigi rpmio-eneligon"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: elekta tabelo misagordita H%d)\n"
@@ -1903,532 +2226,581 @@ msgstr "relokiÄoj devas enhavi la signon ="
msgid "relocations must have a / following the ="
msgstr "/ devas veni post = en relokiÄoj"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-"instalu ĉiujn dosierojn, eĉ elektoj, kiuj aliokaze eble estus preterlasitaj"
+"instali ĉiujn dosierojn, eĉ elektoj, kiuj aliokaze eble estus preterlasitaj"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-"forigu ĉiujn pakojn, kiuj kongruas al <pako> (ordinare eraro estas generita "
-"se <pako> specifis plurajn pakojn)"
+"forigi ĉiujn pakaĵojn, kiuj kongruas al <pakaĵo> (ordinare eraro estas "
+"generita se <pakaĵo> specifis plurajn pakaĵojn)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
-msgstr "reloku dosierojn en pako, kiu ne estas relokebla"
+msgstr "reloki dosierojn en pakaĵo, kiu ne estas relokebla"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
-msgstr "eligu dependaĵaj spinojn kiel avertojn"
+msgstr "eligi dependaĵaj spinojn kiel avertojn"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
-msgstr "forigu (malinstalu) pakon"
+msgstr "forigi (malinstali) pakaĵon"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
-msgstr "<pako>+"
+msgstr "<pakaĵo>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
-msgstr "ne instalu agordo-dosierojn"
+msgstr "ne instali agordo-dosierojn"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
-msgstr "ne instalu dokumentaron"
+msgstr "ne instali dokumentaron"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
-msgstr "preterlasu dosierojn kun antaÅ­a komponanto <pado>"
+msgstr "preterlasi dosierojn kun antaÅ­a komponanto <pado>"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<pado>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "mallongigo de --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
-msgstr "promociu pako(j)n se jam instalitaj"
+msgstr "promocii pakaĵo(j)n se jam instalitajn"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
-msgstr "<pakodosiero>+"
+msgstr "<pakaĵodosiero>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
-msgstr "eligu kradojn dum pako-instaladon (bona kun -v)"
+msgstr "eligi kradojn dum pakaĵo-instalado (bona kun -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
-msgstr "ne konstatu pako-platformon"
+msgstr "ne konstati pakaĵo-platformon"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
-msgstr "ne konstatu pako-operaciumon"
+msgstr "ne konstati pakaĵo-operaciumon"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
-msgstr "ne kontrolu diskspacon antaÅ­ ol instali"
+msgstr "ne kontroli diskspacon antaÅ­ ol instali"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
-msgstr "instalu dokumentaron"
+msgstr "instali dokumentaron"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr "instalu pako(j)n"
+msgstr "instali pakaĵo(j)n"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
-msgstr "aktualigu la datumbazon, sed ne modifu la dosiersistemon"
+msgstr "aktualigi la datumbazon, sed ne modifi la dosiersistemon"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
-msgstr "ne konstatu pako-dependaĵojn"
+msgstr "ne konstati pakaĵo-dependaĵojn"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
-msgstr "ne konstatu resumojn de dosieroj"
+msgstr "ne konstati resumojn de dosieroj"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
-msgstr "ne konstatu resumojn de dosieroj (malaktuale)"
+msgstr "ne konstati resumojn de dosieroj (malaktuale)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
-msgstr "ne instalu dosiero-sekurecaj kuntekstoj"
+msgstr "ne instali dosiero-sekurecaj kuntekstoj"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
-msgstr "ne reordigu pako-instaladon por kontentigi dependaĵojn"
+msgstr "ne reordigi pakaĵo-instaladon por kontentigi dependaĵojn"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
-msgstr "ne plenumigu pako-programeto(j)n"
+msgstr "ne plenumigi pakaĵo-skripteton"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
-msgstr "ne plenumigu la programetojn %%pre (se ekzistas)"
+msgstr "ne plenumigi la skriptetojn %%pre (se ekzistas)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
-msgstr "ne plenumigu la programetojn %%post (se ekzistas)"
+msgstr "ne plenumigi la skriptetojn %%post (se ekzistas)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
-msgstr "ne plenumigu la programetojn %%preun (se ekzistas)"
+msgstr "ne plenumigi la skriptetojn %%preun (se ekzistas)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
-msgstr "ne plenumigu la programetojn %%postun (se ekzistas)"
+msgstr "ne plenumigi la skriptetojn %%postun (se ekzistas)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "ne plenumigi skripteton %%pretrans (se ekzistas)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "ne plenumigi skripteton %%posttrans (se ekzistas)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
-msgstr "ne plenumigu iu(j)n ajn programeto(j)n okazigita(j)n de ĉi tiu pako"
+msgstr "ne plenumigi iu(j)n ajn skripteto(j)n instigita(j)n de ĉi tiu pakaĵo"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
-msgstr "ne plenumigu programeto(j)n %%triggerprein"
+msgstr "ne plenumigi skripteto(j)n %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
-msgstr "ne plenumigu la programeto(j)n %%triggerin"
+msgstr "ne plenumigi la skripteto(j)n %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
-msgstr "ne plenumigu la programeto(j)n %%triggerun"
+msgstr "ne plenumigi la skripteto(j)n %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
-msgstr "ne plenumigu la programeto(j)n %%triggerpostrun"
+msgstr "ne plenumigi la skripteto(j)n %%triggerpostrun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "ne plenumu ian ajn kolekto-agon"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-"malpromocii al malfreÅa eldono de la pako (--force aÅ­tomate faras tion)"
+"malpromocii al malfreÅa eldono de la pakaĵo (--force aÅ­tomate faras tion)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
-msgstr "eligu elcentojn kiel la pako instaliÄas"
+msgstr "eligi elcentojn kiel la pakaĵo instaliÄas"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
-msgstr "reloku la pakon al <dosierujo>, se relokeblan"
+msgstr "reloki la pakaĵon al <dosierujo>, se relokeblan"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dosiero>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "reloki dosierojn de pado <malnova> al <nova>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<malnova>=<nova>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
-msgstr "ignoru dosierajn konfliktojn inter pakoj"
+msgstr "ignori dosierajn konfliktojn inter pakaĵoj"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
-msgstr "reinstalu se la pako jam ĉeestas"
+msgstr "reinstali se la pakaĵo jam ĉeestas"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
-msgstr "ne instalu; nur montru ĉu Äi funkcius aÅ­ ne"
+msgstr "ne instali; nur montri ĉu Äi funkcius aÅ­ ne"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
-msgstr "promociu pako(j)n"
+msgstr "promocii pakaĵo(j)n"
+
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "reinstali pakaĵo(j)n"
-#: lib/poptQV.c:67
+#: lib/poptQV.c:75
msgid "query/verify all packages"
-msgstr "mendu/konstatu ĉiujn pakojn"
+msgstr "mendi/konstati ĉiujn pakaĵojn"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "reÄimo kontroli konstaton de rpm"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
-msgstr "mendu/konstatu pako(j)n havanta(j) dosieron"
+msgstr "mendi/konstati pakaĵo(j)n havanta(j) dosieron"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
-msgstr "mendu/konstatu pako(j)n en grupo"
+msgstr "mendi/konstati pakaĵo(j)n en grupo"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
-msgstr "mendu/konstatu pako-dosieron"
+msgstr "mendi/konstati pakaĵo-dosieron"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
-msgstr "mendu/konstatu pako(j)n per pako-identigilo"
+msgstr "mendi/konstati pakaĵo(j)n per pakaĵo-identigilo"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
-msgstr "mendu/konstatu pako(j)n per kapo-identigilo"
+msgstr "mendi/konstati pakaĵo(j)n per kapo-identigilo"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm-mendanta reÄimo"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
-msgstr "mendu/konstatu kapo-okazon"
+msgstr "mendi/konstati kapo-okazon"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
-msgstr "mendu/konstatu pako(j)n el instalo-interago"
+msgstr "mendi/konstati pakaĵo(j)n el instalo-interago"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
-msgstr "mendi la pako(j)n okazigitaj de la pako"
+msgstr "mendi la pakaĵo(j)n okazigitaj de la pakaĵo"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm-konstata reÄimo"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
-msgstr "mendu/konstatu la pako(j)n, kiuj postulas dependaĵon"
+msgstr "mendi/konstati la pakaĵo(j)n, kiuj postulas dependaĵon"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
-msgstr "mendu/konstatu la pako(j)n, kiujn havigas dependaĵon"
+msgstr "mendi/konstati la pakaĵo(j)n, kiujn havigas dependaĵon"
+
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "mendi/konstati la pakaĵo(j)n, kiu(j) rekomendas dependaĵon"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "mendi/konstati la pakaĵo(j)n, kiu(j) konsilas dependaĵon"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr "mendi/konstati la pakaĵo(j)n, kiu(j) kompletigas dependaĵon"
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr "mendi/konstati la pakaĵo(j)n, kiu(j) plibonigas dependaĵon"
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
-msgstr "ne kunfandu parametrojn"
+msgstr "ne kunfandi parametrojn"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
-msgstr "ne procedu ne pako-dosierojn kiel manifestojn"
+msgstr "ne procedi ne pakaĵo-dosierojn kiel manifestojn"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
-msgstr "listigu ĉiujn agordo-dosierojn"
+msgstr "listigi ĉiujn agordo-dosierojn"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
-msgstr "listigu ĉiujn dokumento-dosierojn"
+msgstr "listigi ĉiujn dokumento-dosierojn"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "listigu ĉiujn dokumento-dosierojn"
+msgstr "listigu ĉiujn permesilo-dosierojn"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "listigu ĉiujn permesilo-dosierojn"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
-msgstr "Åutu bazajn informojn pri dosieroj"
+msgstr "Åuti bazajn informojn pri dosieroj"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
-msgstr "listigu dosierojn en pako"
+msgstr "listigi dosierojn en pakaĵo"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
-msgstr "preterlasu %%fantomo-dosierojn"
+msgstr "preterlasi %%ghost-dosierojn"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "preterlasi %%ghost-dosierojn"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "elmontri la statojn de la listigitaj dosieroj"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
-msgstr "ne konstatu la grandon de la dosieroj"
+msgstr "ne konstati la grandon de la dosieroj"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
-msgstr "ne konstatu ligilajn padojn de dosieroj"
+msgstr "ne konstati ligilajn padojn de dosieroj"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
-msgstr "ne konstatu estrecon de dosiero"
+msgstr "ne konstati estrecon de dosiero"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
-msgstr "ne konstatu grupon de dosiero"
+msgstr "ne konstati grupon de dosiero"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
-msgstr "ne konstatu modifo-tempon de dosieroj"
+msgstr "ne konstati modifo-tempon de dosieroj"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
-msgstr "ne konstatu permesojn de dosieroj"
+msgstr "ne konstati permesojn de dosieroj"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "ne konstatu kapablojn de dosieroj"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
-msgstr "ne konstatu sekureco-kuntekstojn"
+msgstr "ne konstati sekureco-kuntekstojn"
+
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "ne konstati kapablojn de dosieroj"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
-msgstr "ne konstatu dosierojn en pako"
+msgstr "ne konstati dosierojn en pakaĵo"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
-msgstr "ne konstatu pako-dependaĵojn"
+msgstr "ne konstati pakaĵo-dependaĵojn"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
-msgstr "ne plenumigu konstato-programo(j)n"
+msgstr "ne plenumigi konstato-skripto(j)n"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Mankantaj trajtoj en rpmlib por %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
-msgstr "fontoteksta pako atendita, plenumebla trovita\n"
+msgstr "fontoteksta pakaĵo atendita, plenumebla trovita\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
-msgstr "fontoteksta pako enhavas neniun spec-dosieron\n"
+msgstr "fontoteksta pakaĵo enhavas neniun spec-dosieron\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "Elpakado de arkivo malsukcesis%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " ĉe dosiero"
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s malsukcesis ĉe dosiero %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s malsukcesis: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "malÄusta aranÄo: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(enhavas neniujn dosierojn)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normala "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "anstataÅ­igita "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "ne instalita "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "rete kunuzata "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "malÄÅ­sta koloro"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(neniu stato) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(nekonata %3d)"
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
-msgstr "pako ne enhavas listojn de dosieraj estroj kaj grupoj\n"
+msgstr "pakaĵo ne enhavas listojn de dosieraj estroj kaj grupoj\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
-msgstr "pako enhavas nek dosieran estron nek identigilajn listojn\n"
+msgstr "pakaĵo enhavas nek dosieran estron nek identigilajn listojn\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
-msgstr "grupo %s ne enhavas iujn pakojn\n"
+msgstr "grupo %s ne enhavas iujn pakaĵojn\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
-msgstr "neniuj pako-instigiloj %s\n"
+msgstr "neniuj pakaĵo-instigiloj %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "misformita %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
-msgstr "neniu pako kongruas kun %s: %s\n"
+msgstr "neniu pakaĵo kongruas kun %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
-msgstr "neniu pako postulas: %s\n"
+msgstr "neniu pakaĵo postulas: %s\n"
+
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "neniuj pakaĵoj rekomendas je %s\n"
-#: lib/query.c:392
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "neniuj pakaĵoj konsilas je %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "neniuj pakaĵoj kompletigas je %s\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "neniuj pakaĵoj plibonigas je %s\n"
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
-msgstr "neniu pako provizas: %s\n"
+msgstr "neniu pakaĵo provizas: %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "dosiero %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
-msgstr "neniu pako estras dosieron %s\n"
+msgstr "neniu pakaĵo estras dosieron %s\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
-msgstr "nevalida pako-numero: %s\n"
+msgstr "nevalida pakaĵo-numero: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "ne eblas legi rikordon %u\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
-msgstr "pako %s ne estas instalita\n"
+msgstr "pakaĵo %s ne estas instalita\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "nekonata etikedo: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: malsukcesis importi Ålosilon %d.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: Ålosilo %d ne estas Åirmita publika Ålosilo.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: importa legado malsukcesis (%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s: headerRead malsukcesis: %s\n"
+msgid "Fread failed: %s"
+msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
-msgstr "%s: Ne eblis legi neÅanÄeblan kapan regionon. Ĉu koruptita pako?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NEBONA"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "BONA"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr "(MANKAJ ÅœLOSILOJ:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr "NEFIDINDAJ ÅœLOSILOJ:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: malsukcesis malfermi: %s\n"
@@ -2436,7 +2808,7 @@ msgstr "%s: malsukcesis malfermi: %s\n"
#: lib/rpmchroot.c:43
#, c-format
msgid "Unable to open current directory: %m\n"
-msgstr "Ne eblas malfermi aktualan dosierujon: %m\n"
+msgstr "Ne eblas malfermi nunan dosierujon: %m\n"
#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
#, c-format
@@ -2453,214 +2825,444 @@ msgstr "Ne eblas ÅanÄi radikan dosierujon: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Ne eblas restarigi radikan dosierujon: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Generanta %d mankajn indekso(j)n, bonvolu atendi...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "ne eblas malfermi indekson %s per %s - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "neniu dbpath estis valorizita\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: preterlasanta"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "eraro (%d) konservanta rikordon #%d al en %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec malsukcesis: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp malsukcesis: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: preterlasanta"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: difektita kapo #%u akirita -- preterlasanta.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: ne eblas legi kapon en 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "neniu dbpath estis valorizita"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "malsukcesis krei dosierujon %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "kapo #%u en datumbazo estas fuÅa -- preterlasanta.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "ne eblas aldoni rikordon devene el %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "malsukcesis remunti datumbazon: neÅanÄita datumbazo restas\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "malsukcesis anstataÅ­igi la malnovan datumbazon per la nova!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NE "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "JES"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "Dependaĵoj de PreReq:, Provides:, kaj Obseletes: eblas havi eldonojn."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"dosiernomo(j) konservitaj kiel (dirName, basNem, dirIndex) triopo, ne kiel "
"pado."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
-msgstr "pako-ÅarÄo eblas esti kunpremita per bzip2."
+msgstr "pakaĵo-ÅarÄo eblas esti kunpremita per bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
-msgstr "pako-ÅarÄo eblas esti kunpremita per xz."
+msgstr "pakaĵo-ÅarÄo eblas esti kunpremita per xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
-msgstr "pako-ÅarÄo eblas esti kunpremita per lzma."
+msgstr "pakaĵo-ÅarÄo eblas esti kunpremita per lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
-msgstr "pako-ÅarÄa(j) dosiero(j) havas prefikson \"./\"."
+msgstr "pakaĵo-ÅarÄa(j) dosiero(j) havas prefikson \"./\"."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
-msgstr "la nomo, eldono kaj promocio de pako ne subkomprenita."
+msgstr "la nomo, eldono kaj promocio de pakaĵo ne subkomprenita."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "kapaj tagoj ĉiam estas ordigitaj post ÅargiÄi."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
-msgstr "la programeta interpretilo povas uzi parametrojn de la kapo."
+msgstr "la skripteta interpretilo povas uzi parametrojn de la kapo."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "aro da malmolaj ligiloj povas esti instalita sen esti kompleta."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
-msgstr "pakaĵo-programetojn rajtas atingi la rpm-datumbazon dum instali."
+msgstr "pakaĵo-skriptetojn rajtas atingi la rpm-datumbazon dum instali."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
-msgstr "interna komprena de lua-programetoj."
+msgstr "interna komprena de lua-skriptoj."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
-msgstr "dosiero-resuma algoritmo estas aparte agordeble por ĉiu pako"
+msgstr "dosiero-resuma algoritmo estas aparte agordeble por ĉiu pakaĵo"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "rego de kapabloj de dosieroj laÅ­ POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
-msgstr "pako-programetoj eblas etendiÄi dum insntalado."
+msgstr "pakaĵo-skriptoj eblas etendiÄi dum instalado."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr "dependaĵa komparo komprenas eldonojn kun tildo."
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "regas dosierojn pli grandajn ol 4GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "rego por riĉaj dependaĵoj."
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "Nekonata riĉdependaĵa operacio '%.*s'"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Nomo postulata"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "Riĉa dependaĵo ne komenciÄas per '('"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "Mankanta argumento al riĉdependaĵa operacio"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "Vaka riĉa dependaĵo"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "Nefinita riĉa dependaĵo: %s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr "Ne eblas ĉenigi diversajn operaciojn"
+
+#: lib/rpmds.c:1564
+#, fuzzy
+msgid "Can only chain and/or/with ops"
+msgstr "Eblas ĉenigi nur la operaciojn AND kaj OR"
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr "Rubo post riĉa dependaĵo"
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "FuÅa magiaĵo"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "FuÅa kapo"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Kapo-grando tro granda"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Dosiero tro granda por arkivo"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Nekonata dosiertipo"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Mankanta(j) dosiero(j)"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Malkongrueco ĉe resumo"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Interna eraro"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Arkivo-dosiero ne en kapo"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " malsukcesis - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: eroro 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "malfermo de %s malsukcesis: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr "Superis maksimuman nivelon de manifest-rikurso: %s\n"
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
-msgstr "%s: ne rpm-pako (aÅ­ pako-manifesto)\n"
+msgstr "%s: ne rpm-pakaĵo (aŭ pakaĵo-manifesto)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "Äœisdatiganta / instalanta...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "ForviÅanta / Foriganta...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Pretiganta..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "Pretiganta pakaĵojn..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
-msgstr "Malhavaj dependaĵoj:\n"
+msgstr "Mankantaj dependaĵoj:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
-msgstr "%s: ne rpm-pako (aÅ­ pako-manifesto): %s\n"
+msgstr "%s: ne rpm-pakaĵo (aŭ pakaĵo-manifesto): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s ne eblas instaliÄi\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
-msgstr "RiceviÄas %s\n"
+msgstr "Ricevanta je %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "transigo de %s malsukcesis - preterlasanta\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
-msgstr "pako %s ne estas relokebla\n"
+msgstr "pakaĵo %s ne estas relokebla\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "eraro dum legi dosieron %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
-msgstr "\"%s\" specifas plurajn pakojn:\n"
+msgstr "\"%s\" specifas plurajn pakaĵojn:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "ne eblas malfermiÄi %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "InstaliÄas %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
-msgstr "ne rpm-pako"
+msgstr "ne rpm-pakaĵo"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "nevalida pretenda tipo"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
-msgstr "nekomprenata RPM-paka eldono"
+msgstr "nekomprenata RPM-pakaĵa eldono"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "malsukcesis legi: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
-msgstr "ne rpm-pako\n"
+msgstr "ne rpm-pakaĵo\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "ne eblas krei Åloson %s ĉe %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "atendis Åloson %s ĉe %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "ddlopen malsukcesis ĉe %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Solvi simbolon %s malsukcesis: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Malsukcesis etendi makroon %%__collection_%s\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Kromprogramo %%__%s_%s ne agordita\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Kromprogramo %s ne Åargita\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Malsukcesis solvi en kromprogramo %s la simbolon %s: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "malsama"
@@ -2668,22 +3270,22 @@ msgstr "malsama"
#: lib/rpmprob.c:114
#, c-format
msgid "package %s is intended for a %s architecture"
-msgstr "pako %s ne intenciÄis por platformo %s"
+msgstr "pakaĵo %s ne intenciÄis por platformo %s"
#: lib/rpmprob.c:118
#, c-format
msgid "package %s is intended for a %s operating system"
-msgstr "pako %s ne intenciÄis por operaciumo %s"
+msgstr "pakaĵo %s ne intenciÄis por operaciumo %s"
#: lib/rpmprob.c:122
#, c-format
msgid "package %s is already installed"
-msgstr "pako %s jam instaliÄis"
+msgstr "pakaĵo %s jam instaliÄis"
#: lib/rpmprob.c:125
#, c-format
msgid "path %s in package %s is not relocatable"
-msgstr "pado %s en pako %s ne estas relokebla"
+msgstr "pado %s en pakaĵo %s ne estas relokebla"
#: lib/rpmprob.c:130
#, c-format
@@ -2693,22 +3295,22 @@ msgstr "dosiero %s faras konfliktojn inter provaj instalaĵoj de %s kaj %s"
#: lib/rpmprob.c:135
#, c-format
msgid "file %s from install of %s conflicts with file from package %s"
-msgstr "dosiero %s el instalo de %s konfliktas kun dosiero el pako %s"
+msgstr "dosiero %s el instalo de %s konfliktas kun dosiero el pakaĵo %s"
#: lib/rpmprob.c:140
#, c-format
msgid "package %s (which is newer than %s) is already installed"
-msgstr "pako %s (kiu estas pli freÅa ol %s) jam instaliÄis"
+msgstr "pakaĵo %s (kiu estas pli freÅa ol %s) jam instaliÄis"
#: lib/rpmprob.c:145
#, c-format
msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
-msgstr "instali pakon %s bezonas iun %<PRIu64>%cB en la dosiersistemo %s"
+msgstr "instali pakaĵon %s bezonas iun %<PRIu64>%cB en la dosiersistemo %s"
#: lib/rpmprob.c:155
#, c-format
msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
-msgstr "instali pakon %s bezonas inodojn %<PRIu64> en la dosiersistemo %s"
+msgstr "instali pakaĵon %s bezonas inodojn %<PRIu64> en la dosiersistemo %s"
#: lib/rpmprob.c:159
#, c-format
@@ -2732,637 +3334,354 @@ msgstr "%s malaktualiÄas per %s%s"
#: lib/rpmprob.c:172
#, c-format
msgid "unknown error %d encountered while manipulating package %s"
-msgstr "nekonata eraro %d okazis dum manipuli pakon %s"
+msgstr "nekonata eraro %d okazis dum manipuli pakaĵon %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "manka dua ':' ĉe %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "manka platforma nomo ĉe %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Nefinita datuma linio ĉe %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Tro da parametroj en datuma linio je %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "FuÅa platforma/operaciuma numero: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Nefinita apriora linio ĉe %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Tro da parametrojn ĉe apriora linio ĉe %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "manka ':' (trovita 0x%02x) ĉe %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "manka parametro por %s ĉe %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "%s ne malfermeblas ĉe %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "manka platformo por %s ĉe %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "FuÅa elekto '%s' ĉe %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr "Malsukcesis legi helpan vektoron, ĉu /proc ne surmetita?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Nekonata operaciumo: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Bonvolu kontakti %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "%s ne malfermeblas por legiÄi: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "Neniu exec() vokita post fork() en lua-skripteto\n"
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
-msgstr "Ne eblas restarigi aktualan dosierujon: %m"
+msgstr "Ne eblas restarigi nunan dosierujon: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "rego por <lua>-programetojn ne estas integraj\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Ne eblis krei provizoran dosieron por %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Ne eblis dupliki dosieran priskribilon %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "Malsukcesis Fwrite: %s"
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
-msgstr "programeto %s malsukcesis, waitpid(%d) rc %d: %s\n"
+msgstr "skripteto %s malsukcesis, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
-msgstr "programeto %s malsukcesis, signalo %d\n"
+msgstr "skripteto %s malsukcesis, signalo %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
-msgstr "programeto %s malsukcesis, elira stato %d\n"
+msgstr "skripteto %s malsukcesis, elira stato %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "nekonata formato"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "instali"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "forviÅi"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
-msgstr "ne eblas malfermi pako-datumbazon en %s\n"
+msgstr "ne eblas malfermi pakaĵo-datumbazon en %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
-msgstr "aldona '(' en pako-etikedo: %s\n"
+msgstr "aldona '(' en pakaĵo-etikedo: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
-msgstr "manka '(' en pako-etikedo: %s\n"
+msgstr "manka '(' en pakaĵo-etikedo: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
-msgstr "manka ')' en pako-etikedo: %s\n"
+msgstr "manka ')' en pakaĵo-etikedo: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: legi la publikan Ålosilon malsukcesis.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "interago"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "suspira grando(%d): FUÅœA, legado donis: %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "suspira magiaĵo: FUŜA\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "suspiraj etikedoj: FUÅœA, numero da etiketoj (%d) ne en la skalo\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "suspiraj etikedoj: FUÅœA, numero da bajtoj (%d) ne en la skalo\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "suspira amaso(%d): FUÅœA, donis: %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "suspira etikedo[%d], FUÅœA, etikedo %d tipo %d malsameco %d nombro %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "suspira ÅarÄo: FUÅœA\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "suspira pad(%zd): FUÅœA, leginta %zd bajtojn\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "suspira sigSize(%zd): FUÅœA, fstat(2) malsukcesis\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "NeÅanÄebla kapa regiono ne eblas legiÄi. Ĉu koruptita pako?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "Ne povas pretendi pakaĵojn el RPM-v3\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5-resumo:"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "SHA1-resuma kapo:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
-msgstr "Kapo"
+msgstr "Ĉapo"
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "Konstati pretendon: FUÅœAJ PARAMETROJ (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Ne eblas reÅargi pretendo-kapon.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "preterlasita"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "malsukcesa"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "manka %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Malkontentaj dependaĵoj por %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "nevalida kampa larÄo"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "manka { post %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "manka } post %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "vaka etikeda aranÄo"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "vaka etikeda nomo"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "nekonata etikedo"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] anticipita je fino de tabelo"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "neatendita ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "neatendita }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? atendita en esprimo"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ atendita post ? en esprimo"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} atendita en esprimo"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": atendita post subesprimo kun ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ atendita post : en esprimo"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| atendita je la fino de la esprimo"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "tabela iteraciilo uzata kun tabeloj kun diversaj grandoj"
-
-#: lib/rpmdb.c:97
+#: lib/verify.c:263
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Generanta %d mankajn indekso(j)n, bonvolu atendi...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "ne eblas malfermi indekson %s per db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "eraro(%d) dum ricevi rikordojn \"%s\" el indekso %s: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "neniu dbpath estis valorizita\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: preterlasanta"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "eraro (%d) konservanta rikordon #%d al en %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec malsukcesis: %s\n"
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Duobligita salutnomo aÅ­ identigilo por uzanto %s\n"
-#: lib/rpmdb.c:1596
+#: lib/verify.c:284
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp malsukcesis: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Duobligita grupnomo aÅ­ identigilo por grupo %s\n"
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: preterlasanta"
+#: lib/verify.c:395
+msgid "no state"
+msgstr "neniu stato"
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: difektita kapo #%u akirita -- preterlasanta.\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "nekonato stato"
-#: lib/rpmdb.c:2250
+#: lib/verify.c:448
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "eraro(%d:%s) akiranta sekvan Ålosilon el indekso %s\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "eraro(%d) aldonanta en kapo rikordon #%d\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "eraro(%d) foriganta el kapo rikordon #%d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: ne eblas legi kapon en 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "eraro(%d): elekti rikordojn \"%s\" el indekso %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "eraro(%d) konservi rikordon \"%s\" en %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "eraro(%d) dum forigi rikordon \"%s\" el %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "eraro(%d) dum generi novan okazon de pako\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "eraro(%d) akiranta rikordojn \"%s\" el indekso %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "eraro(%d) konservis rikordon %s en %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "neniu dbpath estis valorizita"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "malsukcesis krei dosierujon %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "kapo #%u en datumbazo estas fuÅa -- preterlasanta.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "ne eblas aldoni rikordon devene el %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "malsukcesis remunti datumbazon: neÅanÄita datumbazo restas\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "malsukcesis anstataÅ­igi la malnovan datumbazon per la nova!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "anstataÅ­igi dosierojn en %s per dosieroj el %s por reatingi"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "malsukcesis reatingi dosierujon %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d eraro(%d) el %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d eraro(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "ne eblas atingi Åloson %s ĉe %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "kunuzata"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "ekskluziva"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "nevalida indeksa tipo %x ĉe %s/%s\n"
+msgid "missing %c %s"
+msgstr "manka %c %s"
-#: lib/backend/dbconfig.c:144
+#: lib/verify.c:503
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "nekonata elekto en db: \"%s\" ignorita.\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Malkontentaj dependaĵoj por %s:\n"
-#: lib/backend/dbconfig.c:181
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s haves nevalidan nombran valoron, preterlasita\n"
+msgid "Unable to reset nice value: %s"
+msgstr "Ne eblas restarigi afablan valoron: %s"
-#: lib/backend/dbconfig.c:190
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
-"%s havas tro grandan aÅ­ mangrandan longentjeran valoron, preterlasita\n"
+msgid "Unable to reset I/O priority: %s"
+msgstr "Ne eblas restarigo eneligan prioritaton: %s"
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"%s havas tro grandan aÅ­ malgrandan mallongentjeran valoron, preterlasita\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Malsukcesis malkodi konduton por %s\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Malsukcesis krei provizoran dosieron por %s: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Malsukcesis skribi konduton %s al dosiero %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Malsukcesis krei anson por semanage\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Malsukcesis konektiÄi al konduta traktilo\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Malsukcesis komenci kondutan interagon: %s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Malsukcesis forigi provizoran kondutan dosieron %s: %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Malsukcesis instali kondutan modulon: %s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Malsukcesis forigi konduto-modulon: %s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Malsukcesis disforkigi procezon: %s\n"
-
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Malsukcesis plenumigi: %s: %s\n"
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s ĉesis malnormale\n"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s malsukcesis kun elira kodo %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Malsukcesis cizeli kondutajn ÅanÄojn\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Malsukcesis etendi padon restorecon"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr "Malsukcesis alinomi dosiersistemon. Dosieroj ele estas misnomataj\n"
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-"Malsukcesis reÅargi dosierajn kuntekstojn. Dosieroj eble estas misnomataj\n"
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Malsukcesis eltiri konduton el %s\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktiva %d vaka %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(vaka)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(vaka)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makroo %%%s havas nefinitan korpon\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makroo %%%s havas nefinitajn elektojn\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makroo %%%s havas nevalidan vomon (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makroo %%%s havas nefinitan korpon\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makroo %%%s havas nefinitajn elektojn\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Makroo %%%s havas vakan korpon\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "Makroo %%%s postulas blankspacon antaÅ­ korpo\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Makroo %%%s malsukcesis etendiÄi\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Makroo %%%s havas nevalidan nomon (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makroo %%%s (%s) ne estis uzita sub nivelo %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "Makroo %%%s difinita sed ne uzata en amplekso\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Nekonata elekto %c en %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3370,165 +3689,282 @@ msgstr ""
"Tro da niveloj de rekursioj en makroa etendado. VerÅajne kaÅ­zate de rekursia "
"makro-deklaro.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Nefinita %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "%% estas sekvata de sensenca makroo\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "malsukcesis Åargi makroan dosieron %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktiva %d vaka %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "eraro dum krei provizoran dosieron %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Dosiero %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Dosiero %s estas malpli ol %u bajtoj\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "malsukcesis krei dosierujon"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[neniu]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(neniu eraro)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "haltigenda eraro:"
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "eraro: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "averto: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
-msgstr "nevalida sintakso en lua-programeto: %s\n"
+msgstr "nevalida sintakso en lua-skripteto: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
-msgstr "nevalida sintakso en lua-programeto: %s\n"
+msgstr "nevalida sintakso en lua-skripto: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
-msgstr "lua-programeto malsukcesis: %s\n"
+msgstr "lua-skripto malsukcesis: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "nevalida sintakso en lua-dosiero: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua hoko malsukcesis: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[neniu]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(neniu eraro)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "ĉesigenda eraro:"
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "eraro: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "averto: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "memora generado (%u okbitoj) donis nulon.\n"
+msgstr "memora generado (%u bajtoj) donis nulon.\n"
+
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, Ålosila identigilo %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(neniu)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "eraro dum krei provizoran dosierujon %s: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "eraro dum krei rektvican memoron %s: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "eraro dum forigi rektvican memoron %s: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "eraro dum forigi dosierujon %s: %m\n"
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite malsukcesis: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread malsukcesis: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush malsukcesis: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "Nekomprenita PGP-pretendo\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "Nekomprenita krampita algoritmo %u de PGP\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "Nekomprenita algoritmo publika-Ålosila %u de PGP\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Ne eblas krei tubon por pretendi: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "Ne eblas plenumigi: %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "Fopen malsukcesis\n"
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Ne eblis skribi al dukto\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr "Ne eblis legi el dosiero %s: %s\n"
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "gpg-plenumo malsukcesis (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg malsukcesis skribi pretendon\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "ne eblas legi la pretendon\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp malsukcesis\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s jam enhavas identan pretendon, preterlasanta\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead malsukcesis: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignure malsucksis: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: headerRead malsukcesis: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "Ne povas pretendi pakaĵojn el RPM-v3\n"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s jam enhavas identan pretendon, preterlasanta\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature malsukcesis: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead malsukcesis: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "anstataÅ­igo de %s malsukcesis: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: legi manifeston malsukcesis: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
-msgstr "ne konstatu pretendojn de kapo+ÅarÄo"
+msgstr "ne konstati pretendojn de kapo+ÅarÄo"
diff --git a/po/es.po b/po/es.po
index 1a77aa978..5bdc4a7a1 100644
--- a/po/es.po
+++ b/po/es.po
@@ -3,19 +3,22 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Adolfo Jayme Barrientos <fitoschido@gmail.com>, 2011.
-# Claudio Rodrigo Pereyra Diaz <elsupergomez@gmail.com>, 2012.
-# Daniel Cabrera <logan@fedoraproject.org>, 2011.
-# Domingo Becker <domingobecker@gmail.com>, 2012.
-# Héctor Daniel Cabrera <logan@fedoraproject.org>, 2011.
+# Adolfo Jayme Barrientos, 2011
+# Adolfo Jayme Barrientos, 2011
+# Adolfo Jayme Barrientos <fitoschido@ubuntu.com>, 2011,2014
+# beckerde <domingobecker@gmail.com>, 2012
+# Claudio Rodrigo Pereyra Diaz <elsupergomez@gmail.com>, 2012
+# Daniel Cabrera <logan@fedoraproject.org>, 2011
+# beckerde <domingobecker@gmail.com>, 2012
+# Daniel Cabrera <logan@fedoraproject.org>, 2011
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-11 14:20+0000\n"
-"Last-Translator: Domingo Becker <domingobecker@gmail.com>\n"
-"Language-Team: Spanish <trans-es@lists.fedoraproject.org>\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Spanish (http://www.transifex.com/rpm-team/rpm/language/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -35,14 +38,14 @@ msgstr "versión de RPM %s\n"
#: cliutils.c:32
#, c-format
msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
-msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
+msgstr "Copyright © 1998-2002 - Red Hat, Inc.\n"
#: cliutils.c:33
#, c-format
msgid ""
"This program may be freely redistributed under the terms of the GNU GPL\n"
msgstr ""
-"Este programa puede ser redistribuido libremente bajo los términos de la "
+"Este programa puede redistribuirse libremente bajo los términos de la "
"licencia GNU GPL\n"
#: cliutils.c:53
@@ -50,528 +53,590 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "falló la creación de la tubería para --pipe: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "falló exec\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "el argumento no es un paquete RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "error al leer encabezado del paquete\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "no se puede volver a abrir la carga útil: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Opciones de la selección de paquetes a consultar/verificar:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opciones de consulta (con -q o --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opciones de verificación (con -V o --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opciones de Instalación/Actualización/Remoción:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Opciones comunes para todos los modos rpm y ejecutables:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "solo un tipo de consulta/verificación puede ser ejecutado a la vez"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "opciones de consulta inesperadas"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "formato de consulta inesperado"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "fuente de consulta inesperado"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "solo puede especificarse un modo principal"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "solo puede forzarse la instalación y la actualización"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-"los archivos solo pueden ser reubicados durante la instalación del paquete"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "no se puede utilizar --prefix con --relocate o --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate y --excludepath solo pueden ser utilizados cuando se instalan "
-"nuevos paquetes"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix solo puede ser utilizado al instalar nuevos paquetes"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "los argumentos de --prefix deber iniciar con una /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-"--hash (-h) sólo puede ser indicado durante la instalación o la eliminación "
-"de un paquete"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-"--percent sólo puede ser indicado durante la instalación o la eliminación de "
-"un paquete"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-"--replacepkgs solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-"--excludedocs solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-"--includedocs solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "solo se puede especificar una opción: --excludedocs o --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-"--ignorearch solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-"--ignoreos solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-"--ignoresize solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-"--allmatches solo puede ser especificado durante la eliminación del paquete"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-"--allfiles solo puede ser especificado durante la instalación del paquete"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb solo puede ser especificado durante la instalación y eliminación "
-"del paquete"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"las opciones para desactivar scripts sólo pueden ser especificadas durante "
-"la instalación y eliminación del paquete"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"las opciones de desactivación de detonante sólo pueden ser especificadas "
-"durante la instalación y eliminación del paquete"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"solo puede especificarse --nodeps durante la instalación, eliminación o "
-"verificación del paquete"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-"solo puede especificarse --test durante la instalación o la eliminación de "
-"un paquete"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "los argumentos de --root (-r) deben iniciar con una /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "no ha sido indicado ningún paquete para ser eliminado"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "no ha sido indicado ningún paquete para la instalación"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "no ha sido indicado ningún argumento para la consulta"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "no ha sido indicado ningún argumento para la verificación"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot ya especificado, ignorando %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"construir a través de %prep (desempaquetar fuentes y aplicar parches) desde "
"<specfile>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "construir a través de %build (%prep, luego compilar) desde <specfile>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"construir a través de %install (%prep, %build, luego instalar) desde "
"<specfile>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "verificar la sección %files de <specfile>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "construir paquetes binarios y fuente desde <specfile>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "construir paquetes binarios únicamente desde <specfile>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "construir paquete fuente únicamente desde <specfile>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<paquete fuente>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"construir a través de %install (%prep, %build, luego instalar) desde "
+"<paquete fuente>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"construir a través de %prep (desempaquetar fuentes y aplicar parches) desde "
"<tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "construir a través de %build (%prep, luego compilar) desde <tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"construir a través de %install (%prep, %build, luego instalar) desde "
"<tarball>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verificar sección %files desde <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "construir paquetes binarios y fuente desde <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "construir paquete binario únicamente desde <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "construir paquete fuente desde <tarball> "
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "construir paquete binario desde <source package>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<paquete fuente>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"construir a través de %install (%prep, %build, luego instalar) desde "
-"<paquete fuente>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "sobreescribir construcción de root"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "remover árbol de construcción al finalizar"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorar directivas ExcludeArch desde el archivo spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "depurar archivo de la máquina de estado"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "no ejecutar ningún nivel de la construcción"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "no verificar dependencias de la construcción"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
"genera encabezado(s) de paquete(s) compatible(s) con el empaquetamiento rpm "
"v3 (legado)"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr "no ejecutar la fase %clean de la construcción"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr "no ejecutar la fase %check de la construcción"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "no aceptar msgstr i18N desde el archivo spec"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "eliminar fuentes al finalizar"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "eliminar el archivo spec al finalizar"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "Ir a etapa especificada (solo para c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "sobreescribir plataforma de destino"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"Opciones de construcción con [ <archivo spec> | <tarball> | <paquete "
"fuente> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Opciones comunes para todos los modos rpm y ejecutables:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Fallo al construir las dependencias:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "No se puede abrir el archivo spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Falló la apertura de la tuberia para tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Falló la lectura del archivo spec desde %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Falló al renombrar %s to %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "falló la llamada stat sobre %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "El archivo %s no es un archivo regular.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "El archivo %s no parece ser un archivo spec.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Construyendo las plataformas de destino: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Construyendo para el destino %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "los argumentos de --root (-r) deben iniciar con una /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "inicializar base de datos"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"reconstruir lista invertida de la base de datos desde los encabezados de "
"paquetes instalados"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "verificar archivos de la base de datos"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opciones de la base de datos:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "solo puede especificarse un modo principal"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "verificar firma(s) del paquete"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importar una llave pública con armadura"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
-msgstr "no importa, pero indica si iba a funcionar o no"
+msgstr "no importar, pero indicar si funcionará o no"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "lista las llaves del administrador de llaves RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Opciones del llavero:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "no ha sido indicado ningún argumento"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Opciones de la selección de paquetes a consultar/verificar:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opciones de consulta (con -q o --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opciones de verificación (con -V o --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opciones de Instalación/Actualización/Remoción:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "solo un tipo de consulta/verificación puede ser ejecutado a la vez"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "opciones de consulta inesperadas"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "formato de consulta inesperado"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "fuente de consulta inesperado"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "solo puede forzarse la instalación y la actualización"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+"los archivos solo pueden ser reubicados durante la instalación del paquete"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "no se puede utilizar --prefix con --relocate o --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate y --excludepath solo pueden ser utilizados cuando se instalan "
+"nuevos paquetes"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix solo puede ser utilizado al instalar nuevos paquetes"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "los argumentos de --prefix deber iniciar con una /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"--hash (-h) sólo puede ser indicado durante la instalación o la eliminación "
+"de un paquete"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"--percent sólo puede ser indicado durante la instalación o la eliminación de "
+"un paquete"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+"--replacepkgs solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+"--excludedocs solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+"--includedocs solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "solo se puede especificar una opción: --excludedocs o --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+"--ignorearch solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+"--ignoreos solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+"--ignoresize solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+"--allmatches solo puede ser especificado durante la eliminación del paquete"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+"--allfiles solo puede ser especificado durante la instalación del paquete"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb solo puede ser especificado durante la instalación y eliminación "
+"del paquete"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"las opciones para desactivar scripts sólo pueden ser especificadas durante "
+"la instalación y eliminación del paquete"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"las opciones de desactivación de detonante sólo pueden ser especificadas "
+"durante la instalación y eliminación del paquete"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"solo puede especificarse --nodeps durante la instalación, eliminación o "
+"verificación del paquete"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"solo puede especificarse --test durante la instalación o la eliminación de "
+"un paquete"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "no ha sido indicado ningún paquete para ser eliminado"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "no ha sido indicado ningún paquete para la instalación"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "no ha sido indicado ningún argumento para la consulta"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "no ha sido indicado ningún argumento para la verificación"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "firma paquete(s)"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "firmar paquete(s) (idéntico a --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "eliminar las firmas del paquete"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opciones de firma:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "No se pudo ejecutar %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Debe establecer \"%%_gpg_name\" en su archivo de macro\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Introduzca la frase de acceso:"
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "La frase de acceso es correcta\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Falló la verificación de la contraseña, o la llave gpg ha expirado\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "analizar archivo(s) spec a stdout"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
-msgstr "consulta elo los archivos spec"
+msgstr "consultar archivo(s) de spec"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "opera sobre rpms binarios generados por spec (predeterminado)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "opera sobre rpm fuente generado por spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "utilizar el siguiente formato de consulta"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Opciones de spec:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "no se han ofrecido argumentos para analizar"
@@ -580,32 +645,37 @@ msgstr "no se han ofrecido argumentos para analizar"
msgid "Unable to open temp file: %s\n"
msgstr "No es posible abrir el archivo temporal: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "No es posible abrir flujo: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Ejecutando(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Falló exec sobre %s (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "Error ejecutando scriptlet %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Estado de salida erróneo de %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -615,235 +685,315 @@ msgstr ""
"\n"
"Errores de construcción RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "error de sintaxis durante el análisis ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "error de sintaxis durante el análisis &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "error de sintaxis durante el análisis ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "error de análisis en la expresión\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "no coincidente (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- solo en números\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! solo en números\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "los tipos deben coincidir\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / no está soportado en cadenas\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- no está soportado en cadenas\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& y || no están soportados en cadenas\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "error de sintaxis en la expresión\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "'(' ausente en %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "')' ausente en %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Elemento %s no válido: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%s ausente en %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Ningún espacio en blanco después de %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Sintaxis errónea: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "modo spec erróneo: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "dirmode spec erróneo: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Longitud de locale no usual: \"%s\" in %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Locale %s duplicado en %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Capacidad inválida %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Soporte para la capacidad del archivo no construido\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Los archivos deben iniciar con \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Algoritmo de resumen de archivo %u desconocido, regresando a MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Archivo listado dos veces: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "falló la lectura %s de symlink: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "El enlace simbólico apunta a BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "No se ha encontrado el directorio: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Archivo no encontrado: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: no se puede cargar, etiqueta (%d) desconocida.\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: falló la lectura de la clave publica.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: no es una clave pública con armadura.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: falló la codificación\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "falló al crear el directorio"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "El archivo necesita comenzar con \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "%%dev glob no permitido: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "El directorio no ha sido hallado por glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Archivo no encontrado por glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "No se pudo abrir el archivo %%files %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "línea: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Error leyendo %%files archivo %s: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr "illegal _docdir_fmt %s: %s\n"
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Archivo no encontrado por glob: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr "No se puede mezclar el %s especial con otros formatos: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr "Más de un archivo en una línea: %s\n"
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Archivo erróneo: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "propietario/grupo erróneo: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Comprobando si hay archivos desempaquetados: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -852,555 +1002,612 @@ msgstr ""
"Se encontraron archivos instalados (pero desempaquetados):\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Procesando archivos: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
"Los archivos binarios (%d) no coinciden con los archivos del paquete (%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
"Binarios dependientes de la arquitectura en paquetes sin arquitectura\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr "falló al crear el archivo %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr "falló la creación del archivo: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "No es posible abrir el archivo %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: línea: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "No se pudo canonizar el nombre de host: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "No ha sido possible escribir la carga útil de %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "No ha sido posible leer la carga útil de %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "No se pudo canonizar el nombre de host: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Compresion de carga útil desconocida: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "No ha sido posible crear la región inmutable del encabezado.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "No es posible abrir archivo temporal.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Incapaz de escribir el encabezado temporal\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Falló al leer el archivo de política: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Datos CSA erróneos\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Incapaz de recargar el encabezado de la firma\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "No se pudo abrir %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "No ha sido possible escribir el paquete: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "No ha sido posible abrir sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "No ha sido posible leer el encabezado de %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "No ha sido possible escribir el encabezado de %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Escrito: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Ejecutando \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Falló la ejecución de \"%s\":\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Falló la verificación \"%s\" del paquete\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
"No se pudo generar el nombre de archivo de salida para el paquete %s: %s \n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "no es posible crear %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "línea %d: segundo %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr "fecha incorrecta en %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "entradas %%changelog deben iniciar con *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "entrada %%changelog incompleta\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "fecha errónea en %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog no está en orden cronológico descendente\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "nombre ausente en %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "ninguna descripción en %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "línea %d: Error al analizar %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "línea %d: Opción errónea %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "línea %d: Demasiados nombres: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "línea %d: El paquete no existe: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "línea %d: Segunda descripción\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "línea %d: Error al analizar %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "línea %d: Error al analizar %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Error analizando campo de etiqueta: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "línea %d: Número erróneo: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "línea %d: Número no%s erróneo: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "línea %d: Número %s erróneo: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d definido múltiples veces\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Descargando %s en %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "No es posible descargar %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "La arquitectura es excluida: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "La arquitectura no es incluida: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "SO es excluido: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "SO no es incluido: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "el campo %s debe estar presente en el paquete: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Duplicar entradas %s en el paquete: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "No ha sido posible abrir el icono %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "No ha sido posible leer el icono %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Tipo de icono desconocido: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "línea %d: La etiqueta solo recibe patrones individuales: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "línea %d: Carácter '%c' ilegal en: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "línea %d: Carácter ilegal en: %s\n"
+msgid "%s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "línea %d: Secuencia \"..\" ilegal en: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "línea %d: Etiqueta mal formada: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "línea %d: Etiqueta vacía: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "línea %d: Los prefijos deben finalizar en \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "línea %d: Docdir debe iniciar con '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "línea %d: El campo epoch debe ser un número sin signo: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "línea %d: %s erróneo: calificadores: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "línea %d: Formato BuildArchitecture erróneo: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "linea %d: Solo existe soporte para subpaquetes sin arquitectura: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Error interno: Etiqueta errónea %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "línea %d: %s se encuentra obsoleta: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Especificación de paquete errónea: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "El paquete ya existe: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "línea %d: Etiqueta desconocida: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} no puede ser vacío\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{BuildRoot} no puede ser \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Fuente errónea: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Ningún número de parche %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch sin etiqueta \"Patch:\" correspondientes\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Ningún número fuente %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "No hay etiqueta \"Source:\" en el archivo spec\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Error al analizar %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "línea %d: Argumento erróneo para %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "línea %d: opción %%setup errónea %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Número de parche %s inválido: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "línea %d: segundo %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-"Las fichas de dependencias deben comenzar con caracteres alfa numéricos, '_' "
-"o '/'"
+"Las fichas de dependencias deben comenzar con caracteres alfanuméricos, «_» "
+"o «/»"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "No se permite el nombre de archivo versionado"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Es necesaria una versión"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "dependencia no válida"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "se necesita una versión"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "línea %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "línea %d: los detonantes deben tener --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "línea %d: Error al analizar %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "línea %d: el script interno debe finalizar con '>': %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "línea %d: los scripts ejecutables debe iniciar con '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "línea %d: Segundo %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "línea %d: script interno no soportado: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
"línea %d: los argumentos de intérprete no son permitidos en disparadores: "
"%s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "línea %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "No ha sido posible abrir %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: Argumento esperado para %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr "línea %d: %%if no cerrado\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "línea %d: macro no cerrado o continuación de línea errónea\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: mal %%si condición\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Tiene un %%else sin %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Tiene un %%endif sin %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
-msgstr "%s:%d: sentencia %%include mal formada\n"
+msgstr "%s:%d: instrucción %%include con formato incorrecto\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "No se encontraron arquitecturas compatibles para la construcción\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "El paquete no tiene %%description: %s\n"
@@ -1475,455 +1682,564 @@ msgstr "Demasiados argumentos en la línea: %s\n"
msgid "Processing policies: %s\n"
msgstr "Procesando políticas: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignorando regex no válido %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "No se pudo crear una tuberia para %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "No se pudo ejecutar la llamada exec %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "No se pudo ejecutar la llamada al sistema fork para %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "Falló %s: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "falló la escritura de todos los datos a %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Falló la conversión de %s a entero largo.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Clasificador de archivo vacío\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "No han sido configurados atributos de archivo\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "falló magic_open(0x%x): %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "falló magic_load: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Falló la identificación del archivo \"%s\": modo %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Buscando %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Falló la búsqueda de %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "la consulta del archivo spec %s falló, no se pudo analizar\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Magic erróneo"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Encabezado erróneo/imposible de leer"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "opciones db no reconocidas: \"%s\" ignorado.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "El tamaño del encabezado es demasiado extenso"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s tiene un valor numérico no válido, omitido\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr "Archivo muy grande para compactar"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr ""
+"%s tiene un valor largo demasiado grande o demasiado pequeño, omitido\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Tipo de archivo desconocido"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
+"%s tiene un valor entero demasiado grande o demasiado pequeño, omitido\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "No se encuentra el Enlace fijo"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "no se pudo obtener bloqueo %s en %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "El digest no coincide"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "compartido"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Error interno"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exclusivo"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "El fichero del archivo no se encuentra en el encabezado"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "tipo de índice %x inválido en %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " falló - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "error(%d) al obtener registros «%s» desde el índice %s: %s\n"
-#: lib/depends.c:68
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "error(%d) almacenando registros \"%s\" en %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "error(%d) eliminando registro \"%s\" de %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "error(%d) estableciendo registro de encabezado #%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "error(%d) eliminando registro de encabezado #%d\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "error(%d) asignando nueva instancia de paquete\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s es un RPM Delta y no puede ser instalado directamente\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Carga útil (%s) no soportada en el paquete %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "el paquete %s ya fue añadido, omitiendo %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "el paquete %s ya fue añadido, reemplazando con %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(no es un blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(no es un número)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(no es una cadena)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(tipo no válido)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(no base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(tipo no válido)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(no es un blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(tipo xml no válido)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(no es una firma OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "Fecha no válida %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normal "
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "reemplazado"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "no instalado"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "compartido en red"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "color incorrecto"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "no se encuentra"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(desconocido) "
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(no es una cadena)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "usuario %s no existe - utilizando root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "grupo %s no existe - utilizando root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s guardado como %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s creado como %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr "%s %s: falló al eliminar: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr "directorio"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr "archivo"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "ignorando %s %s con firma no verificable\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "ignorando %s con firma no verificable\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-"tag[%d]: INVALIDADO, etiqueta %d, ipo %d desplazamiento %d contador %d\n"
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: INVALIDO, no es hexadecimal\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: UNVALIDO, no es binario\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: UNVALIDO, no es binario\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "tamaño de blob(%d): INVALIDO, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-"tag de región: INCORRECTA, tag %d tipo %d desplazamiento %d cantidad %d\n"
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-"region offset: INVALIDO, etiqueta %d tipo %d desplazamiento %d contador %d\n"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-"region trailer: INVALIDO, etiqueta %d tipo %d desplazamiento %d contador %d\n"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "region size: INVALIDO, rill(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr size(%d): INVALIDO, la lectura retorno %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: INVALIDO\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr tags: INVALIDO, numero de etiquetas(%d) fuera del rango\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "campo de anchura no válido"
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "datos de encabezado: INVALIDO, número de bytes(%d) fuera del rango\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): INVALIDO, la lectura regreso %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr load: INVALIDO\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "formato de etiqueta vacío"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature falló: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "nombre de etiqueta vacío"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: ninguna firma disponible\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead falló: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] esperado al final del arreglo"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "] inesperado"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "} inesperado"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "se esperaba ? en la expresión"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "se esperaba { después de ? en la expresión"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "se esperaba } en la expresión"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "se esperaba : después de la subexpresión ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "se esperaba { después de : en la expresión"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "se esperaba | al final de la expresión"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iterador de arreglo usado con arreglos de diferente tamaño"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread falló: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "predefine MACRO con valor EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "define MACRO con valor EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "imprimir expansión de macro de EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "leer <FILE:...> en vez del archivo(s) predeterminado"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "no verificar resumen del paquete(s)"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
"no verificar la base de datos de lo(s) encabezado(s) cuando sean recuperadas"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "no verificar la firma(s) del paquete"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "enviar stdout a CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "utilizar ROOT como el directorio superior"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
-msgstr "utiliza la base de datos en DIRECTORY"
+msgstr "utilizar base de datos en DIRECTORIO"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
-msgstr "DIRECTORY"
+msgstr "DIRECTORIO"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "mostrar etiquetas de consulta conocidas"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "mostrar configuración rpmrc y macro final"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "proporcionar salida menos detallada"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "proporcionar salida más detallada"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "imprimir la versión de rpm que está siendo utilizada"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "depurar archivo de carga de la máquina de estado"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "depurar E/S rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: misconfiguración de la opción table (%d)\n"
@@ -1944,13 +2260,13 @@ msgstr "realocaciones deben contener un ="
msgid "relocations must have a / following the ="
msgstr "realocaciones deben tener una / después de ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"instalar todos los archivos, incluso los de configuración, que de otra "
"manera serían salteados."
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1958,151 +2274,161 @@ msgstr ""
"remueve todos los paquetes que coincidan con <paquetes> (normalmente un "
"error es generado si <paquete> especifica multiples paquetes) "
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "reubicar archivos en un paquete no reubicable"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "mostrar bucles de dependencias como advertencias"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "borrar (desinstalar) paquete"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "no instalar los archivos de configuración"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "no instalar documentación"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "omitir archivos con el componente inicial <path>"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "abreviatura para --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "actualizar paquete(s) si ya están instalados"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "imprimir marcas hash como durante la instalación del paquete (con -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "no verificar arquitectura del paquete"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "no verificar sistema operativo del paquete"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "no verificar espacio de disco antes de la instalación"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "instalar documentación"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "instalar paquete(s)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "actualizar la base de datos, mas no modificar el sistema de archivos"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "no verificar las dependencias del paquete"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "no verificar el digest de los archivos"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "no verificar el digest de los archivos (obsoleto)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "no instalar contextos de seguridad del archivo"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "no reordenar la instalación de paquetes para satisfacer dependencias"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "no ejecutar scriptlet(s) del paquete"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "no ejecutar %%pre scriptlet (si hay)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "no ejecutar %%post scriptlet (si hay)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "no ejecutar %%preun scriptlet (si hay)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "no ejecutar %%postun scriptlet (si hay)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "no ejecutar ningún scriptlet detonado por este paquete"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "no ejecutar ningún %%triggerprein scriptlet(s)"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "no ejecutar ningún %%triggerin scriptlet(s)"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "no ejecutar ningún %%triggerun scriptlet(s)"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "no ejecutar ningún %%triggerpostun scriptlet(s)"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "no realizar ninguna acción de colección"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2110,370 +2436,407 @@ msgstr ""
"actualiza a una versión antigua del paquete (--force en actualizaciones hace "
"esto automaticamente)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "imprimir porcentaje mientras se instala el paquete"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "realojar el paquete a <dir> si éste es realojable"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "realojar archivos de la ruta <old> a <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ignorar conflictos entre paquetes referentes a archivos "
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "reinstalar si el paquete ya está presente"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "no instalar, pero señalar si se puede o no"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "actualizar paquete(s)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "consultar/verificar todos los paquetes"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "modo rpm checksig"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "consultar/verificar archivo propietario de paquete(s)"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "consultar/verificar paquete(s) en grupo"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "consultar/verificar un archivo de paquete"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "consultar/verificar paquete(s) con identificador de paquete"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "consultar/verificar paquete(s)con identificador de cabecera"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "modo de consulta rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "consultar/verificar una instancia de la cabecera"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "consultar/verificar paquete(s) de la transacción de la instalación"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "consultar los paquetes lanzados por el paquete"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "modo de verificación de rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "consultar/verificar los paquetes que requieren una dependencia"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "consultar/verificar paquetes que proporcionan una dependencia"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "ningún argumento para glob"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "no procese los archivos que no pertenecen al paquete como manifiestos"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "listar todos los archivos de configuración"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "listar todos los archivos de documentación"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "listar todos los archivos de documentación"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "listar todos los archivos de configuración"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "Volcar información de archivo básica"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "listar archivos del paquete"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "saltar archivos %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "saltar archivos %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "mostrar el estado de los archivos listados"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "no verificar el tamaño de los archivos"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "no verificar la ruta symlink de los archivos"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "no verificar el propietario de los archivos"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "no verificar el grupo de los archivos"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "no verificar el tiempo de modificación de los archivos"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "no verificar el modo de los archivos"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "no verificar las capacidades de los archivos"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "no verificar los contextos de seguridad del archivo"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "no verificar las capacidades de los archivos"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "no verificar los archivos en el paquete"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "no verificar las dependencias de paquetes"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "no ejecutar scripts de verificación"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "No se encuentran características rpmlib para %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "se esperaba el paquete fuente, paquete binario encontrado\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "el paquete fuente no contiene archivo .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "falló el desempaquetado de archivos %s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " en archivo"
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "falló %s en archivo %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "falló %s: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "formato incorrecto: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(no contiene archivos)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "reemplazado"
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "no instalado"
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "compartido en red"
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "color incorrecto"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(sin estado)"
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(desconocido %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "el paquete no tiene lista de propietario/grupo de archivo\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "el paquete no tiene ni lista de propietario de archivos ni id\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "grupo %s no contiene ningún paquete\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "sin detonante de paquetes %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "%s mal formado: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "ningún paquete coincide con %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "ningún paquete requiere %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "ningún paquete proporciona %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "archivo %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "el archivo %s no es propiedad de ningún paquete\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "número de paquete inválido: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "el registro %u no pudo ser leído\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "el paquete %s no está instalado\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "etiqueta desconocida:\"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: falló la importación de la llave %d\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: la llave %d no es una llave pública protegida.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: falló la lectura para importar(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s: fallo lectura de encabezado: %s\n"
+msgid "Fread failed: %s"
+msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-"%s: la cabecera de región no modificable no pudo ser leída. ¿Estará corrupto "
-"el paquete?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NO ESTA BIEN"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "BIEN"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (FALTAN LAS CLAVES:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (CLAVES NO CONFIABLES:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: falló la apertura: %s\n"
@@ -2498,222 +2861,454 @@ msgstr "No se puede cambiar el directorio raíz: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "No es posible restablecer el directorio raíz: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Generando %d índice(s) faltante(s), espere…\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "no se ha establecido dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: omitiendo"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "error(%d) almacenando registro #%d en %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec falló: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp falló: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: omitiendo"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: encabezado dañado #%u recuperada -- omitiendo.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: no se pudo leer encabezado en 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "no se ha establecido dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "no se pudo crear el directorio %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "encabezado #%u erróneo en la base de datos -- omitiendo.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "no se puede añadir el registro original en %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"falló la reconstrucción de la base de datos: la base de datos original "
+"permanece en su lugar\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+"¡falló el remplazo de la base de datos antigua con la nueva base de datos!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NO "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "SI"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:, Provides:, y Obsoletes: dependencias soportan versiones."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"nombres de archivos almacenados como (dirName,baseName,dirIndex) \"tuple\", "
"no como ruta."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "la carga del paquete puede ser comprimida utilizando bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "la carga del paquete puede ser comprimida utilizando xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "la carga del paquete puede ser comprimida tilizando bzip2. "
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "los archivos de carga del paquete tienen el prefijo \"./\"."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
"nombre-versión-lanzamiento del paquete no se proporciona implícitamente."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
"las etiquetas del encabezado son siempre ordenadas después de ser cargadas."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "el intérprete de scriptlet puede utilizar argumentos del encabezado."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
"un conjunto de enlaces fijos de archivo puede ser instalado aunque no se "
"haya completado."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"scriplets de paquete pueden acceder a la base de datos rpm mientras se está "
"imstalando."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "soporte interno para scripts lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "el algoritmo de digest se puede configurar por paquete"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "soporte para capacidades de archivo POSIX1e."
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
"los scriptlets de los paquetes pueden ser expandidos en el momento de la "
"instalación."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
-msgstr "la comparación de dependencias soporta versiones con tilde."
+msgstr "la comparación de dependencias admite versiones con virgulilla."
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Magic erróneo"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Encabezado erróneo/imposible de leer"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "El tamaño del encabezado es demasiado extenso"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Archivo muy grande para compactar"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Tipo de archivo desconocido"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "El digest no coincide"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Error interno"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "El fichero del archivo no se encuentra en el encabezado"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " falló - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "la apertura de %s falló: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: no es un paquete rpm (o manifiesto de paquete)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "Actualizando / instalando...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "Limpiando / eliminando...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Preparando..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "Preparando paquetes..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Error de dependencias:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: no es un paquete rpm (o manifiesto de paquete): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s no puede ser instalado\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Recuperando %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "omitiendo %s - transferencia fallida\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "paquete %s no es reubicable\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "error al leer del archivo %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "\"%s\" especifica varios paquetes:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "no se puede abrir %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Instalando %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "no es un paquete rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "tipo de firma ilegal"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "versión del paquete RPM no soportada"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "falló la lectura: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "no es un paquete rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "no es posible crear el bloqueo %s sobre %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "esperando el bloqueo %s sobre %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Falló al abrir dl %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Falló al resolver el símbolo %s: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Falló al expandir macro de %%__collection_%s\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "El complemento %s no ha sido cargado\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Falló al resolver el símbolo %s de complemento %s: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "diferente"
@@ -2794,646 +3389,353 @@ msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
"se encontró el error desconocido %d mientras se manipulaba el paquete %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "segundo ':' omitido en %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "nombre de arquitectura omitida en %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Línea de datos incompleta en %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Demasiados argumentos en la línea de datos en %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Número de arq/os erróneo: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Línea determinada incompleta en %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Demasiados argumentos en la línea predeterminada en %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "':' faltante (se encontró 0x%02x) en %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "falta argumento para %s en %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "no se puede abrir %s en %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "falta la arquitectura para %s en %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "opción errónea '%s' en %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr "Falló al leer el vector auxiliar, ¿estará montado /proc?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Sistema desconocido: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Por favor contacte %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "No se puede abrir %s para lectura: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "No es posible restaurar el directorio actual: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
"soporte interno para macro de inclución de guiones <lua>, no fue construido\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "No se pudo crear un archivo temporal para %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "No se pudo duplicar el descritor de archivo %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s: macro de ejecución de guión fallido, waitpid(%d) rd %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s: macro de ejecución de guión fallido, señal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s: macro de ejecución de guión fallido, estado de terminación %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "formato desconocido"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "instalar "
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "borrar"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "no se puede abrir la base de datos Packages en %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "'(' extra en la etiqueta del paquete: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "'(' ausente en la etiqueta del paquete: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "')' ausente en la etiqueta del paquete: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: lectura de la clave publica fallida.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transacción"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh size(%d): INVALIDO, la lectura devolvió %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: INVALIDO\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh tags: INVALIDO, número de etiquetas(%d) fuera del rango\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh data: INVALIDO, número de bytes(%d) fuera del rango\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): INVALIDO, la lectura devolvió %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-"sigh tag[%d]: INVALIDO, etiqueta %d tipo %d desplazamiento %d contador %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh load: INVALIDO\n"
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh pad(%zd): INVALIDO, lectura de %zd bytes\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): INVALIDO, fstat(2) falló\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-"No se pudo leer la región inmutable del encabezado. ¿El paquete esta "
-"corrupto?\n"
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "No es posible firmar paquetes RPM v3\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
+
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "Resumen MD5: "
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Resumen SHA1 del encabezado:"
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Encabezado"
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "Comprobar firma: PARAMETROS ERRONEOS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Incapaz de recargar el encabezado de la firma\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "ignorado"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "falló"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "falta %c %s"
-
-#: lib/verify.c:422
+#: lib/verify.c:263
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Dependencias no satisfechas para %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "campo de anchura no válido"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "falta { después de %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "falta } después %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "formato de etiqueta vacío"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "nombre de etiqueta vacío"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "etiqueta desconocida"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] esperado al final del arreglo"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "] inesperado"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "} inesperado"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "se esperaba ? en la expresión"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "se esperaba { después de ? en la expresión"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "se esperaba } en la expresión"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "se esperaba : después de la subexpresión ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "se esperaba { después de : en la expresión"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "se esperaba | al final de la expresión"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iterador de arreglo usado con arreglos de diferente tamaño"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Generando %d índice(s) faltante(s), por favor aguarde...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "no se pudo abrir índice %s utilizando db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-"error(%d) al intentar obtener \"%s\" registros desde el índice %s: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "no se ha establecido dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: omitiendo"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "error(%d) almacenando registro #%d en %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec falló: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp falló: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: omitiendo"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: encabezado dañado #%u recuperada -- omitiendo.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "error(%d:%s) al intentar obtener siguiente llave desde el índice %s\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "error(%d) estableciendo registro de encabezado #%d\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "error(%d) eliminando registro de encabezado #%d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: no se pudo leer encabezado en 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "error(%d) estableciendo registros \"%s\" desde índice %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "error(%d) almacenando registros \"%s\" en %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "error(%d) eliminando registro \"%s\" de %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "error(%d) asignando nueva instancia de paquete\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "error(%d) obteniendo registros \"%s\" del índice %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "error(%d) almacenando registro %s en %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "no se ha establecido dbpath"
-#: lib/rpmdb.c:2875
+#: lib/verify.c:284
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "no se pudo crear el directorio %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "encabezado #%u erróneo en la base de datos -- omitiendo.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "no se puede añadir el registro original en %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-"falló la reconstrucción de la base de datos: la base de datos original "
-"permanece en su lugar\n"
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-"¡falló el remplazo de la base de datos antigua con la nueva base de datos!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "reemplazar archivos en %s con los archivos de %s a recuperar"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "falló la eliminación del directorio %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d error(%d) de %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d error(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "no se pudo obtener bloqueo %s en %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "compartido"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exclusivo"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "tipo de índice %x inválido en %s/%s\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "opciones db no reconocidas: \"%s\" ignorado.\n"
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s tiene un valor numérico no válido, omitido\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
-"%s tiene un valor largo demasiado grande o demasiado pequeño, omitido\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-"%s tiene un valor entero demasiado grande o demasiado pequeño, omitido\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Falló al decodificar la política para %s\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Falló al crear archivo temporal para %s: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Falló al escribir la política %s en el archivo %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Falló al crear manipulador de semanage\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Falló al conectar con el manipulador de políticas\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Falló iniciar transacción de política: %s\n"
-#: plugins/sepolicy.c:337
+#: lib/verify.c:448
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Falló al eliminar el archivo de política temporal %s: %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Falló al instalar módulo de política: %s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Falló al eliminar el módulo de política: %s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Falló al bifurcar el proceso: %s\n"
+msgid "missing %c %s"
+msgstr "falta %c %s"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Falló al ejecutar %s: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Dependencias no satisfechas para %s:\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s finalizó de manera anormal\n"
+msgid "Unable to reset nice value: %s"
+msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s falló con un código de salida %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Falló al enviar modificaciones de política\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Falló al expandir el camino restoreconf"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-"Falló al re etiquetar el sistema de archivos. Lor archivos podrían "
-"encontrarse mal etiquetados\n"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"Falló al recargar el contexto de archivo. Los archivos podrían estar mal "
-"etiquetados\n"
-
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Falló al extraer la política desde %s\n"
-#: rpmio/macro.c:185
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== activo %d vacío %d\n"
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(vacío)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(vacío)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "El macro %%%s tiene un cuerpo incompleto\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "El macro %%%s tiene opciones no terminadas\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "El macro %%%s tiene un nombre ilegal (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "El macro %%%s tiene un cuerpo incompleto\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "El macro %%%s tiene opciones no terminadas\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "El macro %%%s tiene un cuerpo vacío\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Falló la expansión del macro macro %%%s\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "El macro %%%s tiene un nombre ilegal (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "El macro %%%s (%s) no fue utilizado debajo del nivel %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Opción desconocida %c en %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3441,165 +3743,282 @@ msgstr ""
"Demasiados niveles de recursión en la expansión macro. Esto seguramente haya "
"sido provocado por una declaración macro recursiva.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "No terminado %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Un %% está seguido por un macro no analizable\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== activo %d vacío %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "error al crear el archivo temporal %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Archivo %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "El archivo %s tiene menos de %u bytes\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "falló al crear el directorio"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[ninguno]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(ningún error)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "error fatal:"
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "error: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "advertencia:"
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "sintaxis no válida en el macro de ejecución de scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "sintaxis no valida en el scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "falló el scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "sintaxis no valida en el archivo de scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "falló el enlace de lua: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[ninguno]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(ningún error)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "error fatal:"
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "error: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "advertencia:"
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "la asignación de memoria (%u bytes) retornó NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, ID de clave %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(ninguno)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite falló: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread falló: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush fallido: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "Firma PGP no soportada\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "Algoritmo hash PGP no soportado %u\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "Algoritmo de llave pública PGP no soportado %u\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "No se pudo crear la tuberia para firmar: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "No se pudo ejecutar %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "falló la llamada al sistema exec para gpg (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg falló al escribir la firma\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "incapaz de leer la firma\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "faló makeTempFile\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s ya contiene una firma idéntica, ignorando\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead falló: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature falló: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: falló headerRead: %s\n"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "No es posible firmar paquetes RPM v3\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s ya contiene una firma idéntica, ignorando\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature falló: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead falló: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "falló el reemplazo %s: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: falló la lectura del manifiesto: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "no verificar firma de encabezado+carga"
diff --git a/po/fi.po b/po/fi.po
index 71c87f795..0f1418545 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Finnish (http://www.transifex.com/rpm-team/rpm/language/fi/)\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,496 +43,558 @@ msgstr "Tätä ohjelmaa voi vapaasti levittää GNU GPL:n puittessa\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "putken luominen --pipe:lle epäonnistui: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "suoritus epäonnistui\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "parametri ei ole RPM paketti\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "virhe luettaessa otsikkotietoa paketista\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "kuorman uudelleenavaus ei onnistu: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Kysely/tarkistus pakettivalitsimet"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Kyselyvalitsimet (-q tai --query yhteydessä)"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Tarkistusvalitsimet (-V tai --verify yhteydessä)"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Asennus-, päivitys- ja poistovalitsimet:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Yhteiset valitsimet kaikille rpm moodeille:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "vain yhden tyyppinen kysely/tarkistus voidaan suorittaa kerralla"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "odottamattomia kyselyvalintoja"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "odottamaton kyselyn muotoilu"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "odottamaton kyselyn lähde"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "vain yksi päätila voidaan määritellä"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "tiedostoja voidaan siirtää toiselle polulle vain asennettaessa"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "--prefix valintaa ei voi käyttää --relocate tai --excludepath kanssa"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate ja --excludepath: voidaan käyttää vain uusia paketteja "
-"asennettaessa"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix: voidaan käyttää vain uusia paketteja asennettaessa"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "--prefix parametrien pitää alkaa /-merkillä"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "vain toinen --excludedocs tai --includedocs voidaan antaa"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches: voidaan käyttää vain paketteja poistettaessa"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles: voidaan käyttää vain paketteja asennettaessa"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb: voidaan käyttää vain paketteja asennettaessa tai poistettaessa"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"skriptien estovalintoja voidaan käyttää vain paketteja asennettaessa tai "
-"poistettaessa"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"laukaisimien estovalintoja voidaan käyttää vain paketteja asennettaessa tai "
-"poistettaessa"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "parametrit --root (-r):lle alettava /-merkillä"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "poistolle ei määritelty paketteja"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "asennukselle ei määritelty paketteja"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "kyselylle ei annettu parametrejä"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "tarkistukselle ei annettu parametrejä"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot on jo määritelty, %s:ää ei huomioida\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "käännä %prep-osioon asti spec-tiedostosta"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<spec-tiedosto>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "käännä %build-osioon asti (%prep ja %build) spec-tiedostosta"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"käännä %install-osioon asti (%prep, %build ja %install) spec-tiedostosta"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "tarkista %files-osio spec-tiedostosta"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "käännä lähde- ja binääripaketit spec-tiedostosta"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "käännä vain binääripaketti spec-tiedostosta"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "käännä vain lähdepaketti spec-tiedostosta"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<lähdepaketti>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr "käännä %install-osioon asti (%prep, %build ja %install) lähdepaketista"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "käännä %prep-osioon asti tar-tiedostosta"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tar-tiedosto>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "käännä %build-osioon asti (%prep ja %build) tar-tiedostosta"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"käännä %install-osioon asti (%prep, %build ja %install) tar-tiedostosta"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "tarkista %files-osio tar-tiedostosta"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "käännä lähde- ja binääripaketit tar-tiedostosta"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "käännä vain binääripaketti tar-tiedostosta"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "käännä vain lähdepaketti tar-tiedostosta"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "käännä binääripaketti lähdepaketista"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<lähdepaketti>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr "käännä %install-osioon asti (%prep, %build ja %install) lähdepaketista"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "ohita käännösjuuri"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "poista käännöspuu, kun valmis"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "jätä ExcludeArch-directiivit huomioimatta"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "älä suorita mitään käännöksen vaiheita"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "älä tarkista käännösriippuvuuksia"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "poista lähdekoodit kun valmis"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "poista määrittelytiedosto kun valmis"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "siirry suoraan määriteltyyn vaiheeseen (vain c ja i yhteydessä)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "ohita kohdealusta"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Käännösvalitsimet:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Yhteiset valitsimet kaikille rpm moodeille:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Puuttuvia käännösriippuvuuksia:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "En voi avata spec-tiedostoa %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "tar-putken avaus epäonnistui: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Uudelleen nimeäminen %s -> %s epäonnistui: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "%s:n stat epäonnistui: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Tiedosto %s ole tavallinen tiedosto.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Tiedosto %s ei vaikuta spec-tiedostolta.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Käännetään kohdealustoille: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Käännetään kohteelle %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "parametrit --root (-r):lle alettava /-merkillä"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "alusta tietokanta"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "rakenna tietokanta uudestaan asennettujen pakettien tiedoista"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "tarkista tietokanta"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Tietokantavalitsimet:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "vain yksi päätila voidaan määritellä"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "tarkista paketin allekirjoitus"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "ei annettu parametrejä"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Kysely/tarkistus pakettivalitsimet"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Kyselyvalitsimet (-q tai --query yhteydessä)"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Tarkistusvalitsimet (-V tai --verify yhteydessä)"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Asennus-, päivitys- ja poistovalitsimet:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "vain yhden tyyppinen kysely/tarkistus voidaan suorittaa kerralla"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "odottamattomia kyselyvalintoja"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "odottamaton kyselyn muotoilu"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "odottamaton kyselyn lähde"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "tiedostoja voidaan siirtää toiselle polulle vain asennettaessa"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix valintaa ei voi käyttää --relocate tai --excludepath kanssa"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate ja --excludepath: voidaan käyttää vain uusia paketteja "
+"asennettaessa"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix: voidaan käyttää vain uusia paketteja asennettaessa"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix parametrien pitää alkaa /-merkillä"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "vain toinen --excludedocs tai --includedocs voidaan antaa"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches: voidaan käyttää vain paketteja poistettaessa"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles: voidaan käyttää vain paketteja asennettaessa"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb: voidaan käyttää vain paketteja asennettaessa tai poistettaessa"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"skriptien estovalintoja voidaan käyttää vain paketteja asennettaessa tai "
+"poistettaessa"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"laukaisimien estovalintoja voidaan käyttää vain paketteja asennettaessa tai "
+"poistettaessa"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "poistolle ei määritelty paketteja"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "asennukselle ei määritelty paketteja"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "kyselylle ei annettu parametrejä"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "tarkistukselle ei annettu parametrejä"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "allekirjoita paketti (hylkää nykyinen allekirjoitus)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "poista paketin allekirjoitus"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Allekirjoitusvalitsimet:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "%s:ää ei voitu suorittaa: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Sinun pitää asettaa \"gpg_name:\" makrotiedostossasi\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Syötä salasana: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Salasana täsmää.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "käytä seuraava kyselyformaattia"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -541,32 +603,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Suoritetaan(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "%s:n suoritus epäonnistui (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -575,235 +642,315 @@ msgstr ""
"\n"
"RPM käännösvirheitä:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "syntaksivirhe jäsentäessä ==:aa\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "syntaksivirhe jäsentäessä &&:aa\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "syntaksivirhe jäsentäessä ||:aa\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "jäsennysvirhe lausekkeessa\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "pariton (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- vain numeroissa\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! vain numeroissa\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "tyyppien täytyy olla yhtenevät\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / ei tuettu merkkijonoille\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- ei tuettu merkkijoinoille\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& ja || ei tuettu merkkijoinoille\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "syntaksivirhe lausekkeessa\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Puuttuva '(' %s %s:ssä\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "puuttuva ')' %s:(%s:ssä\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Virheellinen %s merkki: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Puuttuva %s %s %s:ssä\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Virheellinen syntaksi: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Virheellinen oikeusmäärittely %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Virheellinen hakemisto-oikeusmäärittely %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Tiedostojen täytyy alkaa \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Tiedosto lueteltu kahdesti: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolinen linkki osoittaa BuildRoot:iin: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Tiedostoa ei löytynyt: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: julkisen avaimen luku epäonnistui\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: ei ole panssaroitu julkinen avain.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "hakemiston luonti epäonnistui"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Tiedosto tarvitsee aloitusmerkin \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Tiedostoa ei löytynyt täydennyksellä: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "%%files tiedostoa %s ei voitu avata: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "rivi: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Tiedostoa ei löytynyt täydennyksellä: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Virheellinen tiedosto: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Virheellinen omistaja/ryhmä: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Tarkistetaan paketoimattomia tiedostoja: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -812,548 +959,605 @@ msgstr ""
"Löytyi asennettuja (mutta paketoimattomia) tiedostoja:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Käsitellään tiedostoja: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: rivi: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Kuorman kirjoitus %s:ään ei onnistu: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Kuorman luku %s:stä ei onnistu: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Tuntematon kuorman pakkaus: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "En voi avata väliaikaistiedostoa.\n"
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Tilapäisotsikon kirjoitus ei onnistu\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Allekirjoitusotsikon uudelleenlataus ei onnistu\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "%s:aa ei voitu avata: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Pakettia ei voitu kirjoittaa: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Otsikkotiedon lukeminen %s:stä epäonnistui: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Otsikkotiedon kirjoittaminen %s:n epäonnistui: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Kirjoitettiin: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Suoritetaan \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "%s:n suoritus epäonnistui.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Paketin tarkistus \"%s\" epäonnistui.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Tiedostonimen muodostus paketille %s ei onnistu: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "%s:n luonti ei onnistu: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "rivi %d: toinen %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog merkintöjen täytyy alkaa *:llä\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "epätäydellinen merkintä %%changelog:issa\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "virheellinen päivämäärä %%changelog:issa: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog ei ole kronologisessa järjestyksessä\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "puuttuva nimi %%changelog:issa\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "ei kuvausta %%changelog:issa\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "rivi %d: virhe jäsennettäessä %%description-osiota %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "rivi %d: virheellinen valinta %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "rivi %d: liikaa nimiä: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "line %d: pakettia ei ole olemassa: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "line %d: toinen %%description-osio\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "rivi %d: virhe jäsennettäessä %%files-osiota: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "rivi %d: virheellinen numero: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d määritelty useita kertoja\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Arkkitehtuuri on poissuljettu: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Arkkitehtuuri ei ole mukaanluettu: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "Käyttöjärjestelmä on poissuljettu: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "Käyttöjärjestelmä ei ole mukaanluettu: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "kenttä %s on vaadittu kenttä paketissa: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Useita %s-merkintöjä paketissa: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Ikonia %s ei voida avata: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Ikonia %s ei voida lukea: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Tuntematon ikonityyppi: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "rivi %d: laiton merkki '%c' %s:ssä\n"
+msgid "line %d: %s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "rivi %d: laiton merkki %s:ssä\n"
+msgid "%s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "rivi %d: laiton merkkijono \"..\" %s:ssä\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "rivi %d: Epoch-kentän täytyy olla etumerkitön numero: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "rivi %d: virheellinen käännösarkkitehtuurin muoto: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Virheellinen pakettimäärittely: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Paketti on jo olemassa: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "rivi %d: tuntematon nimiö: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} ei voi olla tyhjä\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} ei voi olla \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Virheellinen lähde: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Ei patchia numero %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Ei lähdettä numero %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Virhe jäsennettäessä %%setup-osiota: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "rivi %d: virheellinen argumentti %%setup:ille: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "rivi %d: virheellinen %%setup valitsin %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Virheellinen patch-numero %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "rivi %d: toinen %%prep-osio\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "rivi %d: laukaisimissa pitää olla --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "rivi %d: virhe jäsennettäessä %s:ää: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "rivi %d: sisäisen skriptin täytyy päättyä '>':n: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "rivi %d: skriptitulkin täytyy alkaa '/':lla: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "rivi %d: toinen %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "rivi %d: %s:\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ei voi avata %s:ää: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%else ilman %%if:iä\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endif ilman %%if:iä\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Ei yhteensopivia arkkitehtureeja käännökselle\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Paketissa ei ole %%description-osiota: %s\n"
@@ -1424,450 +1628,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Ei voitu luoda putkea %s:lle: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Ei voitu suorittaa %s:ää: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Ei voitu suorittaa %s:ää: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) epäonnistui: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load epäonnistui: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Tiedoston \"%s\" tunnistaminen epäonnistui: moodi %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Etsitään %s:ää: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "%s:ää ei löytynyt\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "määrittelytiedoston %s kysely epäonnistui\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(virhe 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Virheellinen otsikkotieto"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Otsikkotieto liian suuri"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Tuntematon tiedostotyyppi"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "en saa %s lukitusta tietokantaan %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "jaettua"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "poissulkevaa"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Tarkistussumma ei täsmää"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Sisäinen virhe"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "virhe(%d) tallennettaessa tietuetta %s %s:ään\n"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "virhe(%d) poistettaessa tietuetta %s %s:stä\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "virhe(%d) lisättäessä otsikkon #%d tietuetta\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "virhe(%d) poistettaessa otsikon #%d tietuetta\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "virhe(%d) varattaessa uutta paketti-instanssia\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " epäonnistui - "
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s on Delta RPM eikä sitä voida suoraan asentaa\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Tuntematon kuorma (%s) paketissa %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "paketti %s on jo lisätty, ohitetaan %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "paketti %s oli jo lisätty, korvataan %s:lla\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(ei ole binääridataa)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(ei ole luku)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(ei ole merkkijono)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(virheellinen tyyppi)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr ""
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(ei ole base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(virheellinen tyyppi)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(ei ole binääridataa)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(virheellinen xml-tyyppi)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(ei ole OpenPGP-allekirjoitus)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normaali"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "korvattu"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "ei asennettu"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "verkkojaettu"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "väärä väri"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(tuntematon)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(ei ole merkkijono)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "käyttäjää %s ei ole olemassa, käytetään käyttäjää root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "ryhmää %s ei ole olemassa, käytetään ryhmää root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s talletettiin %s:nä\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s luotu %s:na\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature epäonnistui: %s"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ei allekirjoitusta saatavilla\n"
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "tyhjä nimiön formaatti"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "tyhjä nimiön nimi"
-#: lib/package.c:581
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: otsikon luku epäonnistui: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "']' puuttuu taulukkomäärittelyn lopusta"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "odottamaton ']'"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "odottamaton '}'"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "odotin '?'-merkkiä ilmauksessa"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "odotin '{' '?'-merkin jälkeen lausekkeessa"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "odotin '}'-merkkiä lausekkeessa"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "odotin ':' '?'-merkin jälkeen ali-lausekkeessa "
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "odotin '{' ':'-merkin jälkeen lausekkeessa "
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "odotin '}'-merkkiä ilmauksen lopussa"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Tiedoston luku epäonnistui: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "lue <TIEDOSTO:...> vakiotiedostojen sijaan"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<TIEDOSTO:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "älä tarkista pakettien tarkistussummia"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "älä tarkista otsikkotietoja haettaessa tietokanssata"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "älä tarkista paketin allekirjoitusta"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "lähetä vakiotuloste <komento>:lle"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "käytä <hakem> ylimpänä hakemistona"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "näytä tunnetut kyselymuodot"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "näytä lopullinen rpmrc ja makro-konfiguraatio"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "tulosta vähemmän yksityiskohtia"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "tulosta enemmän yksityiskohtia"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "tulosta käytetyn rpm:n versio"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1888,12 +2203,12 @@ msgstr "siirroissa pitää olla =-merkki"
msgid "relocations must have a / following the ="
msgstr "siirroissa pitää olla / =-merkin jälkeen"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"asenna kaikki tiedostot, myös konfiguraatiot, jotka muuten ehkä ohitettaisiin"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1901,151 +2216,161 @@ msgstr ""
"poista kaikki paketit, joiden nimeä vastaa <paketti> (tavallisesti, jos "
"<paketti> määrittää useita paketteja, tulee virhe)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "poista paketti"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "älä asenna konfigurointiedostoja"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "älä asenna dokumentointia"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "ohita <polku>-alkuiset tiedostot"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<polku>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "lyhenne parametreille --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "päivitä vain jo asennetut paketit"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<pakettitiedosto>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "tulosta risuaitaa paketin asentuessa (-v:n kanssa hyvä)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "älä tarkista paketin arkkitehtuuria"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "älä tarkista paketin käyttöjärjestelmää"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "älä tarkista levytilaa ennen asennusta"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "asenna dokumentaatio"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "asenna paketteja"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "päivitä tietokanta, mutta älä muuta tiedostojärjestelmää"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "älä tarkista paketin riippuvuuksia"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "älä tarkista tiedostojen tarkistussummia"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "älä tarkista tiedostojen tarkistussummia"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "älä muuta asennusjärjestystä riippuvuuksien tyydyttämiseksi"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "älä suorita pakettikohtaisia skriptejä"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "älä suorita %%pre-scriptiä"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "älä suorita %%post-scriptiä"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "älä suorita %%preun-scriptiä"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "älä suorita %%postun scriptiä"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "älä suorita tämän paketin laukaisemia skriptejä"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "älä suorita %%triggerprein skriptejä"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "älä suorita %%triggerin skriptejä"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "älä suorita %%triggerun scriptejä"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "älä suorita %%triggerpostun scriptejä"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2053,368 +2378,407 @@ msgstr ""
"päivitä vanhempaan versioon (--force päivitettäessä tekee tämän "
"automaattisesti)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "tulosta asennuksen eteneminen prosentteina"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "siirrä paketti hakemistoon <hakem>, jos siirrettävissä"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<hakemisto>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "siirrä tiedostot hakemistosta <vanhapolku> hakemistoon <uusipolku>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<vanha>=<uusi>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "älä huomioi tiedostokonflikteja pakettien välillä"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "asenna uudelleen, jos paketti on jo asennettu"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "älä asenna, mutta kerro onnistuisiko se"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "päivitä paketteja"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "kysele/tarkista kaikki paketit"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "rpm allekirjoituksen tarkistustila"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "kysele/tarkista pakettia, jonka omistuksessa <tiedosto> on"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "kysele/tarkista paketteja ryhmässä"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "kysele/tarkista pakettitiedostoa"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm kyselytila"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm tarkistustila"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "kysele/tarkista paketteja, jotka vaativat ominaisuutta"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "kysele/tarkista paketteja, jotka tarjoavat ominaisuuden"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "luettele kaikki konfiguraatiotiedostot"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "luettele kaikki dokumentaatiotiedostot"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "luettele kaikki dokumentaatiotiedostot"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "luettele kaikki konfiguraatiotiedostot"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "luettele paketin tiedostot"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "ohita %%ghost tiedostot"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "ohita %%ghost tiedostot"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "näytä lueteltujen tiedostojen tilat"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "älä tarkista tiedostojen kokoa"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "älä tarkista tiedostojen symbolisen linkin polkua"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "älä tarkista tiedostojen omistajaa"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "älä tarkista tiedostojen ryhmää"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "älä tarkista tiedostojen muutosaikaa"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "älä tarkista tiedostojen oikeuksia"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "älä tarkista paketin tiedostoja"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "älä tarkista paketin riippuvuuksia"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "älä suorita tarkistusskriptejä"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "arkiston %s%s purkaminen epäonnistui: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " tiedostolle "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s epäonnistui tiedostolle %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s epäonnistui: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "virheelinen muoto: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(ei sisällä tiedostoja)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normaali "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "korvattu "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "ei asennettu "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "verkkojaettu "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "väärä väri "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(ei tilaa) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(tuntematon %3d)"
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "ryhmässä %s ei ole paketteja\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "mikään paketti ei laukaise %s:a\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "epämuodostunut %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "mikään paketti ei tarvitse %s:a\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "mikään paketti ei tarjoa %s:a\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "tiedosto %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "tiedostoa %s ei omista mikään paketti\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "virheellinen paketin numero: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "tietuetta %u ei voitu lukea\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "paketti %s ei ole asennettu\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "tuntematon nimiö: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
-msgstr "EI OK"
-
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr "(PUUTTUVIA AVAIMIA:"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (EPÄLUOTETTAVIA AVAIMIA:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "EI OK"
-#: lib/rpmchecksig.c:393
-msgid ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
msgstr ""
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: avaus epäonnistui: %s\n"
@@ -2439,212 +2803,442 @@ msgstr "Juurihakemiston vaihto ei onnistu: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Juurihakemiston palautus ei onnistu: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "dbpath ei ole asetettu\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: ohitetaan"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "virhe(%d) tallennettaessa tietuetta #%d %s:ään\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec epäonnistui: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp epäonnistui: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: ohitetaan"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: ohitetaan vioittunut otsikkotietue #%u.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: otsikkoa ei voida lukea (0x%x)\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "dbpath ei ole asetettu"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "hakemiston %s luonti epäonnistui: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "tietue numero %u tietokannassa viallinen -- ohitetaan.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "alkupäisen tietueen %u lisäys ei onnistu\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"tietokannan uudelleenrakennus epäonnistui: alkuperäinen kanta paikallaan\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "vanhan tietokannan korvaus uudella epäonnistui!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "EI "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "KYLLÄ "
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Virheellinen otsikkotieto"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Otsikkotieto liian suuri"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Tuntematon tiedostotyyppi"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Tarkistussumma ei täsmää"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Sisäinen virhe"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " epäonnistui - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "%s:n avaus ei onnistunut: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: ei ole rpm paketti (tai pakettilista)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Valmistellaan..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Puuttuvia riippuvuuksia:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: ei ole rpm paketti (tai pakettilista): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s:ää ei voida asentaa\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Haetaan %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "ohitetaan %s - siirto epäonnistui\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "paketti %s ei ole uudelleensijoitettava\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "virhe luettaessa tiedostosta %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "\"%s\" määrittää useita paketteja:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "virhe: en voi avata %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Asennetaan %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "ei ole RPM paketti"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "laiton allekirjoitustyyppi"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "RPM pakettiversio ei ole tuettu"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "luku epäonnistui: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "ei ole RPM paketti\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "%s-lukon luonti %s:een ei onnistu (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "odotetaan %s-lukkoa %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "eri"
@@ -2720,797 +3314,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "tuntematon virhe %d käsitellessä pakettia %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "toinen ':' puuttuu, %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "puuttuva arkkitehtuurin nimi, %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Epätäydellinen datarivi, %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Liian monta parametriä datarivillä %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Virheellinen arkkitehtuuri/käyttöjärjestelmä numero: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Epätäydellinen oletusrivi, %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Liian monta parametriä oletusrivillä %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "puuttuva ':' (löydettiin 0x%02x): %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "puuttuva argumentti %s:lle: %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "en voi avata %s:aa %s:%d:ssä: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Tuntematon järjestelmä: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Ota yhteyttä %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "En voi avata %s luettavaksi: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Ei voitu luoda tilapäistiedostoa %s:lle: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s scripti epäonnistui, waitpid(%d) palautti %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s skripti epäonnistui, signaali %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s skripti epäonnistui, palautti %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Tuntematon formaatti"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "Pakettitietokantaa %s ei voida avata\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: julkisen avaimen luku epäonnistui.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Otsikko "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Allekirjoitusotsikon uudelleenlataus ei onnistu\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "epäonnistui"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "puuttuva %c %s"
-
-#: lib/verify.c:422
+#: lib/verify.c:263
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Tyydyttämättömiä riippuvuuksia %s:lle:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "puuttuva '{' '%':n jälkeen"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "puuttuva '{' '%{':n jälkeen"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "tyhjä nimiön formaatti"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "tyhjä nimiön nimi"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "tuntematon nimiö"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "']' puuttuu taulukkomäärittelyn lopusta"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "odottamaton ']'"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "odottamaton '}'"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "odotin '?'-merkkiä ilmauksessa"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "odotin '{' '?'-merkin jälkeen lausekkeessa"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "odotin '}'-merkkiä lausekkeessa"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "odotin ':' '?'-merkin jälkeen ali-lausekkeessa "
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "odotin '{' ':'-merkin jälkeen lausekkeessa "
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "odotin '}'-merkkiä ilmauksen lopussa"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "indeksin %s avaus db%d:llä ei onnistu - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "dbpath ei ole asetettu\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: ohitetaan"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "virhe(%d) tallennettaessa tietuetta #%d %s:ään\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec epäonnistui: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp epäonnistui: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: ohitetaan"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: ohitetaan vioittunut otsikkotietue #%u.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "virhe(%d) lisättäessä otsikkon #%d tietuetta\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "virhe(%d) poistettaessa otsikon #%d tietuetta\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: otsikkoa ei voida lukea (0x%x)\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "virhe(%d) asetettaessa \"%s\" tietuetita indeksistä %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "virhe(%d) tallennettaessa tietuetta %s %s:ään\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "virhe(%d) poistettaessa tietuetta %s %s:stä\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "virhe(%d) varattaessa uutta paketti-instanssia\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "virhe(%d) haettaessa \"%s\" tietueita indeksistä %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "virhe(%d) tallennettaessa tietuetta %s %s:ään\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "dbpath ei ole asetettu"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "hakemiston %s luonti epäonnistui: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "tietue numero %u tietokannassa viallinen -- ohitetaan.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "alkupäisen tietueen %u lisäys ei onnistu\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-"tietokannan uudelleenrakennus epäonnistui: alkuperäinen kanta paikallaan\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "vanhan tietokannan korvaus uudella epäonnistui!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "korvaa tiedostot %s:ssä tiedostoilla %s:stä korjataksesi"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "hakemiston %s poisto epäonnistui: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "en saa %s lukitusta tietokantaan %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "jaettua"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "poissulkevaa"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:225
+#: lib/verify.c:284
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
-
-#: plugins/sepolicy.c:306
+#: lib/verify.c:448
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "puuttuva %c %s"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Tyydyttämättömiä riippuvuuksia %s:lle:\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktiivisia %d tyhjiä %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(tyhjä)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(tyhjä)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makrossa %%%s on päättämätön runko\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makrossa %%%s on päättämättömiä valitsimia\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makron %%%s nimi on laiton (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makrossa %%%s on päättämätön runko\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makrossa %%%s on päättämättömiä valitsimia\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Makron %%%s runko on tyhjä\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Makron %%%s laajennos ei onnistunut\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Makron %%%s nimi on laiton (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makroa %%%s (%s) ei käytetty tason %d alla\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Tuntematon valitsin %c %s(%s):ssä\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Päättämätön %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "%% seuraa makro jota ei voida jäsentää\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktiivisia %d tyhjiä %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "virhe luotaessa tilapäistä tiedostoa %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Tiedosto %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "hakemiston luonti epäonnistui"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr ""
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(ei virhettä)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "vakava virhe: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "virhe: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "varoitus: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "virheellinen syntaksi lua-skriptissä: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "virheellinen syntaksi lua-skriptissä: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua-skripti epäonnistui: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "virheellinen syntaksi lua-tiedostossa: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua-koukku epäonnistui: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(ei virhettä)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "vakava virhe: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "virhe: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "varoitus: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "muistin varaus (%u tavua) palautti NULL:in.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(ei mitään)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite epäonnistui: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Tiedoston luku epäonnistui: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush epäonnistui: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "%s:ää ei voitu suorittaa: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "gpg:n suoritus epäonnistui (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg ei voinut kirjoittaa allekirjoitusta\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "en voinut lukea allekirjoitusta\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp epäonnistui\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead epäonnistui: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature epäonnistui: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr ""
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature epäonnistui: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead epäonnistui: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: pakettilistan luku epäonnistui: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "älä tarkista otsikon ja kuorman allekirjoitusta"
diff --git a/po/fr.po b/po/fr.po
index f13dded22..7458b2aff 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Mathieu LEFEBVRE Mathdabomb <mathdabomb@gmail.com>, 2011-2012.
+# Jérôme Fenal <jfenal@gmail.com>, 2013
+# Mathieu LEFEBVRE Mathdabomb <mathdabomb@gmail.com>, 2011-2012,2015
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:40+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: French (http://www.transifex.com/projects/p/rpm/language/"
-"fr/)\n"
+"Language-Team: French (http://www.transifex.com/rpm-team/rpm/language/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -47,520 +47,586 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "la création d'un pipe pour --pipe est défaillant : %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "échec de l'exec\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "l'argument n'est pas un paquet RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "erreur dans la lecteur de l'entête du paquet\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "impossible de réouvrir la charge utile: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Options de sélection des requête/vérification des paquets :"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Options de requêtes (avec -q ou --query) :"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Options de vérifications (avec -V ou --verify) :"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Options d'installation/désinstallation/mise à jour :"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Options communes à tous les modes et exécutables rpm :"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "un seul type de requête/vérification à la fois"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "option de requête inattendue"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "format de requête inattendu"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "source de requête inattendue"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "un seul mode majeur peut être spécifié"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "seule l'installation et la mise à niveau peuvent être forcé"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "les fichiers ne peuvent être relogés qu'à l'installation"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "impossible d'utiliser --prefix avec --relocate ou --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate et --excludepath ne peuvent être utilisés qu'à l'installation de "
-"nouveaux paquets"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix ne peut être utilisé qu'à l'installation de nouveaux paquets"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "les arguments de --prefix doivent commencer par un /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "utiliser --excludedocs _OU_ --includedocs (pas les 2)"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches ne peut être utilisé qu'à la désinstallation de paquet"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles ne peut être utilisé qu'à l'installation de paquet"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb ne peut être utilisé qu'à l'installation/la désinstallation de "
-"paquet"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"les options désactivant les scripts ne peuvent être utilisées qu'à la (dés)"
-"installation"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"les options désactivant les triggers ne peuvent être utilisées qu'à la (dés)"
-"installation"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps ne peut être utilisé qu'à l'installation/la désinstallation/la "
-"vérification de paquet"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-"--test ne peut être utilisé qu'à l'installation/la désinstallation de paquet"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "les arguments ed --root (-r) doivent commencer par un /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "pas de paquet à désinstaller"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "pas de paquet à installer"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "aucun argument fournit à la requête"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "aucun argument fournit à la vérification"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot déjà spécifié, %s ignoré\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"construction jusqu'à la section %prep (déballage des sources et applications "
"des patchs) du <fichier_spec>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<fichier_spec>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
"construction jusqu'à la section %build (%prep, et compilation) du "
"<fichier_spec>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"construction jusqu'à la section %install (%prep, %build, et installation) du "
"<fichier_spec>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "vérifier la section %files du <fichier_spec>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "construire les paquet sources et binaires à partir du <fichier_spec>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "construction du paquet binaire seulement à partir du <fichier_spec>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "construction du paquet source seulement à partir du <fichier_spec>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<paquet source>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"construire jusqu'à la section %install (%prep, %build, et installation) à "
+"partir du <paquet source>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"construire jusqu'à la section %prep (déballage des sources et application "
"des patchs) à partir du <tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
"construire jusqu'à la section %build (%prep, puis compilation) à partir du "
"<tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"construire jusqu'à la section %build (%prep, %build, puis installation) à "
"partir du <tarball>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "vérifier la section %files à partir du <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "construire les paquet source et binaire à partir du <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "construire seulement le paquet binaire à partir du <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "construire seulement le paquet source à partir du <tarball>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "construire le paquet binaire à partir du <paquet source>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<paquet source>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"construire jusqu'à la section %install (%prep, %build, et installation) à "
-"partir du <paquet source>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "surcharger le buildroot"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "effacer l'arborescence de construction une fois terminé"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorer les directives ExcludeArch: du fichier spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "déboguer la machine à états de fichiers (déballage)"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "n'exécuter aucune étape de la construction"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "ne pas vérifier les dépendances de construction"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
"générer un(des) entête(s) de paquet compatible(s) avec l'empaquetage rpm v3 "
"(hérité)"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
+msgstr "ne pas exécuter l'étape %clean de la construction"
+
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "ne pas exécuter l'étape %check de la construction"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "ne pas accepter les msgstr de l'i18n du specfile"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "effacer les sources une fois terminé"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "effacer le fichier spec une fois terminé"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "aller directement à l'étape spécifiée (seulement pour c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "surcharger la plate-forme cible"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"Options de construction avec [ <fichier_spec> | <tarball> | <paquet "
"source> ] :"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Options communes à tous les modes et exécutables rpm :"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Dépendances de construction manquantes:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Impossible d'ouvrir le fichier spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Impossible d'ouvrir le pipe de tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Impossible de lire le fichier spec à %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Impossible de renommer %s en %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "échec de stat sur %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Fichier %s non régulier.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Le fichier %s ne semble pas être un fichier spec.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Construction pour plate-formes cibles: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Construction pour cible %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "les arguments ed --root (-r) doivent commencer par un /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "initialiser la base de données"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"refaire les listes inversées de la base de données à partir des entêtes des "
"paquets installés"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "vérifier les fichiers de la base de données"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Options de la base de données :"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "un seul mode majeur peut être spécifié"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "vérifier la(les) signature(s) du paquet"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importer une clé publique blindé"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
-msgstr ""
+msgstr "n'importe pas, mais dit si ça fonctionnerait ou pas"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "listes les clés du trousseau RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Options du trousseau :"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "aucun argument fournit"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Options de sélection des requête/vérification des paquets :"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Options de requêtes (avec -q ou --query) :"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Options de vérifications (avec -V ou --verify) :"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Options d'installation/désinstallation/mise à jour :"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "un seul type de requête/vérification à la fois"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "option de requête inattendue"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "format de requête inattendu"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "source de requête inattendue"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "seule l'installation et la mise à niveau peuvent être forcé"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "les fichiers ne peuvent être relogés qu'à l'installation"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "impossible d'utiliser --prefix avec --relocate ou --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate et --excludepath ne peuvent être utilisés qu'à l'installation de "
+"nouveaux paquets"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix ne peut être utilisé qu'à l'installation de nouveaux paquets"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "les arguments de --prefix doivent commencer par un /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"--hash (-h) ne peut être utilisé que lors d'une installation ou une "
+"suppression de paquet"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"--percent ne peut être utilisé que lors d'une installation ou une "
+"suppression de paquet"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "utiliser --excludedocs _OU_ --includedocs (pas les 2)"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches ne peut être utilisé qu'à la désinstallation de paquet"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles ne peut être utilisé qu'à l'installation de paquet"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb ne peut être utilisé qu'à l'installation/la désinstallation de "
+"paquet"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"les options désactivant les scripts ne peuvent être utilisées qu'à la "
+"(dés)installation"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"les options désactivant les triggers ne peuvent être utilisées qu'à la "
+"(dés)installation"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps ne peut être utilisé qu'à l'installation/la désinstallation/la "
+"vérification de paquet"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"--test ne peut être utilisé qu'à l'installation/la désinstallation de paquet"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "pas de paquet à désinstaller"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "pas de paquet à installer"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "aucun argument fournit à la requête"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "aucun argument fournit à la vérification"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "signer le(s) paquet(s)"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "signer le(s) paquet(s) (identique à --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "supprimer les signatures de paquets"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Options de signatures :"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Impossible d'exécuter %s : %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
"Vous devez affecter une valeur à \"%%_gpg_name\" dans votre fichier de "
"macros\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Entrez la phrase de passe : "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Phrase de passe bonne.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Échec du mot de passe ou clé GPG expirée\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "analyse du fichier(s) de spec sur stdout"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "questionner le(s) fichier(s) de spec"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "opérer sur le(s) rpm(s) binaire(s) généré(s) par spec (défaut)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "opérer sur le rpm source généré par spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "utiliser le format de requête suivant"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Options spec :"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "pas d'arguments donnés pour analyser"
@@ -569,32 +635,37 @@ msgstr "pas d'arguments donnés pour analyser"
msgid "Unable to open temp file: %s\n"
msgstr "Impossible d'ouvrir le fichier temporaire : %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Impossible d'ouvrir le flux : %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Exécution_de(%s) : %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "L'exec de %s a échoué (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "Erreur d'exécution du scriptlet %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Mauvais statut de sortie pour %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -604,235 +675,315 @@ msgstr ""
"\n"
"Erreur de construction de RPM :\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "erreur de syntaxe en analysant ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "erreur de syntaxe en analysant &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "erreur de syntaxe en analysant ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "erreur de syntaxe dans l'expression\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "( non fermée\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- seulement sur des nombres\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! seulement sur des nombres\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "les types doivent correspondre\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / non supportés sur des chaînes de caractères\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- non prix en charge sur des chaînes de caractères\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& et || ne sont pas prix en charge sur des chaînes de caractères\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "erreur de syntaxe dans l'expression\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "'(' manquante dans %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "')' manquante dans %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Lexème %s invalide : %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%s manquant(e) dans %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "espace non-blanc suivant %s() : %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Mauvaise syntaxe : %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Mauvais mode spec : %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Mauvais dirmode spec : %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Mauvaise longueur de la locale : « %s » dans %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Deux fois la même locale %s dans %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Capacité invalide : %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Support de capacité du fichier non intégré\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Le fichier doit commencer par « / » : %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Algorithme %u du fichier de digest inconnu, recourt à MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Fichier listé deux fois : %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "la lecture du symlink %s a échouée : %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Lien symbolique pointant sur BuildRoot : %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Répertoire introuvable : %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Fichier non trouvé : %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Pas de répertoire: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s : ne peut pas charger le tag (%d) inconnu.\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s : échec de la lecture de la clé publique.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s : n'est pas une clé publique blindée.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s : échec de l'encodage.\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "échec de création du répertoire"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Le fichier non précédé d'un \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "globale %%dev non autorisée : %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Répertoire introuvable par glob : %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Fichier non trouvé par la substitution : %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Impossible d'ouvrir le fichier %%files %s : %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "Ligne : %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Erreur de lecture du fichiers %%files %s : %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "illegal _docdir_fmt %s: %s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Fichier non trouvé par la substitution : %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
+msgstr "Impossible de mélanger un %s spécial avec d'autres formes : %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "Plus d'un fichier sur la ligne : %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Mauvais fichier : %s : %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Mauvais possesseur/groupe : %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Vérification des fichiers non empaquetés : %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -841,551 +992,609 @@ msgstr ""
"Fichier(s) installé(s) (mais non empaquetés) :\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Traitement des fichiers : %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
+"L'architecture de binaire (%d) ne correspond pas à celle du paquet (%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Binaires dépendants d'une arch dans un paquet noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "échec de la création de l'archive dans le fichier %s : %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "échec de la création de l'archive : %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Impossible d'ouvrir le fichier %s : %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s : ligne : %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Ne peut canoniser le nom d'hôte : %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Impossible d'écrire la charge utile dans %s : %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Impossible de lire la charge utile dans %s : %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Ne peut canoniser le nom d'hôte : %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Compression de charge inconnue : %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Impossible de créer la partie immuable de l'entête.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Incapable d'ouvrir un fichier temporaire.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Impossible d'écrire un entête temporaire\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Impossible de lire les fichier de stratégie : %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Mauvaises données CSA\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Impossible de recharger l'entête de la signature.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Impossible d'ouvrir %s : %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Impossible d'écrire le paquet : %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Impossible d'ouvrir sigtarget %s : %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Impossible de lire l'entête dans %s : %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Impossible d'écrire l'entête dans %s : %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Écrit : %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Exécution_de « %s » :\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "L'exécution de « %s » a échouée.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "La vérification du paquet « %s » a échouée.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Ne peut générer le nom de fichier pour le paquet %s : %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "Ne peut créer %s : %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "ligne %d : deuxième %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr ""
+msgstr "date incorrecte dans %%changelog : %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "les entrées dans le %%changelog doivent commencer par *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "entrée de %%changelog incomplète\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "mauvaise date dans %%changelog : %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "le %%changelog n'est pas dans l'ordre chronologique descendant\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "nom manquant dans le %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "absence de description dans le %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "ligne %d : erreur dans l'analyse syntaxique de la %%description : %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "ligne %d : mauvaise option %s : %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "ligne %d : trop de noms : %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "ligne %d : paquet inexistant : %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "ligne %d : deuxième description\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "ligne %d : erreur dans l'analyse syntaxique de %%files : %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "ligne %d : erreur dans l'analyse syntaxique de %%policies : %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Erreur d'analyse dans le champ de balise : %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "ligne %d : mauvais numéro : %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "ligne %d : mauvais numéro n°%s : %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "ligne %d : mauvais numéro %s : %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d définie plusieurs fois\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Téléchargement de %s à %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Impossible de télécharger %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Architecture exclue : %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Architecture non incluse : %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS exclus : %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS non inclus : %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "Le champ %s doit être présent dans le paquet : %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Entrée dupliquée %s dans le paquet : %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Impossible d'ouvrir l'icône %s : %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Impossible de lire l'icône %s : %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Type d'icône inconnu : %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "ligne %d : le tag n'accepte qu'un seul lexème : %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "ligne %d : caractère '%c' illégal dans : %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "ligne %d : caractère illégal dans : %s\n"
+msgid "%s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "ligne %d : séquence illégale « .. » dans : %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "ligne %d : tag mal formé : %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "ligne %d : tag vide : %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "ligne %d : les préfixes ne doivent pas finir par un « / » : %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "ligne %d : le docdir doit commencer par un « / » : %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "ligne %d : le champ Epoch doit être un nombre : %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "ligne %d : mauvais %s : qualificatifs : %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "ligne %d : mauvais format pour BuildArchitecture : %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "ligne %d seuls les sous-paquets noarch sont pris en charge : %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Erreur interne : tag bidon %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "ligne %d : %s est obsolète : %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Mauvaise spécification de paquet : %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Paquet déjà existant : %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "ligne %d : tag inconnu : %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} ne peux pas être vide\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} ne peut pas être « / »\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Mauvaise source : %s : %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Pas de numéro de patch %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch sans correspondance avec le tag « Patch : »\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Pas de numéro de source %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Pas de tag « Source: » dans le fichier spec\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Erreur d'analyse syntaxique du %%setup : %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "ligne %d : mauvais argument à %%setup : %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "ligne %d : mauvaise option à %%setup %s : %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s : %s : %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Numéro du patch invalide %s :%s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "ligne %d : deuxième %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
"Les jetons de dépendance doivent commencer par un caractère alpha-numérique, "
"'_' ou '/'"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "Nom de version de fichier non autorisé"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Version requise"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "dépendance invalide"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Version requise"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "ligne %d : %s : %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "ligne %d : les triggers doivent avoir -- : %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "ligne %d : erreur d'analyse syntaxique %s : %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "ligne %d : le script interne doit se terminer par '>' : %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "ligne %d : le nom du script doit commencer par un '/' : %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "ligne %d : deuxième %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "ligne %d : script interne non pris en charge :%s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
"ligne %d : arguments interprète non autorisé dans les déclencheurs : %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "ligne %d : %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Impossible d'ouvrir %s : %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s :%d : argument attendu pour %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr ""
+msgstr "ligne %d : %%if non terminé\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "ligne %d : macro non fermée ou mauvaise continuation de ligne\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s : %d : mauvaise condition %%if\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s : %d : j'ai là un %%else sans %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s : %d : j'ai là un %%endif sans %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d: directive %%include mal-formée\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Pas d'architecture compatible pour construction\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Le paquet n'a pas de %%description : %s\n"
@@ -1459,454 +1668,563 @@ msgstr "Trop nombreux arguments en ligne : %s\n"
msgid "Processing policies: %s\n"
msgstr "Traitement de la stratégie : %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignorer l'expression régulière %s invalide\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Impossible de créer le pipe pour %s : %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Impossible d'exécuter %s : %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Impossible de forker %s : %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s a échoué : %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "échec de l'écriture de toutes les données de %s : %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "La conversion de %s vers un entier long a échoué.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Classificateur de fichier vide\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Aucun fichier attributs configurés\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) a échoué : %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load a échoué : %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "La reconnaissance du fichier « %s » a échoué : mode %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Trouver %s : %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Impossible de trouver %s :\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
"échec de la requête sur le fichier spec %s, impossible de faire l'analyser "
"syntaxique\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(erreur 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s erreur(%d) de %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Mauvaise magie, blah"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s erreur(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Entête mauvais ou illisible"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "options de db inconnues : \"%s\" ignoré.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Entête trop gros"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s est une valeur numérique invalide, ignoré\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s est une valeur 'long' trop petite ou trop grande, ignoré\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Type de fichier inconnu"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s est une valeur entière trop petite ou trop grande, ignoré\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "lien(s) dur(s) manquant(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "impossible d'avoir le verrou %s sur %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Digest ne correspond pas"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "partagé"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Erreur interne"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exclusif"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "L'entête ne contient pas le fichier archive"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "type d'index %x invalide sur %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " échec - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "erreur(%d) en attrapant les articles « %s » de l'index %s : %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "erreur(%d) en stockant l'article « %s » dans %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "erreur(%d) en enlevant l'article « %s » de %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "Erreur(%d) ajout de l'enregistrement de l'en-tête #%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "Erreur (%d) suppression de l'enregistrement de l'en-tête #%d\n"
-#: lib/depends.c:68
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "erreur(%d) en allouant une nouvelle instance de paquet\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s est un Delta RPM et ne peut être installé directement\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Charge (%s) non pris en charge dans le paquet %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "le paquet %s a déjà été rajouté, %s ignoré\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "le paquet %s a déjà été rajouté, replacé par %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(pas un blob ça)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(n'est pas un nombre)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(pas une chaîne)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(type invalide)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(pas base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(type invalide)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(pas un blob ça)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(type xml invalide)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(pas une signature OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
-msgstr ""
+msgstr "Date invalide %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normal"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "remplacé"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "pas installé"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "sur le réseau"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "fausse couleur"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "manquant"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(inconnu)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(pas une chaîne)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "utilisateur %s inexistant - utilisation de root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "groupe %s inexistant - utilisation de root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s sauvé en tant que %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s créé en tant que %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s : échec de la suppression : %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "répertoire"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "fichier"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "%s ignoré %s avec signature invérifiable\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "%s ignoré avec signature invérifiable\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-"étiquette[%d] : ERRONÉE, étiquette %d type %d adresse relative %d décompte "
-"%d\n"
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1 : ERRONÉ, non hexa\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA : ERRONÉ, non binaire\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr SDA : ERRONÉ, non binaire\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "blob size(%d) : ERRONÉE, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "region offset : ERRONÉ, tag %d type %d offset %d décompte %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "region trailer : ERRONÉ, tag %d type %d offset %d décompte %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "region size: ERRONÉE, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr size(%d) : ERRONÉ, la lecture renvoie %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic : ERRONÉ\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr tags : ERRONÉ, no. de tags(%d) hors limite\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "largeur du champ invalide"
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr data : ERRONÉ, no. de bytes(%d) hors limite\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd) : ERRONÉ, la lecture a retourné %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr load : ERRONÉ\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "format de tag vide"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s : échec de rpmReadSignature : %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "nom de tag vide"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s : aucune signature disponible\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s : headerRead a échoué : %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] attendu à la fin du tableau"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "] inattendu"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "} inattendu"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? attendu dans l'expression"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ attendu après ? dans l'expression"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} attendu dans l'expression"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": attendu derrière la sous-expression de ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ attendu après : dans l'expression"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| attendu a la fin de l'expression"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "itérateur de tableau utilisé avec des tableaux de tailles différentes"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s : Fread a échoué : %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "prédéfinir la MACRO avec l'EXPRression"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "définit MACRO avec pour valeur EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MACRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "affiche la macro-expansion d'EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "Lire <FICHIER:...> au lieu du(des) fichier(s) par défaut"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FICHIER:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "n'autoriser aucun plugin"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "ne pas vérifier les sommes de hachage(s) du paquet"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "ne pas vérifier l'entête de la base de données à la récupération"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "ne pas vérifier la(les) signature(s) du paquet"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "envoyer la sortie standard à CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "utiliser RACINE comme répertoire racine"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "RACINE"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "utiliser la base de données dans RÉPERTOIRE"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "RÉPERTOIRE"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "afficher les tags de requête connus"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "afficher la configuration finale des macros et rpmrc"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "afficher moins de détails"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "afficher plus de détails"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "afficher la version de rpm utilisé"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "déboguer la machine à états du fichier de la charge utile"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "déboguer les E/S de rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s : table d'option mal configurée (%d)\n"
@@ -1927,12 +2245,12 @@ msgstr "les relogement doivent contenir un ="
msgid "relocations must have a / following the ="
msgstr "dans les relogements un / doit suivre le ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"installer tous les fichiers, même si les configurations disent le contraire"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1940,156 +2258,166 @@ msgstr ""
"retirer tous les paquets qui correspondent à <package> (normalement on "
"retourne une erreur si le <package> correspond à plusieurs paquets"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "déplacer les fichiers dans le paquet non délocalisable"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "Afficher la dépendance des boucles comme alerte"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "désinstaller un paquet"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "ne pas installer les fichiers de configuration"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "ne pas installer la documentation"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "sauter les fichiers commence par le <chemin> indiqué"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<chemin>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "raccourci pour --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "met à jour le(s) paquet(s) déjà installé(s)"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile> +"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
"afficher des marqueurs au fur et à mesure que le paquet s'installe (avec -v "
"c'est bien(tm))"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "ne pas vérifier l'architecture du paquet"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "ne pas vérifier le système d'exploitation du paquet"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "ne pas vérifier l'espace disque avant l'installation"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "installer la documentation"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "installer le(s) paquet(s)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
"mettre à jour la base données, mais ne pas modifier le système de fichiers"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "ne pas vérifier les dépendances du paquet"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "ne pas vérifier les sommes de hachage des fichiers"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "ne pas vérifier les sommes de hachage des fichiers"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "ne pas installer les fichiers des contextes de sécurité"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"ne pas réarranger l'ordre d'installation des paquets pour satisfaire les "
"dépendances"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "ne pas exécuter le(s) scriptlet(s) du paquet"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "ne pas exécuter le scriptlet %%pre (s'il existe)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "ne pas exécuter le scriptlet %%post (s'il existe)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "ne pas exécuter le scriptlet %%preun (s'il existe)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "ne pas exécuter le scriptlet %%postun (s'il existe)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "n'exécuter aucun scriptlet trigger activé par ce paquet"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "n'exécuter aucun scriplet %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "n'exécuter aucun scriplet %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "n'exécuter aucun scriptlet %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "n'exécuter aucun scriptlet %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "ne jamais effectuer de mesures de recouvrement"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2097,373 +2425,411 @@ msgstr ""
"mettre à jour avec un paquet plus ancien (une m-à-j avec --force fait ça "
"automatiquement"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "afficher le pourcentage d'installation du paquet"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "déplace le paquet vers <rep>, si déplacable"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<rep>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "reloge les fichiers du <vieux> chemin vers <nouveau>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<vieux>=<nouveau>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "Ignorer les conflits de fichier entre les paquets"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "réinstalle si le paquet est déjà installé"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "n'installe pas, mais dit si ça marcherait ou pas"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "mises à jour des paquets"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "réinstaller le(s) paquet(s)"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "vérifier/demander à tous les paquets"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "mode rpm vérifsign"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "vérifier/demander un paquet possèdant un fichier"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "vérifier/questionner le(s) paquet(s) d'un même groupe"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "vérifier/questionner un fichier paquet"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "questionner/vérifier le(s) paquet(s) grâce à un identifieur de paquet"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
"questionner/vérifier le(s) paquet(s) grâce à un identificateur d'entête"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "mode de requête de rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "questionner/vérifier une instance d'entête"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
"questionner/vérifier le(s) paquet(s) à partir de la transaction "
"d'installation"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "questionner le(s) paquet(s) surveillé(s) par le paquet"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "mode de vérification de rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "vérifier/demander le(s) paquet(s) qui requier(en)t une dépendance"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "vérifier/demander le(s) paquet(s) qui fourni(ssen)t une dépendance"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "Ne pas passer des arguments"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "ne traite pas les fichiers non-paquet comme manifestes"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "lister les fichiers de configuration"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "lister les fichiers documents"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "lister les fichiers documents"
+msgstr "lister les fichiers de license"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "lister les fichiers de license"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "débite les informations de base des fichiers"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "lister les fichiers du paquet"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "éviter les fichiers fantômes %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "éviter les fichiers fantômes %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "affiche la liste des fichiers et leur état"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "ne pas vérifier la taille des fichiers"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "ne pas vérifier le chemin du lien symbolique des fichiers"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "ne pas vérifier le possesseur des fichiers"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "ne pas vérifier le groupe possesseur des fichiers"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "ne pas vérifier les dates de modification des fichiers"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "ne pas vérifier les permissions des fichiers"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "ne pas vérifier les capacités des fichiers"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "ne pas vérifier la sécurité des fichiers"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "ne pas vérifier les capacités des fichiers"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "ne pas vérifier les fichiers du paquet"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "ne pas vérifier les dépendances du paquet"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "ne pas exécuter le(s) script(s) de vérification"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Éléments rpmlib manquants pour %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "paquet source attendu, paquet binaire trouvé\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "le paquet source ne contient pas de fichier .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "échec du déballage de l'archive %s%s : %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " dans fichier "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "échec de %s sur le fichier %s : %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "échec %s : %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "format incorrect : %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(Ne contient pas de fichiers)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "remplacé "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "non installé "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "sur le réseau "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "fausse couleur"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(pas d'état) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(%3d iconnu) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "le paquet n'as pas de liste de possesseurs/groupes de fichiers\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
"le paquet n'a ni la liste des id ni celle des possesseurs de fichiers\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "le groupe %s ne contient aucun paquet\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "aucun paquet ne surveille %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "%s malformé : %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "aucun paquet ne correspond à %s : %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "aucun paquet ne requiert %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "aucun paquet ne fournit %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "fichier %s : %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "le fichier %s n'appartient à aucun paquet\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "numéro de paquet invalide : %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "l'enregistrement %u n'a pas pu être lu\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "le paquet %s n'est pas installé\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "tag inconnu: « %s »\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s : importation de la clé %d échouée.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s : la clés %d n'est pas une clé publique blindée.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s : l'importation de lecture a échoué (%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-"%s : la région d'en-tête immuable ne peut pas être lu. Paquet corrompu ?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "PAS OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (CLES MANQUANTES :"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (CLES NONCREDIBLE :"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s : échec de l'ouverture : %s\n"
@@ -2488,222 +2854,453 @@ msgstr "Impossible de changer le répertoire racine : %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Impossible de restaurer le répertoire racine : %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Génération d'index manquant(s) %d, merci d'attendre...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "impossible d'ouvrir l'index %s en utilisant %s - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "aucun dbpath n'a été fourni\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader : ignoré"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "erreur(%d) en stockant l'article nº%d dans %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s : regexec a échoué :%s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s : regcomp a échoué :%s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator : ignoré"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb : l'entête #%u endommagée a été récupérée -- ignoré.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s : impossible de lire l'entête à 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "aucun dbpath fournit"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "Impossible de créer le répertoire %s : %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "l'entête #%u dans la base de données n'est pas bon -- ignoré.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "impossible d'ajouter l'article qui était au départ à %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"Ne peut reconstruire la base de données : la base originale reste telle "
+"qu'elle est\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "Ne peut remplacer la vieille base de données par la nouvelle!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NON"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "OUI"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
"Les dépendances de type PreReq:, Provides: et Obsoletes: supportent les "
"versions."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"Le(s) nom(s) de fichier sont stockés en tant que triplets (NomRep,NomFich,"
"IndexRep), pas en tant que chemin."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "La charge du paquet est compressée avec bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "La charge du paquet est compressée avec xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "La charge du paquet est compressée avec lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
"le(s) fichier(s) de la charge utile du paquet ont « ./ » comme préfixe."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "le nom-version-révision du paquet n'est pas implicitement fourni."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "les tags d'entête sont toujours triés après avoir été chargés."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
"l'interprète du scriptlet peut utiliser des arguments à partir des entêtes."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "un lien en dur pourrait être installé sans être complet."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"les scriptlets du paquet pourrait accéder à la base de données rpm pendant "
"l'installation."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "prise en charge interne pour les scripts LUA."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "l'algorithme de hachage de fichier est configurable par paquet"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "prise en charge des capacités du fichier POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "les scriptlets du paquet peut être étendu lors de l'installation."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
+msgstr "la comparaison de dépendances prend en charge les versions avec tilde."
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "supporte les fichiers supérieurs à 4GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Mauvaise magie, blah"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Entête mauvais ou illisible"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Entête trop gros"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Fichier trop grand pour l'archive"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Type de fichier inconnu"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Fichier(s) manquant(s)"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Digest ne correspond pas"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Erreur interne"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "L'entête ne contient pas le fichier archive"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " échec - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (erreur 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "échec de l'ouverture de %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
"%s: n'est pas un paquet rpm (ni une liste de paquet)\n"
"\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
-msgstr ""
+msgstr "Mise à jour / installation...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
-msgstr ""
+msgstr "Nettoyage/suppression...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Préparation... "
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
-msgstr ""
+msgstr "Préparation des paquets..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Dépendances requises:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s : n'est pas un paquet rpm (ni une liste de paquet) : %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s ne peut être installé\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Récupération de %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "%s ignoré - échec du transfert\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "le paquet %s n'est pas localisable\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "erreur en lisant %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "« %s » spécifie plusieurs paquets\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "impossible d'ouvrir %s : %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Installation de %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "pas un paquet rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "type de signature illégale"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "pas de prise en charge de la version du paquet RPM"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "échec de lecture : %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "pas un paquet rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "Impossible de créer %s verrou sur %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "attente pour %s verrou sur %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Impossible de dlopen %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Impossible de résoudre le symbole %s : %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Impossible d'agrandir la macro %%__collection_%s\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Plugin %%__%s_%s non configuré\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Plugin %s non chargé\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Impossible de résoudre le symbole %s du plugin %s : %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "différent"
@@ -2784,642 +3381,354 @@ msgstr "%s est rendu obsolète par %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "erreur %d inconnue rencontrée en manipulant le paquet %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "il manque un second ':' à %s : %d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "architecture manquante à %s : %d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Ligne de données incomplète à %s : %d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Trop d'arguments dans la ligne de données à %s :%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Mauvais numéro d'arch/OS : %s (%s : %d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "valeur par défaut incomplète à la ligne %s : %d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Trop d'arguments pour la valeur par défaut de la ligne %s : %d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "':' manquant (trouvé 0x%02x) à %s : %d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "argument manquant pour %s à %s : %d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "Impossible d'ouvrir %s à %s : %d : %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "architecture manquante pour %s à %s : %d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "mauvaise option '%s' à %s : %d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
+msgstr "Échec de la lecture du vecteur auxiliaire, /proc est-il monté ?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "système inconnu : %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Contactez %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
"Impossible d'ouvrir %s en lecture : %m.\n"
"\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "Impossible de restaurer le répertoire courant : %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "le support du scriptlet <lua> n'est pas intégrer\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Impossible de créer de fichier temporaire pour %s : %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Impossible de dupliquer le descripteur de fichier : %s : %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "scriptlet %s échoué, waitpid(%d) rc %d : %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "scriptlet %s échoué, signal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s scriptlet échoué, état de sortie %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Format inconnu"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "installer"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "effacer"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "impossible d'ouvrir la base de données paquet dans %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "'(' supplémentaire dans le label du paquet : %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "'(' manquante dans le label du paquet : %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "')' manquante dans le label du paquet : %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: la lecture de la clé publique a échoué.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transaction"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh size(%d) : ERRONÉ, la lecture retourne %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic : ERRONÉ\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh tags : ERRONÉ, nb. d'étiquettes(%d) hors limite\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh data : ERRONÉ, nb. de bytes(%d) hors limite\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d) : ERRONÉ, la lecture a retourné %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh tag[%d] : ERRONÉ, tag %d type %d offset %d décompte %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh load : ERRONÉE\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh pad(%zd) : ERRONÉ, lecture de %zd bytes\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd) : ERRONÉ, Fstat(2) échoué\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "La région d'entête immuable ne peut pas être lu. Paquet corrompu?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "Ne peut signer les paquets RPM v3\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 :"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Hachage de l'entête SHA1 :"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Entête "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "Vérification de signature: MAUVAIS PARAMETRES (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
+
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Impossible de recharger l'entête de la signature.\n"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "sauté"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "échoué"
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
-msgstr "manque %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Dépendances non satisfaites pour %s :\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "largeur du champ invalide"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "{ manquant après %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "} manquant après %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "format de tag vide"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "nom de tag vide"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "tag inconnu"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] attendu à la fin du tableau"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "] inattendu"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "} inattendu"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? attendu dans l'expression"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ attendu après ? dans l'expression"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} attendu dans l'expression"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": attendu derrière la sous-expression de ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ attendu après : dans l'expression"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| attendu a la fin de l'expression"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "itérateur de tableau utilisé avec des tableaux de tailles différentes"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Génération d'index manquant(s) %d, merci d'attendre...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "ne peut ouvrir l'index %s en utilisant db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "erreur(%d) en attrapant les articles « %s » de l'index %s : %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "aucun dbpath n'a été fourni\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader : ignoré"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "erreur(%d) en stockant l'article nº%d dans %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s : regexec a échoué :%s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s : regcomp a échoué :%s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator : ignoré"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb : l'entête #%u endommagée a été récupérée -- ignoré.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "Erreur(%d : %s) obtention de la clé suivante à partir de l'index %s\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "Erreur(%d) ajout de l'enregistrement de l'en-tête #%d\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "Erreur (%d) suppression de l'enregistrement de l'en-tête #%d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s : impossible de lire l'entête à 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "erreur(%d) en affectant les articles « %s » de l'index %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "erreur(%d) en stockant l'article « %s » dans %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "erreur(%d) en enlevant l'article « %s » de %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "erreur(%d) en allouant une nouvelle instance de paquet\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "erreur(%d) en attrapant les articles « %s » de l'index %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "erreur(%d) en stockant l'article %s dans %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "aucun dbpath fournit"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "Impossible de créer le répertoire %s : %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "l'entête #%u dans la base de données n'est pas bon -- ignoré.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "impossible d'ajouter l'article qui était au départ à %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-"Ne peut reconstruire la base de données : la base originale reste telle "
-"qu'elle est\n"
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "Ne peut remplacer la vieille base de données par la nouvelle!\n"
-
-#: lib/rpmdb.c:2949
+#: lib/verify.c:284
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-"remplacer les fichiers dans %s avec les fichiers de %s pour faire une "
-"récupération"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "Ne peut détruire le répertoire %s : %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "erreur db%d(%d) de %s : %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "erreur db%d(%d) : %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "impossible d'avoir le verrou %s sur %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "partagé"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exclusif"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "type d'index %x invalide sur %s/%s\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "options de db inconnues : \"%s\" ignoré.\n"
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s est une valeur numérique invalide, ignoré\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr "pas d'état"
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s est une valeur 'long' trop petite ou trop grande, ignoré\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "état inconnu"
-#: lib/backend/dbconfig.c:199
+#: lib/verify.c:448
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s est une valeur entière trop petite ou trop grande, ignoré\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Échec de décodage de la stratégie pour %s\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Impossible de créer le fichier temporaire %s : %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Impossible d'écrire la stratégie %s dans le fichier %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Impossible de créer semanage handle\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Impossible de se connecter au gestionnaire de la stratégie\n"
+msgid "missing %c %s"
+msgstr "manque %c %s"
-#: plugins/sepolicy.c:306
+#: lib/verify.c:503
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Impossible de commencer la transaction de la stratégie : %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Dépendances non satisfaites pour %s :\n"
-#: plugins/sepolicy.c:337
+#: plugins/prioreset.c:29
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-"Échec de la suppression du fichier temporaire de la stratégie %s : %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Impossible d'installer le module de stratégie :%s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Impossible de supprimer le module de stratégie :%s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Échec du fork du processus : %s\n"
-
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Impossible d'exécuter %s : %s\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s terminé anormalement\n"
-
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
-#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s a échoué avec le code de sortie %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Impossible de valider les changements de stratégie\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Impossible d'étendre le chemin restorecon"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-"Impossible de renommer les fichiers. Les fichiers peuvent être mal étiqueté\n"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"Impossible de recharger les contextes de fichiers. Les fichiers peuvent être "
-"mal étiquetés\n"
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Impossible d'extraire la stratégie depuis %s\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== %d actif(s) %d vide(s)\n"
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(vide)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(vide)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "La macro %%%s a un corps sans fin\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "La macro %%%s a des options non-terminées\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "La macro %%%s a un nom illégal (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "La macro %%%s a un corps sans fin\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "La macro %%%s a des options non-terminées\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "La macro %%%s a un corps vide\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "La macro %%%s a besoin d'un espace avant le corps\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "La macro %%%s ne peut être expansée\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "La macro %%%s a un nom illégal (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "La macro %%%s (%s) n'est plus utilisée en dessous du niveau %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "Macro %%%s définie mais non utilisée sans portée\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Option inconnue %c dans %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3427,165 +3736,282 @@ msgstr ""
"Trop de niveaux de récursivité dans l'expansion de la macro. Il est "
"probablement causée par une déclaration de macro récursive.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "%c non terminé: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Un %% est suivi d'une macro in-analysable\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "Impossible de charger le fichier macro %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== %d actif(s) %d vide(s)\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "Erreur de création du fichier temporaire %s : %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Fichier %s : %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Le fichier %s est plus petit que %u octets\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "échec de création du répertoire"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[Aucun]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(pas d'erreur)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "erreur fatale : "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "erreur : "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "attention : "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "syntaxe invalide dans le scriptlet lua : %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "syntaxe invalide dans le script lua : %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "script lua échoué : %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "syntaxe invalide dans le fichier lua : %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "crochet lua échoué : %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[Aucun]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(pas d'erreur)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "erreur fatale : "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "erreur : "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "attention : "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "l'allocation de mémoire (%u octets) a retourné NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, clé ID %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(none)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s : échec de Fwrite : %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s : Fread a échoué : %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s : Fflush échoué : %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "Signature PGP non supportée\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "Algorithme %u de hashage PGP non supporté\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "Algorithme %u clé publique PGP non supporté\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Impossible d'exécuter %s : %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Impossible d'écrire dans le pipe\n"
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Impossible de créer le pipe pour la signature : %m"
+msgid "Could not read from file %s: %s\n"
+msgstr "Impossible de lire le fichier %s: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "gpg exec échoué (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "échec de gpg à écrire la signature\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "impossible de lire la signature\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp échoué\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s contient déjà une signature identique, ignoré\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s : échec de writeLead : %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s : échec de rpmReadSignature : %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s : échec de headerRead %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "Ne peut signer les paquets RPM v3\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s contient déjà une signature identique, ignoré\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s : échec de rpmWriteSignature : %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s : échec de writeLead : %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "remplacer %s à échouer : %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s : échec de la lecture de la liste de paquetages : %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "ne pas vérifier la signature de l'entête+charge_utile"
diff --git a/po/gu.po b/po/gu.po
deleted file mode 100644
index 3fa6ae654..000000000
--- a/po/gu.po
+++ /dev/null
@@ -1,3484 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: RPM\n"
-"Report-Msgid-Bugs-To: http://rpm.org/\n"
-"POT-Creation-Date: 2012-11-05 10:07+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
-"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Gujarati (http://www.transifex.com/projects/p/rpm/language/gu/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: gu\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: cliutils.c:21 lib/poptI.c:29
-#, c-format
-msgid "%s: %s\n"
-msgstr ""
-
-#: cliutils.c:27 lib/poptALL.c:55
-#, c-format
-msgid "RPM version %s\n"
-msgstr ""
-
-#: cliutils.c:32
-#, c-format
-msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
-msgstr ""
-
-#: cliutils.c:33
-#, c-format
-msgid ""
-"This program may be freely redistributed under the terms of the GNU GPL\n"
-msgstr ""
-
-#: cliutils.c:53
-#, c-format
-msgid "creating a pipe for --pipe failed: %m\n"
-msgstr ""
-
-#: cliutils.c:63
-#, c-format
-msgid "exec failed\n"
-msgstr ""
-
-#: rpm2cpio.c:63
-#, c-format
-msgid "argument is not an RPM package\n"
-msgstr ""
-
-#: rpm2cpio.c:68
-#, c-format
-msgid "error reading header from package\n"
-msgstr ""
-
-#: rpm2cpio.c:83
-#, c-format
-msgid "cannot re-open payload: %s\n"
-msgstr ""
-
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr ""
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr ""
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr ""
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr ""
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr ""
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr ""
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr ""
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr ""
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid ""
-"--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr ""
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr ""
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr ""
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr ""
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr ""
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr ""
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr ""
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:129
-#, c-format
-msgid "verify %files section from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:142
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
-msgstr ""
-
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:151
-#, c-format
-msgid "verify %files section from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
-msgstr ""
-
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
-msgstr ""
-
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr ""
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-
-#: rpmbuild.c:171
-msgid "override build root"
-msgstr ""
-
-#: rpmbuild.c:173
-msgid "remove build tree when done"
-msgstr ""
-
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
-msgstr ""
-
-#: rpmbuild.c:177
-msgid "debug file state machine"
-msgstr ""
-
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
-msgstr ""
-
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
-msgstr ""
-
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
-msgstr ""
-
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
-msgstr ""
-
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
-msgstr ""
-
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
-msgstr ""
-
-#: rpmbuild.c:194
-msgid "remove sources when done"
-msgstr ""
-
-#: rpmbuild.c:196
-msgid "remove specfile when done"
-msgstr ""
-
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
-msgstr ""
-
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
-msgstr ""
-
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
-msgstr ""
-
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
-msgstr ""
-
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
-msgstr ""
-
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
-msgstr ""
-
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
-msgstr ""
-
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
-msgstr ""
-
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
-msgstr ""
-
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
-msgstr ""
-
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
-msgstr ""
-
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
-msgstr ""
-
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
-msgstr ""
-
-#: rpmdb.c:22
-msgid "initialize database"
-msgstr ""
-
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
-msgstr ""
-
-#: rpmdb.c:27
-msgid "verify database files"
-msgstr ""
-
-#: rpmdb.c:33
-msgid "Database options:"
-msgstr ""
-
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
-msgstr ""
-
-#: rpmkeys.c:26
-msgid "import an armored public key"
-msgstr ""
-
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
-msgstr ""
-
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
-msgstr ""
-
-#: rpmkeys.c:40
-msgid "Keyring options:"
-msgstr ""
-
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
-msgstr ""
-
-#: rpmsign.c:25
-msgid "sign package(s)"
-msgstr ""
-
-#: rpmsign.c:27
-msgid "sign package(s) (identical to --addsign)"
-msgstr ""
-
-#: rpmsign.c:29
-msgid "delete package signatures"
-msgstr ""
-
-#: rpmsign.c:35
-msgid "Signature options:"
-msgstr ""
-
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr ""
-
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
-msgstr ""
-
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr ""
-
-#: rpmsign.c:117
-#, c-format
-msgid "Pass phrase is good.\n"
-msgstr ""
-
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr ""
-
-#: rpmspec.c:26
-msgid "parse spec file(s) to stdout"
-msgstr ""
-
-#: rpmspec.c:28
-msgid "query spec file(s)"
-msgstr ""
-
-#: rpmspec.c:30
-msgid "operate on binary rpms generated by spec (default)"
-msgstr ""
-
-#: rpmspec.c:32
-msgid "operate on source rpm generated by spec"
-msgstr ""
-
-#: rpmspec.c:36 lib/poptQV.c:189
-msgid "use the following query format"
-msgstr ""
-
-#: rpmspec.c:45
-msgid "Spec options:"
-msgstr ""
-
-#: rpmspec.c:90
-msgid "no arguments given for parse"
-msgstr ""
-
-#: build/build.c:120
-#, c-format
-msgid "Unable to open temp file: %s\n"
-msgstr ""
-
-#: build/build.c:126
-#, c-format
-msgid "Unable to open stream: %s\n"
-msgstr ""
-
-#: build/build.c:161
-#, c-format
-msgid "Executing(%s): %s\n"
-msgstr ""
-
-#: build/build.c:168
-#, c-format
-msgid "Exec of %s failed (%s): %s\n"
-msgstr ""
-
-#: build/build.c:177
-#, c-format
-msgid "Error executing scriptlet %s (%s)\n"
-msgstr ""
-
-#: build/build.c:184
-#, c-format
-msgid "Bad exit status from %s (%s)\n"
-msgstr ""
-
-#: build/build.c:291
-msgid ""
-"\n"
-"\n"
-"RPM build errors:\n"
-msgstr ""
-
-#: build/expression.c:216
-msgid "syntax error while parsing ==\n"
-msgstr ""
-
-#: build/expression.c:246
-msgid "syntax error while parsing &&\n"
-msgstr ""
-
-#: build/expression.c:255
-msgid "syntax error while parsing ||\n"
-msgstr ""
-
-#: build/expression.c:305
-msgid "parse error in expression\n"
-msgstr ""
-
-#: build/expression.c:337
-msgid "unmatched (\n"
-msgstr ""
-
-#: build/expression.c:369
-msgid "- only on numbers\n"
-msgstr ""
-
-#: build/expression.c:385
-msgid "! only on numbers\n"
-msgstr ""
-
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
-msgid "types must match\n"
-msgstr ""
-
-#: build/expression.c:440
-msgid "* / not suported for strings\n"
-msgstr ""
-
-#: build/expression.c:491
-msgid "- not suported for strings\n"
-msgstr ""
-
-#: build/expression.c:638
-msgid "&& and || not suported for strings\n"
-msgstr ""
-
-#: build/expression.c:671
-msgid "syntax error in expression\n"
-msgstr ""
-
-#: build/files.c:327 build/files.c:496 build/files.c:710
-#, c-format
-msgid "Missing '(' in %s %s\n"
-msgstr ""
-
-#: build/files.c:337 build/files.c:632 build/files.c:720 build/files.c:779
-#, c-format
-msgid "Missing ')' in %s(%s\n"
-msgstr ""
-
-#: build/files.c:362 build/files.c:651
-#, c-format
-msgid "Invalid %s token: %s\n"
-msgstr ""
-
-#: build/files.c:465
-#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr ""
-
-#: build/files.c:511
-#, c-format
-msgid "Non-white space follows %s(): %s\n"
-msgstr ""
-
-#: build/files.c:547
-#, c-format
-msgid "Bad syntax: %s(%s)\n"
-msgstr ""
-
-#: build/files.c:556
-#, c-format
-msgid "Bad mode spec: %s(%s)\n"
-msgstr ""
-
-#: build/files.c:568
-#, c-format
-msgid "Bad dirmode spec: %s(%s)\n"
-msgstr ""
-
-#: build/files.c:672
-#, c-format
-msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
-msgstr ""
-
-#: build/files.c:679
-#, c-format
-msgid "Duplicate locale %s in %%lang(%s)\n"
-msgstr ""
-
-#: build/files.c:794
-#, c-format
-msgid "Invalid capability: %s\n"
-msgstr ""
-
-#: build/files.c:804
-msgid "File capability support not built in\n"
-msgstr ""
-
-#: build/files.c:853
-#, c-format
-msgid "File must begin with \"/\": %s\n"
-msgstr ""
-
-#: build/files.c:974
-#, c-format
-msgid "Unknown file digest algorithm %u, falling back to MD5\n"
-msgstr ""
-
-#: build/files.c:1002
-#, c-format
-msgid "File listed twice: %s\n"
-msgstr ""
-
-#: build/files.c:1124
-#, c-format
-msgid "reading symlink %s failed: %s\n"
-msgstr ""
-
-#: build/files.c:1132
-#, c-format
-msgid "Symlink points to BuildRoot: %s -> %s\n"
-msgstr ""
-
-#: build/files.c:1346
-#, c-format
-msgid "Directory not found: %s\n"
-msgstr ""
-
-#: build/files.c:1347
-#, c-format
-msgid "File not found: %s\n"
-msgstr ""
-
-#: build/files.c:1538
-#, c-format
-msgid "%s: can't load unknown tag (%d).\n"
-msgstr ""
-
-#: build/files.c:1544
-#, c-format
-msgid "%s: public key read failed.\n"
-msgstr ""
-
-#: build/files.c:1548
-#, c-format
-msgid "%s: not an armored public key.\n"
-msgstr ""
-
-#: build/files.c:1557
-#, c-format
-msgid "%s: failed to encode\n"
-msgstr ""
-
-#: build/files.c:1602
-#, c-format
-msgid "File needs leading \"/\": %s\n"
-msgstr ""
-
-#: build/files.c:1626
-#, c-format
-msgid "%%dev glob not permitted: %s\n"
-msgstr ""
-
-#: build/files.c:1639
-#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr ""
-
-#: build/files.c:1640 lib/rpminstall.c:426
-#, c-format
-msgid "File not found by glob: %s\n"
-msgstr ""
-
-#: build/files.c:1676
-#, c-format
-msgid "Could not open %%files file %s: %m\n"
-msgstr ""
-
-#: build/files.c:1683
-#, c-format
-msgid "line: %s\n"
-msgstr ""
-
-#: build/files.c:1690
-#, c-format
-msgid "Error reading %%files file %s: %m\n"
-msgstr ""
-
-#: build/files.c:1712
-#, c-format
-msgid "illegal _docdir_fmt %s: %s\n"
-msgstr ""
-
-#: build/files.c:1866
-#, c-format
-msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
-
-#: build/files.c:1883
-#, c-format
-msgid "More than one file on a line: %s\n"
-msgstr ""
-
-#: build/files.c:2011
-#, c-format
-msgid "Bad file: %s: %s\n"
-msgstr ""
-
-#: build/files.c:2036 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr ""
-
-#: build/files.c:2070
-#, c-format
-msgid "Checking for unpackaged file(s): %s\n"
-msgstr ""
-
-#: build/files.c:2083
-#, c-format
-msgid ""
-"Installed (but unpackaged) file(s) found:\n"
-"%s"
-msgstr ""
-
-#: build/files.c:2114
-#, c-format
-msgid "Processing files: %s\n"
-msgstr ""
-
-#: build/files.c:2127
-#, c-format
-msgid "Binaries arch (%d) not matching the package arch (%d).\n"
-msgstr ""
-
-#: build/files.c:2133
-msgid "Arch dependent binaries in noarch package\n"
-msgstr ""
-
-#: build/pack.c:50
-#, c-format
-msgid "create archive failed on file %s: %s\n"
-msgstr ""
-
-#: build/pack.c:53
-#, c-format
-msgid "create archive failed: %s\n"
-msgstr ""
-
-#: build/pack.c:80
-#, c-format
-msgid "Could not open %s file: %s\n"
-msgstr ""
-
-#: build/pack.c:96
-#, c-format
-msgid "%s: line: %s\n"
-msgstr ""
-
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr ""
-
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:206
-#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:310
-#, c-format
-msgid "Unknown payload compression: %s\n"
-msgstr ""
-
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr ""
-
-#: build/pack.c:440
-#, c-format
-msgid "Could not open %s: %s\n"
-msgstr ""
-
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
-msgstr ""
-
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:523
-#, c-format
-msgid "Wrote: %s\n"
-msgstr ""
-
-#: build/pack.c:542
-#, c-format
-msgid "Executing \"%s\":\n"
-msgstr ""
-
-#: build/pack.c:545
-#, c-format
-msgid "Execution of \"%s\" failed.\n"
-msgstr ""
-
-#: build/pack.c:549
-#, c-format
-msgid "Package check \"%s\" failed.\n"
-msgstr ""
-
-#: build/pack.c:598
-#, c-format
-msgid "Could not generate output filename for package %s: %s\n"
-msgstr ""
-
-#: build/pack.c:615
-#, c-format
-msgid "cannot create %s: %s\n"
-msgstr ""
-
-#: build/parseBuildInstallClean.c:35
-#, c-format
-msgid "line %d: second %s\n"
-msgstr ""
-
-#: build/parseChangelog.c:114
-#, c-format
-msgid "bogus date in %%changelog: %s\n"
-msgstr ""
-
-#: build/parseChangelog.c:146
-#, c-format
-msgid "%%changelog entries must start with *\n"
-msgstr ""
-
-#: build/parseChangelog.c:154
-#, c-format
-msgid "incomplete %%changelog entry\n"
-msgstr ""
-
-#: build/parseChangelog.c:169
-#, c-format
-msgid "bad date in %%changelog: %s\n"
-msgstr ""
-
-#: build/parseChangelog.c:174
-#, c-format
-msgid "%%changelog not in descending chronological order\n"
-msgstr ""
-
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
-#, c-format
-msgid "missing name in %%changelog\n"
-msgstr ""
-
-#: build/parseChangelog.c:200
-#, c-format
-msgid "no description in %%changelog\n"
-msgstr ""
-
-#: build/parseDescription.c:32
-#, c-format
-msgid "line %d: Error parsing %%description: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
-#, c-format
-msgid "line %d: Bad option %s: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
-#, c-format
-msgid "line %d: Too many names: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr ""
-
-#: build/parseFiles.c:33
-#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
-msgstr ""
-
-#: build/parsePolicies.c:32
-#, c-format
-msgid "line %d: Error parsing %%policies: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:69
-#, c-format
-msgid "Error parsing tag field: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:162
-#, c-format
-msgid "line %d: Bad number: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:168
-#, c-format
-msgid "line %d: Bad no%s number: %u\n"
-msgstr ""
-
-#: build/parsePreamble.c:231
-#, c-format
-msgid "line %d: Bad %s number: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:245
-#, c-format
-msgid "%s %d defined multiple times\n"
-msgstr ""
-
-#: build/parsePreamble.c:290
-#, c-format
-msgid "Downloading %s to %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:293
-#, c-format
-msgid "Couldn't download %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:432
-#, c-format
-msgid "Architecture is excluded: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:437
-#, c-format
-msgid "Architecture is not included: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:442
-#, c-format
-msgid "OS is excluded: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:447
-#, c-format
-msgid "OS is not included: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:473
-#, c-format
-msgid "%s field must be present in package: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:496
-#, c-format
-msgid "Duplicate %s entries in package: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:554
-#, c-format
-msgid "Unable to open icon %s: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:570
-#, c-format
-msgid "Unable to read icon %s: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:580
-#, c-format
-msgid "Unknown icon type: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:594
-#, c-format
-msgid "line %d: Tag takes single token only: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:614
-#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:617
-#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:623
-#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:646
-#, c-format
-msgid "line %d: Malformed tag: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:654
-#, c-format
-msgid "line %d: Empty tag: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:715
-#, c-format
-msgid "line %d: Prefixes must not end with \"/\": %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:727
-#, c-format
-msgid "line %d: Docdir must begin with '/': %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:740
-#, c-format
-msgid "line %d: Epoch field must be an unsigned number: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:777
-#, c-format
-msgid "line %d: Bad %s: qualifiers: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:804
-#, c-format
-msgid "line %d: Bad BuildArchitecture format: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:814
-#, c-format
-msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:830
-#, c-format
-msgid "Internal error: Bogus tag %d\n"
-msgstr ""
-
-#: build/parsePreamble.c:915
-#, c-format
-msgid "line %d: %s is deprecated: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:978
-#, c-format
-msgid "Bad package specification: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:1015
-#, c-format
-msgid "line %d: Unknown tag: %s\n"
-msgstr ""
-
-#: build/parsePreamble.c:1047
-#, c-format
-msgid "%%{buildroot} couldn't be empty\n"
-msgstr ""
-
-#: build/parsePreamble.c:1051
-#, c-format
-msgid "%%{buildroot} can not be \"/\"\n"
-msgstr ""
-
-#: build/parsePrep.c:28
-#, c-format
-msgid "Bad source: %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:73
-#, c-format
-msgid "No patch number %u\n"
-msgstr ""
-
-#: build/parsePrep.c:75
-#, c-format
-msgid "%%patch without corresponding \"Patch:\" tag\n"
-msgstr ""
-
-#: build/parsePrep.c:152
-#, c-format
-msgid "No source number %u\n"
-msgstr ""
-
-#: build/parsePrep.c:154
-msgid "No \"Source:\" tag in the spec file\n"
-msgstr ""
-
-#: build/parsePrep.c:261
-#, c-format
-msgid "Error parsing %%setup: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:272
-#, c-format
-msgid "line %d: Bad arg to %%setup: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:287
-#, c-format
-msgid "line %d: Bad %%setup option %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:446
-#, c-format
-msgid "%s: %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:459
-#, c-format
-msgid "Invalid patch number %s: %s\n"
-msgstr ""
-
-#: build/parsePrep.c:486
-#, c-format
-msgid "line %d: second %%prep\n"
-msgstr ""
-
-#: build/parseReqs.c:112
-msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
-msgstr ""
-
-#: build/parseReqs.c:137
-msgid "Versioned file name not permitted"
-msgstr ""
-
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr ""
-
-#: build/parseReqs.c:165
-msgid "invalid dependency"
-msgstr ""
-
-#: build/parseReqs.c:181
-#, c-format
-msgid "line %d: %s: %s\n"
-msgstr ""
-
-#: build/parseScript.c:192
-#, c-format
-msgid "line %d: triggers must have --: %s\n"
-msgstr ""
-
-#: build/parseScript.c:202 build/parseScript.c:265
-#, c-format
-msgid "line %d: Error parsing %s: %s\n"
-msgstr ""
-
-#: build/parseScript.c:214
-#, c-format
-msgid "line %d: internal script must end with '>': %s\n"
-msgstr ""
-
-#: build/parseScript.c:220
-#, c-format
-msgid "line %d: script program must begin with '/': %s\n"
-msgstr ""
-
-#: build/parseScript.c:258
-#, c-format
-msgid "line %d: Second %s\n"
-msgstr ""
-
-#: build/parseScript.c:301
-#, c-format
-msgid "line %d: unsupported internal script: %s\n"
-msgstr ""
-
-#: build/parseScript.c:318
-#, c-format
-msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
-msgstr ""
-
-#: build/parseSpec.c:209
-#, c-format
-msgid "line %d: %s\n"
-msgstr ""
-
-#: build/parseSpec.c:252
-#, c-format
-msgid "Unable to open %s: %s\n"
-msgstr ""
-
-#: build/parseSpec.c:286
-#, c-format
-msgid "%s:%d: Argument expected for %s\n"
-msgstr ""
-
-#: build/parseSpec.c:308
-#, c-format
-msgid "line %d: Unclosed %%if\n"
-msgstr ""
-
-#: build/parseSpec.c:313
-#, c-format
-msgid "line %d: unclosed macro or bad line continuation\n"
-msgstr ""
-
-#: build/parseSpec.c:355
-#, c-format
-msgid "%s:%d: bad %%if condition\n"
-msgstr ""
-
-#: build/parseSpec.c:363
-#, c-format
-msgid "%s:%d: Got a %%else with no %%if\n"
-msgstr ""
-
-#: build/parseSpec.c:374
-#, c-format
-msgid "%s:%d: Got a %%endif with no %%if\n"
-msgstr ""
-
-#: build/parseSpec.c:392
-#, c-format
-msgid "%s:%d: malformed %%include statement\n"
-msgstr ""
-
-#: build/parseSpec.c:669
-msgid "No compatible architectures found for build\n"
-msgstr ""
-
-#: build/parseSpec.c:703
-#, c-format
-msgid "Package has no %%description: %s\n"
-msgstr ""
-
-#: build/policies.c:87
-#, c-format
-msgid "Policy module '%s' duplicated with overlapping types\n"
-msgstr ""
-
-#: build/policies.c:93
-#, c-format
-msgid "Base modules '%s' and '%s' have overlapping types\n"
-msgstr ""
-
-#: build/policies.c:101
-msgid "Failed to get policies from header\n"
-msgstr ""
-
-#: build/policies.c:154
-#, c-format
-msgid "%%semodule requires a file path\n"
-msgstr ""
-
-#: build/policies.c:163
-#, c-format
-msgid "Failed to read policy file: %s\n"
-msgstr ""
-
-#: build/policies.c:170
-#, c-format
-msgid "Failed to encode policy file: %s\n"
-msgstr ""
-
-#: build/policies.c:187
-#, c-format
-msgid "Failed to determine a policy name: %s\n"
-msgstr ""
-
-#: build/policies.c:199
-#, c-format
-msgid ""
-"'%s' type given with other types in %%semodule %s. Compacting types to "
-"'%s'.\n"
-msgstr ""
-
-#: build/policies.c:246
-#, c-format
-msgid "Error parsing %s: %s\n"
-msgstr ""
-
-#: build/policies.c:252
-#, c-format
-msgid "Expecting %%semodule tag: %s\n"
-msgstr ""
-
-#: build/policies.c:262
-#, c-format
-msgid "Missing module path in line: %s\n"
-msgstr ""
-
-#: build/policies.c:268
-#, c-format
-msgid "Too many arguments in line: %s\n"
-msgstr ""
-
-#: build/policies.c:307
-#, c-format
-msgid "Processing policies: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:108
-#, c-format
-msgid "Ignoring invalid regex %s\n"
-msgstr ""
-
-#: build/rpmfc.c:204
-#, c-format
-msgid "Couldn't create pipe for %s: %m\n"
-msgstr ""
-
-#: build/rpmfc.c:229
-#, c-format
-msgid "Couldn't exec %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:234 lib/rpmscript.c:255
-#, c-format
-msgid "Couldn't fork %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:317
-#, c-format
-msgid "%s failed: %x\n"
-msgstr ""
-
-#: build/rpmfc.c:321
-#, c-format
-msgid "failed to write all data to %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
-msgid "Empty file classifier\n"
-msgstr ""
-
-#: build/rpmfc.c:918
-msgid "No file attributes configured\n"
-msgstr ""
-
-#: build/rpmfc.c:938
-#, c-format
-msgid "magic_open(0x%x) failed: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:944
-#, c-format
-msgid "magic_load failed: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:986
-#, c-format
-msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
-msgstr ""
-
-#: build/rpmfc.c:1166
-#, c-format
-msgid "Finding %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
-#, c-format
-msgid "Failed to find %s:\n"
-msgstr ""
-
-#: build/spec.c:404
-#, c-format
-msgid "query of specfile %s failed, can't parse\n"
-msgstr ""
-
-#: lib/cpio.c:364
-#, c-format
-msgid "(error 0x%x)"
-msgstr ""
-
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr ""
-
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr ""
-
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr ""
-
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
-
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr ""
-
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr ""
-
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr ""
-
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr ""
-
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr ""
-
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr ""
-
-#: lib/depends.c:68
-#, c-format
-msgid "%s is a Delta RPM and cannot be directly installed\n"
-msgstr ""
-
-#: lib/depends.c:72
-#, c-format
-msgid "Unsupported payload (%s) in package %s\n"
-msgstr ""
-
-#: lib/depends.c:348
-#, c-format
-msgid "package %s was already added, skipping %s\n"
-msgstr ""
-
-#: lib/depends.c:349
-#, c-format
-msgid "package %s was already added, replacing with %s\n"
-msgstr ""
-
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
-msgid "(not a number)"
-msgstr ""
-
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
-msgstr ""
-
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
-msgstr ""
-
-#: lib/formats.c:314
-msgid "(not base64)"
-msgstr ""
-
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
-msgid "(invalid xml type)"
-msgstr ""
-
-#: lib/formats.c:434
-msgid "(not an OpenPGP signature)"
-msgstr ""
-
-#: lib/formats.c:446
-#, c-format
-msgid "Invalid date %u"
-msgstr ""
-
-#: lib/formats.c:512
-msgid "normal"
-msgstr ""
-
-#: lib/formats.c:515
-msgid "replaced"
-msgstr ""
-
-#: lib/formats.c:518
-msgid "not installed"
-msgstr ""
-
-#: lib/formats.c:521
-msgid "net shared"
-msgstr ""
-
-#: lib/formats.c:524
-msgid "wrong color"
-msgstr ""
-
-#: lib/formats.c:527
-msgid "missing"
-msgstr ""
-
-#: lib/formats.c:530
-msgid "(unknown)"
-msgstr ""
-
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
-#, c-format
-msgid "%s saved as %s\n"
-msgstr ""
-
-#: lib/fsm.c:1543
-#, c-format
-msgid "%s created as %s\n"
-msgstr ""
-
-#: lib/fsm.c:1845
-#, c-format
-msgid "%s %s: remove failed: %s\n"
-msgstr ""
-
-#: lib/fsm.c:1846
-msgid "directory"
-msgstr ""
-
-#: lib/fsm.c:1846
-msgid "file"
-msgstr ""
-
-#: lib/package.c:146
-#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr ""
-
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr ""
-
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr ""
-
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr ""
-
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr ""
-
-#: lib/package.c:296
-#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr ""
-
-#: lib/package.c:322 lib/signature.c:142
-#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:331 lib/signature.c:151
-#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/package.c:358 lib/signature.c:185
-#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr ""
-
-#: lib/package.c:427
-#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr ""
-
-#: lib/package.c:436
-#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr ""
-
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr ""
-
-#: lib/package.c:452
-#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr ""
-
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr ""
-
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
-#, c-format
-msgid "%s: No signature available\n"
-msgstr ""
-
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr ""
-
-#: lib/package.c:629 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
-#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr ""
-
-#: lib/poptALL.c:157
-msgid "predefine MACRO with value EXPR"
-msgstr ""
-
-#: lib/poptALL.c:158 lib/poptALL.c:161
-msgid "'MACRO EXPR'"
-msgstr ""
-
-#: lib/poptALL.c:160
-msgid "define MACRO with value EXPR"
-msgstr ""
-
-#: lib/poptALL.c:163
-msgid "print macro expansion of EXPR"
-msgstr ""
-
-#: lib/poptALL.c:164
-msgid "'EXPR'"
-msgstr ""
-
-#: lib/poptALL.c:166 lib/poptALL.c:180
-msgid "read <FILE:...> instead of default file(s)"
-msgstr ""
-
-#: lib/poptALL.c:167 lib/poptALL.c:181
-msgid "<FILE:...>"
-msgstr ""
-
-#: lib/poptALL.c:170
-msgid "don't verify package digest(s)"
-msgstr ""
-
-#: lib/poptALL.c:172
-msgid "don't verify database header(s) when retrieved"
-msgstr ""
-
-#: lib/poptALL.c:174
-msgid "don't verify package signature(s)"
-msgstr ""
-
-#: lib/poptALL.c:177
-msgid "send stdout to CMD"
-msgstr ""
-
-#: lib/poptALL.c:178
-msgid "CMD"
-msgstr ""
-
-#: lib/poptALL.c:183
-msgid "use ROOT as top level directory"
-msgstr ""
-
-#: lib/poptALL.c:184
-msgid "ROOT"
-msgstr ""
-
-#: lib/poptALL.c:186
-msgid "use database in DIRECTORY"
-msgstr ""
-
-#: lib/poptALL.c:187
-msgid "DIRECTORY"
-msgstr ""
-
-#: lib/poptALL.c:190
-msgid "display known query tags"
-msgstr ""
-
-#: lib/poptALL.c:192
-msgid "display final rpmrc and macro configuration"
-msgstr ""
-
-#: lib/poptALL.c:194
-msgid "provide less detailed output"
-msgstr ""
-
-#: lib/poptALL.c:196
-msgid "provide more detailed output"
-msgstr ""
-
-#: lib/poptALL.c:198
-msgid "print the version of rpm being used"
-msgstr ""
-
-#: lib/poptALL.c:204
-msgid "debug payload file state machine"
-msgstr ""
-
-#: lib/poptALL.c:210
-msgid "debug rpmio I/O"
-msgstr ""
-
-#: lib/poptALL.c:277
-#, c-format
-msgid "%s: option table misconfigured (%d)\n"
-msgstr ""
-
-#: lib/poptI.c:52
-msgid "exclude paths must begin with a /"
-msgstr ""
-
-#: lib/poptI.c:64
-msgid "relocations must begin with a /"
-msgstr ""
-
-#: lib/poptI.c:67
-msgid "relocations must contain a ="
-msgstr ""
-
-#: lib/poptI.c:70
-msgid "relocations must have a / following the ="
-msgstr ""
-
-#: lib/poptI.c:114
-msgid ""
-"install all files, even configurations which might otherwise be skipped"
-msgstr ""
-
-#: lib/poptI.c:118
-msgid ""
-"remove all packages which match <package> (normally an error is generated if"
-" <package> specified multiple packages)"
-msgstr ""
-
-#: lib/poptI.c:123
-msgid "relocate files in non-relocatable package"
-msgstr ""
-
-#: lib/poptI.c:127
-msgid "print dependency loops as warning"
-msgstr ""
-
-#: lib/poptI.c:131
-msgid "erase (uninstall) package"
-msgstr ""
-
-#: lib/poptI.c:131
-msgid "<package>+"
-msgstr ""
-
-#: lib/poptI.c:134 lib/poptI.c:171
-msgid "do not install configuration files"
-msgstr ""
-
-#: lib/poptI.c:137 lib/poptI.c:176
-msgid "do not install documentation"
-msgstr ""
-
-#: lib/poptI.c:139
-msgid "skip files with leading component <path> "
-msgstr ""
-
-#: lib/poptI.c:140
-msgid "<path>"
-msgstr ""
-
-#: lib/poptI.c:143
-msgid "short hand for --replacepkgs --replacefiles"
-msgstr ""
-
-#: lib/poptI.c:147
-msgid "upgrade package(s) if already installed"
-msgstr ""
-
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
-msgid "<packagefile>+"
-msgstr ""
-
-#: lib/poptI.c:150
-msgid "print hash marks as package installs (good with -v)"
-msgstr ""
-
-#: lib/poptI.c:153
-msgid "don't verify package architecture"
-msgstr ""
-
-#: lib/poptI.c:156
-msgid "don't verify package operating system"
-msgstr ""
-
-#: lib/poptI.c:159
-msgid "don't check disk space before installing"
-msgstr ""
-
-#: lib/poptI.c:161
-msgid "install documentation"
-msgstr ""
-
-#: lib/poptI.c:164
-msgid "install package(s)"
-msgstr ""
-
-#: lib/poptI.c:167
-msgid "update the database, but do not modify the filesystem"
-msgstr ""
-
-#: lib/poptI.c:173
-msgid "do not verify package dependencies"
-msgstr ""
-
-#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206
-msgid "don't verify digest of files"
-msgstr ""
-
-#: lib/poptI.c:181
-msgid "don't verify digest of files (obsolete)"
-msgstr ""
-
-#: lib/poptI.c:183
-msgid "don't install file security contexts"
-msgstr ""
-
-#: lib/poptI.c:187
-msgid "do not reorder package installation to satisfy dependencies"
-msgstr ""
-
-#: lib/poptI.c:191
-msgid "do not execute package scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:195
-#, c-format
-msgid "do not execute %%pre scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:198
-#, c-format
-msgid "do not execute %%post scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:201
-#, c-format
-msgid "do not execute %%preun scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:204
-#, c-format
-msgid "do not execute %%postun scriptlet (if any)"
-msgstr ""
-
-#: lib/poptI.c:207
-msgid "do not execute any scriptlet(s) triggered by this package"
-msgstr ""
-
-#: lib/poptI.c:210
-#, c-format
-msgid "do not execute any %%triggerprein scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:213
-#, c-format
-msgid "do not execute any %%triggerin scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:216
-#, c-format
-msgid "do not execute any %%triggerun scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:219
-#, c-format
-msgid "do not execute any %%triggerpostun scriptlet(s)"
-msgstr ""
-
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
-msgid ""
-"upgrade to an old version of the package (--force on upgrades does this "
-"automatically)"
-msgstr ""
-
-#: lib/poptI.c:231
-msgid "print percentages as package installs"
-msgstr ""
-
-#: lib/poptI.c:233
-msgid "relocate the package to <dir>, if relocatable"
-msgstr ""
-
-#: lib/poptI.c:234
-msgid "<dir>"
-msgstr ""
-
-#: lib/poptI.c:236
-msgid "relocate files from path <old> to <new>"
-msgstr ""
-
-#: lib/poptI.c:237
-msgid "<old>=<new>"
-msgstr ""
-
-#: lib/poptI.c:240
-msgid "ignore file conflicts between packages"
-msgstr ""
-
-#: lib/poptI.c:243
-msgid "reinstall if the package is already present"
-msgstr ""
-
-#: lib/poptI.c:245
-msgid "don't install, but tell if it would work or not"
-msgstr ""
-
-#: lib/poptI.c:248
-msgid "upgrade package(s)"
-msgstr ""
-
-#: lib/poptQV.c:67
-msgid "query/verify all packages"
-msgstr ""
-
-#: lib/poptQV.c:69
-msgid "rpm checksig mode"
-msgstr ""
-
-#: lib/poptQV.c:71
-msgid "query/verify package(s) owning file"
-msgstr ""
-
-#: lib/poptQV.c:73
-msgid "query/verify package(s) in group"
-msgstr ""
-
-#: lib/poptQV.c:75
-msgid "query/verify a package file"
-msgstr ""
-
-#: lib/poptQV.c:78
-msgid "query/verify package(s) with package identifier"
-msgstr ""
-
-#: lib/poptQV.c:80
-msgid "query/verify package(s) with header identifier"
-msgstr ""
-
-#: lib/poptQV.c:83
-msgid "rpm query mode"
-msgstr ""
-
-#: lib/poptQV.c:85
-msgid "query/verify a header instance"
-msgstr ""
-
-#: lib/poptQV.c:87
-msgid "query/verify package(s) from install transaction"
-msgstr ""
-
-#: lib/poptQV.c:89
-msgid "query the package(s) triggered by the package"
-msgstr ""
-
-#: lib/poptQV.c:91
-msgid "rpm verify mode"
-msgstr ""
-
-#: lib/poptQV.c:93
-msgid "query/verify the package(s) which require a dependency"
-msgstr ""
-
-#: lib/poptQV.c:95
-msgid "query/verify the package(s) which provide a dependency"
-msgstr ""
-
-#: lib/poptQV.c:98
-msgid "do not glob arguments"
-msgstr ""
-
-#: lib/poptQV.c:100
-msgid "do not process non-package files as manifests"
-msgstr ""
-
-#: lib/poptQV.c:171
-msgid "list all configuration files"
-msgstr ""
-
-#: lib/poptQV.c:173
-msgid "list all documentation files"
-msgstr ""
-
-#: lib/poptQV.c:175
-msgid "dump basic file information"
-msgstr ""
-
-#: lib/poptQV.c:179
-msgid "list files in package"
-msgstr ""
-
-#: lib/poptQV.c:184
-#, c-format
-msgid "skip %%ghost files"
-msgstr ""
-
-#: lib/poptQV.c:191
-msgid "display the states of the listed files"
-msgstr ""
-
-#: lib/poptQV.c:209
-msgid "don't verify size of files"
-msgstr ""
-
-#: lib/poptQV.c:212
-msgid "don't verify symlink path of files"
-msgstr ""
-
-#: lib/poptQV.c:215
-msgid "don't verify owner of files"
-msgstr ""
-
-#: lib/poptQV.c:218
-msgid "don't verify group of files"
-msgstr ""
-
-#: lib/poptQV.c:221
-msgid "don't verify modification time of files"
-msgstr ""
-
-#: lib/poptQV.c:224 lib/poptQV.c:227
-msgid "don't verify mode of files"
-msgstr ""
-
-#: lib/poptQV.c:230
-msgid "don't verify capabilities of files"
-msgstr ""
-
-#: lib/poptQV.c:233
-msgid "don't verify file security contexts"
-msgstr ""
-
-#: lib/poptQV.c:235
-msgid "don't verify files in package"
-msgstr ""
-
-#: lib/poptQV.c:237 tools/rpmgraph.c:218
-msgid "don't verify package dependencies"
-msgstr ""
-
-#: lib/poptQV.c:240 lib/poptQV.c:243
-msgid "don't execute verify script(s)"
-msgstr ""
-
-#: lib/psm.c:212
-#, c-format
-msgid "Missing rpmlib features for %s:\n"
-msgstr ""
-
-#: lib/psm.c:254
-msgid "source package expected, binary found\n"
-msgstr ""
-
-#: lib/psm.c:307
-msgid "source package contains no .spec file\n"
-msgstr ""
-
-#: lib/psm.c:836
-#, c-format
-msgid "unpacking of archive failed%s%s: %s\n"
-msgstr ""
-
-#: lib/psm.c:837
-msgid " on file "
-msgstr ""
-
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
-#, c-format
-msgid "incorrect format: %s\n"
-msgstr ""
-
-#: lib/query.c:123
-msgid "(contains no files)\n"
-msgstr ""
-
-#: lib/query.c:156
-msgid "normal "
-msgstr ""
-
-#: lib/query.c:159
-msgid "replaced "
-msgstr ""
-
-#: lib/query.c:162
-msgid "not installed "
-msgstr ""
-
-#: lib/query.c:165
-msgid "net shared "
-msgstr ""
-
-#: lib/query.c:168
-msgid "wrong color "
-msgstr ""
-
-#: lib/query.c:171
-msgid "(no state) "
-msgstr ""
-
-#: lib/query.c:174
-#, c-format
-msgid "(unknown %3d) "
-msgstr ""
-
-#: lib/query.c:194
-msgid "package has not file owner/group lists\n"
-msgstr ""
-
-#: lib/query.c:225
-msgid "package has neither file owner or id lists\n"
-msgstr ""
-
-#: lib/query.c:314
-#, c-format
-msgid "group %s does not contain any packages\n"
-msgstr ""
-
-#: lib/query.c:321
-#, c-format
-msgid "no package triggers %s\n"
-msgstr ""
-
-#: lib/query.c:332 lib/query.c:351 lib/query.c:367
-#, c-format
-msgid "malformed %s: %s\n"
-msgstr ""
-
-#: lib/query.c:342 lib/query.c:357 lib/query.c:372
-#, c-format
-msgid "no package matches %s: %s\n"
-msgstr ""
-
-#: lib/query.c:380
-#, c-format
-msgid "no package requires %s\n"
-msgstr ""
-
-#: lib/query.c:388
-#, c-format
-msgid "no package provides %s\n"
-msgstr ""
-
-#: lib/query.c:420
-#, c-format
-msgid "file %s: %s\n"
-msgstr ""
-
-#: lib/query.c:423
-#, c-format
-msgid "file %s is not owned by any package\n"
-msgstr ""
-
-#: lib/query.c:434
-#, c-format
-msgid "invalid package number: %s\n"
-msgstr ""
-
-#: lib/query.c:441
-#, c-format
-msgid "record %u could not be read\n"
-msgstr ""
-
-#: lib/query.c:454 lib/rpminstall.c:654
-#, c-format
-msgid "package %s is not installed\n"
-msgstr ""
-
-#: lib/query.c:488
-#, c-format
-msgid "unknown tag: \"%s\"\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:44
-#, c-format
-msgid "%s: key %d import failed.\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:48
-#, c-format
-msgid "%s: key %d not an armored public key.\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:93
-#, c-format
-msgid "%s: import read failed(%d).\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:119
-#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
-msgstr ""
-
-#: lib/rpmchecksig.c:386
-msgid "OK"
-msgstr ""
-
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr ""
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ""
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr ""
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ""
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
-#, c-format
-msgid "%s: open failed: %s\n"
-msgstr ""
-
-#: lib/rpmchroot.c:43
-#, c-format
-msgid "Unable to open current directory: %m\n"
-msgstr ""
-
-#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
-#, c-format
-msgid "%s: chroot directory not set\n"
-msgstr ""
-
-#: lib/rpmchroot.c:70
-#, c-format
-msgid "Unable to change root directory: %m\n"
-msgstr ""
-
-#: lib/rpmchroot.c:95
-#, c-format
-msgid "Unable to restore root directory: %m\n"
-msgstr ""
-
-#: lib/rpmds.c:489
-msgid "NO "
-msgstr ""
-
-#: lib/rpmds.c:489
-msgid "YES"
-msgstr ""
-
-#: lib/rpmds.c:933
-msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
-msgstr ""
-
-#: lib/rpmds.c:936
-msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
-msgstr ""
-
-#: lib/rpmds.c:940
-msgid "package payload can be compressed using bzip2."
-msgstr ""
-
-#: lib/rpmds.c:945
-msgid "package payload can be compressed using xz."
-msgstr ""
-
-#: lib/rpmds.c:948
-msgid "package payload can be compressed using lzma."
-msgstr ""
-
-#: lib/rpmds.c:952
-msgid "package payload file(s) have \"./\" prefix."
-msgstr ""
-
-#: lib/rpmds.c:955
-msgid "package name-version-release is not implicitly provided."
-msgstr ""
-
-#: lib/rpmds.c:958
-msgid "header tags are always sorted after being loaded."
-msgstr ""
-
-#: lib/rpmds.c:961
-msgid "the scriptlet interpreter can use arguments from header."
-msgstr ""
-
-#: lib/rpmds.c:964
-msgid "a hardlink file set may be installed without being complete."
-msgstr ""
-
-#: lib/rpmds.c:967
-msgid "package scriptlets may access the rpm database while installing."
-msgstr ""
-
-#: lib/rpmds.c:971
-msgid "internal support for lua scripts."
-msgstr ""
-
-#: lib/rpmds.c:975
-msgid "file digest algorithm is per package configurable"
-msgstr ""
-
-#: lib/rpmds.c:979
-msgid "support for POSIX.1e file capabilities"
-msgstr ""
-
-#: lib/rpmds.c:983
-msgid "package scriptlets can be expanded at install time."
-msgstr ""
-
-#: lib/rpmds.c:986
-msgid "dependency comparison supports versions with tilde."
-msgstr ""
-
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
-#, c-format
-msgid "open of %s failed: %s\n"
-msgstr ""
-
-#: lib/rpmgi.c:136
-#, c-format
-msgid "%s: not an rpm package (or package manifest)\n"
-msgstr ""
-
-#: lib/rpminstall.c:141
-#, c-format
-msgid "Updating / installing...\n"
-msgstr ""
-
-#: lib/rpminstall.c:143
-#, c-format
-msgid "Cleaning up / removing...\n"
-msgstr ""
-
-#: lib/rpminstall.c:192
-msgid "Preparing..."
-msgstr ""
-
-#: lib/rpminstall.c:194
-msgid "Preparing packages..."
-msgstr ""
-
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
-msgid "Failed dependencies:\n"
-msgstr ""
-
-#: lib/rpminstall.c:321
-#, c-format
-msgid "%s: not an rpm package (or package manifest): %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
-#, c-format
-msgid "%s cannot be installed\n"
-msgstr ""
-
-#: lib/rpminstall.c:464
-#, c-format
-msgid "Retrieving %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:476
-#, c-format
-msgid "skipping %s - transfer failed\n"
-msgstr ""
-
-#: lib/rpminstall.c:542
-#, c-format
-msgid "package %s is not relocatable\n"
-msgstr ""
-
-#: lib/rpminstall.c:570
-#, c-format
-msgid "error reading from file %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:661
-#, c-format
-msgid "\"%s\" specifies multiple packages:\n"
-msgstr ""
-
-#: lib/rpminstall.c:700
-#, c-format
-msgid "cannot open %s: %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:706
-#, c-format
-msgid "Installing %s\n"
-msgstr ""
-
-#: lib/rpmlead.c:100
-msgid "not an rpm package"
-msgstr ""
-
-#: lib/rpmlead.c:104
-msgid "illegal signature type"
-msgstr ""
-
-#: lib/rpmlead.c:108
-msgid "unsupported RPM package version"
-msgstr ""
-
-#: lib/rpmlead.c:123
-#, c-format
-msgid "read failed: %s (%d)\n"
-msgstr ""
-
-#: lib/rpmlead.c:126
-msgid "not an rpm package\n"
-msgstr ""
-
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
-#, c-format
-msgid "can't create %s lock on %s (%s)\n"
-msgstr ""
-
-#: lib/rpmlock.c:106
-#, c-format
-msgid "waiting for %s lock on %s\n"
-msgstr ""
-
-#: lib/rpmplugins.c:59
-#, c-format
-msgid "Failed to dlopen %s %s\n"
-msgstr ""
-
-#: lib/rpmplugins.c:66
-#, c-format
-msgid "Failed to resolve symbol %s: %s\n"
-msgstr ""
-
-#: lib/rpmplugins.c:87
-#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr ""
-
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
-#, c-format
-msgid "Plugin %s not loaded\n"
-msgstr ""
-
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
-#: lib/rpmprob.c:109
-msgid "different"
-msgstr ""
-
-#: lib/rpmprob.c:114
-#, c-format
-msgid "package %s is intended for a %s architecture"
-msgstr ""
-
-#: lib/rpmprob.c:118
-#, c-format
-msgid "package %s is intended for a %s operating system"
-msgstr ""
-
-#: lib/rpmprob.c:122
-#, c-format
-msgid "package %s is already installed"
-msgstr ""
-
-#: lib/rpmprob.c:125
-#, c-format
-msgid "path %s in package %s is not relocatable"
-msgstr ""
-
-#: lib/rpmprob.c:130
-#, c-format
-msgid "file %s conflicts between attempted installs of %s and %s"
-msgstr ""
-
-#: lib/rpmprob.c:135
-#, c-format
-msgid "file %s from install of %s conflicts with file from package %s"
-msgstr ""
-
-#: lib/rpmprob.c:140
-#, c-format
-msgid "package %s (which is newer than %s) is already installed"
-msgstr ""
-
-#: lib/rpmprob.c:145
-#, c-format
-msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
-msgstr ""
-
-#: lib/rpmprob.c:155
-#, c-format
-msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
-msgstr ""
-
-#: lib/rpmprob.c:159
-#, c-format
-msgid "%s is needed by %s%s"
-msgstr ""
-
-#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
-msgid "(installed) "
-msgstr ""
-
-#: lib/rpmprob.c:163
-#, c-format
-msgid "%s conflicts with %s%s"
-msgstr ""
-
-#: lib/rpmprob.c:167
-#, c-format
-msgid "%s is obsoleted by %s%s"
-msgstr ""
-
-#: lib/rpmprob.c:172
-#, c-format
-msgid "unknown error %d encountered while manipulating package %s"
-msgstr ""
-
-#: lib/rpmrc.c:194
-#, c-format
-msgid "missing second ':' at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:197
-#, c-format
-msgid "missing architecture name at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:342
-#, c-format
-msgid "Incomplete data line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:347
-#, c-format
-msgid "Too many args in data line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:354
-#, c-format
-msgid "Bad arch/os number: %s (%s:%d)\n"
-msgstr ""
-
-#: lib/rpmrc.c:385
-#, c-format
-msgid "Incomplete default line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:390
-#, c-format
-msgid "Too many args in default line at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:494
-#, c-format
-msgid "missing ':' (found 0x%02x) at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:511 lib/rpmrc.c:543
-#, c-format
-msgid "missing argument for %s at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:522
-#, c-format
-msgid "cannot open %s at %s:%d: %m\n"
-msgstr ""
-
-#: lib/rpmrc.c:535
-#, c-format
-msgid "missing architecture for %s at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:602
-#, c-format
-msgid "bad option '%s' at %s:%d\n"
-msgstr ""
-
-#: lib/rpmrc.c:926
-msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
-
-#: lib/rpmrc.c:1348
-#, c-format
-msgid "Unknown system: %s\n"
-msgstr ""
-
-#: lib/rpmrc.c:1349
-#, c-format
-msgid "Please contact %s\n"
-msgstr ""
-
-#: lib/rpmrc.c:1590
-#, c-format
-msgid "Unable to open %s for reading: %m.\n"
-msgstr ""
-
-#: lib/rpmscript.c:75
-#, c-format
-msgid "Unable to restore current directory: %m"
-msgstr ""
-
-#: lib/rpmscript.c:86
-msgid "<lua> scriptlet support not built in\n"
-msgstr ""
-
-#: lib/rpmscript.c:221
-#, c-format
-msgid "Couldn't create temporary file for %s: %s\n"
-msgstr ""
-
-#: lib/rpmscript.c:248
-#, c-format
-msgid "Couldn't duplicate file descriptor: %s: %s\n"
-msgstr ""
-
-#: lib/rpmscript.c:272
-#, c-format
-msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
-msgstr ""
-
-#: lib/rpmscript.c:276
-#, c-format
-msgid "%s scriptlet failed, signal %d\n"
-msgstr ""
-
-#: lib/rpmscript.c:279
-#, c-format
-msgid "%s scriptlet failed, exit status %d\n"
-msgstr ""
-
-#: lib/rpmtd.c:258
-msgid "Unknown format"
-msgstr ""
-
-#: lib/rpmte.c:868
-msgid "install"
-msgstr ""
-
-#: lib/rpmte.c:869
-msgid "erase"
-msgstr ""
-
-#: lib/rpmts.c:92
-#, c-format
-msgid "cannot open Packages database in %s\n"
-msgstr ""
-
-#: lib/rpmts.c:192
-#, c-format
-msgid "extra '(' in package label: %s\n"
-msgstr ""
-
-#: lib/rpmts.c:210
-#, c-format
-msgid "missing '(' in package label: %s\n"
-msgstr ""
-
-#: lib/rpmts.c:218
-#, c-format
-msgid "missing ')' in package label: %s\n"
-msgstr ""
-
-#: lib/rpmts.c:278
-#, c-format
-msgid "%s: reading of public key failed.\n"
-msgstr ""
-
-#: lib/rpmts.c:1085
-msgid "transaction"
-msgstr ""
-
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr ""
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr ""
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr ""
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr ""
-
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr ""
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr ""
-
-#: lib/transaction.c:1409
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1409
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr ""
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr ""
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr ""
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr ""
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr ""
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr ""
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr ""
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr ""
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr ""
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr ""
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr ""
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr ""
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
-
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
-#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr ""
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr ""
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
-msgstr ""
-
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr ""
-
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr ""
-
-#: rpmio/macro.c:594
-#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr ""
-
-#: rpmio/macro.c:600
-#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr ""
-
-#: rpmio/macro.c:605
-#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr ""
-
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr ""
-
-#: rpmio/macro.c:649
-#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr ""
-
-#: rpmio/macro.c:743
-#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr ""
-
-#: rpmio/macro.c:825
-#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
-msgstr ""
-
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr ""
-
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:245
-#, c-format
-msgid "error creating temporary file %s: %m\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
-#, c-format
-msgid "File %s: %s\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
-
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
-msgstr ""
-
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
-msgstr ""
-
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr ""
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr ""
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr ""
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr ""
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr ""
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
-msgstr ""
-
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
-msgstr ""
-
-#: sign/rpmgensig.c:87
-#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:97
-#, c-format
-msgid "%s: Fflush failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:131
-#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
-msgstr ""
-
-#: sign/rpmgensig.c:144
-#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
-
-#: sign/rpmgensig.c:174
-#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
-
-#: sign/rpmgensig.c:216
-#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr ""
-
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
-msgstr ""
-
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr ""
-
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
-msgstr ""
-
-#: tools/rpmgraph.c:142
-#, c-format
-msgid "%s: read manifest failed: %s\n"
-msgstr ""
-
-#: tools/rpmgraph.c:220
-msgid "don't verify header+payload signature"
-msgstr ""
diff --git a/po/id.po b/po/id.po
index 686824c0d..f56609cfd 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1,530 +1,612 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
+# Ibnu Daru Aji, 2015
+# Muhammad Panji <sumodirjo@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
-"Report-Msgid-Bugs-To: http://rpm.org/\n"
-"POT-Creation-Date: 2012-11-05 10:07+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Indonesian (http://www.transifex.com/projects/p/rpm/language/id/)\n"
+"Language-Team: Indonesian (http://www.transifex.com/rpm-team/rpm/language/"
+"id/)\n"
+"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: cliutils.c:21 lib/poptI.c:29
#, c-format
msgid "%s: %s\n"
-msgstr ""
+msgstr "%s: %s\n"
-#: cliutils.c:27 lib/poptALL.c:55
+#: cliutils.c:27 lib/poptALL.c:56
#, c-format
msgid "RPM version %s\n"
-msgstr ""
+msgstr "Versi RPM %s\n"
#: cliutils.c:32
#, c-format
msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
-msgstr ""
+msgstr "Hak Cipta (C) 1998-2002 - Red Hat, Inc\n"
#: cliutils.c:33
#, c-format
msgid ""
"This program may be freely redistributed under the terms of the GNU GPL\n"
msgstr ""
+"Program ini bisa didistribusikan secara bebas menggunakan Lisensi GNU GPL\n"
#: cliutils.c:53
#, c-format
msgid "creating a pipe for --pipe failed: %m\n"
-msgstr ""
+msgstr "pembuatan pipe untuk --pipe gagal: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
-msgstr ""
+msgstr "eksekusi gagal\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
-msgstr ""
+msgstr "argumen bukan merupakan paket RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
-msgstr ""
+msgstr "gagal membaca header paket\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
-msgstr ""
+msgstr "Tidak dapat membuka ulang payload: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr ""
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr ""
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr ""
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr ""
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr ""
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "buildroot sudah ditentukan, mengabaikan %s\n"
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
+"pembangunan pada %prep (membuka sumber dan penerapan tambalan) dari "
+"<specfile>"
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<specfile>"
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
+msgstr "pembangunan pada %build (%prep, lalu kompilasi) dari <specfile>"
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
+"pembangunan pada %install (%prep, %build, lalu pemasangan) dari <specfile>"
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
+msgstr "verifikasi %files dari <specfile>"
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr ""
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
+msgstr "membangun sumber dan paket binari dari <specfile>"
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr ""
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
+msgstr "membangun paket binari dari <specfile>"
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
+msgstr "membangun paket sumber dari <specfile>"
-#: rpmqv.c:174
+#: rpmbuild.c:161
+#, c-format
msgid ""
-"--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:230
+#: rpmbuild.c:167 rpmbuild.c:208
msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr ""
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr ""
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr ""
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr ""
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr ""
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr ""
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
+"pembangunan pada %install (%prep, %build, lalu pemasangan) dari <source "
+"package>"
-#: rpmbuild.c:129
+#: rpmbuild.c:170
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
+"pembangunan pada %prep (pembukaan berkas dan penerapan tambalan) dari "
+"<tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
-msgstr ""
+msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
-msgstr ""
+msgstr "pembangunan pada %build (%prep, lalu kompilasi) dari <tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
+"pembangunan pada %install (%prep, %build, lalu pemasangan) dari %tarball"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
-msgstr ""
+msgstr "verifikasi bagian %files dari <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
-msgstr ""
+msgstr "pembangunan paket sumber dan binari dari <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
-msgstr ""
+msgstr "pembangunan paket binari saja dari <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
-msgstr ""
+msgstr "pembangunan paket sumber saja dari <tarball>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
-msgstr ""
-
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr ""
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
+msgstr "pembangunan paket binari dari <source package>"
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
+msgstr "kesampingkan build root"
+
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmbuild.c:173
+#: rpmbuild.c:216
msgid "remove build tree when done"
-msgstr ""
+msgstr "hapus build tree ketika selesai"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
-msgstr ""
+msgstr "abaikan ExcludeArch: arahan dari berkas spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr ""
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr ""
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr ""
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr ""
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Opsi umum untuk semua mode rpm dan eksekutabel:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr ""
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "argumen untuk --root (-r) harus diawali dengan /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr ""
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr ""
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr ""
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "hanya satu mode utama yang bisa ditentukan"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Opsi seleksi kueri/Verifikasi paket:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opsi Kueri (dengan -q atau --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opsi verifikasi (dengan -V atau --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opsi Pemasangan/Pemutakhiran/Penghapusan:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "hanya satu tipe kueri/verifikasi yang bisa dilakukan dalam satu waktu"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "penanda kueri tak sesuai dengan yang diharapkan"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "format kueri tak sesuai dengan yang diharapkan"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "sumber kueri tak sesuai dengan yang diharapkan"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "hanya pemasangan dan pemutakhiran yang bisa dipaksakan"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "berkas mungkin sudah dipindahkan saat pemasangan paket"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "tidak dapat menggunakan --prefix dengan --relocate atau --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate dan --excludepath hanya bisa digunakan ketika pemasangan paket "
+"baru"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix hany abisa digunakan ketika pemasangan paket baru"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argumen untuk --prefix harus dimulai dengan /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"--hash (-h) hanya bisa ditentukan saat pemasangan atau penghapusan paket"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent hanya bisa ditentukan saat pemasangan paket atau penghapusan"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "hanya satu dari --excludedocs dan --includedocs yang bisa digunakan"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches hanya bisa ditentukan saat penghapusan paket"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles hanya bisa ditentukan saat pemasangan paket"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb hanya bisa ditentukan saat pemasangan dan penghapusan paket"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opsi penonaktifan skrip hanya bisa ditentukan saat pemasangan dan "
+"penghapusan paket"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opsi penonaktifan pemicu hanya bisa ditentukan saat pemasangan dan "
+"penghapusan paket"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps hanya bisa ditentukan saat pemasangan, penghapusan, dan verifikasi "
+"paket"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test hanya bisa ditentukan saat pemasangan dan penghapusan paket"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "tak ada paket yang dihapus"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "tidak ada paket yang dipasang"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "tidak ada argumen untuk kueri"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "tidak ada argumen untuk verifikasi"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:49
+msgid "Signature options:"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
msgstr ""
-#: rpmspec.c:26
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
+
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:189
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -533,473 +615,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:327 build/files.c:496 build/files.c:710
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:337 build/files.c:632 build/files.c:720 build/files.c:779
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:362 build/files.c:651
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:465
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:511
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:547
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:556
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:568
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:672
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:679
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:794
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:804
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:853
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:974
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1002
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1124
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1132
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
#: build/files.c:1346
#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
+#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1347
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1538
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1544
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1548
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1557
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1602
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1626
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1639
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1640 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1676
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1683
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr ""
-#: build/files.c:1690
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1712
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1866
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1883
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2011
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2036 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
+msgid "Bad file: %s: %s\n"
msgstr ""
-#: build/files.c:2070
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2083
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2114
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2127
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2133
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:434
#, c-format
-msgid "Could not open %s: %s\n"
+msgid "Failed to read %jd bytes in file %s: %s\n"
msgstr ""
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:468
+#: build/pack.c:453
#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:479
+#: build/pack.c:520
#, c-format
-msgid "Unable to read header from %s: %s\n"
+msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:489
+#: build/pack.c:527
#, c-format
-msgid "Unable to write header to %s: %s\n"
+msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1007,341 +1162,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1412,442 +1636,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:810
+msgid "exclusive"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:348
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:349
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr ""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr ""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr ""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
msgstr ""
-#: lib/package.c:629 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:157
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:158 lib/poptALL.c:161
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:160
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:163
+#: lib/poptALL.c:194
+msgid "undefine MACRO"
+msgstr ""
+
+#: lib/poptALL.c:195
+msgid "MACRO"
+msgstr ""
+
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:166 lib/poptALL.c:180
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:167 lib/poptALL.c:181
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:172
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:177
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:178
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:183
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:186
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:190
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:192
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:198
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:210
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:277
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1868,524 +2211,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
-msgid ""
-"install all files, even configurations which might otherwise be skipped"
+#: lib/poptI.c:118
+msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
-"remove all packages which match <package> (normally an error is generated if"
-" <package> specified multiple packages)"
+"remove all packages which match <package> (normally an error is generated if "
+"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr ""
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:171
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:173
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:175
+#: lib/poptQV.c:197
+msgid "list all license files"
+msgstr ""
+
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:179
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:184
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:191
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:209
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:224 lib/poptQV.c:227
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:230
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:235
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:237 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:240 lib/poptQV.c:243
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:156
+#: lib/query.c:161
msgid "normal "
msgstr ""
-#: lib/query.c:159
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:162
+#: lib/query.c:167
msgid "not installed "
msgstr ""
-#: lib/query.c:165
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:168
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:171
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:174
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:194
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:225
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:314
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:321
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:332 lib/query.c:351 lib/query.c:367
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:342 lib/query.c:357 lib/query.c:372
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:380
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:388
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:420
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:423
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:434
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:441
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:454 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:488
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ""
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
msgstr ""
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2410,212 +2805,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr ""
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2689,796 +3313,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:494
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:511 lib/rpmrc.c:543
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:522
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:535
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:602
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:926
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1348
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1590
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:192
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:210
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:218
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:278
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1085
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr ""
-
-#: lib/signature.c:219
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr ""
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:261
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/transaction.c:1409
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1409
-msgid "failed"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/verify.c:372
+#: lib/rpmvs.c:268
#, c-format
-msgid "missing %c %s"
-msgstr ""
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
+msgid "%s%s"
msgstr ""
-#: lib/headerfmt.c:435
-msgid "unexpected }"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:263
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: lib/verify.c:284
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:2250
+#: lib/verify.c:448
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:2358
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2448
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:551
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:557
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:562
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:566
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:607
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:637
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/macro.c:1182
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/macro.c:1197
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/macro.c:1578
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: plugins/sepolicy.c:218
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+msgid "File %s: %s\n"
msgstr ""
-#: plugins/sepolicy.c:231
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+#: rpmio/rpmlog.c:194
+msgid "error: "
msgstr ""
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: rpmio/macro.c:185
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: rpmio/macro.c:323
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/macro.c:364
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%3d<%*s(empty)\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: rpmio/macro.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:208
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:221
#, c-format
-msgid "File %s: %s\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:270
#, c-format
-msgid "File %s is smaller than %u bytes\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: sign/rpmgensig.c:302
#, c-format
-msgid "invalid syntax in lua script: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: sign/rpmgensig.c:312
#, c-format
-msgid "lua script failed: %s\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/is.po b/po/is.po
index 31fb92acd..e848f62ef 100644
--- a/po/is.po
+++ b/po/is.po
@@ -7,15 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Icelandic (http://www.transifex.com/rpm-team/rpm/language/"
+"is/)\n"
"Language: is\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"
#: cliutils.c:21 lib/poptI.c:29
#, c-format
@@ -43,487 +44,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr ""
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr ""
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr ""
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr ""
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr ""
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr ""
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr ""
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "buildroot þegar skilgreind, hunsa %s\n"
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:170
+#: rpmbuild.c:161
+#, c-format
msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:230
+#: rpmbuild.c:167 rpmbuild.c:208
msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr ""
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr ""
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr ""
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr ""
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr "buildroot þegar skilgreind, hunsa %s\n"
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr ""
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:170
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr ""
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr ""
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr ""
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmbuild.c:173
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr ""
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr ""
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr ""
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr ""
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr ""
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Get ekki opnað spec skrána %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Gat ekki opnað pípu í tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Gat ekki lesið spec skrá frá %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Gat ekki endurnefnt %s sem %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "gat ekki skoðað %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Skráin %s er ekki venjuleg skrá.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Skráin %s virðist ekki vera specskrá.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Þýði fyrir markkerfi: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Þýði fyrir markkerfi %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr ""
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr ""
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr ""
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr ""
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr ""
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr ""
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr ""
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr ""
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr ""
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr ""
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr ""
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr ""
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr ""
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr ""
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr ""
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr ""
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr ""
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr ""
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
+msgid "Signature options:"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -532,473 +595,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Gat ekki keyrt %s (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "vantar '(' í %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "vantar ')' í %s %s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Ógilt %s tákn: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Skráin er tvítekin: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Skráin fannst ekki: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Skráin fannst ekki með 'glob': %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "lína: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Skráin fannst ekki með 'glob': %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Ógild skrá %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr ""
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Get ekki ritað innihald í %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Get ekki lesið innihald %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Get ekki opnað tempi skrá.\n"
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Gat ekki lesið spec skrá frá %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Get ekki ritað í pakka: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Get ekki opnað sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Get ekki lesið haus úr %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Gat ekki ritað haus í %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Skrifaði: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "lína %d: Óleyfilegur rofi %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1006,341 +1142,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Get ekki opnað táknmynd %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Gat ekki lesið táknmynd %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Óþekkt tegund táknmyndar: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "lína %d: Tag tekur einungis eitt tákn: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "lína %d: Skemmt tag: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "lína %d: Tómt tag: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Slæmt ílag: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "lína %d: Ógilt viðfang við %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "lína %d: Villa við þáttun %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "lína %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Get ekki opnað %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1411,450 +1616,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Gat ekki keyrt %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Gat ekki búið til undirferli (fork) %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "gat ekki fundið %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Harðar tengingar vantar"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "deildann"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "einka"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s vistað sem %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s búið til sem %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr ""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr ""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "sýna endanlega rpmrc og stillingar fjölva"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "prenta útgáfunúmer rpm sem verið er að nota"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1875,527 +2191,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pakkaskrá>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<pakkaskrá>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<gömul>=<ný>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "uppfæra pakka"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "fyrirspurn/yfirferð á pakkann sam á skrá"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "fyrirspurn/yfirferð á pakkana sem hafa pakkaþarfir"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "fyrirspurn/yfirferð á pakkana sem uppfylla þarfir annara pakka"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "ekki yfirfara stærð skráa"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "ekki yfirfara symlink slóð skráa"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "ekki yfirfara eiganda skráa"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "ekki yfirfara hop skráa"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "ekki yfirfara heimildir skráa"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "ekki yfirfara skrárnar í pakkanum"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "ekki skoða pakkaskilyrðin"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "pakkinn inniheldur enga .spec skrá\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr ""
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr ""
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ""
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
msgstr ""
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2420,212 +2785,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr ""
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2699,796 +3293,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "vantar seinni ':' á %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "viðfang vantar fyrir %s á %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "ólöglegur rofi '%s' á %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "get ekki opnað pakka gagnagrunn í %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:268
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/signature.c:489
-msgid "Header "
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "skipped"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr ""
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/headerfmt.c:375
-msgid "empty tag format"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/headerfmt.c:386
-msgid "empty tag name"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
+#: lib/verify.c:448
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "get ekki opnað %s index með db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr ""
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:1318
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1415
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:1897
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2250
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(tómt)"
+
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(tómt)\n"
-#: lib/rpmdb.c:2349
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2358
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:551
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:607
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:637
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:761
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "Óþekkt viðfang %c í %s(%s)\n"
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:1182
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:1197
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1578
#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr ""
+msgid "======================== active %d empty %d\n"
+msgstr "======================== virkt %d tómt %d\n"
-#: lib/rpmdb.c:2960
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/db3.c:33
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr ""
+msgid "File %s: %s\n"
+msgstr "Skrá %s: %s\n"
-#: lib/backend/db3.c:36
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr ""
+msgid "File %s is smaller than %u bytes\n"
+msgstr "Skráin %s er minni en %u bæti\n"
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "deildann"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "einka"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(engin villa)"
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "banvæn villa: "
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "villa: "
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "aðvörun: "
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:218
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:231
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:306
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "minnisfrátekt (%u bæta) skilaði NULL.\n"
-#: plugins/sepolicy.c:337
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%s failed with exit code %i\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:594
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== virkt %d tómt %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(tómt)"
-
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(tómt)\n"
-
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:605
-#, c-format
-msgid "Macro %%%s has empty body\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/macro.c:825
-#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "Óþekkt viðfang %c í %s(%s)\n"
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/macro.c:1175
+#: sign/rpmgensig.c:302
#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:312
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
-#, c-format
-msgid "File %s: %s\n"
-msgstr "Skrá %s: %s\n"
-
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "Skráin %s er minni en %u bæti\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "gpg get ekki lesið undirskriftina\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "get ekki lesið undirskriftina\n"
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(engin villa)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "banvæn villa: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "villa: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "aðvörun: "
-
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:622
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "minnisfrátekt (%u bæta) skilaði NULL.\n"
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr "gpg get ekki lesið undirskriftina\n"
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "get ekki lesið undirskriftina\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/it.po b/po/it.po
index 9cc03362c..d52f1d984 100644
--- a/po/it.po
+++ b/po/it.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Guido Grazioli <guido.grazioli@gmail.com>, 2011-2012.
+# Guido Grazioli <guido.grazioli@gmail.com>, 2011-2014
+# Luigi Toscano <luigi.toscano@tiscali.it>, 2016-2017
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/rpm/language/"
-"it/)\n"
+"Language-Team: Italian (http://www.transifex.com/rpm-team/rpm/language/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -47,527 +47,589 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "creazione di una pipe per --pipe fallita: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "exec fallito\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "l'argomento non è un pacchetto RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "errore durante la lettura dell'intestazione dal pacchetto\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "impossibile riaprire il payload: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Opzioni di selezione pacchetti per le operazioni Query/Verify:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opzioni d'interrogazione (con -q o --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opzioni di verifica (con -V o --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opzioni Installa/Aggiorna/Rimuovi:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Opzioni comuni per tutte le modalità e gli eseguibili rpm:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "è possibile eseguire solo un tipo di interrogazione/verifica per volta"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "flag di interrogazione inaspettati"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "formato di interrogazione inaspettato"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "origine d'interrogazione inaspettata"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "è possibile specificare solo una modalità principale"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "è possibile forzare solo i processi di installazione e aggiornamento"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-"i file possono essere riposizionati solo durante l'installazione del "
-"pacchetto"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "impossibile usare --prefix con --relocate o --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate e --excludepath possono essere usati solo quando si installano "
-"nuovi pacchetti"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix può essere usato solo quando si installano nuovi pacchetti"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "gli argomenti per --prefix devono iniziare con /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-"--hash (-h) può essere usato solo per installazione o eliminazione di "
-"pacchetti"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-"--percent può essere usato solo per installazione o eliminazione di pacchetti"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-"--replacepkgs può essere specificato solo durante l'installazione del "
-"pacchetto"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-"--excludedocs può essere specificato solo durante l'installazione del "
-"pacchetto"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-"--includedocs può essere specificato solo durante l'installazione del "
-"pacchetto"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "è possibile specificare solo uno tra --excludedocs e --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-"--ignorearch può essere specificato solo durante l'installazione del "
-"pacchetto"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-"--ignoreos può essere specificato solo durante l'installazione del pacchetto"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-"--ignoresize può essere specificato solo durante l'installazione del "
-"pacchetto"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-"--allmatches può essere specificato solo durante la rimozione del pacchetto"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-"--allfiles può essere specificato solo durante l'installazione del pacchetto"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb può essere specificato solo durante l'installazione e la rimozione "
-"del pacchetto"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"le opzioni per la disabilitazione dello script possono essere specificate "
-"solo durante l'installazione e la rimozione del pacchetto"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"le opzioni di disabilitazione dell'attivazione possono essere specificate "
-"solo durante l'installazione e la rimozione del pacchetto"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps può essere specificato solamente per l'installazione, "
-"l'eliminazione e la verifica di pacchetti"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-"--test può essere specificato solamente per l'installazione e l'eliminazione "
-"di pacchetti"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "gli argomenti per --root (-r) devono iniziare con /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "non è stato specificato alcun pacchetto per la rimozione"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "non è stato specificato alcun pacchetto per l'installazione"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "non è stato specificato alcun argomento per l'interrogazione"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "non è stato specificato alcun argomento per la verifica"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot è già specificato, ignora %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"compila attraverso %prep (scompatta i sorgenti e applica le patch) da "
"<specfile>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "compila attraverso %build (%prep, e poi compila) da <specfile>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"compila attraverso %install (%prep, %build, e poi installa) da <specfile>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "verifica sezione %files da <specfile>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "compila i pacchetti binari e sorgente da <specfile>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "compila solo il pacchetto binario da <specfile>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "compila solo il pacchetto sorgente da <specfile>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"compila attraverso %install (%prep, %build, poi installa) da <source package>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"compila attraverso %prep (scompatta i sorgenti ed applica le patch) da "
"<tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "compila attraverso %build (%prep, e poi compila) da <tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "compila attraverso %install (%prep, %build, poi installa) da <tarball>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verifica la sezione %files da <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "compila i pacchetti binari e sorgenti da <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "compila solo il pacchetto binario da <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "compila solo il pacchetto sorgente da <tarball>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "compila il pacchetto binario da <source package>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<source package>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"compila attraverso %install (%prep, %build, poi installa) da <source package>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "override della build root"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "rimuovere l'albero di compilazione quando terminato"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignora le direttive ExcludeArch: dal file spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "macchina a stati del file di debug"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "non eseguire alcuna fase del processo di compilazione"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "non verificare le dipendenze di compilazione"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr "genera pacchetti con intestazioni compatibili con rpm v3 (legacy)"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
-msgstr ""
+msgstr "non eseguire la fase %clean del processo di build"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "non eseguire la fase %prep del processo di build"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "non eseguire la fase %check del processo di build"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "non accettare i msgtr di i18N da specfile"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "rimuovi i sorgenti quando terminato"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "rimuovi lo specfile quando terminato"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "salta direttamente alla fase specificata (solo per c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "override della piattaforma target"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Opzioni di build con [ <specfile> | <tarball> | <source package> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Opzioni comuni per tutte le modalità e gli eseguibili rpm:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Dipendenze di build fallite:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Impossibile aprire il file spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Impossibile aprire tar pipe: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "Trovato più di un file spec in %s\n"
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Impossibile leggere il file spec da %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Impossibile rinominare %s in %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "impossibile eseguire lo stat di %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Il file %s non è un file regolare.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Il file %s non sembra essere uno specfile.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Creazione piattaforme target in corso: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Creazione per il target %s in corso\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "gli argomenti per --root (-r) devono iniziare con /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "inizializza database"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"ricompila gli elenchi invertiti del database dalle intestazioni dei "
"pacchetti installati"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "verifica dei file del database"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "esporta database in una lista header su stdout"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "importa database da una lista di header su stdin"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opzioni del database:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "è possibile specificare solo una modalità principale"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "verifica firma(e) del pacchetto"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importa una armored public key"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
"non importare realmente, riporta solo se l'operazione termina con successo "
"oppure no"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "elenca le chiavi del keyring RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Opzioni keyring:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "non è stato specificato alcun argomento"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Opzioni di selezione pacchetti per le operazioni Query/Verify:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opzioni d'interrogazione (con -q o --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opzioni di verifica (con -V o --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opzioni Installa/Aggiorna/Rimuovi:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "è possibile eseguire solo un tipo di interrogazione/verifica per volta"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "flag di interrogazione inaspettati"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "formato di interrogazione inaspettato"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "origine d'interrogazione inaspettata"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "è possibile forzare solo i processi di installazione e aggiornamento"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+"i file possono essere riposizionati solo durante l'installazione del "
+"pacchetto"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "impossibile usare --prefix con --relocate o --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate e --excludepath possono essere usati solo quando si installano "
+"nuovi pacchetti"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix può essere usato solo quando si installano nuovi pacchetti"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "gli argomenti per --prefix devono iniziare con /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"--hash (-h) può essere usato solo per installazione o eliminazione di "
+"pacchetti"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"--percent può essere usato solo per installazione o eliminazione di pacchetti"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+"--replacepkgs può essere specificato solo durante l'installazione del "
+"pacchetto"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+"--excludedocs può essere specificato solo durante l'installazione del "
+"pacchetto"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+"--includedocs può essere specificato solo durante l'installazione del "
+"pacchetto"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "è possibile specificare solo uno tra --excludedocs e --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+"--ignorearch può essere specificato solo durante l'installazione del "
+"pacchetto"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+"--ignoreos può essere specificato solo durante l'installazione del pacchetto"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+"--ignoresize può essere specificato solo durante l'installazione del "
+"pacchetto"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+"--allmatches può essere specificato solo durante la rimozione del pacchetto"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+"--allfiles può essere specificato solo durante l'installazione del pacchetto"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb può essere specificato solo durante l'installazione e la rimozione "
+"del pacchetto"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"le opzioni per la disabilitazione dello script possono essere specificate "
+"solo durante l'installazione e la rimozione del pacchetto"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"le opzioni di disabilitazione dell'attivazione possono essere specificate "
+"solo durante l'installazione e la rimozione del pacchetto"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps può essere specificato solamente per l'installazione, "
+"l'eliminazione e la verifica di pacchetti"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"--test può essere specificato solamente per l'installazione e l'eliminazione "
+"di pacchetti"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "non è stato specificato alcun pacchetto per la rimozione"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "non è stato specificato alcun pacchetto per l'installazione"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "non è stato specificato alcun argomento per l'interrogazione"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "non è stato specificato alcun argomento per la verifica"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "firma i pacchetti"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "firma pacchetto/i (identico a --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "cancella le firme del pacchetto"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opzioni della firma:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Impossibile eseguire %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "È necessario impostare \"%%_gpg_name\" nel file macro\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Inserire la passphrase:"
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "La passphrase risulta valida.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Controllo della pass phrase fallito o chiave gpg scaduta\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "parsa gli spec file sullo stdout"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "interroga file spec"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "opera sugli rpm binari generati dal file spec (default)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "opera sul file rpm sorgente generato dal file spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "usare il seguente formato di interrogazione"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Opzioni specfile:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "nessun argomento passato per il parsing"
@@ -576,32 +638,37 @@ msgstr "nessun argomento passato per il parsing"
msgid "Unable to open temp file: %s\n"
msgstr "Impossibile aprire il file temporaneo: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Impossibile aprire lo stream: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Esecuzione(%s) in corso: %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Esecuzione di %s fallita (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "Errore nell'esecuzione della scriptlet %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Stato d'uscita errato da %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -611,235 +678,317 @@ msgstr ""
"\n"
"Errori di compilazione RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "errore di sintassi durante il parsing di ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "errore di sintassi durante il parsing di &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "errore di sintassi durante il parsing di ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "errore durante il parsing dell'espressione\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "non corrispondente (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- solo sui numeri\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! solo sui numeri\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "i diversi tipi devono corrispondere\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / non supportato per le stringhe\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- non supportato per le stringhe\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& e || non supportati per le stringhe\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "errore di sintassi nell'espressione\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "'(' mancante in %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "')' mancante in %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Token %s non valido: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%s mancante in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Caratteri non validi seguono %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Sintassi non corretta: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Spec della modalità errata: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Spec dirmode errata: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Lunghezza inconsueta del locale: \"%s\" in %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Locale duplicato: %s in %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Capability non valida: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
-msgstr "Supporto alle file capabilities non disponibile\n"
+msgstr "Supporto per capability dei file non disponibile\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Il file deve iniziare con \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Algoritmo di digest %u sconosciuto, ritorno a MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "File elencato due volte: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "lettura del symlink %s fallita: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
-msgstr "Il Symlink punta alla BuildRoot: %s -> %s\n"
+msgstr "Il collegamento simbolico punta alla BuildRoot: %s -> %s\n"
+
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "Percorso esterno alla buildroot: %s\n"
-#: build/files.c:1345
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Directory non trovata: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "File non trovato: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Non è una directory: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: impossibile caricare tag sconosciuto (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: lettura chiave pubblica fallita.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: non è una chiave pubblica con formato 'armored'.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: errore durante l'encoding\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "impossibile creare la directory"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Il file deve essere preceduto da \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "glob %%dev non consentito: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Directory non trovata per il glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "File non trovato dal glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Impossibile aprire %%files file %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "riga: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+"File %s vuoto nella sezione %%files\n"
+"\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Errore nella lettura del file %s in %%files: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "_docdir_fmt %s non valido: %s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "File non trovato dal glob: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
+msgstr "Impossibile unire %s speciali con altre forme: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "Più di un file su una riga: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "File errato: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Proprietario/gruppo errato: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Controllo per file non pacchettizzati in corso: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -848,549 +997,610 @@ msgstr ""
"Trovati file installati (ma non inclusi nel pacchetto):\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Elaborazione file: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
+"L'architettura dei binari (%d) non corrisponde a quella del pacchetto (%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Binari dipendenti dall'architettura presenti in un pacchetto noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "creazione archivio fallita sul file %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "creazione archivio fallita: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Impossibile aprire il file %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: linea: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Impossibile regolarizzare l'hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Impossibile salvare payload su %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Impossibile leggere payload da %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Impossibile regolarizzare l'hostname: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Compressione payload sconosciuta: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Impossibile creare una regione dell'intestazione immutabile.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Impossibile aprire il file temp.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Impossibile eseguire seek nel file %s: %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Impossibile salvare intestazione di temp\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Impossibile leggere il file policy: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Dati CSA errati\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Impossibile ricaricare intestazione della firma.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Impossibile aprire %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Impossibile scrivere il pacchetto: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Impossibile aprire sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Impossibile leggere intestazione da %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Impossibile salvare intestazione su %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Scritto: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Esecuzione \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Esecuzione di \"%s\" fallita.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Controllo pacchetto \"%s\" fallito.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Impossibile generare nome del file di output per il pacchetto %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "impossibile creare %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "riga %d: secondo %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr ""
+msgstr "data non valida in %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "le voci %%changelog devono iniziare con *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "voce %%changelog incompleta\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "data errata in %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog non è in ordine cronologico decrescente\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "nome mancante in %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "nessuna descrizione in %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "linea %d: seconda sezione %%changelog\n"
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "riga %d: Errore durante il parsing di %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "riga %d: Opzione %s errata: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "riga %d: Troppi nomi: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "riga %d: Pacchetto non esistente: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "riga %d: Seconda descrizione\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "riga %d: Errore nel parsing di %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "riga %d: Errore nel parsing di %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Impossibile eseguire il parsing del campo tag: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "riga %d: Numero errato: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "riga %d: Numero no%s errato: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "riga %d: Numero %s errato: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d specificato più volte\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Scaricamento di %s su %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Impossibile scaricare %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "L'architettura è esclusa: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "L'architettura non è inclusa: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS è escluso: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS non è incluso: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "il campo %s deve essere presente nel pacchetto: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Voci %s duplicate nel pacchetto: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Impossibile aprire l'icona %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Impossibile leggere l'icona %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Tipo di icona sconosciuto: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "riga %d: Il tag necessita di un solo token: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "riga %d: Carattere '%c' illegale in: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr "linea %d: %s in: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "riga %d: Carattere illegale in: %s\n"
+msgid "%s in: %s\n"
+msgstr "%s in: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "riga %d: Sequenza \"..\" illegale in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "Carattere non valido '%c' (0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "Sequenza non valida \"..\""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "riga %d: Tag malformato: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "riga %d: Tag vuoto: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "riga %d: I prefissi non devono finire con \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "riga %d: Docdir deve iniziare con '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "riga %d: Il tag Epoch deve essere un numero: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "riga %d: %s errati: qualificatori: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "riga %d: Formato BuildArchitecture errato: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "riga %d: Sono supportati solo sottopacchetti noarch: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
-msgstr "Errore interno: bogus tag %d\n"
+msgstr "Errore interno: tag incorretto %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "riga %d: %s è deprecato: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Specifiche errate del pacchetto: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Il pacchetto è già esistente: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "riga %d: Tag sconosciuto: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} non può essere vuota\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} non può essere \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Sorgenti non validi: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Nessuna patch con numero %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch senza il corrispondente tag \"Patch:\"\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Nessun sorgente con numero %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Nessun tag \"Source:\" nello spec file\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Errore nel parsing di %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "riga %d: Argomento errato su %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "riga %d: Opzione di %%setup errata %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Numero patch non valido %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "riga %d: secondo %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr "I token delle dipendenze devono iniziare per alfanumerico, '_' o '/'"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "Nome file versionato non consentito"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Versione richiesta"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "Dipendenza non valida"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Versione richiesta"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "Sono permessi solo percorsi assoluti nei trigger dei file"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+"Un trigger attivato dallo stesso pacchetto è già definito nel file spec"
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "linea %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "riga %d: i trigger devono presentare --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "riga %d: Errore nel parsing di %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "linea %d: uno script interno deve terminare con '>': %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "riga %d: il programma script deve iniziare con '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "riga %d: Secondo %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "linea %d: script interno non supportato: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr "linea %d: argomenti dell'interprete non consentiti nei trigger: %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "riga %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Impossibile aprire %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: argomento necessario per %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
+"riga %d: %%if non bilanciato\n"
+"\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "linea %d: macro non chiusa o errata continuazione linea\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: condizione %%if errata\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Trovato un %%else con nessun %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Trovato un %%endif con nessun %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s: %d: istruzione %%include malformata\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "la codifica %s non è supportata dal sistema\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Pacchetto %s: codifica %s non valida in %s: %s - %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
"Non è stata trovata alcuna architettura compatibile per la compilazione\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Il pacchetto non possiede alcuna %%description: %s\n"
@@ -1463,451 +1673,562 @@ msgstr "Troppi argomenti alla linea: %s\n"
msgid "Processing policies: %s\n"
msgstr "Elaborazione policies: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Viene ignorata la regex non valida %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Impossibile creare la pipe per %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Impossibile eseguire %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Impossibile biforcare %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s fallito: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "impossibile salvare tutti i dati su %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Conversione di %s a long integer fallita.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "File classifier vuoto\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Non è configurato alcun attributo dei file\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) fallita: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load fallita: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Identificazione file \"%s\" fallita: modalità %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Ricerca di %s in corso: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Impossibile trovare %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
"interrogazione di specfile %s fallita, impossibile eseguire il parsing\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(errore 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s error(%d) da %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s error(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Intestazione errata/illeggibile"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "opzione db non riconosciuta: \"%s\" ignorata.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Dimensione intestazione troppo grande"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s presenta un valore numeric non valido, omesso\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s presenta un valore long troppo grande o troppo piccolo, omesso\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Tipo di file sconosciuto"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s presenta un valore integer troppo grande o troppo piccolo, omesso\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Hardlink mancante(i)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "impossibile ottenere il %s su %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Digest non corrispondente"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "condiviso"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Errore interno"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "esclusivo"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "File archive non è nell'intestazione"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "tipo indice %x non valido su %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " fallito - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "errore(%d) nella lettura dei record \"%s\" dall'indice %s: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "errore(%d) nella memorizzazione del record \"%s\" in %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "errore(%d) nella rimozione del record \"%s\" da %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "errore(%d) nell'impostazione del record #%d dell'intestazione\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "errore(%d) nell'eliminazione del record dell'intestazione #%d\n"
-#: lib/depends.c:68
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "errore(%d) nell'allocazione di una nuova istanza del pacchetto\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s è un Delta RPM e non può essere installato direttamente\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Payload non supportato (%s) nel pacchetto %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "il pacchetto %s è già stato aggiunto, salto %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "il pacchetto %s è stato già aggiunto, sostituzione con %s in corso\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(non è un blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(non è un numero)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(non è una stringa)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(tipo non valido)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(non base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(tipo non valido)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(non è un blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(tipo xml non valido)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(non è una firma OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "Formato data %u non corretto"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normale"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "sostituito"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "non installato"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "condivisa su rete"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "colore errato"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "mancanti"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(sconosciuto)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(non è una stringa)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "l'utente %s non esiste - uso dell'utente root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "il gruppo %s non esiste - uso dell'utente root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s salvato come %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s creato come %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s: rimozione fallita: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "directory"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "file"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "salto il pacchetto %s %s perchè la firma non è verificabile\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "salto il pacchetto %s perchè la firma non è verificabile\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "tag[%d]: BAD, tag %d tipo %d offset %d conteggio %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: BAD, non hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: BAD, non binario\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: BAD, non binario\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "dimensione blob(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "offset regione: BAD, tag %d tipo %d offset %d conteggio %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "trailer regione: BAD, tag %d tipo %d offset %d conteggio %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "dimensione regione: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr dimensione(%d): BAD, la lettura restituisce %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr tags: BAD, num. di tag(%d) fuori range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "lunghezza campo non valida"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr data: BAD, num. di byte(%d) fuori range\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): BAD, la lettura restituisce %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "formato tag vuoto"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature fallita: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "nome tag vuoto"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Nessuna firma disponibile\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead fallita: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] previsto alla fine dell'array"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "] inaspettata"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "} inaspettata"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? previsto nell'espressione"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ previsto dopo ? nell'espressione"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} previsto nell'espressione"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": previsto dopo l'espressione secondaria ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ previsto dopo : nell'espressione"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| previsto alla fine dell'espressione"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iteratore di array usato con array di dimensioni differenti"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread fallito: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "predefinisci MACRO con un valore EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "definisci MACRO con un valore EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "undefine MACRO"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MACRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "stapare espansione macro di EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "leggi <FILE:...> invece del file predefinito/i"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "non verificare il digest del pacchetto/i"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "non verificare l'intestazione/i del database una volta ripristinata"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "non verificare la firma/e del pacchetto"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "invia stdout a CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "usa ROOT come cartella top level"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "usa il database nella DIRECTORY"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "DIRECTORY"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "visualizza tag di interrogazione conosciute"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "visualizza la configurazione finale di rpmrc e macro"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "fornisci un output meno dettagliato"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "fornisci un output più dettagliato"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "visualizza la versione di rpm utilizzata"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "macchina di stato del file payload di debug"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "debug rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: tabella opzioni configurata in modo errato (%d)\n"
@@ -1928,13 +2249,13 @@ msgstr "i riposizionamenti devono contenere un ="
msgid "relocations must have a / following the ="
msgstr "i riposizionamenti devono avere una / che segue ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"installare tutti i file, anche le configurazioni che possono altrimenti "
"essere saltate"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1942,153 +2263,163 @@ msgstr ""
"rimuovere tutti i pacchetti corrispondenti a <package> (normalmente viene "
"generato un errore se con <package> vengono specificati pacchetti multipli)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "riposiziona i file in un pacchetto non-riposizionabile"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "mostra le dipendenze cicliche come avviso"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "rimuovi (disinstalla) il pacchetto"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "non installare i file di configurazione"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "non installare la documentazione"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "salta i file che presentano un componente <path> che li precede "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "abbreviazione di --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "aggiorna il pacchetto/i se già installati"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
"mostra i caratteri hash durante l'installazione del pacchetto (utile con -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "non verificare l'architettura del pacchetto"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "non verificare il sistema operativo del pacchetto"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "non controllare lo spazio del disco prima dell'installazione"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "installa documentazione"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr "installa i pacchetto/i"
+msgstr "installa pacchetto/i"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "aggiorna il database, senza modificare il filesystem"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "non verificare le dipendenze dei pacchetti"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "non verificare il digest dei file"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "non verificare il digest dei file (obsoleto)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "non installare contesti di sicurezza dei file"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"non riordinare l'installazione dei pacchetti per soddisfare le dipendenze"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "non eseguire le scriptlet dei pacchetti"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "non eseguire alcun scriptlet %%pre (se esistenti)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "non eseguire alcun scriptlet %%post (se esistenti)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "non eseguire alcun scriptlet %%preun (se esistenti)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "non eseguire alcun scriptlet %%postun (se esistenti)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "non eseguire scriptlet %%pretrans (quando presente)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "non eseguire scriptlet %%posttrans (quando presente)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "non eseguire alcun scriptlet causato/i da questo pacchetto"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "non eseguire alcun scriptlet %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "non eseguire alcun scriptlet %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "non eseguire alcun scriptlet %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "non eseguire alcun scriptlet %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "non eseguire azioni sulle collezioni"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2096,373 +2427,411 @@ msgstr ""
"aggiorna ad una versione più vecchia del pacchetto (sugli aggiornamenti --"
"force esegue questa operazione automaticamente)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "mostra le percentuali durante l'installazioni dei pacchetti"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "riposiziona il pacchetto su <dir>, se riposizionabile"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "riposiziona i file dal percorso <old> a <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ignora i file in conflitto fra pacchetti"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "installa nuovamente se il pacchetto è già presente"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "non installare, ma indicare se funziona oppure no"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "aggiorna il pacchetto/i"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "reinstalla pacchetto(i)"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "interrogare/verificare tutti i pacchetti"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "modalità rpm checksig"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "interrogare/verificare a quale pacchetto/i appartiene il file"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "interrogare/verificare il pacchetto/i in un gruppo"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "interrogare/verificare un file del pacchetto"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
"interrogare/verificare il pacchetto/i con un identificatore del pacchetto"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
"interrogare/verificare il pacchetto/i con un identificatore di intestazione"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "modalità interrogazione rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "interrogare/verificare una istanza dell'intestazione"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
"interrogare/verificare il pacchetto/i dalla transazione di installazione"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "interroga il pacchetto/i azionato dal pacchetto"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "modalità verifica rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "interrogare/verificare il pacchetto/i che necessita di una dipendenza"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "interrogare/verificare il pacchetto/i che fornisce una dipendenza"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "interrogare/verificare il pacchetto/i che raccomanda una dipendenza"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "interrogare/verificare il pacchetto/i che suggerisce una dipendenza"
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "non eseguire il glob degli argomenti"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "non processare i file non-package come manifest"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "elenca tutti i file di configurazione"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "elenca tutti i file di documentazione"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "elenca tutti i file di documentazione"
+msgstr "elenca tutti i file licenza"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "elenca tutti i file licenza"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "emettere le informazioni di base dei file"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "elenca i file in un pacchetto"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "salta file %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "salta file %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "visualizza gli stati dei file elencati"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "non verificare la dimensione dei file"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "non verificare il percorso symlink dei file"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "non verificare il proprietario dei file"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "non verificare il gruppo dei file"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "non verificare l'ora di modifica dei file"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "non verificare la modalità dei file"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "non verificare le capabilities dei file"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "non verificare i contesti di sicurezza dei file"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "non verificare le capabilities dei file"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "non verificare i file nel pacchetto"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "non verificare le dipendenze del pacchetto"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "non eseguire gli script di verifica"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Funzionalità rpmlib mancanti per %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "pacchetto sorgente atteso, trovato binario\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "il pacchetto sorgente non contiene alcun file .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "estrazione archivio fallita%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " sul file "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s fallito sul file %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s fallito: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "formato non corretto: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(non contiene file)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normale "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "sostituito "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "non installato "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "rete condivisa "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "colore errato "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(nessuno stato) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(sconosciuto %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "il pacchetto non possiede alcun elenco gruppo/proprietario dei file\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
"il pacchetto non possiede ne un proprietario del file ne un elenco id\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "il gruppo %s non contiene alcun pacchetto\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "nessun pacchetto attiva %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "%s malformato: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "nessun pacchetto corrisponde a %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "nessun pacchetto necessita di %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "nessun pacchetto raccomanda %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "nessun pacchetto suggerisce %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "nessun pacchetto fornisce %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "file %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "il file %s non è posseduto da alcun pacchetto\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "numero del pacchetto non valido: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "il record %u non può essere letto\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "il pacchetto %s non è stato installato\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "tag sconosciuto: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: importazione chiave %d fallita.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: chiave pubblica %d non con formato 'armored'.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: lettura importazione fallita(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s: headerRead fallita: %s\n"
+msgid "Fread failed: %s"
+msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-"%s: La regione header immutabile non può essere letta. Pacchetto corrotto?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NON OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (CHIAVI MANCANTI:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (CHIAVI NON FIDATE:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: apertura fallita: %s\n"
@@ -2487,222 +2856,451 @@ msgstr "Impossibile cambiare directory root: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Impossibile ripristinare directory root: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Generazione di %d indici mancanti, prego attendere...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "impossibile aprire l'indice %s usando%s - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "non è stato impostato alcun dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: salto"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "errore(%d) nella memorizzazione del record #%d in %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec fallito: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp fallito: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: salto"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: intestazione #%u danneggiata -- viene omessa.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: impossibile leggere intestazione 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "non è stato impostato alcun dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "impossibile creare la cartella %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "l'intestazione #%u nel database non è valida -- viene omessa.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "impossibile aggiungere il record originariamente su %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "ricompilazione database fallita: il database originale rimane in uso\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "sostituzione del vecchio database con il nuovo database fallita!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NO "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "SI"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
"Supporto alla versione per le dipendenze PreReq:, Provides: e Obsoletes:."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"file name conservati come tuple (dirName,baseName,dirIndex), non come "
"percorsi."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "il payload del pacchetto può essere compresso utilizzando bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "il payload del pacchetto può essere compresso utilizzando xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "il payload del pacchetto può essere compresso utilizzando lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "il/i file payload del pacchetto presentano un prefisso \"./\""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
"il nome-versione-release del pacchetto non viene implicitamente fornito."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
"i tag delle intestazioni vengono sempre ordinate dopo il loro caricamento."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
"l'interprete di scriptlet può utilizzare gli argomenti presenti "
"nell'intestazione."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "un set di file hardlink può essere installato senza che sia completo."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"le scriptlet del pacchetto potrebbero accedere al database rpm durante "
"l'installazione."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "supporto interno per gli script lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "l'algoritmo digest di checksum dei file è configurabile per pacchetto"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "supporto per le file capabilities POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
"le scriptlet del pacchetto possono essere espanse durante l'installazione."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
+msgstr "la comparazione delle dipendenze supporta le versioni con tilde."
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "supporto per file più grandi di 4GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Nome richiesto"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Bad magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Intestazione errata/illeggibile"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Dimensione intestazione troppo grande"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "FIle troppo grande per l'archivio"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Tipo di file sconosciuto"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "File mancante(i)"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Digest non corrispondente"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Errore interno"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "File archive non è nell'intestazione"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " fallito - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (errore 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "apertura di %s fallita: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: non è un pacchetto rpm (o un manifest del pacchetto)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "Aggiornamento / installazinone...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "Pulizia / rimozione...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Preparazione in corso..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "Preparazione dei pacchetti..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Dipendenze fallite:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: non è un pacchetto rpm (o un manifest del pacchetto): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s non può essere installato\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Ripristino di %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "omissione di %s - trasferimento fallito\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "il pacchetto %s non è riposizionabile\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "errore di lettura dal file %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "\"%s\" specifica pacchetti multipli:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "impossibile aprire %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Installazione di %s in corso\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "non è un pacchetto rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
-msgstr "tipo di firma illegale"
+msgstr "tipo di firma non valido"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "versione del pacchetto RPM non supportata"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "lettura fallita: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "non è un pacchetto rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "impossibile creare il lock %s su %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "attesa del lock %s su %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Impossibile eseguire dlopen di %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Impossibile risolvere il simbolo %s: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Impossibile espandere la macro %%__collection_%s\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Plugin %%__%s_%s non configurato\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Plugin %s non caricato\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Impossibile risolvere nel plugin %s il simbolo %s: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "diverso"
@@ -2785,637 +3383,352 @@ msgstr ""
"si è verificato un errore sconosciuto %d durante la manipolazione del "
"pacchetto %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "secondo ':' mancante su %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "nome architettura mancante su %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Riga dati incompleta su %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Troppi argomenti sulla riga dati di %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Numero arch/OS errato: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Riga di default incompleta su %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Troppi argomenti nella riga di default su %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "':' mancanti (trovato 0x%02x) su %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "argomento mancante per %s su %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "impossibile aprire %s su %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "architettura mancante per %s su %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "opzione errata '%s' su %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
+msgstr "Impossibile leggere il vettore ausiliario, /proc non montata?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Sistema sconosciuto: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Si prega di contattare %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Impossibile aprire %s per la lettura: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "Funzione exec() non chiamata dopo fork() nello scriptlet lua\n"
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "Impossibile tornare alla direcotry corrente: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "supporto agli scriptlet <lua> non disponibile\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Impossibile creare il file temporaneo per %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Impossibile duplicare il file descriptor: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "Fwrite fallito: %s"
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "scriptlet %s fallita, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "scriptlet %s fallita, segnale %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "scriptlet %s fallita, uscita con stato %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Formato sconosciuto"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "installa"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "elimina"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "impossibile aprire il database dei pacchetti in %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "'(' extra nell'etichetta del pacchetto: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "'(' mancante nell'etichetta del pacchetto: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "')' mancante nell'etichetta del pacchetto: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: lettura chiave pubblica fallita.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transazione"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "dimensione(%d) sigh: BAD, la lettura ha restituito %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: BAD\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh tags: BAD, no. di tags(%d) fuori range\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh data: BAD, no. di bytes(%d) fuori range\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): BAD, la lettura ha restituito %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh tag[%d]: BAD, tag %d tipo %d offset %d conteggio %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "carico sigh: BAD\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh pad(%zd): BAD, lettura %zd byte\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): BAD, fstat(2) fallito\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-"Impossibile leggere la regione immutabile dell'header. Pacchetto corrotto?\n"
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "Impossibile firmare pacchetti RPM v3\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 digest:"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Digest SHA1 header:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
+
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Header "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "Verifica firma: PARAMETRI NON CORRETTI (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Impossibile ricaricare intestazione della firma.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "saltato"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "fallito"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "%c %s mancanti"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Dipendenze non soddisfatte per %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "lunghezza campo non valida"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "{ mancante dopo %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "} mancante dopo %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "formato tag vuoto"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "nome tag vuoto"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "tag sconosciuto"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] previsto alla fine dell'array"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "] inaspettata"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "} inaspettata"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? previsto nell'espressione"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ previsto dopo ? nell'espressione"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} previsto nell'espressione"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": previsto dopo l'espressione secondaria ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ previsto dopo : nell'espressione"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| previsto alla fine dell'espressione"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iteratore di array usato con array di dimensioni differenti"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Generazione di %d indici mancanti, prego attendere...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "impossibile aprire l'indice %s utilizando db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "errore(%d) nella lettura dei record \"%s\" dall'indice %s: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "non è stato impostato alcun dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: salto"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "errore(%d) nella memorizzazione del record #%d in %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec fallito: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp fallito: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: salto"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: intestazione #%u danneggiata -- viene omessa.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "errore(%d) durante l'acquisizione dei record \"%s\" dall'indice %s\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "errore(%d) nell'impostazione del record #%d dell'intestazione\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "errore(%d) nell'eliminazione del record dell'intestazione #%d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: impossibile leggere intestazione 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "errore(%d) nell'impostazione dei record \"%s\" dall'indice %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "errore(%d) nella memorizzazione del record \"%s\" in %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "errore(%d) nella rimozione del record \"%s\" da %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "errore(%d) nell'allocazione di una nuova istanza del pacchetto\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "errore(%d) durante l'acquisizione dei record \"%s\" dall'indice %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "errore(%d) nella memorizzazione del record %s in %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "non è stato impostato alcun dbpath"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "impossibile creare la cartella %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "l'intestazione #%u nel database non è valida -- viene omessa.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "impossibile aggiungere il record originariamente su %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "ricompilazione database fallita: il database originale rimane in uso\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "sostituzione del vecchio database con il nuovo database fallita!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "per eseguire un ripristino sostituire i file in %s con i file di %s"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "rimozione della directory %s fallita: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d errore(%d) da %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d errore(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "impossibile ottenere il %s su %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "condiviso"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "esclusivo"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "tipo indice %x non valido su %s/%s\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "opzione db non riconosciuta: \"%s\" ignorata.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s presenta un valore numeric non valido, omesso\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s presenta un valore long troppo grande o troppo piccolo, omesso\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s presenta un valore integer troppo grande o troppo piccolo, omesso\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Impossibile decodificare la policy per %s\n"
-
-#: plugins/sepolicy.c:225
+#: lib/verify.c:263
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Impossibile creare il file temporaneo per %s: %s\n"
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Nome utente o UID duplicato per l'utente %s\n"
-#: plugins/sepolicy.c:231
+#: lib/verify.c:284
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Impossibile scrivere la policy %s nel file %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Errore nella creazione dell'handle semanage\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Nome gruppo o GID duplicato per il gruppo %s\n"
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Errore nella connessione all'handler di policy\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr "nessuno stato"
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Errore nell'inizializzazione della policy transaction: %s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Impossibile rimuovere il temporaneo %s della policy: %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Impossibile installare il modulo di policy: %s (%s)\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "stato sconosciuto"
-#: plugins/sepolicy.c:416
+#: lib/verify.c:448
#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Impossibile rimuovere il modulo di policy: %s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Errore durante il fork del processo: %s\n"
+msgid "missing %c %s"
+msgstr "%c %s mancanti"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Impossibile eseguire %s: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Dipendenze non soddisfatte per %s:\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s è terminato in modo anomalo\n"
+msgid "Unable to reset nice value: %s"
+msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s fallito con codice di errore %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Errore durante il commit delle modifiche alla policy\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Impossibile espandere il percorso restorecon"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-"Errore durante il relabel del filesystem. I file potrebbero avere label non "
-"corrette\n"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"Errore nel caricamento dei file context. I file potrebbero avere label non "
-"corrette\n"
-
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Impossibile estrarre la policy da %s\n"
-#: rpmio/macro.c:185
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== %d attivo %d vuoto\n"
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(vuoto)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(vuoto)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "La macro %%%s presenta un corpo incompleto\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "La macro %%%s presenta delle opzioni incomplete\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "La macro %%%s presenta un nome illegale (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "La macro %%%s presenta un corpo incompleto\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "La macro %%%s presenta delle opzioni incomplete\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "La macro %%%s presenta contenuto vuoto\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "La Macro %%%s richiede whitespace prima del corpo\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Impossibile espandere la macro %%%s\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "La macro %%%s presenta un nome illegale (%%undefine)\n"
+msgstr "La macro %%%s presenta un nome non valido (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "La macro %%%s (%s) non è stata utilizzata sotto il livello %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "Macro %%%s definita ma non usata nello scope\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Opzione %c sconosciuta in %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3423,165 +3736,282 @@ msgstr ""
"Troppo livelli di ricorsione nell'espansione della macro. Si tratta "
"probabilmente di una macro definita ricorsivamente.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "%c non terminato: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Un %% è seguito da una macro non parsabile\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "impossibile caricare il file di macro %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== %d attivo %d vuoto\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "errore nella creazione del file temporaneo %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "File %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
-msgstr "File %s è più piccolo di %u byte\n"
+msgstr "Il file %s è più piccolo di %u byte\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "impossibile creare la directory"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[nessuno]"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(nessun errore)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "errore fatale: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "errore: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "avvertimento: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "sintassi non valida nella scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "sintassi non valida nello script lua: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "script lua fallito: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "sintassi non valida nel file lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
-msgstr "lua hook fallito: %s\n"
-
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[nessuno]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(nessun errore)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "errore fatale: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "errore: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "avvertimento: "
+msgstr "hook lua fallito: %s\n"
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "allocazione memoria (%u byte) ha ritornato NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, ID chiave %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(nessuno)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "errore nella creazione della directory temporanea %s: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "errore nella creazione del fifo %s: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "errore nell'eliminazione del fifo %s: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "errore nell'eliminazione della directory %s: %m\n"
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite fallito: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread fallito: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush fallito: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "Firma PGP non supportata\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "Algoritmo hash PGP %u non supportato\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "Algoritmo di chiave privata PGP non supportato %u\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Impossibile eseguire %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "Fopen fallito\n"
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Impossibile scrivere nella pipe\n"
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Impossibile creare la pipe per la firma: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr "Impossibile leggere dal file %s: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "esecuzione gpg fallita (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg non è riuscito a salvare la firma\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "impossibile leggere la firma\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp fallito\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s contiene la stessa identica signature, lo salto\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead fallito: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature fallita: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: headerRead fallita: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "Impossibile firmare pacchetti RPM v3\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s contiene la stessa identica signature, lo salto\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature fallito: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead fallito: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "sostituzione di %s fallita: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: lettura manifesto fallita: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "non verificare firma header+payload"
diff --git a/po/ja.po b/po/ja.po
index 5a36ef307..f405931c2 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -3,18 +3,19 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Hajime Taira <htaira@redhat.com>, 2011-2012.
-# Tadashi "ELF" Jokagi <elf@poyo.jp>, 2012.
-# Tadashi Jokagi <elf@elf.no-ip.org>, 2011.
-# Tomoyuki KATO <tomo@dream.daynight.jp>, 2012.
+# Hajime Taira <htaira@redhat.com>, 2011-2012
+# Tadashi Jokagi <elf@poyo.jp>, 2012
+# Tadashi Jokagi <elf@elf.no-ip.org>, 2011
+# Tadashi Jokagi <elf@poyo.jp>, 2012
+# Tomoyuki KATO <inactive+katomo@transifex.com>, 2012-2013
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-06 12:55+0000\n"
-"Last-Translator: Tomoyuki KATO <tomo@dream.daynight.jp>\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/rpm/language/"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Japanese (http://www.transifex.com/rpm-team/rpm/language/"
"ja/)\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
@@ -48,498 +49,559 @@ msgstr "ã“ã®ãƒ—ログラム㯠GNU GPL ã®ä¸‹ã§è‡ªç”±ã«é…布ã§ãã¾ã™ã€‚
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "--pipe ã§ã®ãƒ‘イプ作æˆã«å¤±æ•—: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "実行失敗\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "引数㯠RPM パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "パッケージã®ãƒ˜ãƒƒãƒ€ãƒ¼èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "ペイロードをå†åº¦é–‹ã‘ã¾ã›ã‚“: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "パッケージセレクションをå•ã„åˆã‚ã›/検証ã™ã‚‹ã‚ªãƒ—ション:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "å•ã„åˆã‚ã›ã‚ªãƒ—ション (-q ã¾ãŸã¯ --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "検証オプション (-V ã¾ãŸã¯ --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "インストール/アップグレード/アンインストールオプション:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "ã™ã¹ã¦ã®ãƒ¢ãƒ¼ãƒ‰ãƒ»ã‚³ãƒžãƒ³ãƒ‰ã§å…±é€šã®ã‚ªãƒ—ション:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "å•ã„åˆã‚ã›/検証ã¯ä¸€åº¦ã«ä¸€ã¤ã—ã‹å®Ÿè¡Œã§ãã¾ã›ã‚“。"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ãƒ•ãƒ©ã‚°"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ã‚½ãƒ¼ã‚¹"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "一ã¤ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã®ã¿ã‚’指定ã—ã¦ä¸‹ã•ã„"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "インストールã¨ã‚¢ãƒƒãƒ—グレードã®ã¿ã‚’余儀ãªãã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "ファイルã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«ã®ã¿å†é…ç½®ã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "--prefix 㯠--relocate ã‚„ --excludepath ã¨ã¯åŒæ™‚ã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate 㨠--excludepath ã¯æ–°ã—ã„パッケージをインストールã™ã‚‹æ™‚ã®ã¿ä½¿ç”¨ã§"
-"ãã¾ã™ã€‚"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix ã¯æ–°è¦ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "--prefix ã®å¼•æ•°ã¯ / ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr "--hash (-h) ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã¾ãŸã¯å‰Šé™¤æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr "--percent ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã¾ãŸã¯å‰Šé™¤æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "--excludedocs 㨠--includedocs ã¯åŒæ™‚ã«ã¯æŒ‡å®šã§ãã¾ã›ã‚“。"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches ã¯ãƒ‘ッケージ削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb ã¯ãƒ‘ッケージ インストール・削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"スクリプトを無効ã«ã™ã‚‹ã‚ˆã†ãªã‚ªãƒ—ションã¯ã€ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤æ™‚ã®"
-"ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"トリガーを無効ã«ã™ã‚‹ã‚ˆã†ãªã‚ªãƒ—ションã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤æ™‚ã®ã¿æŒ‡"
-"定ã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã€å‰Šé™¤æ™‚ãŠã‚ˆã³æ¤œè¨¼æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr "--test ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ãŠã‚ˆã³å‰Šé™¤æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "--root (-r) ã®å¼•æ•°ã¯ / ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "アンインストールã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "インストールã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "å•ã„åˆã‚ã›ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "検証ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "BuildRoot ã¯æ—¢ã«æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚%s を無視ã—ã¾ã™\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "<specfile> ã® %prep (ソース展開㨠patch ã®é©ç”¨) ã¾ã§å®Ÿè¡Œ"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "<specfile> ã® %build (%prep ã¨ã‚³ãƒ³ãƒ‘イル) ã¾ã§å®Ÿè¡Œ"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "<specfile> ã® %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "<specfile> 㮠%files セクションを検証"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "<specfile> ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒª/ソースパッケージ作æˆ"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "<specfile> ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã®ã¿ä½œæˆ"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "<specfile> ã‚’å…ƒã«ã€ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã®ã¿ä½œæˆ"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr "<source package> ã‹ã‚‰ %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "<tarball> ã‹ã‚‰ %prep (ソース展開ã¨ãƒ‘ッãƒé©ç”¨) ã¾ã§å®Ÿè¡Œ"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "<tarball> ã‹ã‚‰ %build (%prep ã¨ã‚³ãƒ³ãƒ‘イル) ã¾ã§å®Ÿè¡Œ"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "<tarball> ã‹ã‚‰ %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "<tarball> ã‹ã‚‰ %files セクションを検証"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "<tarball> ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒª/ソースパッケージを作æˆ"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "<tarball> ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã®ã¿ã‚’作æˆ"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "<tarball> ã‚’å…ƒã«ã€ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã®ã¿ã‚’作æˆ"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "<source package> ã‚’å…ƒã«ãƒã‚¤ãƒŠãƒªãƒ‘ッケージを作æˆ"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<source package>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr "<source package> ã‹ã‚‰ %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "build root を強制指定"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "パッケージ作æˆå¾Œãƒ„リーを削除"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "spec ファイル㮠ExcludeArch: を無視"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "ファイル状態マシーンã®ãƒ‡ãƒãƒƒã‚°"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "ビルドã®ã©ã®æ®µéšŽã‚‚実行ã—ãªã„"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "ビルドä¾å­˜æ€§ã‚’検証ã—ãªã„"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
"レガシーãªRPM v3ã®ãƒ‘ッケージングã¨äº’æ›æ€§ã®ã‚るパッケージã®ãƒ˜ãƒƒãƒ€ãƒ¼ã®ç”Ÿæˆ"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
+msgstr "ビルド㮠%clean 段階を実行ã—ãªã„"
+
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "ビルド㮠%check 段階を実行ã—ãªã„"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "specfile ã‹ã‚‰ i18N msgstr ã‚’å—ã‘付ã‘ãªã„"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "終了後ソースを削除ã—ã¾ã™ã€‚"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "終了時㫠spec ファイルを削除"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "指定ã—ãŸéŽç¨‹ã¾ã§ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™ (c, i ã§ã®ã¿æœ‰åŠ¹)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "ターゲットプラットフォームを強制指定"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "[ <specfile> | <tarball> | <source package> ] ã¨ã®ãƒ“ルドオプション:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "ã™ã¹ã¦ã®ãƒ¢ãƒ¼ãƒ‰ãƒ»ã‚³ãƒžãƒ³ãƒ‰ã§å…±é€šã®ã‚ªãƒ—ション:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "ビルドä¾å­˜æ€§ã®å¤±æ•—:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "spec ファイル %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "tar パイプã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "%s ã‚’ %s ã«åå‰ã‚’変更ã§ãã¾ã›ã‚“ã§ã—ãŸ: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "stat %s ã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "%s ã¯é€šå¸¸ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "ファイル %s 㯠spec ファイルã§ã¯ãªã„よã†ã§ã™ã€‚\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "ビルド対象プラットフォーム: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "ターゲット %s 用ã«ãƒ“ルド中\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "--root (-r) ã®å¼•æ•°ã¯ / ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "データベースをåˆæœŸåŒ–ã—ã¾ã™ã€‚"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"インストールã•ã‚ŒãŸãƒ‘ッケージヘッダーã‹ã‚‰ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’å†æ§‹ç¯‰"
"ã—ã¾ã™ã€‚"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "データベースã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã™ã€‚"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "データベース オプション:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "一ã¤ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã®ã¿ã‚’指定ã—ã¦ä¸‹ã•ã„"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "ç½²åã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã™ã€‚"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "ASCII 化ã•ã‚ŒãŸå…¬é–‹éµã‚’å–ã‚Šè¾¼ã¿ã¾ã™ã€‚"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr "インãƒãƒ¼ãƒˆã—ã¾ã›ã‚“ãŒã€å‹•ä½œã™ã‚‹ã‹ã—ãªã„ã‹ã‚’通知ã—ã¾ã™"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "RPMキーリングã‹ã‚‰ã‚­ãƒ¼ã‚’一覧表示ã™ã‚‹ã€‚"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "キーリングã®ã‚ªãƒ—ション:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "引数ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "パッケージセレクションをå•ã„åˆã‚ã›/検証ã™ã‚‹ã‚ªãƒ—ション:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "å•ã„åˆã‚ã›ã‚ªãƒ—ション (-q ã¾ãŸã¯ --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "検証オプション (-V ã¾ãŸã¯ --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "インストール/アップグレード/アンインストールオプション:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "å•ã„åˆã‚ã›/検証ã¯ä¸€åº¦ã«ä¸€ã¤ã—ã‹å®Ÿè¡Œã§ãã¾ã›ã‚“。"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ãƒ•ãƒ©ã‚°"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ã‚½ãƒ¼ã‚¹"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "インストールã¨ã‚¢ãƒƒãƒ—グレードã®ã¿ã‚’余儀ãªãã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "ファイルã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«ã®ã¿å†é…ç½®ã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix 㯠--relocate ã‚„ --excludepath ã¨ã¯åŒæ™‚ã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate 㨠--excludepath ã¯æ–°ã—ã„パッケージをインストールã™ã‚‹æ™‚ã®ã¿ä½¿ç”¨ã§"
+"ãã¾ã™ã€‚"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix ã¯æ–°è¦ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix ã®å¼•æ•°ã¯ / ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã¾ãŸã¯å‰Šé™¤æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã¾ãŸã¯å‰Šé™¤æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "--excludedocs 㨠--includedocs ã¯åŒæ™‚ã«ã¯æŒ‡å®šã§ãã¾ã›ã‚“。"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches ã¯ãƒ‘ッケージ削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb ã¯ãƒ‘ッケージ インストール・削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"スクリプトを無効ã«ã™ã‚‹ã‚ˆã†ãªã‚ªãƒ—ションã¯ã€ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤æ™‚ã®"
+"ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"トリガーを無効ã«ã™ã‚‹ã‚ˆã†ãªã‚ªãƒ—ションã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤æ™‚ã®ã¿æŒ‡"
+"定ã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã€å‰Šé™¤æ™‚ãŠã‚ˆã³æ¤œè¨¼æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ãŠã‚ˆã³å‰Šé™¤æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "アンインストールã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "インストールã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "å•ã„åˆã‚ã›ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "検証ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "ç½²åパッケージ"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "パッケージã«ç½²åã™ã‚‹ (--addsign ã¨åŒä¸€ã§ã™)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "パッケージã®ç½²åを削除ã™ã‚‹"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "ç½²åオプション:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "%s を実行ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "マクロファイル内㧠\"%%_gpg_name\" を設定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "パスフレーズã®å…¥åŠ›: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "パスフレーズã¯æ­£å¸¸ã§ã™ã€‚\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-"パスフレーズã®ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€ã¾ãŸã¯ GPG キーãŒå¤±åŠ¹ã—ã¦ã„ã¾ã™\n"
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "SPEC ファイルを標準出力ã«æ§‹æ–‡è§£æžã—ã¾ã™"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "specファイルã®å•ã„åˆã‚ã›"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "specファイルã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚ŒãŸãƒã‚¤ãƒŠãƒªRPMã‚’æ“作ã™ã‚‹ï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰ã€‚"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "specファイルã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚ŒãŸã‚½ãƒ¼ã‚¹RPMã‚’æ“作ã™ã‚‹ã€‚"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "以下ã®å•ã„åˆã‚ã›æ›¸å¼ã‚’使用ã—ã¾ã™ã€‚"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "specã®ã‚ªãƒ—ション:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "構文解æžã™ã‚‹å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“"
@@ -548,32 +610,37 @@ msgstr "構文解æžã™ã‚‹å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“"
msgid "Unable to open temp file: %s\n"
msgstr "一時ファイルを開ã‘ã¾ã›ã‚“: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "ストリームを開ã‘ã¾ã›ã‚“: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "実行中(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "%s ã®å®Ÿè¡Œã«å¤±æ•— (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "スクリプトレット %s (%s) ã®å®Ÿè¡Œã‚¨ãƒ©ãƒ¼\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "%s ã®ä¸æ­£ãªçµ‚了ステータス (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -583,237 +650,317 @@ msgstr ""
"\n"
"RPM ビルドã®ã‚¨ãƒ©ãƒ¼:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "構文解æžä¸­ã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼ ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "構文解æžä¸­ã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼ &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "構文解æžä¸­ã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼ ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "å¼ä¸­ã§æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "( ãŒä¸€è‡´ã—ã¾ã›ã‚“\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- ã¯æ•°ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! ã¯æ•°ã«ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "åž‹ã¯ä¸€è‡´ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / ã¯æ–‡å­—列ã«ã¯ä½¿ãˆã¾ã›ã‚“\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- ã¯æ–‡å­—列ã«ã¯ä½¿ãˆã¾ã›ã‚“\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& 㨠|| ã¯æ–‡å­—列ã«ã¯ä½¿ãˆã¾ã›ã‚“\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "å¼ä¸­ã§æ–‡æ³•ã‚¨ãƒ©ãƒ¼\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "%s ã« '(' ãŒã‚ã‚Šã¾ã›ã‚“ %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "%s(%s ã®å¾Œã« ')' ãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "無効ãªãƒˆãƒ¼ã‚¯ãƒ³ %s: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%s ㌠%s %s ã«ã‚ã‚Šã¾ã›ã‚“\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "%s() ã«ç¶šã空白ãŒã‚ã‚Šã¾ã›ã‚“: %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "文法エラー: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "ä¸æ­£ãªãƒ¢ãƒ¼ãƒ‰æŒ‡å®š: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "ä¸æ­£ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¢ãƒ¼ãƒ‰æŒ‡å®š: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "異常ãªãƒ­ã‚±ãƒ¼ãƒ«é•·: \"%s\" (%%lang(%s))\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "é‡è¤‡ã™ã‚‹ä½ç½® %s ㌠%%lang(%s) ã«ã‚ã‚Šã¾ã™\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "ä¸æ­£ãªã‚±ãƒ¼ãƒ‘ビリティã§ã™: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "ファイル ケーパビリティã®ã‚µãƒãƒ¼ãƒˆãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "ファイル㯠\"/\" ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
"ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆ アルゴリズム %u ã§ã™ã€‚MD5 ã«ãƒ•ã‚©ãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¾"
"ã™ã€‚\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "ファイルãŒ2回表記ã•ã‚Œã¦ã„ã¾ã™: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "シンボリックリンク %s ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "シンボリックリンク㌠BuildRoot を指ã—ã¦ã„ã¾ã™: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "ディレクトリーãŒã‚ã‚Šã¾ã›ã‚“: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: ä¸æ˜Žãªã‚¿ã‚° (%d) を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: 公開éµã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: ASCII å½¢å¼ã®å…¬é–‹éµã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: エンコードã«å¤±æ•—\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "ディレクトリーã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "ファイルã¯å…ˆé ­ã« \"/\" ãŒå¿…è¦ã§ã™: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "%%dev グロブã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "ディレクトリーãŒã‚°ãƒ­ãƒ–ã«ã‚ˆã‚Šè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (by glob): %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "%%files ã®ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’é–‹ã‘ã¾ã›ã‚“: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "%s行目: \n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "%%files ファイル %s ã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr "ä¸æ­£ãª _docdir_fmt %s: %s\n"
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
#, c-format
-msgid "Can't mix special %s with other forms: %s\n"
+msgid "File not found by glob: %s\n"
+msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (by glob): %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2455
+#, c-format
+msgid "Can't mix special %s with other forms: %s\n"
+msgstr "ä»–ã®å½¢å¼ã§ç‰¹åˆ¥ãª %s ã‚’æ··ãœã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“: %s\n"
+
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "1 è¡Œã«è¤‡æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "ä¸æ­£ãªãƒ•ã‚¡ã‚¤ãƒ«: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "ä¸æ­£ãªæ‰€æœ‰è€…/グループ: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "パッケージã«å«ã¾ã‚Œãªã„ファイルã®æ¤œæŸ»ä¸­: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -822,549 +969,608 @@ msgstr ""
"インストール済ã¿(ãŸã ã—パッケージã«å«ã¾ã‚Œãªã„)ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "ファイルã®å‡¦ç†ä¸­: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
+"ãƒã‚¤ãƒŠãƒªã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ (%d) ãŒãƒ‘ッケージã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ (%d) ã¨ä¸€è‡´ã—"
+"ã¾ã›ã‚“。\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "noarch パッケージ内ã«ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ä¾å­˜ã®ãƒã‚¤ãƒŠãƒªãƒ¼\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr "ファイル %s ã«ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ä½œæˆã‚’失敗ã—ã¾ã—ãŸ: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr "アーカイブã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "%s ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: 行: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "ホストåã‚’æ­£å¼ãªã‚‚ã®ã«ã§ãã¾ã›ã‚“: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "%s ã¸ã® Payload 書ãè¾¼ã¿ã«å¤±æ•—: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "%s ã‹ã‚‰ Payload 読ã¿è¾¼ã¿ã«å¤±æ•—: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "ホストåã‚’æ­£å¼ãªã‚‚ã®ã«ã§ãã¾ã›ã‚“: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "ä¸æ˜Žãªãƒšã‚¤ãƒ­ãƒ¼ãƒ‰åœ§ç¸®: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "ä¸å¤‰ãƒ˜ãƒƒãƒ€ãƒ¼é ˜åŸŸã‚’作æˆã§ãã¾ã›ã‚“。\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "一時ファイルを開ã‘ã¾ã›ã‚“。\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "一時ヘッダーã®æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "ãƒãƒªã‚·ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "ä¸æ­£ãª CSA データ\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "ç½²åヘッダーã®å†èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "パッケージã®æ›¸ãè¾¼ã¿ã«å¤±æ•—: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "sigtarget %s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "%s ã‹ã‚‰ãƒ˜ãƒƒãƒ€ãƒ¼èª­ã¿è¾¼ã¿ã«å¤±æ•—: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "%s ã¸ã®ãƒ˜ãƒƒãƒ€ãƒ¼æ›¸ãè¾¼ã¿ã«å¤±æ•—: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "書ãè¾¼ã¿å®Œäº†: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "「%sã€ã‚’実行ã—ã¦ã„ã¾ã™:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "「%sã€ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "パッケージ \"%s\" ã®ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "パッケージ %s ã®å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åを生æˆã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "%s を作æˆã§ãã¾ã›ã‚“: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "%d 行目: 2番目㮠%s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr ""
+msgstr "%%changelog ã«å½ã®æ—¥ä»˜: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog エントリ㯠* ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "ä¸å®Œå…¨ãª %%changelog エントリ\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "%%changelog 中ã®ä¸æ­£ãªæ—¥ä»˜: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog ã¯æ—¥ä»˜ã®æ–°ã—ã„é †ã«ä¸¦ã‚“ã§ã„ã¾ã›ã‚“\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "%%changelog 中ã«åå‰ãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "%%changelog 中ã«èª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "%d 行目: %%description ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "%d 行目: ä¸æ­£ãªã‚ªãƒ—ション %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "%d 行目: åå‰ãŒå¤šã™ãŽã¾ã™: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "%d 行目: パッケージãŒå­˜åœ¨ã—ã¾ã›ã‚“: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "%d 行目: 2番目ã®èª¬æ˜Ž\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "%d 行目: %%files ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "%d 行目: %%policies ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "タグフィールドã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "%d 行目: ä¸æ­£ãªç•ªå·: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "%d 行目: ä¸æ­£ãª no%s 番å·: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "%d 行目: ä¸æ­£ãª %s 番å·: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d ã¯è¤‡æ•°å›žæ•°æŒ‡å®šã—ã¦ã„ã¾ã™\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "%s ã‚’ %s ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ä¸­\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "%s をダウンロードã§ãã¾ã›ã‚“ã§ã—ãŸ\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "アーキテクãƒãƒ£ã¯é™¤å¤–ã•ã‚Œã¦ã„ã¾ã™: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "アーキテクãƒãƒ£ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS ã¯é™¤å¤–ã•ã‚Œã¦ã„ã¾ã™: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "%s フィールドãŒãƒ‘ッケージ中ã«å¿…è¦ã§ã™: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "パッケージ中㫠%s エントリãŒé‡è¤‡ã—ã¦ã„ã¾ã™: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "アイコン %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "アイコン %s を読むã“ã¨ãŒã§ãã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "ä¸æ˜Žãªã‚¢ã‚¤ã‚³ãƒ³ã‚¿ã‚¤ãƒ—: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "%d 行目: ã‚¿ã‚°ã¯ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ 1ã¤ã—ã‹ã¨ã‚Šã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "%d 行目: ä¸æ­£ãªæ–‡å­— '%c' : %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "%d 行目: ä¸æ­£ãªæ–‡å­— '-' : %s\n"
+msgid "%s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "%d 行目: ä¸æ­£ãªã‚·ãƒ¼ã‚±ãƒ³ã‚¹ 「..〠: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "%d 行目: ä¸å®Œå…¨ãªå½¢ã®ã‚¿ã‚°: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "%d 行目: 空ã®ã‚¿ã‚°: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "%d 行目: Prefix 㯠\"/\" ã§çµ‚ã‚ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "%d 行目: Docdir 㯠'/' ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "%d 行目: Epoch フィールドã¯æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "%d 行目: ä¸æ­£ãªä¿®é£¾å­ %s : %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "%d 行目: ä¸æ­£ãª BuildArchtecture フォーマット: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "%d 行目: noarch サブ パッケージã§ã®ã¿ã‚µãƒãƒ¼ãƒˆ: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "内部エラー: ã«ã›ã®ã‚¿ã‚° %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "%d 行目: %s ã¯éžæŽ¨å¥¨: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "ä¸æ­£ãªãƒ‘ッケージã®æŒ‡å®š: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "パッケージã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "%d 行目: ä¸æ˜Žãªã‚¿ã‚°: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} を空ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} ã‚’ \"\" ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "ä¸æ­£ãªã‚½ãƒ¼ã‚¹: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "パッãƒç•ªå· %u ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "\"Patch:\" ã‚¿ã‚°ã«è©²å½“ã—ãªã„ %%patch\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "ã‚½ãƒ¼ã‚¹ç•ªå· %u ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "spec ファイルã«ã€ŒSource:ã€ã‚¿ã‚°ãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "%%setup ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "%d 行目: %%setup ã¸ã®ä¸æ­£ãªå¼•æ•°: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "%d 行目: ä¸æ­£ãª %%setup オプション %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "無効ãªãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ç•ªå· %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "%d 行目: ãµãŸã¤ç›®ã® %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
"ä¾å­˜é–¢ä¿‚トークンã¯ã€è‹±æ•°å­—ã€'_' ã¾ãŸã¯ '/' ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»˜ãファイルåã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³è¦ä»¶"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "無効ãªä¾å­˜æ€§"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³è¦ä»¶"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "%d 行目: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "%d 行目: トリガーã«ã¯ -- ãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "%d 行目: %s ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "%d 行目: 内部スクリプト㯠'>' ã§çµ‚ã‚らãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "%d 行目: スクリプトプログラム㯠'/' ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "%d 行目: 2番目㮠%s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "%d 行目: 未サãƒãƒ¼ãƒˆã®å†…部スクリプト: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr "%d 行目: インタープリター引数ã¯ãƒˆãƒªã‚¬ãƒ¼ã«ãŠã„ã¦è¨±å¯ã•ã‚Œã¾ã›ã‚“: %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "%d 行目: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: %s ã«å¯¾ã—ã¦æœŸå¾…ã•ã‚Œã‚‹å¼•æ•°\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr ""
+msgstr "%d 行目: %%if ãŒé–‰ã˜ã¦ã„ã¾ã›ã‚“\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "%d 行目: 終了ã—ã¦ã„ãªã„マクロã¾ãŸã¯è¡Œã®ä¸æ­£ãªç¶™ç¶š\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: ä¸æ­£ãª %%if æ¡ä»¶\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%if ãŒãªã„ã®ã« %%else ãŒã‚ã‚Šã¾ã™\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%if ãŒãªã„ã®ã« %%endif ãŒã‚ã‚Šã¾ã™\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d: ä¸æ­£ãªå½¢å¼ã® %%include æ–‡\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "作æˆ(build)å¯èƒ½ãªäº’æ›ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "パッケージã«ã¯ %%description ãŒã‚ã‚Šã¾ã›ã‚“: %s\n"
@@ -1439,450 +1645,561 @@ msgstr "オプションãŒå¤šã™ãŽã¾ã™: %s\n"
msgid "Processing policies: %s\n"
msgstr "ãƒãƒªã‚·ãƒ¼ã®å‡¦ç†ä¸­: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "ä¸æ­£ãªæ­£è¦è¡¨ç¾ %s を無視ã—ã¾ã™\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "%s ã®ãŸã‚ã®ãƒ‘イプ作æˆãŒã§ãã¾ã›ã‚“: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "%s を実行ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "%s ã®ãƒ•ã‚©ãƒ¼ã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s ã¯å¤±æ•—ã—ã¾ã—ãŸã€‚ %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "%s ã¸å…¨ãƒ‡ãƒ¼ã‚¿ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "%s ã®æ•´æ•°(long int)ã¸ã®å¤‰æ›ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "空ã®ãƒ•ã‚¡ã‚¤ãƒ«åˆ†é¡žå­\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "構æˆã™ã¹ãファイル属性ãŒã‚ã‚Šã¾ã›ã‚“。\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "ファイル \"%s\" ã®æ‰¿èªã«å¤±æ•—ã—ã¾ã—ãŸ: モード %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "%s を検索ã—ã¦ã„ã¾ã™: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "%s ã®æ¤œç´¢ã«å¤±æ•—ã—ã¾ã—ãŸ:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "スペックファイル %s ã®å•ã„åˆã‚ã›ã«å¤±æ•—ã—ã¾ã—ãŸã€‚解æžã§ãã¾ã›ã‚“。\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(エラー 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "ä¸æ­£ãªãƒžã‚¸ãƒƒã‚¯"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "ä¸æ­£ãª/ä¸å¯èª­ãªãƒ˜ãƒƒãƒ€ãƒ¼"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚ªãƒ—ション: \"%s\" ã¯ç„¡è¦–ã—ã¾ã™ã€‚\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "ヘッダーサイズãŒå¤§ãã™ãŽã¾ã™ã€‚"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s ã«ã¯ä¸æ­£ãªæ•°å€¤ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s ã«ã¯å¤§ã/å°ã•éŽãŽã‚‹long値ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s ã«ã¯å¤§ã/å°ã•éŽãŽã‚‹æ•´æ•°å€¤ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "%sロックをç²å¾—ã§ãã¾ã›ã‚“ (%s/%s)\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "ダイジェストãŒé©åˆã—ã¾ã›ã‚“"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "共有"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "内部エラー"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "排他"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "アーカイブファイルãŒãƒ˜ãƒƒãƒ€ãƒ¼ã«ã‚ã‚Šã¾ã›ã‚“。"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "ä¸æ­£ãªã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹å½¢å¼ %x ㌠%s/%s ã«ã‚ã‚Šã¾ã™\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr "失敗 - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "エラー(%d) \"%s\" レコード㮠%s インデックスã‹ã‚‰å–得中: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "エラー(%d) - レコード \"%s\" ã‚’ %s ã«æ ¼ç´æ™‚\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "エラー(%d) - レコード \"%s\" ã‚’ %s ã‹ã‚‰å‰Šé™¤æ™‚\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "エラー(%d) - ヘッダー #%d レコードã®è¿½åŠ æ™‚\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "エラー(%d) - ヘッダー #%d レコードã®å‰Šé™¤æ™‚\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "エラー(%d) - æ–°ã—ã„パッケージインスタンスã®å‰²ã‚Šå½“ã¦æ™‚\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s ã¯ãƒ‡ãƒ«ã‚¿ RPM ã§ã€ç›´æŽ¥ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã›ã‚“。\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "パッケージ %s 内ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ペイロード (%s) ã§ã™ã€‚\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "パッケージ %s ã¯æ—¢ã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™ã€‚%s を飛ã°ã—ã¾ã™ã€‚\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "パッケージ %s ã¯æ—¢ã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™ã€‚ %s ã¨ç½®æ›ã—ã¾ã™ã€‚\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(blob ã§ã¯ã‚ã‚Šã¾ã›ã‚“)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(æ•°å­—ã§ã¯ã‚ã‚Šã¾ã›ã‚“)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(文字列ã§ãªã„)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(ä¸æ­£ãªã‚¿ã‚¤ãƒ—)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(base64 ã§ã¯ã‚ã‚Šã¾ã›ã‚“)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(ä¸æ­£ãªã‚¿ã‚¤ãƒ—)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(blob ã§ã¯ã‚ã‚Šã¾ã›ã‚“)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(ä¸æ­£ãª XML タイプ)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(OpenPGP ç½²åã§ã¯ã‚ã‚Šã¾ã›ã‚“)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "無効ãªæ—¥ä»˜ %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "通常"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "ç½®æ›"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "未インストール"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "ãƒãƒƒãƒˆå…±æœ‰"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "é–“é•ã£ãŸè‰²"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(ä¸æ˜Ž) "
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(文字列ã§ãªã„)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "ユーザー %s ã¯å­˜åœ¨ã—ã¾ã›ã‚“ - root を使用ã—ã¾ã™\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "グループ %s ã¯å­˜åœ¨ã—ã¾ã›ã‚“ - root を使用ã—ã¾ã™\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s 㯠%s ã¨ã—ã¦ä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s 㯠%s ã¨ã—ã¦ä½œæˆã•ã‚Œã¾ã—ãŸã€‚\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s: 削除ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr "ディレクトリー"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr "ファイル"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "検証ã§ããªã„ç½²åã‚’æŒã¤ %s %s をスキップã—ã¦ã„ã¾ã™\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "検証ã§ããªã„ç½²åã‚’æŒã¤ %s をスキップã—ã¦ã„ã¾ã™\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "ã‚¿ã‚°[%d]: 異常ã§ã™ã€‚tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "SHA1 ヘッダー: 異常ã§ã™ã€‚16 進数ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "RSA ヘッダー: 異常ã§ã™ã€‚ãƒã‚¤ãƒŠãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "DSA ヘッダー: 異常ã§ã™ï¼Žãƒã‚¤ãƒŠãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "blob サイズ (%d): 異常ã§ã™ã€‚8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "リージョン オフセット: 異常ã§ã™ã€‚tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "リージョン ヘッダー以é™: 異常ã§ã™ã€‚tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "リージョン容é‡: 異常ã§ã™ã€‚ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "ヘッダー容é‡(%d): 異常ã§ã™ã€‚読ã¿è¾¼ã¿çµæžœã¯ %d ã§ã™ã€‚\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "ヘッダー マジック: 異常ã§ã™ã€‚\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "ヘッダー ã‚¿ã‚°: 異常ã§ã™ã€‚ã‚¿ã‚°(%d)ã®ç•ªå·ãŒç¯„囲外ã§ã™ã€‚\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "無効ãªãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å¹…"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "ヘッダー データ: 異常ã§ã™ã€‚ãƒã‚¤ãƒˆæ•°(%d)ãŒç¯„囲外ã§ã™ã€‚\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "ヘッダー blob(%zd): 異常ã§ã™ã€‚読ã¿è¾¼ã¿çµæžœã¯ %d ã§ã™ã€‚\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "ヘッダー ロード: 異常ã§ã™ã€‚\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "空ã®ã‚¿ã‚°ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "空ã®ã‚¿ã‚°å"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: ç½²åãŒã‚ã‚Šã¾ã›ã‚“。\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "é…列ã®å¾Œã« ] ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "予期ã›ã¬ ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "予期ã›ã¬ }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "å¼ä¸­ã§ ? ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "å¼ä¸­ã§ ? ã®å¾Œã« { ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "å¼ä¸­ã« } ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "? サブå¼ã®å¾Œã« : ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "å¼ä¸­ã§ : ã®å¾Œã« { ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "å¼ã®çµ‚ã‚ã‚Šã« | ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "é…列ã®ç¹°ã‚Šè¿”ã—指定ãŒã€ã‚µã‚¤ã‚ºãŒç•°ãªã‚‹é…列ã®é–“ã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "値 EXPR ã‚’æŒã¤ãƒžã‚¯ãƒ­ã‚’予ã‚定義ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "値 EXPR ã‚’æŒã¤ MACRO を定義ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "EXPR ã®ãƒžã‚¯ãƒ­ã‚’展開ã—ãŸçµæžœã‚’表示ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "デフォルトファイルã®ä»£ã‚ã‚Šã« <FILE:...> を読ã¿è¾¼ã¿ã¾ã™ã€‚"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "パッケージダイジェストã®æ¤œè¨¼ã‚’ã—ã¾ã›ã‚“。"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "å–å¾—ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "パッケージ署åã®æ¤œè¨¼ã‚’ã—ã¾ã›ã‚“。"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "標準出力を CMD ã«é€ä¿¡ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "ROOT をトップ ディレクトリーã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "DIRECTORY 内ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’使用ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "DIRECTORY"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "å…¨å•ã„åˆã‚ã›ã‚¿ã‚°ã‚’表示ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "最終的㪠rpmrc ã¨ãƒžã‚¯ãƒ­ã®è¨­å®šã‚’表示ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "詳細ã§ãªã„出力をæä¾›ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "より詳細ãªå‡ºåŠ›ã‚’æä¾›ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "使用ã—ã¦ã„ã‚‹ rpm ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã—ã¾ã™ã€‚"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "ペイロードã®ãƒ•ã‚¡ã‚¤ãƒ«çŠ¶æ…‹ãƒžã‚·ãƒ³ã®ãƒ‡ãƒãƒƒã‚°"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "rpmio 入出力ã®ãƒ‡ãƒãƒƒã‚°"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: オプション テーブルã®è¨­å®šãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ (%d)\n"
@@ -1903,11 +2220,11 @@ msgstr "å†é…置㯠= ã‚’å«ã‚“ã§ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
msgid "relocations must have a / following the ="
msgstr "å†é…置㯠= ã®æ¬¡ã« / ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr "設定ãŒã‚¹ã‚­ãƒƒãƒ—を指示ã—ã¦ã„ã¦ã‚‚ã€å…¨ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インストールã—ã¾ã™ã€‚"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1915,152 +2232,162 @@ msgstr ""
"<package> ã¨ä¸€è‡´ã™ã‚‹ãƒ‘ッケージ全ã¦ã‚’削除ã—ã¾ã™(通常㯠<package> ãŒè¤‡æ•°ã®ãƒ‘ッ"
"ケージを指ã™å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "å†é…ç½®ä¸å¯èƒ½ãªãƒ‘ッケージã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å†é…ç½®ã—ã¾ã™ã€‚"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "ä¾å­˜ã®ãƒ«ãƒ¼ãƒ—を警告ã¨ã—ã¦è¡¨ç¤ºã—ã¾ã™ã€‚"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "パッケージを削除 (アンインストール) ã—ã¾ã™ã€‚"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "設定ファイルをインストールã—ã¾ã›ã‚“。"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "ドキュメントをインストールã—ã¾ã›ã‚“。"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "パス <path> 中ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’スキップã—ã¾ã™ã€‚"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "--replacepkgs 㨠--replacefiles を短縮ã—ãŸã‚‚ã®"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ¸ˆã¿ã®å ´åˆã®ã¿ã‚¢ãƒƒãƒ—グレード"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
"パッケージをインストールã«ã¤ã‚Œã¦ '#' を表示ã—ã¾ã™ (-v ã¨ä½¿ç”¨ã™ã‚‹ã¨è‰¯ã„)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "パッケージã®å¯¾è±¡ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "パッケージ対象 OS ã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã›ã‚“。"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "インストールå‰ã®ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ãƒã‚§ãƒƒã‚¯ã‚’è¡Œã„ã¾ã›ã‚“。"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "ドキュメントをインストールã—ã¾ã™ã€‚"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "パッケージをインストールã—ã¾ã™ã€‚"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "データベースを更新ã—ã¾ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®å¤‰æ›´ã¯è¡Œã„ã¾ã›ã‚“。"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "パッケージã®ä¾å­˜é–¢ä¿‚ã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã›ã‚“。"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "ファイルã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "ファイルã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚’検証ã—ã¾ã›ã‚“ (æ—§å¼)。"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "ファイルã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ コンテキストをインストールã—ã¾ã›ã‚“。"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "ä¾å­˜æ€§ã‚’満ãŸã™ç‚ºã®ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«é †åºã‚’変更ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "パッケージ指定ã®ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "%%pre スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "%%post スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "%%preun スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "%%postun スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "ã“ã®ãƒ‘ッケージã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "%%triggerprein スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "%%triggerin スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "%%triggerun スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "%%triggerpostun スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "ã„ã‹ãªã‚‹åŽé›†æ´»å‹•ã‚‚è¡Œã‚ãªã„ã§ãã ã•ã„。"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2068,371 +2395,408 @@ msgstr ""
"å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ‘ッケージã«ã‚¢ãƒƒãƒ—グレードã—ã¾ã™(アップグレード時㮠--force "
"ã¯ã“れを自動的ã«è¡Œã„ã¾ã™)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "インストールã™ã‚‹éš›ã«ãƒ‘ーセント表示を行ã„ã¾ã™ã€‚"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "パッケージãŒå†é…ç½®å¯èƒ½ãªã‚‰ã°ã€ <dir> ã«å†é…ç½®ã—ã¾ã™ã€‚"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "パス <old> ã‹ã‚‰ãƒ‘ス <new> ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å†é…ç½®ã•ã›ã¾ã™ã€‚"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "パッケージ間ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç«¶åˆã‚’無視ã—ã¾ã™ã€‚"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "æ—¢ã«å­˜åœ¨ã™ã‚‹ãƒ‘ッケージã§ã‚‚å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "インストールã›ãšã«ã€ãƒ†ã‚¹ãƒˆã®ã¿ã‚’è¡Œã„ã¾ã™ã€‚"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "パッケージをアップグレードã—ã¾ã™ã€‚"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "ã™ã¹ã¦ã®ãƒ‘ッケージã«ã¤ã„ã¦å•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "rpm ã®ç½²å検査モード"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "<file> を所有ã—ã¦ã„るパッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "グループã«æ‰€å±žã™ã‚‹ãƒ‘ッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "パッケージファイルã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "パッケージ ID ã§å•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "ヘッダー ID ã§ãƒ‘ッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm å•ã„åˆã‚ã›ãƒ¢ãƒ¼ãƒ‰"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "ヘッダー インスタンスã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
"インストール トランザクションã‹ã‚‰ã®ãƒ‘ッケージã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "パッケージã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•ã‚Œã‚‹ãƒ‘ッケージをå•ã„åˆã‚ã›ã¾ã™ã€‚"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "RPM 検証モード"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "ä¾å­˜æ€§ã‚’è¦æ±‚ã™ã‚‹ãƒ‘ッケージã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "ä¾å­˜æ€§ã‚’æä¾›ã™ã‚‹ãƒ‘ッケージã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "引数を glob パターンã¨ã—ã¦ã¿ãªã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "リスト内ã®éžãƒ‘ッケージファイルを処ç†ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "å…¨ã¦ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "å…¨ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "å…¨ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "å…¨ã¦ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "基本的ãªãƒ•ã‚¡ã‚¤ãƒ«æƒ…報をダンプã—ã¾ã™ã€‚"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "パッケージ中ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "%%ghost ファイルをスキップã—ã¾ã™ã€‚"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "%%ghost ファイルをスキップã—ã¾ã™ã€‚"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "列挙ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®çŠ¶æ…‹ã‚’表示ã—ã¾ã™ã€‚"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "ファイル容é‡ã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "ファイルã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "ファイルã®æ‰€æœ‰è€…を検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "ファイルã®æ‰€æœ‰ã‚°ãƒ«ãƒ¼ãƒ—を検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "ファイルã®æœ€çµ‚更新日を検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "ファイルã®ãƒ¢ãƒ¼ãƒ‰ã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "ファイルã®ã‚±ãƒ¼ãƒ‘ビリティ (capability) を検証ã—ã¾ã›ã‚“。"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "ファイルã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ コンテキストを検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "ファイルã®ã‚±ãƒ¼ãƒ‘ビリティ (capability) を検証ã—ã¾ã›ã‚“。"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "パッケージ中ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "パッケージã®ä¾å­˜é–¢ä¿‚を検証ã—ã¾ã›ã‚“。"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "検証スクリプトを実行ã—ã¾ã›ã‚“。"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "%s ã® rpmlib 機能ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "ソースパッケージãŒæœŸå¾…ã•ã‚Œã¾ã™ãŒã€ã“ã‚Œã¯ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã§ã™\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "ソースパッケージ㫠.spec ファイルãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "アーカイブã®ä¼¸é•·ã«å¤±æ•—%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ": ファイル "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s: ファイル %s ã§å¤±æ•—: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s: 失敗: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "ä¸æ­£ãªæ›¸å¼: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(ファイルãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "通常 "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "ç½®æ› "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "未インストール"
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "ãƒãƒƒãƒˆå…±æœ‰ "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "é–“é•ã£ãŸè‰² "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(状態ãªã—) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(未知㮠%3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "パッケージã¯ãƒ•ã‚¡ã‚¤ãƒ«æ‰€æœ‰è€…/グループ一覧をæŒã£ã¦ã„ã¾ã›ã‚“。\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "パッケージã¯ãƒ•ã‚¡ã‚¤ãƒ«æ‰€æœ‰è€…ã‚‚ id リストもæŒã£ã¦ã„ã¾ã›ã‚“\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "グループ %s ã«å±žã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“。\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "%s をトリガーã™ã‚‹ãƒ‘ッケージãŒå­˜åœ¨ã—ã¾ã›ã‚“。\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "ä¸æ­£ãª %s ã®æŒ‡å®š: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "%s ã«ä¸€è‡´ã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "%s ã‚’å¿…è¦ã¨ã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“。\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "%s ã‚’æä¾›ã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“。\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "ファイル %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "ファイル %s ã¯ã©ã®ãƒ‘ッケージã«ã‚‚属ã—ã¦ã„ã¾ã›ã‚“。\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "無効ãªãƒ‘ッケージ番å·: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "レコード %u ã¯èª­ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "パッケージ %s ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "ä¸æ˜Žãªã‚¿ã‚°: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: キー %d ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: キー %d 㯠ASCII å½¢å¼ã®å…¬é–‹éµã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: インãƒãƒ¼ãƒˆèª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ(%d)。\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s: headerRead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+msgid "Fread failed: %s"
+msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-"%s: ä¸å¤‰ã®ãƒ˜ãƒƒãƒ€ãƒ¼é ˜åŸŸãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚パッケージãŒå£Šã‚Œã¦ã„ã¾ã›ã‚“"
-"ã‹ï¼Ÿ\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "OK ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr "(見ã¤ã‹ã‚‰ãªã„éµ:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr "(ä¿¡é ¼ã§ããªã„éµ:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: オープンã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
@@ -2457,215 +2821,445 @@ msgstr "ルート ディレクトリーã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "ルート ディレクトリーã®å¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "失ã‚ã‚ŒãŸã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ %d を生æˆã—ã¦ã„ã¾ã™ã€ãŠå¾…ã¡ãã ã•ã„...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "dbpath ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: スキップã—ã¾ã™ã€‚"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "エラー(%d) - レコード #%d ã‚’ %s ã«æ ¼ç´æ™‚\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: æ­£è¦è¡¨ç¾ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: スキップã—ã¾ã™ã€‚"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+"rpmdb: ç ´æã—ãŸãƒ˜ãƒƒãƒ€ãƒ¼ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ #%u ã‚’å–å¾—ã—ã¾ã—ãŸã€‚スキップã—ã¾ã™ã€‚\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: ヘッダーを読むã“ã¨ãŒã§ãã¾ã›ã‚“ (0x%x)\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "dbpath ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "ディレクトリー %s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "データベース中ã®ãƒ˜ãƒƒãƒ€ãƒ¼ #%u ã¯ä¸æ­£ã§ã™ -- スキップã—ã¾ã™ã€‚\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "元々 %u ã«ã‚ã£ãŸãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’追加ã§ãã¾ã›ã‚“。\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "データベースã®å†æ§‹ç¯‰ã«å¤±æ•—: オリジナルã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯æ®‹ã£ã¦ã„ã¾ã™ã€‚\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "å¤ã„データベースを新ã—ã„データベースã§ç½®ãæ›ãˆã‚‹ã®ã«å¤±æ•—!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NO "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "YES"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
"「PreReq:ã€ã€ŒProvides:ã€ã€ŒObsoletes:ã€ã®ä¾å­˜é–¢ä¿‚をサãƒãƒ¼ãƒˆã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚"
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"ファイルåãŒã€ãƒ‘スã§ã¯ãªã (dirName, baseName, dirIndex) ã®çµ„ã§æ ¼ç´ã•ã‚Œã¾ã™ã€‚"
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "パッケージ ペイロード㌠bzip2 を用ã„ã¦åœ§ç¸®ã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "パッケージ ペイロード㌠xz を用ã„ã¦åœ§ç¸®ã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "パッケージ ペイロード㌠lzma を用ã„ã¦åœ§ç¸®ã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "パッケージ ペイロード ファイルãŒã€Œ./ã€æŽ¥é ­èªžã‚’æŒã£ã¦ã„ã¾ã™ã€‚"
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "「パッケージå-ãƒãƒ¼ã‚¸ãƒ§ãƒ³-リリースã€ãŒæš—é»™ã§æä¾›ã•ã‚Œã¾ã›ã‚“。"
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "ヘッダー ã‚¿ã‚°ãŒèª­ã¿è¾¼ã¾ã‚ŒãŸå¾Œã€å¸¸ã«ã‚½ãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚"
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "スクリプト インタプリターãŒãƒ˜ãƒƒãƒ€ãƒ¼ã‹ã‚‰å¼•æ•°ã‚’使用ã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ ファイル群ãŒå®Œå…¨ã§ãªãã¦ã‚‚インストールã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"インストール中ã«ã€ãƒ‘ッケージスクリプト㌠rpm データベースã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "lua スクリプトã®å†…部サãƒãƒ¼ãƒˆã€‚"
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "ファイルã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã¯ãƒ‘ッケージ毎ã®è¨­å®šã§ã™"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "POSIX..1e ファイル ケーパビリティ (capability) ã®ãŸã‚ã®ã‚µãƒãƒ¼ãƒˆ"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "パッケージã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚é–“ã‚’é•·ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
+msgstr "ä¾å­˜æ€§ã®æ¯”較ã¯ãƒãƒ«ãƒ€ã‚’æŒã¤ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™"
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "ä¸æ­£ãªãƒžã‚¸ãƒƒã‚¯"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "ä¸æ­£ãª/ä¸å¯èª­ãªãƒ˜ãƒƒãƒ€ãƒ¼"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "ヘッダーサイズãŒå¤§ãã™ãŽã¾ã™ã€‚"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "ファイルãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã®ãŸã‚ã«å¤§ãã™ãŽã¾ã™"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "ダイジェストãŒé©åˆã—ã¾ã›ã‚“"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "内部エラー"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "アーカイブファイルãŒãƒ˜ãƒƒãƒ€ãƒ¼ã«ã‚ã‚Šã¾ã›ã‚“。"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr "失敗 - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: RPM パッケージ(ã¾ãŸã¯ãƒ‘ッケージã®ãƒªã‚¹ãƒˆ)ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "更新中 / インストール中...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "æ•´ç†ä¸­ / 削除中...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "準備ã—ã¦ã„ã¾ã™..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "パッケージã®æº–備中..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "ä¾å­˜æ€§ã®æ¬ å¦‚:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: RPM パッケージ(ã¾ãŸã¯ãƒ‘ッケージã®ãƒªã‚¹ãƒˆ)ã§ã¯ã‚ã‚Šã¾ã›ã‚“: %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s をインストールã§ãã¾ã›ã‚“。\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "%s ã‚’å–得中\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "%s をスキップã—ã¾ã™ - 転é€ã«å¤±æ•—ã—ã¾ã—ãŸ\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "パッケージ %s ã¯å†é…ç½®ã§ãã¾ã›ã‚“。\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "ファイル %s ã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "\"%s\" ã¯è¤‡æ•°ã®ãƒ‘ッケージを指定ã—ã¦ã„ã¾ã™:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "%s をインストール中ã§ã™ã€‚\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "rpm パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "ç½²åã®ç¨®é¡žãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ RPM パッケージã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "読ã¿è¾¼ã¿ã®å¤±æ•—: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "rpm パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "%s ロックを(%s 上ã«ï¼‰ä½œæˆã§ãã¾ã›ã‚“。(%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "%s ロックを待ã£ã¦ã„ã¾ã™ã€‚(%s 上)\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "%s ã®dlopenã«å¤±æ•—ã—ã¾ã—ãŸã€‚%s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "シンボル %s ã®è§£æ±ºã«å¤±æ•—: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "%%__collection_%s マクロã®æ‹¡å¼µã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "%s プラグインã¯èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“。\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "%s プラグインã®ã‚·ãƒ³ãƒœãƒ« %s ã®è§£æ±ºã«å¤±æ•—: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "ç•°ãªã‚‹"
@@ -2745,639 +3339,353 @@ msgstr "%s 㯠%s%s ã«ã‚ˆã£ã¦ä¸è¦ã¨ã•ã‚Œã¦ã„ã¾ã™"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ %d ãŒãƒ‘ッケージ %s æ“作中ã«ç™ºç”Ÿã—ã¾ã—ãŸ"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "2番目㮠':' ãŒã‚ã‚Šã¾ã›ã‚“ (%s:%d ã§)\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "%s:%d ã«ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£åãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "%s:%d ã§ãƒ‡ãƒ¼ã‚¿è¡ŒãŒä¸å®Œå…¨ã§ã™\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "%s:%d ã§ãƒ‡ãƒ¼ã‚¿è¡Œã«å¼•æ•°ãŒå¤šã™ãŽã¾ã™\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "ä¸æ­£ãª arch/os 番å·: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "%s:%d ã§ä¸å®Œå…¨ãªãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¡Œ\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "%s:%d ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¡Œã«å¼•æ•°ãŒå¤šã™ãŽã¾ã™\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "':' ãŒã‚ã‚Šã¾ã›ã‚“ (0x%02x ãŒè¦‹ã¤ã‹ã£ãŸ) (%s:%d)\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "%s ã®å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“ (%s:%d)\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "%s ãŒé–‹ã‘ã¾ã›ã‚“ (%s:%d): %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "%s 用ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (%s:%d)\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "ä¸æ­£ãªã‚ªãƒ—ションã§ã™: '%s' (%s:%d)\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
+"補助ベクトルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€/proc ãŒãƒžã‚¦ãƒ³ãƒˆã•ã‚Œã¦ã„ãªã„ã§ã™ã‹?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "ä¸æ˜Žãªã‚·ã‚¹ãƒ†ãƒ : %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "%s ã«é€£çµ¡ã—ã¦ãã ã•ã„。\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "%s を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“: %m。\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "カレントディレクトリを戻ã›ã¾ã›ã‚“: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "<lua> スクリプトã¯çµ„ã¿è¾¼ã¿ã§ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "%s ã®ä¸€æ™‚ファイルを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "ファイル ディスクリプターã®è¤‡è£½ãŒã§ãã¾ã›ã‚“: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s スクリプトã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚waitpid (%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s スクリプトã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚シグナル %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s スクリプトã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚終了ステータス %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "ä¸æ˜Žãªæ›¸å¼"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "インストール"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "削除"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "%s ã«ã‚ã‚‹ Package データベースを開ã‘ã¾ã›ã‚“。\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "パッケージラベル中ã«ä½™åˆ†ãªã€Œ(ã€ãŒã‚ã‚Šã¾ã™: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "パッケージラベル中ã«ã€Œ(ã€ãŒã‚ã‚Šã¾ã›ã‚“: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "パッケージラベル中ã«ã€Œ)ã€ãŒã‚ã‚Šã¾ã›ã‚“: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: 公開éµã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "トランザクション"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "ç½²åã®å®¹é‡ (%d): 異常ã€read ㌠%d ã‚’è¿”ã—ã¾ã—ãŸ\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "ç½²åã®ç›®å°: ä¸æ­£\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "ç½²åã‚¿ã‚°: 異常ã€ã‚¿ã‚°ã®æ•° (%d) ãŒç¯„囲外ã§ã™ã€‚\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "ç½²åデータ: 異常ã€ãƒã‚¤ãƒˆæ•° (%d) ãŒç¯„囲外ã§ã™ã€‚\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "ç½²å blob(%d): 異常ã€read ㌠%d ã‚’è¿”ã—ã¾ã—ãŸã€‚\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "ç½²åã‚¿ã‚°[%d]: ä¸æ­£ã€ã‚¿ã‚° %d タイプ %d オフセット %d カウント %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "ç½²åã®èª­ã¿è¾¼ã¿: ä¸æ­£ã€‚\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "ç½²åã® pad 容é‡(%zd): 異常ã€%zd ãƒã‚¤ãƒˆèª­ã¿è¾¼ã¿ã¾ã—ãŸã€‚\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "ç½²åã®å®¹é‡(%zd): 異常ã€fstat(2) ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-"ä¸å¤‰ãªãƒ˜ãƒƒãƒ€ãƒ¼é ˜åŸŸã‚’読むã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚パッケージãŒå£Šã‚Œã¦ã„ã¾ã›ã‚“"
-"ã‹ï¼Ÿ\n"
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "RPM v3 パッケージを署åã§ãã¾ã›ã‚“\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
+
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 ダイジェスト:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "ヘッダー SHA1 ダイジェスト:"
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "ヘッダー "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "ç½²åã®æ¤œè¨¼: ä¸æ­£ãªãƒ‘ラメーター (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "ç½²åヘッダーã®å†èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "スキップã—ãŸ"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "失敗"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "%c %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-
-#: lib/verify.c:422
+#: lib/verify.c:263
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "%s ã®ãŸã‚ã®ä¾å­˜æ€§ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "無効ãªãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å¹…"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "% ã®å¾Œã« { ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "%{ ã®å¾Œã« } ãŒã‚ã‚Šã¾ã›ã‚“。"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "空ã®ã‚¿ã‚°ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "空ã®ã‚¿ã‚°å"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "ä¸æ˜Žãªã‚¿ã‚°"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "é…列ã®å¾Œã« ] ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "予期ã›ã¬ ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "予期ã›ã¬ }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "å¼ä¸­ã§ ? ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "å¼ä¸­ã§ ? ã®å¾Œã« { ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "å¼ä¸­ã« } ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "? サブå¼ã®å¾Œã« : ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "å¼ä¸­ã§ : ã®å¾Œã« { ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "å¼ã®çµ‚ã‚ã‚Šã« | ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "é…列ã®ç¹°ã‚Šè¿”ã—指定ãŒã€ã‚µã‚¤ã‚ºãŒç•°ãªã‚‹é…列ã®é–“ã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "失ã‚ã‚ŒãŸã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ %d を生æˆã—ã¦ã„ã¾ã™ã€ãŠå¾…ã¡ãã ã•ã„...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "%s インデックスを db%d ã§é–‹ã‘ã¾ã›ã‚“ - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "エラー(%d) \"%s\" レコード㮠%s インデックスã‹ã‚‰å–得中: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "dbpath ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: スキップã—ã¾ã™ã€‚"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "エラー(%d) - レコード #%d ã‚’ %s ã«æ ¼ç´æ™‚\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: æ­£è¦è¡¨ç¾ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: スキップã—ã¾ã™ã€‚"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-"rpmdb: ç ´æã—ãŸãƒ˜ãƒƒãƒ€ãƒ¼ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ #%u ã‚’å–å¾—ã—ã¾ã—ãŸã€‚スキップã—ã¾ã™ã€‚\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "エラー(%d:%s) - %s インデックスã‹ã‚‰æ¬¡ã®ã‚­ãƒ¼å–得時\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "エラー(%d) - ヘッダー #%d レコードã®è¿½åŠ æ™‚\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "エラー(%d) - ヘッダー #%d レコードã®å‰Šé™¤æ™‚\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: ヘッダーを読むã“ã¨ãŒã§ãã¾ã›ã‚“ (0x%x)\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "エラー(%d) - \"%s\" ã®ãƒ¬ã‚³ãƒ¼ãƒ‰è¨­å®šæ™‚ (%s インデックスã‹ã‚‰)\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "エラー(%d) - レコード \"%s\" ã‚’ %s ã«æ ¼ç´æ™‚\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "エラー(%d) - レコード \"%s\" ã‚’ %s ã‹ã‚‰å‰Šé™¤æ™‚\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "エラー(%d) - æ–°ã—ã„パッケージインスタンスã®å‰²ã‚Šå½“ã¦æ™‚\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "エラー(%d) - レコード \"%s\" å–得時 (%s インデックスã‹ã‚‰)\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "エラー(%d) - レコード %s ã‚’ %s ã«ã‚¹ãƒˆã‚¢æ™‚\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "dbpath ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "ディレクトリー %s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "データベース中ã®ãƒ˜ãƒƒãƒ€ãƒ¼ #%u ã¯ä¸æ­£ã§ã™ -- スキップã—ã¾ã™ã€‚\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "元々 %u ã«ã‚ã£ãŸãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’追加ã§ãã¾ã›ã‚“。\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "データベースã®å†æ§‹ç¯‰ã«å¤±æ•—: オリジナルã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯æ®‹ã£ã¦ã„ã¾ã™ã€‚\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "å¤ã„データベースを新ã—ã„データベースã§ç½®ãæ›ãˆã‚‹ã®ã«å¤±æ•—!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "復元ã™ã‚‹ã«ã¯ %s 内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ %s 内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§ç½®ãæ›ãˆã¦ä¸‹ã•ã„"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "ディレクトリー %s ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d エラー (%d) (%s ã«ãŠã„ã¦): %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d エラー (%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "%sロックをç²å¾—ã§ãã¾ã›ã‚“ (%s/%s)\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "共有"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "排他"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "ä¸æ­£ãªã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹å½¢å¼ %x ㌠%s/%s ã«ã‚ã‚Šã¾ã™\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚ªãƒ—ション: \"%s\" ã¯ç„¡è¦–ã—ã¾ã™ã€‚\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s ã«ã¯ä¸æ­£ãªæ•°å€¤ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n"
-#: lib/backend/dbconfig.c:190
+#: lib/verify.c:284
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s ã«ã¯å¤§ã/å°ã•éŽãŽã‚‹long値ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s ã«ã¯å¤§ã/å°ã•éŽãŽã‚‹æ•´æ•°å€¤ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "%s ã«å¯¾ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã®ãƒ‡ã‚³ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸ\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "%s ã®ä¸€æ™‚ファイルã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "%s ãƒãƒªã‚·ãƒ¼ã‚’ファイル %s ã«æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "semanage ãƒãƒ³ãƒ‰ãƒ«ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "ãƒãƒªã‚·ãƒ¼ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¸ã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸ\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "ãƒãƒªã‚·ãƒ¼ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "一時ãƒãƒªã‚·ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ« %s ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "ãƒãƒªã‚·ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸ: %s (%s)\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr ""
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "ãƒãƒªã‚·ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: lib/verify.c:448
#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "プロセスã®ãƒ•ã‚©ãƒ¼ã‚¯ã«å¤±æ•—: %s\n"
+msgid "missing %c %s"
+msgstr "%c %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "%s ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚%s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "%s ã®ãŸã‚ã®ä¾å­˜æ€§ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s ãŒç•°å¸¸çµ‚了ã—ã¾ã—ãŸã€‚\n"
+msgid "Unable to reset nice value: %s"
+msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s ãŒçµ‚了コード %i ã§å¤±æ•—ã—ã¾ã—ãŸ\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "ãƒãƒªã‚·ãƒ¼ã®å¤‰æ›´ã‚’確定ã—ãŸéš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "restorecon パスã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-"ファイルシステムã®ãƒªãƒ©ãƒ™ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ファイルã¯ãƒŸã‚¹ãƒ©ãƒ™ãƒ«ã•ã‚ŒãŸã‹ã‚‚ã—ã‚Œ"
-"ã¾ã›ã‚“。\n"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"ファイルã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®å†èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ファイルã¯é•ã†ãƒ©ãƒ™ãƒ«ãŒã¤ã‘"
-"られãŸã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。\n"
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "%s ã‹ã‚‰ã®ãƒãƒªã‚·ãƒ¼ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== 有効 %d 空 %d\n"
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(空)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(空)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "マクロ %%%s ã¯ãƒœãƒ‡ã‚£ãŒçµ‚端ã—ã¦ã„ã¾ã›ã‚“。\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "マクロ %%%s ã¯ã‚ªãƒ—ションãŒçµ‚端ã•ã‚Œã¦ã„ã¾ã›ã‚“。\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "マクロ %%%s ã¯ä¸æ­£ãªåå‰ã§ã™ (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "マクロ %%%s ã¯ãƒœãƒ‡ã‚£ãŒçµ‚端ã—ã¦ã„ã¾ã›ã‚“。\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "マクロ %%%s ã¯ã‚ªãƒ—ションãŒçµ‚端ã•ã‚Œã¦ã„ã¾ã›ã‚“。\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "マクロ %%%s ã®ãƒœãƒ‡ã‚£ã¯ç©ºã§ã™ã€‚\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "マクロ %%%s ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "マクロ %%%s ã¯ä¸æ­£ãªåå‰ã§ã™ (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "マクロ %%%s (%s) ã¯ãƒ¬ãƒ™ãƒ« %d 未満ã§ä½¿ç”¨ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "ä¸æ˜Žãªã‚ªãƒ—ション %c (%s(%s)中ã«)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3385,165 +3693,282 @@ msgstr ""
"マクロ展開ã®å†å¸°å‘¼ã³å‡ºã—ãŒæ·±ã™ãŽã¾ã™ã€‚ã“ã‚Œã¯å†å¸°çš„マクロ定義ãŒåŽŸå› ã§ç™ºç”Ÿã—ã¦"
"ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "終端ã•ã‚Œã¦ã„ãªã„ %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "%% ã®å¾Œã‚ã«æ§‹æ–‡è§£æžã§ããªã„マクロãŒç¶šã„ã¦ã„ã¾ã™ã€‚\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== 有効 %d 空 %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "一時ファイル %s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "ファイル %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "ファイル %s 㯠%u ãƒã‚¤ãƒˆã‚ˆã‚Šå°ã•ããªã£ã¦ã„ã¾ã™ã€‚\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "ディレクトリーã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[ãªã—]"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(エラーãªã—)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "致命的ãªã‚¨ãƒ©ãƒ¼: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "エラー: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "警告: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "lua スクリプトã§ä¸æ­£ãªæ–‡æ³•ãŒã‚ã‚Šã¾ã—ãŸ: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "lua スクリプトã§ä¸æ­£ãªæ–‡æ³•ãŒã‚ã‚Šã¾ã—ãŸ: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua スクリプトã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "lua ファイルã«ä¸æ­£ãªæ–‡æ³•ãŒã‚ã‚Šã¾ã—ãŸ: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua ã®ãƒ•ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[ãªã—]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(エラーãªã—)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "致命的ãªã‚¨ãƒ©ãƒ¼: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "エラー: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "警告: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "メモリ割り当㦠(%u ãƒã‚¤ãƒˆ) ㌠NULL ã‚’è¿”ã—ã¾ã—ãŸã€‚\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %sã€éµ ID %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(ãªã—)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "サãƒãƒ¼ãƒˆã•ã‚Œãªã„ PGP ç½²å\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "サãƒãƒ¼ãƒˆã•ã‚Œãªã„ PGP ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  %u\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "サãƒãƒ¼ãƒˆã•ã‚Œãªã„ PGP 公開éµã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  %u\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "ç½²åã®ãŸã‚ã®ãƒ‘イプ作æˆãŒã§ãã¾ã›ã‚“: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "%s を実行ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "gpg ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—㟠(%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg ãŒç½²åを書ã込むã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "ç½²åを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s ã¯ã™ã§ã«åŒä¸€ã®ç½²åã‚’å«ã¿ã¾ã™ã€ã‚¹ã‚­ãƒƒãƒ—ã—ã¦ã„ã¾ã™\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: headerRead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "RPM v3 パッケージを署åã§ãã¾ã›ã‚“\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s ã¯ã™ã§ã«åŒä¸€ã®ç½²åã‚’å«ã¿ã¾ã™ã€ã‚¹ã‚­ãƒƒãƒ—ã—ã¦ã„ã¾ã™\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "%s ã®ç½®æ›ã«å¤±æ•—: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: manifest ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "ヘッダーã¨ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ç½²åを検証ã—ã¾ã›ã‚“。"
diff --git a/po/ko.po b/po/ko.po
index 3bde072b5..3d4ea3567 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Korean (http://www.transifex.com/rpm-team/rpm/language/ko/)\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,493 +43,555 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "ì‹¤í–‰ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "ì¸ìˆ˜ 값으로 RPM 패키지가 지정ë˜ì–´ì•¼ 합니다\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "íŒ¨í‚¤ì§€ì˜ í—¤ë”를 ì½ëŠ” ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "payload를 다시 ì—´ 수 ì—†ìŒ: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "ì§ˆì˜ ì˜µì…˜ (-q ë˜ëŠ” --query 옵션과 함께 사용):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "ê²€ì¦ ì˜µì…˜ (-V ë˜ëŠ” --verify 옵션과 함께 사용):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "설치/업그레ì´ë“œ/ì‚­ì œ 옵션:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "질ì˜/ê²€ì¦ ìœ í˜•ì€ ê°ê° 다른 유형과 ë™ì‹œì— 수행할 수 있습니다"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "부ì ì ˆí•œ ì§ˆì˜ í”Œëž˜ê·¸ 입니다"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "부ì ì ˆí•œ ì§ˆì˜ í˜•ì‹ ìž…ë‹ˆë‹¤"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "부ì ì ˆí•œ ì§ˆì˜ ì†ŒìŠ¤ 입니다"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "í•˜ë‚˜ì˜ ì£¼(major) 모드만 지정할 수 있습니다"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "패키지 설치시ì—만 파ì¼ì„ 재배치할 수 있습니다"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate 와 --excludepath ì˜µì…˜ì€ ìµœì‹ ì˜ íŒ¨í‚¤ì§€ë¥¼ 설치할 ë•Œì—만 사용할 수 있"
-"습니다"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix ì˜µì…˜ì€ ìµœì‹ ì˜ íŒ¨í‚¤ì§€ë¥¼ 설치할 ë•Œì—만 사용할 수 있습니다"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "--prefix ì˜µì…˜ì˜ ì¸ìˆ˜ëŠ” 반드시 '/' ë¡œ 시작해야 합니다"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "--excludedocs 와 --includedocs 옵션만 지정할 수 있습니다"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 삭제시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치와 삭제시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr "스í¬ë¦½íŠ¸ í•´ì œ ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치와 삭제시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr "트리거 í•´ì œ ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치와 삭제시ì—만 지정할 수 있습니다"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "--root (-r) ì˜µì…˜ì˜ ì¸ìˆ˜ëŠ” 반드시 '/' ë¡œ 시작해야 합니다"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "삭제할 패키지가 지정ë˜ì§€ 않았습니다"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "설치할 패키지가 지정ë˜ì§€ 않았습니다"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "질ì˜ì— 필요한 ì¸ìˆ˜ê°€ 지정ë˜ì§€ 않았습니다"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "ê²€ì¦ì— 필요한 ì¸ìˆ˜ê°€ 지정ë˜ì§€ 않았습니다"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot는 ì´ë¯¸ 지정ë˜ì–´ 있습니다, %s(ì„)를 무시합니다\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "<spec파ì¼>ì˜ %prep (소스를 풀고 패치를 ì ìš©í•˜ëŠ” 과정)으로 제작합니다"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<spec파ì¼>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "<spec파ì¼>ì˜ %build (%prepê³¼ 컴파ì¼í•˜ëŠ” 과정)으로 제작합니다"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "<spec파ì¼>ì˜ %install (%prep, %build와 설치하는 과정)으로 제작합니다"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "<spec파ì¼>ì˜ %files 항목(section)ì„ ê²€ì‚¬í•©ë‹ˆë‹¤"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "<spec파ì¼>ë¡œ 소스와 ë°”ì´ë„ˆë¦¬ 패키지를 제작합니다"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "<spec파ì¼>ë¡œ ë°”ì´ë„ˆë¦¬ 패키지 ë§Œì„ ì œìž‘í•©ë‹ˆë‹¤"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "<spec파ì¼>ë¡œ 소스 패키지 ë§Œì„ ì œìž‘í•©ë‹ˆë‹¤"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<소스 패키지>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"<소스 패키지>를 %install (%prep, %build와 설치하는 과정)으로 제작합니다"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "<tar파ì¼>ì„ %prep (소스를 풀고 패치를 ì ìš©í•˜ëŠ” 과정)으로 제작합니다"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tar파ì¼>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "<tar파ì¼>ì„ %build (%prepê³¼ 컴파ì¼í•˜ëŠ” 과정)으로 제작합니다"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "<tar파ì¼>ì„ %install (%prep, %build와 설치하는 과정)으로 제작합니다"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "<tar파ì¼>ì˜ %files 항목(section)ì„ ê²€ì‚¬í•©ë‹ˆë‹¤"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "<tar파ì¼>ë¡œ 소스와 ë°”ì´ë„ˆë¦¬ 패키지를 제작합니다"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "<tar파ì¼>ë¡œ ë°”ì´ë„ˆë¦¬ 패키지 ë§Œì„ ì œìž‘í•©ë‹ˆë‹¤"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "<tar파ì¼>ë¡œ 소스 패키지 ë§Œì„ ì œìž‘í•©ë‹ˆë‹¤"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "<소스 패키지>ë¡œ ë°”ì´ë„ˆë¦¬ 패키지를 제작합니다"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<소스 패키지>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"<소스 패키지>를 %install (%prep, %build와 설치하는 과정)으로 제작합니다"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "buildroot를 êµì²´(override)합니다"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "패키지 제작 í›„ì— ì†ŒìŠ¤ 파ì¼ì„ 풀고 ìž‘ì—…í•œ 디렉토리를 삭제합니다"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ExcludeArch를 무시함: spec 파ì¼ì—ì„œ 지정(directive)ë©ë‹ˆë‹¤"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "ì»´í“¨í„°ì˜ ìƒíƒœ(state) 파ì¼ì„ 디버그 합니다"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "패키지 ì œìž‘ì˜ ì–´ë– í•œ ë‹¨ê³„ë„ ì‹¤í–‰í•˜ì§€ 않습니다"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "패키지 제작 ì˜ì¡´ì„±ì„ 검사하지 않습니다"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "spec파ì¼ì˜ i18N msgstrì„ ì‚¬ìš©(accept)하지 않습니다"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "패키지 제작 í›„ì— ì†ŒìŠ¤ 파ì¼ì„ 삭제합니다"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "패키지 제작 í›„ì— spec파ì¼ì„ 삭제합니다"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "ì§€ì •ëœ ë‹¨ê³„ë¡œ 바로 진행합니다 (c,i ì—서만 사용 가능)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "목표대ìƒ(target) 플랫í¼ì„ êµì²´(override)합니다"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"다ìŒê³¼ 함께 사용하는 제작 옵션 [ <spec파ì¼> | <tar파ì¼> | <소스 패키지> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "%s spec 파ì¼ì„ ì—´ 수 ì—†ìŒ: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "tar 파ì´í”„를 ì—¬ëŠ”ë° ì‹¤íŒ¨í•¨: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "%sì—ì„œ spec 파ì¼ì„ ì½ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "%sì˜ ì´ë¦„ì„ %s(으)ë¡œ ë³€ê²½í•˜ëŠ”ë° ì‹¤íŒ¨í•¨: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "%sì˜ ìƒíƒœ(stat)를 í‘œì‹œí•˜ëŠ”ë° ì‹¤íŒ¨í•¨: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "%s 파ì¼ì€ ì •ê·œ(regular) 파ì¼ì´ 아닙니다.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "%s 파ì¼ì€ spec 파ì¼ì´ ì•„ë‹Œ 것 같습니다.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "목표대ìƒ(target) 플랫í¼ìœ¼ë¡œ 제작 중: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "%s(ì„)를 제작하고 있습니다\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "--root (-r) ì˜µì…˜ì˜ ì¸ìˆ˜ëŠ” 반드시 '/' ë¡œ 시작해야 합니다"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 초기화 합니다"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"ì„¤ì¹˜ëœ íŒ¨í‚¤ì§€ í—¤ë”ì—ì„œ ìƒë°˜ëœ 목ë¡(inverted lists)ì˜ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 재구축 í•©"
"니다"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "ë°ì´í„°ë² ì´ìŠ¤ 파ì¼ì„ 검사합니다"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "ë°ì´í„°ë² ì´ìŠ¤ 옵션:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "í•˜ë‚˜ì˜ ì£¼(major) 모드만 지정할 수 있습니다"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "ì§ˆì˜ ì˜µì…˜ (-q ë˜ëŠ” --query 옵션과 함께 사용):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "ê²€ì¦ ì˜µì…˜ (-V ë˜ëŠ” --verify 옵션과 함께 사용):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "설치/업그레ì´ë“œ/ì‚­ì œ 옵션:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "질ì˜/ê²€ì¦ ìœ í˜•ì€ ê°ê° 다른 유형과 ë™ì‹œì— 수행할 수 있습니다"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "부ì ì ˆí•œ ì§ˆì˜ í”Œëž˜ê·¸ 입니다"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "부ì ì ˆí•œ ì§ˆì˜ í˜•ì‹ ìž…ë‹ˆë‹¤"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "부ì ì ˆí•œ ì§ˆì˜ ì†ŒìŠ¤ 입니다"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "패키지 설치시ì—만 파ì¼ì„ 재배치할 수 있습니다"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate 와 --excludepath ì˜µì…˜ì€ ìµœì‹ ì˜ íŒ¨í‚¤ì§€ë¥¼ 설치할 ë•Œì—만 사용할 수 있"
+"습니다"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix ì˜µì…˜ì€ ìµœì‹ ì˜ íŒ¨í‚¤ì§€ë¥¼ 설치할 ë•Œì—만 사용할 수 있습니다"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix ì˜µì…˜ì˜ ì¸ìˆ˜ëŠ” 반드시 '/' ë¡œ 시작해야 합니다"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "--excludedocs 와 --includedocs 옵션만 지정할 수 있습니다"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 삭제시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치와 삭제시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr "스í¬ë¦½íŠ¸ í•´ì œ ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치와 삭제시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr "트리거 í•´ì œ ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 설치와 삭제시ì—만 지정할 수 있습니다"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "삭제할 패키지가 지정ë˜ì§€ 않았습니다"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "설치할 패키지가 지정ë˜ì§€ 않았습니다"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "질ì˜ì— 필요한 ì¸ìˆ˜ê°€ 지정ë˜ì§€ 않았습니다"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "ê²€ì¦ì— 필요한 ì¸ìˆ˜ê°€ 지정ë˜ì§€ 않았습니다"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "서명 옵션:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "%s(ì„)를 실행할 수 ì—†ìŒ: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "매í¬ë¡œ íŒŒì¼ ì•ˆì— ë°˜ë“œì‹œ \"%%_gpg_name\"ì„ ì„¤ì •í•´ì•¼ 합니다\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "패스 구문(pass phrase) 입력: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "패스 구문(pass phrase)ì´ ì¼ì¹˜í•©ë‹ˆë‹¤.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "다ìŒì˜ ì§ˆì˜ í˜•ì‹ì„ 사용하십시요"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -538,32 +600,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "실행 중(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "%sì˜ ì‹¤í–‰ì— ì‹¤íŒ¨í•¨ (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "%sì˜ ìž˜ëª»ëœ ì¢…ë£Œ ìƒí™© (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -573,783 +640,920 @@ msgstr ""
"\n"
"RPM 제작 오류:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "'==' ì„ ì²˜ë¦¬(parsing)하는 ë„중 구문 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "'&&' ì„ ì²˜ë¦¬(parsing)하는 ë„중 구문 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "'||' ì„ ì²˜ë¦¬(parsing)하는 ë„중 구문 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "표현ì‹ì—ì„œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "'(' ê°€ ì¼ì¹˜í•˜ì§€ 않습니다\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "'-' 는 숫ìžì—만 사용합니다\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "'!' 는 숫ìžì—만 사용합니다\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "ìœ í˜•ì€ ë°˜ë“œì‹œ ì¼ì¹˜í•´ì•¼ 합니다\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "'* /' 는 문ìžì—´ì—ì„œ 사용할 수 없습니다\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "'-' 는 문ìžì—´ì—ì„œ 사용할 수 없습니다\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "'&&' 와 '||' 는 문ìžì—´ì—ì„œ 사용할 수 없습니다\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "표현ì‹ì—ì„œ 구문 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "%s %sì— '(' ê°€ 없습니다\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "%s(%sì— ')' ê°€ 없습니다\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "부ì í•©í•œ %s 토í°: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%2$s %3$sì— %1$s ê°€ 없습니다\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "%s() 다ìŒì— ê³µë°±ì´ ì—†ìŒ: %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "ìž˜ëª»ëœ êµ¬ë¬¸: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "ìž˜ëª»ëœ ëª¨ë“œ spec: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "ìž˜ëª»ëœ dir모드 spec: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "파ì¼ì€ 반드시 \"/\" ë¡œ 시작해야함: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "íŒŒì¼ ëª©ë¡ì´ 중복ë¨: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "BuildRootì— ì‹¬ë³¼ë¦­ë§í¬í•¨: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "파ì¼ì€ \"/\" ë¡œ 시작해야함: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "glob으로 파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "í–‰: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "glob으로 파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "ìž˜ëª»ëœ íŒŒì¼: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "ìž˜ëª»ëœ ì†Œìœ ìž/그룹: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "í˜¸ìŠ¤íŠ¸ëª…ì„ ì •ê·œí™”(canonicalize) í•  수 ì—†ìŒ: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "%sì— payload를 작성할 수 ì—†ìŒ: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "%sì˜ payload를 ì½ì„ 수 ì—†ìŒ: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "í˜¸ìŠ¤íŠ¸ëª…ì„ ì •ê·œí™”(canonicalize) í•  수 ì—†ìŒ: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "ê³ ì • í—¤ë” ì˜ì—­(immutable header region)ì„ ìƒì„±í•  수 없습니다.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "ìž„ì‹œ 파ì¼ì„ ì—´ 수 없습니다.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "ìž„ì‹œ(temp) í—¤ë”를 작성할 수 없습니다\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "%sì—ì„œ spec 파ì¼ì„ ì½ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "ìž˜ëª»ëœ CSA ë°ì´í„°\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "서명(signature) í—¤ë”를 다시 ì½ì–´ì˜¬ 수 없습니다.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "%s(ì„)를 ì—´ 수 ì—†ìŒ: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "패키지를 작성할 수 ì—†ìŒ: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "서명할 ëŒ€ìƒ %s(ì„)를 ì—´ 수 ì—†ìŒ: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "%sì˜ í—¤ë”를 ì½ì„ 수 ì—†ìŒ: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "%sì— í—¤ë”를 작성할 수 ì—†ìŒ: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "작성: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "%s íŒ¨í‚¤ì§€ì˜ ì¶œë ¥ 파ì¼ëª…ì„ ìƒì„±í•  수 ì—†ìŒ: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "%s(ì„)를 ìƒì„±í•  수 ì—†ìŒ: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "%d 번째 í–‰: ë‘번째 %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog 항목(entry)ì€ ë°˜ë“œì‹œ '*' ë¡œ 시작해야 합니다\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "%%changelog 항목(entry)ì´ ì™„ì „í•˜ì§€ 않습니다\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "%%changelogì— ìž˜ëª»ëœ ë‚ ì§œ: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelogê°€ 날짜(chronological) 순으로 ë˜ì–´ìžˆì§€ 않습니다\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "%%changelogì— ì´ë¦„ì´ ë¹ ì ¸ìžˆìŠµë‹ˆë‹¤\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "%%changelogì— ë‚´ìš©(description)ì´ ì—†ìŠµë‹ˆë‹¤\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "%d 번째 í–‰: %%descriptionì—ì„œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "%d 번째 í–‰: %s(ì€)는 ìž˜ëª»ëœ ì˜µì…˜ìž…ë‹ˆë‹¤: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "%d 번째 í–‰: ì´ë¦„ì´ ë„ˆë¬´ 많습니다: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "%d 번째 행: 패키지가 존재하지 않습니다: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "%d 번째 í–‰: ë‘번째 ë‚´ìš©(description)\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "%d 번째 í–‰: %%filesì—ì„œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "%d 번째 í–‰: ìž˜ëª»ëœ ìˆ«ìžìž…니다: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "%d 번째 í–‰: %s(ì€)는 ìž˜ëª»ëœ ìˆ«ìžìž…니다: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "아키í…ì³ê°€ 제외ë¨: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "아키í…ì³ê°€ í¬í•¨ë˜ì–´ 있지 ì•ŠìŒ: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "ìš´ì˜ì²´ì œê°€ 제외ë¨: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "ìš´ì˜ì²´ì œê°€ í¬í•¨ë˜ì–´ 있지 ì•ŠìŒ: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "íŒ¨í‚¤ì§€ì— ë°˜ë“œì‹œ %s 항목(field)ì„ í¬í•¨í•´ì•¼í•¨: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "íŒ¨í‚¤ì§€ì— %s 항목(entry)ì´ ì¤‘ë³µë˜ì–´ 있ìŒ: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "%s ì•„ì´ì½˜ì„ ì—´ 수 ì—†ìŒ: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "%s ì•„ì´ì½˜ì„ ì½ì„ 수 ì—†ìŒ: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "ì•Œ 수 없는 ì•„ì´ì½˜ 유형: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "%d 번째 í–‰: íƒœê·¸ì— í•˜ë‚˜ì˜ í† í°ë§Œ 있습니다: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "%d 번째 행: 올바르지 못한 태그입니다: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "%d 번째 행: 태그가 비어있습니다: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "%d 번째 í–‰: Prefixes는 절대 \"/\" ë¡œ ë나서는 안ë©ë‹ˆë‹¤: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "%d 번째 í–‰: Docdirì€ ë°˜ë“œì‹œ '/' ë¡œ 시작해야 합니다: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "%d 번째 í–‰: ìž˜ëª»ëœ %s: 수ì‹ìž(qualifier): %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "%d 번째 í–‰: ìž˜ëª»ëœ BuildArchitecture 형ì‹ìž…니다: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "내부 오류: 보거스(Bogus) 태그 %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "ìž˜ëª»ëœ íŒ¨í‚¤ì§€ 지정: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "패키지가 ì´ë¯¸ 존재함: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "%d 번째 행: 알 수 없는 태그입니다: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "ìž˜ëª»ëœ ì†ŒìŠ¤: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "%%setupì—ì„œ 오류 ë°œìƒ: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "%d 번째 í–‰: %%setupì— ìž˜ëª»ëœ ì¸ìˆ˜ê°€ 있습니다: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "%d 번째 í–‰: %%setupì— ìž˜ëª»ëœ %s 옵션: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "%d 번째 í–‰: ë‘번째 %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "%d 번째 í–‰: 트리거는 반드시 '--' 를 í¬í•¨í•´ì•¼ 합니다: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "%d 번째 í–‰: %sì—ì„œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "%d 번째 í–‰: 스í¬ë¦½íŠ¸ í”„ë¡œê·¸ëž¨ì€ ë°˜ë“œì‹œ '/' ë¡œ 시작해야 합니다: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "%d 번째 í–‰: ë‘번째 %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "%d 번째 행: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "%s(ì„)를 ì—´ 수 ì—†ìŒ: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%elseê°€ %%if ì—†ì´ ì‚¬ìš©ë˜ì—ˆìŠµë‹ˆë‹¤\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endifê°€ %%if ì—†ì´ ì‚¬ìš©ë˜ì—ˆìŠµë‹ˆë‹¤\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "패키지 ì œìž‘ì— í˜¸í™˜í•˜ëŠ” 아키í…ì³ë¥¼ ì°¾ì„ ìˆ˜ 없습니다\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "íŒ¨í‚¤ì§€ì— %%descriptionì´ ì—†ìŒ: %s\n"
@@ -1420,451 +1624,562 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "%s(ì„)를 실행할 수 ì—†ìŒ: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "%s(ì„)를 fork í•  수 ì—†ìŒ: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "%s(ì„)를 ì°¾ëŠ”ë° ì‹¤íŒ¨í•¨:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
"%s spec 파ì¼ì„ 질ì˜í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤, 파ì¼ì„ 처리(parse)í•  수 없습니다\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(오류 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "ìž˜ëª»ëœ magic 입니다"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "잘못ëœ/ì½ì„ 수 없는 í—¤ë”입니다"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "ì¸ì¦ë˜ì§€ ì•Šì€ db 옵션: \"%s\"(ì„)를 무시합니다.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "í—¤ë”ì˜ í¬ê¸°ê°€ 너무 í½ë‹ˆë‹¤"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s(ì€)는 부ì í•©í•œ 수치 값입니다, ìƒëžµí•©ë‹ˆë‹¤\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s(ì€)는 너무 í¬ê±°ë‚˜ 너무 ì ì€ 정수(long) 값입니다, ìƒëžµí•©ë‹ˆë‹¤\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s(ì€)는 너무 í¬ê±°ë‚˜ 너무 ì ì€ 정수(int) 값입니다, ìƒëžµí•©ë‹ˆë‹¤\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "%2$s/%3$sì˜ ìž ê¸ˆëœ(lock) %1$s(ì„)를 ì–»ì„ ìˆ˜ 없습니다\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "공유ë¨"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "í쇄ì (exclusive)"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "ì•Œ 수 없는 íŒŒì¼ ìœ í˜•ìž…ë‹ˆë‹¤"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "하드 ë§í¬ë¥¼ ì°¾ì„ ìˆ˜ 없습니다"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "내부 오류"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "í—¤ë”ì— ì•„ì¹´ì´ë¸Œ 파ì¼ì´ 없습니다"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " 실패함 - "
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "새로운 패키지를 배치하는 ë„중 오류(%d)ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(BLOB[Binary Large OBject]ì´ ì•„ë‹™ë‹ˆë‹¤)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(숫ìžê°€ 아닙니다)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(부ì í•©í•œ 타입)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr ""
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(base64가 아닙니다)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(부ì í•©í•œ 타입)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(BLOB[Binary Large OBject]ì´ ì•„ë‹™ë‹ˆë‹¤)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "%s 사용ìžê°€ 존재하지 않습니다 - root를 ì´ìš©í•©ë‹ˆë‹¤\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "%s ê·¸ë£¹ì´ ì¡´ìž¬í•˜ì§€ 않습니다 - root를 ì´ìš©í•©ë‹ˆë‹¤\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s(ì´)ê°€ %s(으)ë¡œ 저장ë˜ì—ˆìŠµë‹ˆë‹¤\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s(ì´)ê°€ %s(으)ë¡œ ìƒì„±ë˜ì—ˆìŠµë‹ˆë‹¤\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: 유효한 ì„œëª…ì´ ì—†ìŠµë‹ˆë‹¤\n"
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "태그 형ì‹ì´ 비어있습니다"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "태그 ì´ë¦„ì´ ë¹„ì–´ìžˆìŠµë‹ˆë‹¤"
-#: lib/package.c:581
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "ë°°ì—´ì˜ ëë¶€ë¶„ì— ']' ê°€ 와야합니다"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "불필요한 ']' 가 있습니다"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "불필요한 '}' 가 있습니다"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "표현ì‹ì— '?' ê°€ 와야합니다"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "표현ì‹ì˜ '?' ë’¤ì— '{' ê°€ 와야합니다"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "표현ì‹ì— '}' ê°€ 와야합니다"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "'?' 하부표현ì‹(subexpression) ë’¤ì— ':' ì´ ì™€ì•¼í•©ë‹ˆë‹¤"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "표현ì‹ì˜ ':' ë’¤ì— '{' ê°€ 와야합니다"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "표현ì‹ì˜ ëë¶€ë¶„ì— '|' ê°€ 와야합니다"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Freadì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "ì§ˆì˜ íƒœê·¸ë¥¼ ë³´ì—¬ì¤ë‹ˆë‹¤"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "현재 설정ë˜ì–´ 있는 rpmrcì˜ ë‚´ìš©ê³¼ 매í¬ë¡œë¥¼ ë³´ì—¬ì¤ë‹ˆë‹¤"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "ìžì„¸í•œ ì¶œë ¥ì„ ì œê³µí•©ë‹ˆë‹¤"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "아주 ìƒì„¸í•œ ì¶œë ¥ì„ ì œê³µí•©ë‹ˆë‹¤"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "현재 사용ë˜ê³  있는 rpm ë²„ì „ì„ í‘œì‹œí•©ë‹ˆë‹¤"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "rpmio ìž…/ì¶œë ¥ì„ ë””ë²„ê·¸ 합니다"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1885,13 +2200,13 @@ msgstr "재배치시ì—는 반드시 '=' ì„ í¬í•¨í•´ì•¼ 합니다"
msgid "relocations must have a / following the ="
msgstr "재배치시ì—는 반드시 '=' ë’¤ì— '/' ê°€ 와야 합니다"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"특정 파ì¼ì„ ìƒëžµí•˜ê¸° 위한 ì„¤ì •ì´ ì ìš©ëœ 경우ì—ë„, 패키지 ì•ˆì˜ ëª¨ë“  파ì¼ì„ 설"
"치합니다"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1899,155 +2214,165 @@ msgstr ""
"<패키지> ì´ë¦„ê³¼ ì¼ì¹˜í•˜ëŠ” 패키지는 ëª¨ë‘ ì œê±°í•©ë‹ˆë‹¤ (<패키지>ì— ì—¬ëŸ¬ê°œì˜ íŒ¨í‚¤ì§€"
"를 ë™ì‹œì— 지정할 경우ì—는 오류가 ë°œìƒí•©ë‹ˆë‹¤)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "패키지를 (제거) 삭제합니다"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<패키지>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "íŒ¨í‚¤ì§€ì— í¬í•¨ëœ 문서 파ì¼ì„ 설치하지 않습니다"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "<경로>ë¡œ 시작ë˜ëŠ” 파ì¼ì€ 설치하지 않습니다 "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<경로>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "--replacepkgs 와 --replacefiles ì˜µì…˜ì„ ë™ì‹œì— 사용합니다"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "ê¸°ì¡´ì— ì„¤ì¹˜ëœ íŒ¨í‚¤ì§€ë¥¼ 업그레ì´ë“œ 합니다"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<패키지파ì¼>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
"패키지 설치를 해시마í¬(#)ë¡œ 표시합니다 (-v 옵션과 함께 사용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆ"
"다)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "íŒ¨í‚¤ì§€ì˜ ì•„í‚¤í…ì³ë¥¼ 검사하지 않습니다"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "íŒ¨í‚¤ì§€ì˜ ìš´ì˜ì²´ì œë¥¼ 검사하지 않습니다"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "패키지를 설치하기 ì „ì— ë””ìŠ¤í¬ ê³µê°„ì„ ê²€ì‚¬í•˜ì§€ 않습니다"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "íŒ¨í‚¤ì§€ì— í¬í•¨ëœ 문서 파ì¼ì„ 설치합니다"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "파ì¼ì‹œìŠ¤í…œì„ 변경하지 ì•Šê³ , ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 갱신합니다"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "íŒ¨í‚¤ì§€ì˜ ì˜ì¡´ì„±ì„ 검사하지 않습니다"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "ì˜ì¡´ì„±ì´ 있는 패키지를 설치하ë„ë¡ ìž¬ìš”êµ¬í•˜ì§€ 않습니다"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "패키지 스í¬ë¦½í‹€ë¦¿(scriptlet)ì„ ì‹¤í–‰í•˜ì§€ 않습니다"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "%%pre 스í¬ë¦½í‹€ë¦¿(scriptlet)ì„ ì‹¤í–‰í•˜ì§€ 않습니다 (ìžˆì„ ê²½ìš°)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "%%post 스í¬ë¦½í‹€ë¦¿(scriptlet)ì„ ì‹¤í–‰í•˜ì§€ 않습니다 (ìžˆì„ ê²½ìš°)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "%%preun 스í¬ë¦½í‹€ë¦¿(scriptlet)ì„ ì‹¤í–‰í•˜ì§€ 않습니다 (ìžˆì„ ê²½ìš°)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "%%postun 스í¬ë¦½í‹€ë¦¿(scriptlet)ì„ ì‹¤í–‰í•˜ì§€ 않습니다 (ìžˆì„ ê²½ìš°)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
"ì´ íŒ¨í‚¤ì§€ì— ì˜í•´ ìƒì„±ë˜ëŠ”(triggered) ì–´ë– í•œ 스í¬ë¦½í‹€ë¦¿(scriptlet)ë„ ì‹¤í–‰í•˜ì§€ "
"않습니다"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "ì–´ë– í•œ %%triggerprein 스í¬ë¦½í‹€ë¦¿(scriptlet)ë„ ì‹¤í–‰í•˜ì§€ 않습니다"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "ì–´ë– í•œ %%triggerin 스í¬ë¦½í‹€ë¦¿(scriptlet)ë„ ì‹¤í–‰í•˜ì§€ 않습니다"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "ì–´ë– í•œ %%triggerun 스í¬ë¦½í‹€ë¦¿(scriptlet)ë„ ì‹¤í–‰í•˜ì§€ 않습니다"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "ì–´ë– í•œ %%triggerpostun 스í¬ë¦½í‹€ë¦¿(scriptlet)ë„ ì‹¤í–‰í•˜ì§€ 않습니다"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2055,369 +2380,408 @@ msgstr ""
"ì´ì „ ë²„ì „ì˜ íŒ¨í‚¤ì§€ë¡œ 다운그레ì´ë“œ 합니다 (--force ì˜µì…˜ì„ ì‚¬ìš©ì‹œì—는 ì´ ì˜µì…˜"
"ì´ ìžë™ìœ¼ë¡œ ì ìš©ë©ë‹ˆë‹¤)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "패키지 설치를 í¼ì„¼íŠ¸(%)ë¡œ 표시합니다"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
"재배치 ê¸°ëŠ¥ì´ ìžˆëŠ” íŒ¨í‚¤ì§€ì˜ ê²½ìš°, 지정한 <디렉토리>ë¡œ 재배치하여 설치합니다"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<디렉토리>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "<ì´ì „경로>ì—ì„œ <새로운경로>ë¡œ 파ì¼ì„ 재배치 합니다"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<ì´ì „경로>=<새로운경로>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "패키지가 ì´ë¯¸ 설치ë˜ì–´ 있는 경우ì—ë„ ì„¤ì¹˜í•©ë‹ˆë‹¤"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "패키지를 설치하지 ì•Šê³ , 제대로 설치ë˜ëŠ”지만 확ì¸í•©ë‹ˆë‹¤"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "패키지를 업그레ì´ë“œ 합니다"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "모든 íŒ¨í‚¤ì§€ì— ëŒ€í•´ 질ì˜/ê²€ì¦í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "파ì¼ì´ 들어있는 íŒ¨í‚¤ì§€ì— ëŒ€í•´ 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "그룹 ì•ˆì˜ íŒ¨í‚¤ì§€ë¥¼ 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "패키지 ì‹ë³„ìž(identifier)를 사용하여 패키지를 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "í—¤ë” ì‹ë³„ìž(identifier)를 사용하여 패키지를 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm ì§ˆì˜ ëª¨ë“œ"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "설치 ë‚´ìš©ì„ í†µí•´ 패키지를 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "패키지로 ì¸í•´ ìƒì„±ë˜ëŠ”(triggered) íŒ¨í‚¤ì§€ì— ëŒ€í•´ 질ì˜í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm ê²€ì¦ ëª¨ë“œ"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "ì˜ì¡´ì„±ì„ 필요로 하는 íŒ¨í‚¤ì§€ì— ëŒ€í•´ 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "ì˜ì¡´ì„±ì„ 제공하는 íŒ¨í‚¤ì§€ì— ëŒ€í•´ 질ì˜/ê²€ì¦ í•©ë‹ˆë‹¤"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "모든 설정 파ì¼ì„ 나열합니다"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "모든 문서 파ì¼ì„ 나열합니다"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "모든 문서 파ì¼ì„ 나열합니다"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "모든 설정 파ì¼ì„ 나열합니다"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "기본 íŒŒì¼ ì •ë³´ë¥¼ ë³´ì—¬ì¤ë‹ˆë‹¤"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "패키지 ì•ˆì˜ íŒŒì¼ì„ 나열합니다"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "%%ghost 파ì¼ì„ ìƒëžµí•©ë‹ˆë‹¤"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "%%ghost 파ì¼ì„ ìƒëžµí•©ë‹ˆë‹¤"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "ë‚˜ì—´ëœ íŒŒì¼ì˜ ìƒíƒœ(state)를 ë³´ì—¬ì¤ë‹ˆë‹¤"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "파ì¼ì˜ ìš©ëŸ‰ì„ ê²€ì‚¬í•˜ì§€ 않습니다"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "파ì¼ì˜ 심볼릭 ë§í¬ 경로를 검사하지 않습니다"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "파ì¼ì˜ 소유ìžë¥¼ 검사하지 않습니다"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "파ì¼ì˜ ê·¸ë£¹ì„ ê²€ì‚¬í•˜ì§€ 않습니다"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "파ì¼ì˜ 최종 변경 ì‹œê°„ì„ ê²€ì‚¬í•˜ì§€ 않습니다"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "파ì¼ì˜ 모드를 검사하지 않습니다"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "패키지 ì•ˆì˜ íŒŒì¼ì„ 검사하지 않습니다"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "íŒ¨í‚¤ì§€ì˜ ì˜ì¡´ì„±ì„ 검사하지 않습니다"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "소스 패키지가 필요하며, ë°”ì´ë„ˆë¦¬ê°€ 검색ë˜ì—ˆìŠµë‹ˆë‹¤\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "소스 íŒ¨í‚¤ì§€ì— .spec 파ì¼ì´ í¬í•¨ë˜ì–´ 있지 않습니다\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "ì•„ì¹´ì´ë¸Œë¥¼ í‘¸ëŠ”ë° ì‹¤íŒ¨í•¨%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " ë‹¤ìŒ íŒŒì¼ì˜ "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%2$s 파ì¼ì˜ %1$s(ì´)ê°€ 실패함: %3$s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s(ì´)ê°€ 실패함: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "올바르지 못한 형ì‹: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "ì •ìƒ(normal) "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "êµì²´ë¨(replaced) "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "설치ë˜ì–´ 있지 ì•ŠìŒ "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "net ê³µìœ ë¨ "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(ìƒíƒœë¥¼ ì•Œ 수 ì—†ìŒ) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(알 수 없는 %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "íŒ¨í‚¤ì§€ì— íŒŒì¼ ì†Œìœ ìž ë˜ëŠ” id 목ë¡ì´ 없습니다\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "%s ê·¸ë£¹ì€ ì–´ë–¤ 패키지ì—ë„ í¬í•¨ë˜ì–´ 있지 않습니다\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "%s(ì„)를 ìƒì„±í•˜ëŠ”(trigger) 패키지가 없습니다\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "%s(ì´)ê°€ 잘못ë¨: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "%s(와)ê³¼ ì¼ì¹˜í•˜ëŠ” 패키지가 ì—†ìŒ: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "%s(ì„)를 필요로 하는 패키지가 없습니다\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "%s(ì„)를 제공하는 패키지가 없습니다\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "%s 파ì¼: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "%s 파ì¼ì€ ì–´ë–¤ 패키지ì—ë„ ë“¤ì–´ìžˆì§€ 않습니다\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "부ì í•©í•œ 패키지 번호: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "%s 패키지가 설치ë˜ì–´ 있지 않습니다\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "올바르지 ì•ŠìŒ"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "확ì¸"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (키를 ì°¾ì„ ìˆ˜ ì—†ìŒ:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (키를 신뢰할 수 ì—†ìŒ:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
@@ -2442,212 +2806,442 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "db경로가 설정ë˜ì–´ 있지 않습니다\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: 0x%xì˜ í—¤ë”를 ì½ì„ 수 없습니다\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "db경로가 설정ë˜ì–´ 있지 않습니다"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "%uì— ì²˜ìŒë¶€í„° 레코드를 추가할 수 없습니다\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìž¬êµ¬ì¶•í•˜ëŠ”ë° ì‹¤íŒ¨í•¨: ì›ë³¸ ë°ì´í„°ë² ì´ìŠ¤ëŠ” 그대로 유지ë©ë‹ˆë‹¤\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "ì´ì „ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 새로운 ë°ì´í„°ë² ì´ìŠ¤ë¡œ êµì²´í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "아니오"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "예"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "ìž˜ëª»ëœ magic 입니다"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "잘못ëœ/ì½ì„ 수 없는 í—¤ë”입니다"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "í—¤ë”ì˜ í¬ê¸°ê°€ 너무 í½ë‹ˆë‹¤"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "ì•Œ 수 없는 íŒŒì¼ ìœ í˜•ìž…ë‹ˆë‹¤"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "내부 오류"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "í—¤ë”ì— ì•„ì¹´ì´ë¸Œ 파ì¼ì´ 없습니다"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " 실패함 - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "%s(ì„)를 ì—¬ëŠ”ë° ì‹¤íŒ¨í•¨: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "준비 중..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s(ì€)는 설치할 수 없습니다\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "%s(ì„)를 복구합니다\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "%s 파ì¼ì„ ì½ëŠ” ë„중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "%s(ì„)를 ì—´ 수 ì—†ìŒ: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "%s(ì„)를 설치합니다\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "ì½ëŠ”ë° ì‹¤íŒ¨í•¨: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2722,798 +3316,633 @@ msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
"%2$s 패키지를 처리하는 과정ì—ì„œ ì•Œ 수 없는 오류 %1$d(ì´)ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "%sì— ë‘번째 ':' ì´ ì—†ìŒ:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "%sì— ì•„í‚¤í…ì³ëª…ì´ ì—†ìŒ:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "%sì˜ ë°ì´í„° 항목(line)ì´ ë¶ˆì¶©ë¶„í•¨:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "%sì˜ ë°ì´í„° 항목(line)ì— ì¸ìˆ˜ê°€ 너무 많ìŒ:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "ìž˜ëª»ëœ ì•„í‚¤í…ì³/ìš´ì˜ì²´ì œ 번호: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "%sì˜ ê¸°ë³¸ 항목(line)ì´ ë¶ˆì¶©ë¶„í•¨:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "%sì˜ ê¸°ë³¸ 항목(line)ì— ì¸ìˆ˜ê°€ 너무 많ìŒ:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "%2$sì— ':' (0x%1$02x ì°¾ìŒ) ì´ ì—†ìŒ:%3$d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "%2$sì— %1$s(ì„)를 위한 ì¸ìˆ˜ê°€ ì—†ìŒ:%3$d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "%2$sì— %1$s(ì„)를 위한 아키í…ì³ê°€ ì—†ìŒ:%3$d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "%2$sì— ìž˜ëª»ëœ '%1$s' 옵션:%3$d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "알 수 없는 시스템: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "%s ì•ˆì˜ íŒ¨í‚¤ì§€ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì—´ 수 없습니다\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr ""
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "서명(signature) í—¤ë”를 다시 ì½ì–´ì˜¬ 수 없습니다.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr ""
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "'%' ë’¤ì— '{' ê°€ 없습니다"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "'%{' ë’¤ì— '}' ê°€ 없습니다"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "태그 형ì‹ì´ 비어있습니다"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "태그 ì´ë¦„ì´ ë¹„ì–´ìžˆìŠµë‹ˆë‹¤"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "알 수 없는 태그 입니다"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "ë°°ì—´ì˜ ëë¶€ë¶„ì— ']' ê°€ 와야합니다"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "불필요한 ']' 가 있습니다"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "불필요한 '}' 가 있습니다"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "표현ì‹ì— '?' ê°€ 와야합니다"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "표현ì‹ì˜ '?' ë’¤ì— '{' ê°€ 와야합니다"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "표현ì‹ì— '}' ê°€ 와야합니다"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "'?' 하부표현ì‹(subexpression) ë’¤ì— ':' ì´ ì™€ì•¼í•©ë‹ˆë‹¤"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "표현ì‹ì˜ ':' ë’¤ì— '{' ê°€ 와야합니다"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "표현ì‹ì˜ ëë¶€ë¶„ì— '|' ê°€ 와야합니다"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "db%2$d(ì„)를 ì´ìš©í•˜ì—¬ %1$s ì¸ë±ìŠ¤ë¥¼ ì—´ 수 없습니다 - %3$s (%4$d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "db경로가 설정ë˜ì–´ 있지 않습니다\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:503
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
+#: plugins/prioreset.c:40
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2349
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(비어있ìŒ)"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:316
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: 0x%xì˜ í—¤ë”를 ì½ì„ 수 없습니다\n"
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(비어있ìŒ)\n"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr ""
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "매í¬ë¡œ %%%sì— ì¢…ë£Œë˜ì§€ ì•Šì€ ì˜µì…˜ì´ ìžˆìŠµë‹ˆë‹¤\n"
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
+msgid "Macro %%%s has unterminated body\n"
+msgstr "매í¬ë¡œ %%%sì— ì¢…ë£Œë˜ì§€ ì•Šì€ ë‚´ìš©(body)ì´ ìžˆìŠµë‹ˆë‹¤\n"
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "새로운 패키지를 배치하는 ë„중 오류(%d)ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
+msgid "Macro %%%s has empty body\n"
+msgstr "매í¬ë¡œ %%%sì— ë¹„ì–´ìžˆëŠ” ë‚´ìš©(body)ì´ ìžˆìŠµë‹ˆë‹¤\n"
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-"%3$s ì¸ë±ìŠ¤ì—ì„œ \"%2$s\" 레코드를 얻는 ë„중 오류(%1$d)ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "%3$s(으)ë¡œ %2$s 레코드를 저장하는 ë„중 오류(%1$d)ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "db경로가 설정ë˜ì–´ 있지 않습니다"
+msgid "Macro %%%s failed to expand\n"
+msgstr "매í¬ë¡œ %%%s(ì„)를 확장(expand)í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:607
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr ""
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "매í¬ë¡œ %%%sì— ë¶€ì í•©í•œ ì´ë¦„ì´ ìžˆìŠµë‹ˆë‹¤ (%%undefine)\n"
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:637
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "%uì— ì²˜ìŒë¶€í„° 레코드를 추가할 수 없습니다\n"
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "%2$s(%3$s)ì— ì•Œ 수 없는 옵션 %1$c(ì´)ê°€ 있습니다\n"
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-"ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìž¬êµ¬ì¶•í•˜ëŠ”ë° ì‹¤íŒ¨í•¨: ì›ë³¸ ë°ì´í„°ë² ì´ìŠ¤ëŠ” 그대로 유지ë©ë‹ˆë‹¤\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "ì´ì „ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 새로운 ë°ì´í„°ë² ì´ìŠ¤ë¡œ êµì²´í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "복구하기 위해 %2$sì˜ íŒŒì¼ì„ %1$sì˜ íŒŒì¼ë¡œ êµì²´í•©ë‹ˆë‹¤"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "%s 디렉토리를 ì‚­ì œí•˜ëŠ”ë° ì‹¤íŒ¨í•¨: %s\n"
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "%3$sì˜ db%1$d 오류(%2$d): %4$s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d 오류(%d): %s\n"
+msgid "Unterminated %c: %s\n"
+msgstr "%c(ì´)ê°€ 종료ë˜ì§€ ì•ŠìŒ: %s\n"
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "%2$s/%3$sì˜ ìž ê¸ˆëœ(lock) %1$s(ì„)를 ì–»ì„ ìˆ˜ 없습니다\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "공유ë¨"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "í쇄ì (exclusive)"
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "'%%' 다ìŒì— 처리할 수 없는(unparseable) 매í¬ë¡œê°€ 있습니다\n"
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "ì¸ì¦ë˜ì§€ ì•Šì€ db 옵션: \"%s\"(ì„)를 무시합니다.\n"
+msgid "======================== active %d empty %d\n"
+msgstr "======================== %d 활성 %d 비어있ìŒ\n"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s(ì€)는 부ì í•©í•œ 수치 값입니다, ìƒëžµí•©ë‹ˆë‹¤\n"
+msgid "error creating temporary file %s: %m\n"
+msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s(ì€)는 너무 í¬ê±°ë‚˜ 너무 ì ì€ 정수(long) 값입니다, ìƒëžµí•©ë‹ˆë‹¤\n"
+msgid "File %s: %s\n"
+msgstr "%s 파ì¼: %s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s(ì€)는 너무 í¬ê±°ë‚˜ 너무 ì ì€ 정수(int) 값입니다, ìƒëžµí•©ë‹ˆë‹¤\n"
+msgid "File %s is smaller than %u bytes\n"
+msgstr "%s 파ì¼ì´ %u ë°”ì´íŠ¸ 보다 ì ìŠµë‹ˆë‹¤\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(오류 ì—†ìŒ)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "ì¹˜ëª…ì  ì˜¤ë¥˜: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "오류: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "경고: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "메모리 할당 ê°’ (%u ë°”ì´íŠ¸)ì´ NULLì„ ë°˜í™˜í•˜ì˜€ìŠµë‹ˆë‹¤.\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== %d 활성 %d 비어있ìŒ\n"
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(비어있ìŒ)"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(비어있ìŒ)\n"
+msgid "error delete fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "매í¬ë¡œ %%%sì— ì¢…ë£Œë˜ì§€ ì•Šì€ ë‚´ìš©(body)ì´ ìžˆìŠµë‹ˆë‹¤\n"
+msgid "error delete directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "매í¬ë¡œ %%%sì— ë¶€ì í•©í•œ ì´ë¦„ì´ ìžˆìŠµë‹ˆë‹¤ (%%define)\n"
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: Fwriteì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "매í¬ë¡œ %%%sì— ì¢…ë£Œë˜ì§€ ì•Šì€ ì˜µì…˜ì´ ìžˆìŠµë‹ˆë‹¤\n"
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Freadì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr "매í¬ë¡œ %%%sì— ë¹„ì–´ìžˆëŠ” ë‚´ìš©(body)ì´ ìžˆìŠµë‹ˆë‹¤\n"
+msgid "%s: Fflush failed: %s\n"
+msgstr ""
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr "매í¬ë¡œ %%%s(ì„)를 확장(expand)í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "매í¬ë¡œ %%%sì— ë¶€ì í•©í•œ ì´ë¦„ì´ ìžˆìŠµë‹ˆë‹¤ (%%undefine)\n"
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "매í¬ë¡œ %%%s (%s)는 레벨 %d ì´í•˜ì—서는 사용할 수 없습니다\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "%2$s(%3$s)ì— ì•Œ 수 없는 옵션 %1$c(ì´)ê°€ 있습니다\n"
+msgid "Could not exec %s: %s\n"
+msgstr "%s(ì„)를 실행할 수 ì—†ìŒ: %s\n"
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr "%c(ì´)ê°€ 종료ë˜ì§€ ì•ŠìŒ: %s\n"
-
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr "'%%' 다ìŒì— 처리할 수 없는(unparseable) 매í¬ë¡œê°€ 있습니다\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:302
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s: %s\n"
-msgstr "%s 파ì¼: %s\n"
+msgid "gpg exec failed (%d)\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "%s 파ì¼ì´ %u ë°”ì´íŠ¸ 보다 ì ìŠµë‹ˆë‹¤\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "gpg ì„œëª…ì„ ìž‘ì„±í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "ì„œëª…ì„ ì½ì„ 수 없습니다\n"
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(오류 ì—†ìŒ)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "ì¹˜ëª…ì  ì˜¤ë¥˜: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "오류: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "경고: "
-
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:622
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "메모리 할당 ê°’ (%u ë°”ì´íŠ¸)ì´ NULLì„ ë°˜í™˜í•˜ì˜€ìŠµë‹ˆë‹¤.\n"
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: Fwriteì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: rpmWriteSignatureì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLeadì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr "gpg ì„œëª…ì„ ìž‘ì„±í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "ì„œëª…ì„ ì½ì„ 수 없습니다\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLeadì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: rpmWriteSignatureì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: ì½ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/ms.po b/po/ms.po
index 37968479d..7863cc813 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Malay (http://www.transifex.com/rpm-team/rpm/language/ms/)\n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,487 +43,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr ""
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr ""
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr ""
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:125
-msgid "unexpected query flags"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
msgstr ""
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
msgstr ""
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
msgstr ""
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:216
+msgid "remove build tree when done"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:220
+msgid "debug file state machine"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
msgstr ""
-#: rpmqv.c:256
-msgid "no packages given for erase"
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmqv.c:314
-msgid "no arguments given for verify"
+#: rpmbuild.c:234
+#, c-format
+msgid "do not execute %check stage of the build"
+msgstr ""
+
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
+msgstr ""
+
+#: rpmbuild.c:239
+msgid "remove sources when done"
+msgstr ""
+
+#: rpmbuild.c:241
+msgid "remove specfile when done"
+msgstr ""
+
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
+msgstr ""
+
+#: rpmbuild.c:245
+msgid "override target platform"
+msgstr ""
+
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:99
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr ""
+
+#: rpmbuild.c:300
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:120
+#: rpmbuild.c:363
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:401
+#, c-format
+msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:479
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:556
+#, c-format
+msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:564
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgid "Building for target %s\n"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
msgstr ""
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
+#: rpmdb.c:21
+msgid "initialize database"
+msgstr "memulakan pengkalan data"
+
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
+#: rpmdb.c:26
+msgid "verify database files"
+msgstr "sahkan fail pengkalan data"
+
+#: rpmdb.c:28
+msgid "export database to stdout header list"
msgstr ""
-#: rpmbuild.c:151
-#, c-format
-msgid "verify %files section from <tarball>"
+#: rpmdb.c:31
+msgid "import database from stdin header list"
msgstr ""
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
+#: rpmdb.c:38
+msgid "Database options:"
msgstr ""
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
msgstr ""
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
msgstr ""
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
+#: rpmkeys.c:22
+msgid "import an armored public key"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmkeys.c:36
+msgid "Keyring options:"
msgstr ""
-#: rpmbuild.c:173
-msgid "remove build tree when done"
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
msgstr ""
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
msgstr ""
-#: rpmbuild.c:177
-msgid "debug file state machine"
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
msgstr ""
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
msgstr ""
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
msgstr ""
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
msgstr ""
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
+#: rpmqv.c:126
+msgid "unexpected query flags"
msgstr ""
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
+#: rpmqv.c:129
+msgid "unexpected query format"
msgstr ""
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
+#: rpmqv.c:132
+msgid "unexpected query source"
msgstr ""
-#: rpmbuild.c:194
-msgid "remove sources when done"
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
msgstr ""
-#: rpmbuild.c:196
-msgid "remove specfile when done"
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
msgstr ""
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
msgstr ""
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
msgstr ""
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
msgstr ""
-#: rpmdb.c:22
-msgid "initialize database"
-msgstr "memulakan pengkalan data"
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
msgstr ""
-#: rpmdb.c:27
-msgid "verify database files"
-msgstr "sahkan fail pengkalan data"
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
-#: rpmdb.c:33
-msgid "Database options:"
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:26
-msgid "import an armored public key"
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
msgstr ""
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
+#: rpmqv.c:258
+msgid "no packages given for erase"
msgstr ""
-#: rpmkeys.c:40
-msgid "Keyring options:"
+#: rpmqv.c:292
+msgid "no packages given for install"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr ""
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
msgstr ""
-#: rpmsign.c:25
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Tidak dapat melaksana %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:49
+msgid "Signature options:"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -532,473 +594,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr ""
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2039 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
+msgid "Bad file: %s: %s\n"
msgstr ""
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "gagal untuk mencipta direktori %s: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1006,341 +1141,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1411,450 +1615,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "terkongsi"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr ""
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
+
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:149
+#: lib/header.c:1797
#, c-format
-msgid "skipping %s with unverifiable signature\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1805
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1841
+#, c-format
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1876
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1885
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1890
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1900
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1909
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
+
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1949
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:436
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "format tag kosong"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "nama tag kosong"
+
+#: lib/headerfmt.c:413
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] dijangka dipenghujung tatasusunan"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:455
+msgid "unexpected }"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
-#, c-format
-msgid "%s: No signature available\n"
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? dijangka dalam ungkapan"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "| dijangka dalam ungkapan"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "| dijangka selepas ungkapan ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| dijangka pada penghujung ungkapan"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1875,527 +2190,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr ""
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr ""
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
-msgstr "OK"
-
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "OK"
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2420,212 +2784,441 @@ msgstr "Tidak dapat untuk menukar direktori root: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec gagal: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp gagal: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "gagal untuk mencipta direktori %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr ""
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2699,796 +3292,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Sistem tidak diketahui: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Sila hubungi %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Tidak dapat membuka %s untuk dibaca: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "'(' tambahan dalam label pakej: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "magik sigh: BURUK\n"
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "muatan sigh: BURUK\n"
-
-#: lib/signature.c:219
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr ""
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Digest SHA1 pengepala:"
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "Pengepala"
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:261
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "skipped"
+msgid "%s%s %s"
msgstr ""
-#: lib/transaction.c:1426
-msgid "failed"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/verify.c:372
+#: lib/rpmvs.c:268
#, c-format
-msgid "missing %c %s"
+msgid "%s%s"
msgstr ""
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Kebergantungan tidak dipenuhi untuk %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "hilang { selepas %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "hilang } selepas %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "format tag kosong"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "nama tag kosong"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "tag tidak diketahui"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] dijangka dipenghujung tatasusunan"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/headerfmt.c:435
-msgid "unexpected }"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? dijangka dalam ungkapan"
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Pengepala"
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "| dijangka dalam ungkapan"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "| dijangka selepas ungkapan ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| dijangka pada penghujung ungkapan"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/verify.c:263
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:516
+#: lib/verify.c:284
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:1318
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:503
#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec gagal: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp gagal: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Kebergantungan tidak dipenuhi untuk %s:\n"
-#: lib/rpmdb.c:1897
+#: plugins/prioreset.c:29
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2250
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2358
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(kosong)"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(kosong)\n"
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) storing record %s into %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr ""
-
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:566
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "gagal untuk mencipta direktori %s: %s\n"
+msgid "Macro %%%s failed to expand\n"
+msgstr "Makro %%%s gagal untuk mengembang\n"
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:607
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:637
#, c-format
-msgid "cannot add record originally at %u\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
+#: rpmio/macro.c:761
+#, c-format
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "Pilihan tidak diketahui %c dalam %s(%s)\n"
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "gagal untuk membuang direktori %s: %s\n"
-
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:1182
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "ralat db%d (%d) dari %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "ralat db%d (%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "terkongsi"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktif %d kosong %d\n"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "File %s: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(tiada ralat)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "ralat maut:"
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "ralat"
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
msgstr ""
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
+msgid "lua script failed: %s\n"
+msgstr "skrip lua gagal: %s\n"
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
+msgid "lua hook failed: %s\n"
+msgstr "pautan lua gagal: %s\n"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktif %d kosong %d\n"
-
-#: rpmio/macro.c:323
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(kosong)"
-
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(kosong)\n"
-
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr "Makro %%%s gagal untuk mengembang\n"
-
-#: rpmio/macro.c:649
-#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "Pilihan tidak diketahui %c dalam %s(%s)\n"
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:208
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:221
#, c-format
-msgid "File %s: %s\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:270
#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr ""
+msgid "Could not exec %s: %s\n"
+msgstr "Tidak dapat melaksana %s: %s\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: sign/rpmgensig.c:302
#, c-format
-msgid "invalid syntax in lua script: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: sign/rpmgensig.c:312
#, c-format
-msgid "lua script failed: %s\n"
-msgstr "skrip lua gagal: %s\n"
+msgid "gpg exec failed (%d)\n"
+msgstr "Pelaksanaan gpg gagal (%d)\n"
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
-msgstr "pautan lua gagal: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(tiada ralat)"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "ralat maut:"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "ralat"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
+msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr "Pelaksanaan gpg gagal (%d)\n"
-
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: gagal membaca manifest: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/nb.po b/po/nb.po
index e90047287..182fd2cbf 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -7,10 +7,11 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Norwegian Bokmål (http://www.transifex.com/rpm-team/rpm/"
+"language/nb/)\n"
"Language: nb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,494 +44,556 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "kjøring feilet\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "argumentet er ikke en RPM-pakke\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "feil under lesing av header fra pakke\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "kan ikke gjenåpne \"payload\": %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "Feil under lesing av spec fil fra %s\n"
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
+"bygg gjennom %prep (pakk ut kildekoden og legg til patcher) fra <specfil>"
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<specfil>"
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "én type spørring/verifisering kan utføres om gangen"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "uventede flagg for spørring"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "ventet spørringsformat"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "uventet spørringskilde"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "kun ett større modi kan spesifiseres"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "filer kan kun omplasseres under pakkeinstallasjon"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
+msgstr "bygg kilde- og binærpakker fra <specfil>"
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
+msgstr "spør pakke som eier <fil>"
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-"--relocate og --excludepath kan kun brukes ved installasjon av nye pakker"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix kan kun brukes ved installasjon av nye pakker"
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "argumenter til --prefix må begynne med en /"
-
-#: rpmqv.c:170
+#: rpmbuild.c:161
+#, c-format
msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr ""
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"skript som slår av alternativer kan kun spesifiseres under pakkeinstallasjon "
-"og sletting"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<kildepakke>"
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-"alternativer som slår av utløsing kan kun spesifiseres under "
-"pakkeinstallasjon, og sletting"
-#: rpmqv.c:230
+#: rpmbuild.c:167 rpmbuild.c:208
msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr ""
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "ingen pakker oppgitt for installering"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "ingen argumenter oppgitt for spørring"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "ingen argumenter oppgitt for verifisering"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:170
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr "Feil under lesing av spec fil fra %s\n"
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-"bygg gjennom %prep (pakk ut kildekoden og legg til patcher) fra <specfil>"
-
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr "<specfil>"
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmbuild.c:129
-#, c-format
-msgid "verify %files section from <specfile>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
-msgstr "bygg kilde- og binærpakker fra <specfil>"
-
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
-msgstr "spør pakke som eier <fil>"
-
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"bygg gjennom %prep (pakk ut kildekoden og legg til patcher) fra <tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verifiser %files seksjon fra <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "bygg kilde- og binærpakker fra <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr ""
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "bygg binær-pakke fra <kildepakke>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<kildepakke>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmbuild.c:173
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "fjern byggtreet når ferdig"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr ""
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "fjern kildekoden når ferdig"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr ""
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "hopp rett til spesifisert steg (kun for c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr ""
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Kunne ikke åpne spec fil %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Kunne ikke åpne tar-rør: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Feil under lesing av spec-fil fra %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Feil under endring av navn fra %s til %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "kunne ikke kjøre stat på %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Fil %s er ikke en vanlig fil.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Fil %s ser ikke ut til å være en spec-fil.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Bygger målplattformene: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Bygger for mål %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr ""
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "initier database"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "gjenoppbygg database inverterte lister fra installerte pakkers headere"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr ""
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr ""
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "kun ett større modi kan spesifiseres"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr ""
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr ""
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr ""
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "én type spørring/verifisering kan utføres om gangen"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "uventede flagg for spørring"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "ventet spørringsformat"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "uventet spørringskilde"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "filer kan kun omplasseres under pakkeinstallasjon"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate og --excludepath kan kun brukes ved installasjon av nye pakker"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix kan kun brukes ved installasjon av nye pakker"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argumenter til --prefix må begynne med en /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr ""
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"skript som slår av alternativer kan kun spesifiseres under pakkeinstallasjon "
+"og sletting"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"alternativer som slår av utløsing kan kun spesifiseres under "
+"pakkeinstallasjon, og sletting"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "ingen pakker oppgitt for installering"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "ingen argumenter oppgitt for spørring"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "ingen argumenter oppgitt for verifisering"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Skriv inn passord: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr ""
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Passord er ok.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
+msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
msgstr ""
-#: rpmspec.c:26
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
+
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -539,32 +602,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Kjører(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Kjøring av %s feilet (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Ugyldig sluttstatus fra %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -574,783 +642,920 @@ msgstr ""
"\n"
"RPM-feil under bygging:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "syntaksfeil under lesing av ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "syntaksfeil under lesing av &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "syntaksfeil under lesing av ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "feil under lesing av uttrykk\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "ubalansert (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- kun på tall\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! kun på tall\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "typene må være like\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / ikke støttet for strenger\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- ikke støttet for strenger\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& og || ikke støttet for strenger\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "syntaksfeil i uttrykk\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Mangler '(' i %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Mangler ')' i %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Ugyldig %s-tegn: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Filen må begynne med \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Fil listet to ganger: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolsk lenke peker til BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Fil ikke funnet: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "Installerer %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Ugyldig fil %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Ugyldig eier/gruppe: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Kunne ikke skrive \"payload\" til %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Kunne ikke lese \"payload\" fra %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Kunne ikke åpne spec fil %s: %s\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Feil under lesing av spec-fil fra %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Ugyldige CSA-data\n"
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Kunne ikke åpne %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Kunne ikke skrive pakke: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Kunne ikke åpne sigmål %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Kunne ikke åpne spec fil %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Kunne ikke skrive header til %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Skrev: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "linje %d: Ugyldig flagg %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr ""
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "linje %d: Feil under lesing av %%filer: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "linje %d: Ugyldig nummer: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "linje %d: Ugyldig %s-nummer: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "%s-felt må være tilstede i pakken: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Kunne ikke åpne ikon %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Kan ikke lese ikon %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Ukjent ikontype: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "linje %d: Tagg tar kun et enkelt tegn: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "linje %d: Feilutformet tagg: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "linje %d: Tom tagg: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "linje %d: Prefiks må ikke slutte på \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "linje %d: Docdir må begynne med '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "linje %d: Ugyldig %s: kvalifikatorer: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "linje %d: Ugyldig BuildArchitecture format: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Intern feil: Ugyldig tag %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Ugyldig pakkespesifikasjon: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Pakke eksisterer allerede: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "linje %d: Ukjent tagg: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "kunne ikke opprette %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Feil under lesing av %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "linje %d: Ugyldig argument til %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "linje %d: Ugyldig %%setup flagg %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "linje %d: %%prep for andre gang\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "linje %d: triggere må ha --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "linje %d: Feil under lesing av %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "linje %d: skriptprogram må begynne med '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "linje %d: Andre %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "linje %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Kan ikke åpne %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%else uten %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endif uten %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Ingen kompatible arkitekturer funnet for bygging\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Pakken har ingen %%description: %s\n"
@@ -1421,450 +1626,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Kunne ikke kjøre %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "klarte ikke å åpne %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Klarte ikke å finne %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(feil 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Ugyldig magi"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Ugyldig/ulesbar header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "For stor header"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Ukjent filtype"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Mangler hard(e) lenke(er)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Intern feil"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " feilet - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s lagret som %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s opprettet som %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ingen signatur tilgjengelig\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr ""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr ""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr ""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread feilet: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "vis kjente tagger for spørring"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "vis endelig rpmrc og makrokonfigurasjon"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "gi mindre detaljert info"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "gi mer detaljert info"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "skriv ut hvilken versjon av rpm som brukes"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "feilsøk rpmio I/U"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1885,11 +2201,11 @@ msgstr "relokasjoner må inneholde et ="
msgid "relocations must have a / following the ="
msgstr "relokasjoner må ha et / etter ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr "installer alle filer, selv konfigurasjoner som ellers kan hoppes over"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1897,151 +2213,161 @@ msgstr ""
"fjern alle pakker som er lik <pakke> (normalt vil en feil genereres hvis "
"<pakke> spesifiserer flere pakker)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "slett (avinstaller) pakke"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pakke>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "ikke installer dokumentasjon"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "hopp over filer med innledende komponent <sti> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<sti>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "forkortning for --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "oppgrader pakke(r) hvis allerede installert"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<pakkefil>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "skriv ut skigarder etter som pakken installeres (nyttig med -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "ikke verifiser pakkearkitektur"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "ikke verifiser operativsystem for pakken"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "ikke sjekk diskplass før installasjon"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "installer dokumentasjon"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "oppdater databasen, men ikke modifiser filsystemet"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "ikke verifiser pakkeavhengigheter"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "ikke ordne pakkeinstallasjon for å tilfredsstille avhengigheter"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "ikke kjør pakkespesifikke skriptlet"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "ikke kjør noen %%pre skriptlet (hvis noen)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "ikke kjør %%post skriptlet (hvis noen)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "ikke kjør %%preun skriptlet (hvis noen)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "ikke kjør %%postun skriptlet (hvis noen)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "Ikke kjør noen skriptlets som utløses av denne pakken"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "ikke kjør %%triggerprein skriptlets"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "ikke kjør %%triggerin skriptlets"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "ikke kjør %%triggerun skriplets"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "ikke kjør %%triggerpostun skriptlets"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2049,367 +2375,406 @@ msgstr ""
"oppgrader til en gammel versjon av pakken (--force ved oppgraderinger gjør "
"dette automatisk)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "skriv ut prosentvis fremgang etter som pakken installeres"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "omplasser pakken til <kat>, hvis den er omplasserbar"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<kat>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "omplasser filer fra sti <gml> til <ny>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<gml>=<ny>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "reinstaller selv om pakken allerede er installert"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "ikke installer, men si ifra om det ville virke eller ikke"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "oppgrader pakke(r)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "spør/verifiser alle pakker"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "spør/verifiser pakke(r) som eier fil"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "spør/verifiser pakke(r) i gruppe"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm spørremodus"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "spør pakker utløst av <pakke>"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "spør etter etter pakker som trenger <funk> funksjonalitet"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "spør etter pakker som tilbyr <funk> funksjonalitet"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "ikke verifiser størrelse på filer"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "ikke verifiser sti til symbolske lenker for filer"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "ikke verifiser eier av filer"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "ikke verifiser gruppe for filer"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "ikke verifisert endringsdato for filer"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "ikke verifiser modus for filer"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "ikke verifiser filer i pakke"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "ikke verifiser pakkeavhengigheter"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "kildepakke forventet, binær funnet\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "kildepakke inneholder ikke en .spec-fil\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "ukorrekt format: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "erstattet "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "ikke installert"
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "delt via nett "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(ingen tilstand)"
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(ukjent %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "pakken har verken fileier eller id-lister\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "gruppe %s inneholder ingen pakker\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "ingen pakke utløser %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "ingen pakke krever %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "ingen pakke gir %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "fil %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "filen %s eies ikke av noen pakke\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "ugyldig pakkenummer: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "pakke %s er ikke installert\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
-msgstr "IKKE OK"
-
-#: lib/rpmchecksig.c:386
-msgid "OK"
-msgstr "OK"
-
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ""
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "IKKE OK"
+
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "OK"
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: åpne feilet: %s\n"
@@ -2434,212 +2799,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NEI"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "JA"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Ugyldig magi"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Ugyldig/ulesbar header"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "For stor header"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Ukjent filtype"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Intern feil"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " feilet - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "feil under åpning av %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Forbereder..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Henter %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "feil under lesing fra fil %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "kan ikke åpne %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Installerer %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "lesing feilet: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2713,796 +3307,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "mangler andre ':' ved %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "manglende navn på arkitektur ved %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Ukomplett datalinje ved %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "For mange argumenter i datalinje ved %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Ukomplett standardlinje ved %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "mangler ':' (fant 0x%02X) ved %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "manglende argumentfor %s ved %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "manglende arkitektur for %s ved %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "ugyldig flagg '%s' ved %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "kan ikke åpne pakkedatabase i %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr ""
-
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:268
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s%s"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/transaction.c:1426
-msgid "failed"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr ""
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "mangler { etter %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "mangler } etter %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:97
+#: lib/verify.c:263
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/verify.c:284
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "kan ikke åpne %s-indeks ved bruk av db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr ""
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:1596
+#: lib/verify.c:448
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:1897
+#: lib/verify.c:503
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2250
+#: plugins/prioreset.c:29
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2349
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "feil(%d) under lagring av post %s til %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:562
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:566
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:607
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:637
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:761
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
+msgid "File %s: %s\n"
+msgstr "Fil %s: %s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
+msgid "File %s is smaller than %u bytes\n"
+msgstr "Fil %s er mindre enn %u bytes\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "fatal feil: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "feil: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "advarsel: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr ""
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: Fwrite feilet: %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr ""
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread feilet: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/macro.c:1175
+#: sign/rpmgensig.c:302
#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:312
#, c-format
-msgid "error creating temporary file %s: %m\n"
-msgstr ""
-
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
-#, c-format
-msgid "File %s: %s\n"
-msgstr "Fil %s: %s\n"
-
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "Fil %s er mindre enn %u bytes\n"
-
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "fatal feil: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "feil: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "advarsel: "
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: Fwrite feilet: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: rpmWriteSignature feilet: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead feilet: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead feilet: %s\n"
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: rpmWriteSignature feilet: %s\n"
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: lesing av manifest feilet: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/nl.po b/po/nl.po
index 338646aa2..cce2bf99f 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Dutch (http://www.transifex.com/rpm-team/rpm/language/nl/)\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,487 +43,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr ""
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr ""
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr ""
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:125
-msgid "unexpected query flags"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
+msgstr "<tarball>"
+
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
msgstr ""
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
msgstr ""
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
+#: rpmbuild.c:216
+msgid "remove build tree when done"
msgstr ""
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:220
+msgid "debug file state machine"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmqv.c:256
-msgid "no packages given for erase"
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
+#: rpmbuild.c:234
+#, c-format
+msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmqv.c:314
-msgid "no arguments given for verify"
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
+msgstr ""
+
+#: rpmbuild.c:239
+msgid "remove sources when done"
+msgstr ""
+
+#: rpmbuild.c:241
+msgid "remove specfile when done"
+msgstr ""
+
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
+msgstr ""
+
+#: rpmbuild.c:245
+msgid "override target platform"
+msgstr ""
+
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:99
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr ""
+
+#: rpmbuild.c:300
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:120
+#: rpmbuild.c:363
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:401
+#, c-format
+msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:479
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:556
+#, c-format
+msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:564
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgid "Building for target %s\n"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
-msgstr "<tarball>"
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr ""
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
+#: rpmdb.c:21
+msgid "initialize database"
msgstr ""
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmbuild.c:151
-#, c-format
-msgid "verify %files section from <tarball>"
+#: rpmdb.c:26
+msgid "verify database files"
msgstr ""
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
+#: rpmdb.c:28
+msgid "export database to stdout header list"
msgstr ""
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
+#: rpmdb.c:31
+msgid "import database from stdin header list"
msgstr ""
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
+#: rpmdb.c:38
+msgid "Database options:"
+msgstr "Database opties:"
+
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
msgstr ""
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
+#: rpmkeys.c:22
+msgid "import an armored public key"
msgstr ""
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
msgstr ""
-#: rpmbuild.c:173
-msgid "remove build tree when done"
+#: rpmkeys.c:36
+msgid "Keyring options:"
msgstr ""
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
msgstr ""
-#: rpmbuild.c:177
-msgid "debug file state machine"
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
msgstr ""
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
msgstr ""
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
msgstr ""
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
msgstr ""
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
msgstr ""
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
+#: rpmqv.c:126
+msgid "unexpected query flags"
msgstr ""
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
+#: rpmqv.c:129
+msgid "unexpected query format"
msgstr ""
-#: rpmbuild.c:194
-msgid "remove sources when done"
+#: rpmqv.c:132
+msgid "unexpected query source"
msgstr ""
-#: rpmbuild.c:196
-msgid "remove specfile when done"
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
msgstr ""
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
msgstr ""
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
msgstr ""
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
msgstr ""
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
msgstr ""
-#: rpmdb.c:22
-msgid "initialize database"
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
msgstr ""
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
msgstr ""
-#: rpmdb.c:27
-msgid "verify database files"
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
msgstr ""
-#: rpmdb.c:33
-msgid "Database options:"
-msgstr "Database opties:"
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:26
-msgid "import an armored public key"
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:40
-msgid "Keyring options:"
+#: rpmqv.c:258
+msgid "no packages given for erase"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr ""
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr ""
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
msgstr ""
-#: rpmsign.c:25
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr ""
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -532,473 +594,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Ontbrekende '(' in %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Ontbrekende ')' in %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Ontbrekende %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "regel: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2039 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
+msgid "Bad file: %s: %s\n"
msgstr ""
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: regel: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:434
#, c-format
-msgid "Could not open %s: %s\n"
+msgid "Failed to read %jd bytes in file %s: %s\n"
msgstr ""
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:468
+#: build/pack.c:453
#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:479
+#: build/pack.c:520
#, c-format
-msgid "Unable to read header from %s: %s\n"
+msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:489
+#: build/pack.c:527
#, c-format
-msgid "Unable to write header to %s: %s\n"
+msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1006,341 +1141,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "regel %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1411,450 +1615,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(fout 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Onbekend bestandstype"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Ontbrekende hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Interne fout"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " mislukt - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(geen getal)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr ""
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(geen OpenPGP handtekening)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr ""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "onverwachte ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "onverwachte }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? verwacht in expressie"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ verwacht na ? in expressie"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} verwacht in expressie"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ verwacht na : in expressie"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<BESTAND:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1875,527 +2190,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pakket>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<pad>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<pakketbestand>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(bevat geen bestanden)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normaal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "niet geïnstalleerd "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(onbekende %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "bestand %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NIET OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (ONTBREKENDE SLEUTELS:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr ""
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2420,212 +2784,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NEE "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "JA"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Onbekend bestandstype"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Interne fout"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " mislukt - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "geen rpm pakket"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "lezen mislukt: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "verschillend"
@@ -2699,796 +3292,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "ontbrekende architectuurnaam op %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "ontbrekende ':' (gevonden 0x%02x) op %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "ontbrekend argument voor %s op %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "ontbrekende architectuur voor %s op %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Onbekend systeem: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "ontbrekende '(' in pakketlabel: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "ontbrekende ')' in pakketlabel: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr ""
-
-#: lib/signature.c:219
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr ""
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:530
+#: lib/rpmvs.c:261
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
+#: lib/rpmvs.c:268
#, c-format
-msgid "missing %c %s"
-msgstr "ontbrekende %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+msgid "%s%s"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "ontbrekende { na %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "ontbrekende } na %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/headerfmt.c:386
-msgid "empty tag name"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "onverwachte ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "onverwachte }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? verwacht in expressie"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ verwacht na ? in expressie"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} verwacht in expressie"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ verwacht na : in expressie"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/verify.c:263
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:516
+#: lib/verify.c:284
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:1318
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "ontbrekende %c %s"
-#: lib/rpmdb.c:1415
+#: lib/verify.c:503
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1897
+#: plugins/prioreset.c:40
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2349
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(leeg)"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:316
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(leeg)\n"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:607
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:637
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr ""
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "Onbekende optie %c in %s(%s)\n"
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d fout(%d) van %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d fout(%d): %s\n"
-
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
+msgid "======================== active %d empty %d\n"
+msgstr "======================== actief %d leeg %d\n"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "File %s: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(geen fout)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "fatale fout: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "fout: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "waarschuwing: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== actief %d leeg %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(leeg)"
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(leeg)\n"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:649
-#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "Onbekende optie %c in %s(%s)\n"
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
-#, c-format
-msgid "error creating temporary file %s: %m\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:302
#, c-format
-msgid "File %s: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr ""
+msgid "gpg exec failed (%d)\n"
+msgstr "gpg uitvoeren mislukt (%d)\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(geen fout)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "fatale fout: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "fout: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "waarschuwing: "
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr "gpg uitvoeren mislukt (%d)\n"
-
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr ""
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/pl.po b/po/pl.po
index d41816b2a..c1067e4fa 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -3,20 +3,19 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Arkadiusz Miskiewicz <arekm@pld-linux.org>, 2003.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2002.
-# Paweł Dziekoński <pdziekonski@mml.ch.pwr.wroc.pl>, 1999.
-# Piotr DrÄ…g <piotrdrag@gmail.com>, 2007,2011-2012.
-# Wojciech Drapiński <wojciech.drapinski@zie.pg.gda.pl>, 1999.
+# Arkadiusz Miskiewicz <arekm@pld-linux.org>, 2003
+# Jakub Bogusz <qboosh@pld-linux.org>, 2002
+# Paweł Dziekoński <pdziekonski@mml.ch.pwr.wroc.pl>, 1999
+# Piotr DrÄ…g <piotrdrag@gmail.com>, 2007,2011-2012,2014-2017
+# Wojciech Drapiński <wojciech.drapinski@zie.pg.gda.pl>, 1999
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 19:51+0000\n"
-"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/rpm/language/"
-"pl/)\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Polish (http://www.transifex.com/rpm-team/rpm/language/pl/)\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -32,12 +31,12 @@ msgstr "%s: %s\n"
#: cliutils.c:27 lib/poptALL.c:56
#, c-format
msgid "RPM version %s\n"
-msgstr "RPM wersja %s\n"
+msgstr "RPM %s\n"
#: cliutils.c:32
#, c-format
msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
-msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
+msgstr "Copyright © 1998-2002 Red Hat, Inc.\n"
#: cliutils.c:33
#, c-format
@@ -52,505 +51,569 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "utworzenie potoku dla --pipe się nie powiodło: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "wykonanie się nie powiodło\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "parametr nie jest pakietem RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
-msgstr "błąd podczas odczytywania nagłówka z pakietu\n"
+msgstr "błąd podczas odczytywania nagłówka z pakietu\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "nie można ponownie otworzyć danych: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Odpytanie/sprawdzenie opcji wyboru pakietów:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opcje zapytania (z -q lub --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opcje sprawdzania (z -V lub --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opcje instalacji/aktualizacji/usuwania:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Wspólne opcje dla wszystkich trybów i plików binarnych RPM:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "tylko jeden typ odpytywania/sprawdzania można wykonać na raz"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "nieoczekiwane flagi zapytania"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "nieoczekiwany format zapytania"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "nieoczekiwane źródło zapytania"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "może być podany tylko jeden główny tryb pracy"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "tylko instalację i aktualizowanie można wymusić"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "pliki mogą być przenoszone tylko podczas instalacji pakietu"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "nie można użyć --prefix z --relocate lub --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate i --excludepath można użyć tylko podczas instalowania nowych "
-"pakietów"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix można użyć tylko podczas instalowania nowych pakietów"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "parametry dla --prefix muszą zaczynać się od /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr "--hash (-h) można podać tylko podczas instalacji i usuwaniu pakietów"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr "--percent można podać tylko podczas instalacji i usuwaniu pakietów"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "nie można jednocześnie podać --excludedocs i --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches można podać tylko podczas usuwania pakietów"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles można podać tylko podczas instalacji pakietów"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb można podać tylko podczas instalacji i usuwania pakietów"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"opcje wyłączające skrypty można podać tylko podczas instalacji i usuwania "
-"pakietów"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"opcje wyłączające wyzwalacze można podać tylko podczas instalacji i usuwania "
-"pakietów"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps można podać tylko podczas instalacji, usuwania i sprawdzania "
-"pakietów"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr "--test można podać tylko podczas instalacji i usuwania pakietów"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "parametry dla --root (-r) muszą zaczynać się od /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "nie podano pakietów do usunięcia"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "nie podano pakietów do zainstalowania"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "nie podano parametrów dla zapytania"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "nie podano parametrów dla sprawdzenia"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot został już podany, ignorowanie %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-"zbudowanie przez %prep (rozpakowanie źródeł i nałożenie łat) z <pliku_spec>"
+"zbudowanie przez %prep (rozpakowanie źródeł i nałożenie łat) z <pliku-spec>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
-msgstr "<plik_spec>"
+msgstr "<plik-spec>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr "zbudowanie przez %build (%prep i skompilowanie) z <pliku_spec>"
+msgstr "zbudowanie przez %build (%prep i skompilowanie) z <pliku-spec>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-"zbudowanie przez %install (%prep, %build i zainstalowanie) z <pliku_spec>"
+"zbudowanie przez %install (%prep, %build i zainstalowanie) z <pliku-spec>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
-msgstr "sprawdzenie sekcji %files z <pliku_spec>"
+msgstr "sprawdzenie sekcji %files z <pliku-spec>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
-msgstr "zbudowanie pakietu źródłowego i binarnego z <pliku_spec>"
+msgstr "zbudowanie pakietu źródłowego i binarnego z <pliku-spec>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
-msgstr "zbudowanie tylko pakietu binarnego z <pliku_spec>"
+msgstr "zbudowanie tylko pakietu binarnego z <pliku-spec>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
-msgstr "zbudowanie tylko pakietu źródłowego z <pliku_spec>"
+msgstr "zbudowanie tylko pakietu źródłowego z <pliku-spec>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+"zbudowanie przez %prep (rozpakowanie źródeł i nałożenie łat) z <pakietu-"
+"źródłowego>"
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<pakiet-źródłowy>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr "zbudowanie przez %build (%prep i skompilowanie) z <pakietu-źródłowego>"
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"zbudowanie przez %install (%prep, %build i zainstalowanie) z <pakietu-"
+"źródłowego>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr "sprawdzenie sekcji %files z <pakietu-źródłowego>"
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr "zbudowanie pakietu źródłowego i binarnego z <pakietu-źródłowego>"
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "zbudowanie tylko pakietu binarnego z <pakietu-źródłowego>"
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr "zbudowanie tylko pakietu źródłowego z <pakietu-źródłowego>"
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-"zbudowanie przez %prep (rozpakowanie źródeł i nałożenie łat) z <pliku_tar>"
+"zbudowanie przez %prep (rozpakowanie źródeł i nałożenie łat) z <pliku-tar>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
-msgstr "<plik_tar>"
+msgstr "<plik-tar>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
-msgstr "zbudowanie przez %build (%prep oraz skompilowanie) z <pliku_tar>"
+msgstr "zbudowanie przez %build (%prep oraz skompilowanie) z <pliku-tar>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-"zbudowanie przez %install (%prep, %build i zainstalowanie) z <pliku_tar>"
+"zbudowanie przez %install (%prep, %build i zainstalowanie) z <pliku-tar>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
-msgstr "sprawdzenie sekcji %files z <pliku_tar>"
+msgstr "sprawdzenie sekcji %files z <pliku-tar>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
-msgstr "zbudowanie pakietu źródłowego i binarnego z <pliku_tar>"
+msgstr "zbudowanie pakietu źródłowego i binarnego z <pliku-tar>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
-msgstr "zbudowanie tylko pakietu binarnego z <pliku_tar>"
+msgstr "zbudowanie tylko pakietu binarnego z <pliku-tar>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
-msgstr "zbudowanie tylko pakietu źródłowego z <pliku_tar>"
+msgstr "zbudowanie tylko pakietu źródłowego z <pliku-tar>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
-msgstr "zbudowanie pakietu binarnego z <pakietu_źródłowego>"
-
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<pakiet_źródłowy>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"zbudowanie przez %install (%prep, %build i zainstalowanie) z "
-"<pakietu_źródłowego>"
+msgstr "zbudowanie pakietu binarnego z <pakietu-źródłowego>"
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "zastÄ…pienie build root"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "zbudowanie w bieżącym katalogu"
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "usunięcie drzewa budowania po ukończeniu"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
-msgstr "zignorowanie dyrektywy ExcludeArch: z pliku spec"
+msgstr "zignorowanie dyrektywy ExcludeArch: z pliku spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "debugowanie maszyny stanów plików"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "bez wykonania żadnych etapów budowania"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "bez sprawdzania zależności budowania"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-"utworzenie nagłówków pakietu zgodnych z (przestarzałymi) pakietami RPM v3"
+"utworzenie nagłówków pakietu zgodnych z (przestarzałymi) pakietami RPM v3"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr "bez wykonywania etapu budowania %clean"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "bez wykonywania etapu budowania %prep"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr "bez wykonywania etapu budowania %check"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
-msgstr "bez akceptowania wpisów msgstr i18n z pliku spec"
+msgstr "bez akceptowania wpisów msgstr i18n z pliku spec"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "usunięcie źródeł po ukończeniu"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "usunięcie pliku spec po ukończeniu"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "przejście od razu do podanego etapu (tylko dla c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "zastÄ…pienie platformy docelowej"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
-msgstr "Opcje budowania z [ <plik_spec> | <plik_tar> | <pakiet_źródłowy> ]:"
+msgstr "Opcje budowania z [ <plik-spec> | <plik-tar> | <pakiet-źródłowy> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Wspólne opcje dla wszystkich trybów i plików binarnych RPM:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Niespełnione zależności budowania:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Nie można otworzyć pliku spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Otwarcie potoku tar się nie powiodło: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "Odnaleziono więcej niż jeden plik spec w %s\n"
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
-msgstr "Odczytanie pliku spec z %s się nie powiodło\n"
+msgstr "Odczytanie pliku spec z %s się nie powiodło\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Zmiana nazwy %s na %s się nie powiodła: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "wykonanie stat na %s się nie powiodło: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Plik %s nie jest zwykłym plikiem.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Plik %s nie wyglÄ…da na plik spec.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Budowanie dla platform docelowych: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Budowanie dla %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "parametry dla --root (-r) muszą zaczynać się od /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "zainicjowanie bazy danych"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-"przebudowanie odwrotne listy w bazie danych z nagłówków zainstalowanych "
+"przebudowanie odwrotne listy w bazie danych z nagłówków zainstalowanych "
"pakietów"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "sprawdzenie plików bazy danych"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "wyeksportowanie bazy danych do listy nagłówków standardowego wyjścia"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "zaimportowanie bazy danych z listy nagłówków standardowego wejścia"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opcje bazy danych:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "może być podany tylko jeden główny tryb pracy"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "sprawdzenie podpisów pakietów"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "zaimportowanie opakowanego klucza publicznego"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr "bez importowania, ale wyświetla, czy by się powiodło"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
-msgstr "wyświetlenie listy kluczy z bazy kluczy RPM"
+msgstr "wyświetlenie listy kluczy z bazy kluczy RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Opcje bazy kluczy:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "nie podano parametrów"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Odpytanie/sprawdzenie opcji wyboru pakietów:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opcje zapytania (z -q lub --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opcje sprawdzania (z -V lub --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opcje instalacji/aktualizacji/usuwania:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "tylko jeden typ odpytywania/sprawdzania można wykonać na raz"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "nieoczekiwane flagi zapytania"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "nieoczekiwany format zapytania"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "nieoczekiwane źródło zapytania"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "tylko instalację i aktualizowanie można wymusić"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "pliki mogą być przenoszone tylko podczas instalacji pakietu"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "nie można użyć --prefix z --relocate lub --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate i --excludepath można użyć tylko podczas instalowania nowych "
+"pakietów"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix można użyć tylko podczas instalowania nowych pakietów"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "parametry dla --prefix muszą zaczynać się od /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) można podać tylko podczas instalacji i usuwaniu pakietów"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent można podać tylko podczas instalacji i usuwaniu pakietów"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "nie można jednocześnie podać --excludedocs i --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches można podać tylko podczas usuwania pakietów"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles można podać tylko podczas instalacji pakietów"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb można podać tylko podczas instalacji i usuwania pakietów"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opcje wyłączające skrypty można podać tylko podczas instalacji i usuwania "
+"pakietów"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opcje wyłączające wyzwalacze można podać tylko podczas instalacji i usuwania "
+"pakietów"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps można podać tylko podczas instalacji, usuwania i sprawdzania "
+"pakietów"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test można podać tylko podczas instalacji i usuwania pakietów"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "nie podano pakietów do usunięcia"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "nie podano pakietów do zainstalowania"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "nie podano parametrów dla zapytania"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "nie podano parametrów dla sprawdzenia"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "podpisanie pakietów"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
-msgstr "podpisanie pakietów (identyczne z --addsign)"
+msgstr "podpisanie pakietów (identyczne z --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "usunięcie podpisów pakietów"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opcje podpisu:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Nie można wykonać %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
-msgstr "Należy ustawić \"%%_gpg_name\" w pliku makr\n"
-
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Proszę podać hasło: "
+msgstr "Należy ustawić „%%_gpg_name†w pliku makr\n"
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Hasło jest dobre.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Sprawdzenie hasła się nie powiodło lub klucz GPG wygasł\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "przetwarza pliki spec do standardowego wyjścia"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "odpytuje pliki spec"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
"działa na binarnych pakietach RPM utworzonych przez plik spec (domyślnie)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "działa na źródłowych pakietach RPM utworzonych przez plik spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "użycie następującego formatu zapytania"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Opcje pliku spec:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "nie podano parametrów do przetworzenia"
@@ -559,32 +622,37 @@ msgstr "nie podano parametrów do przetworzenia"
msgid "Unable to open temp file: %s\n"
msgstr "Nie można otworzyć pliku tymczasowego: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Nie można otworzyć strumienia: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Wykonywanie(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Wykonanie %s się nie powiodło (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "BÅ‚Ä…d podczas wykonywania skryptu %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
-msgstr "Błędny stan wyjścia z %s (%s)\n"
+msgstr "Błędny stan wyjścia z %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -594,235 +662,315 @@ msgstr ""
"\n"
"Błędy budowania pakietu RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "błąd składni podczas przetwarzania ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "błąd składni podczas przetwarzania &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "błąd składni podczas przetwarzania ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
-msgstr "błąd przetwarzania w wyrażeniu\n"
+msgstr "błąd przetwarzania w wyrażeniu\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "niesparowane (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- tylko na liczbach\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! tylko na liczbach\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "typy muszą się zgadzać\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / nie są obsługiwane dla ciągów\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- nie jest obsługiwane dla ciągów\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
-msgstr "&& i || nie są obsługiwane dla ciągów\n"
+msgstr "&& i || nie są obsługiwane dla ciągów\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
-msgstr "błąd składni w wyrażeniu\n"
+msgstr "błąd składni w wyrażeniu\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
-msgstr "Brak \"(\" w %s %s\n"
+msgstr "Brak „(†w %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
-msgstr "Brak \")\" w %s(%s\n"
+msgstr "Brak „)†w %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Nieprawidłowy token %s: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Brak %s w %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Brak białego znaku po %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Błędna składnia: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Błędny tryb spec: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Błędny tryb katalogu spec: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
-msgstr "Niezwykła długość lokalizacji: \"%s\" w %%lang(%s)\n"
+msgstr "Niezwykła długość lokalizacji: „%s†w %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
-msgstr "Podwójna lokalizacja %s w %%lang(%s)\n"
+msgstr "Podwójna lokalizacja %s w %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Nieprawidłowa możliwość: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Obsługa możliwości plików nie jest wbudowana\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
-msgstr "Plik musi zaczynać się od \"/\": %s\n"
+msgstr "Plik musi zaczynać siÄ™ od „/â€: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
-msgstr "Nieznany algorytm skrótu pliku %u, używanie w zamian MD5\n"
+msgstr "Nieznany algorytm skrótu pliku %u, używanie w zamian MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Plik podany dwukrotnie: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "odczytanie dowiązania symbolicznego %s się nie powiodło: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
-msgstr "DowiÄ…zanie symboliczne wskazuje na BuildRoot: %s -> %s\n"
+msgstr "Dowiązanie symboliczne wskazuje na BuildRoot: %s → %s\n"
+
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "Ścieżka jest poza buildroot: %s\n"
-#: build/files.c:1345
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Nie odnaleziono katalogu: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Nie odnaleziono pliku: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Nie jest katalogiem: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: nie można wczytać nieznanego znacznika (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: odczytanie klucza publicznego się nie powiodło.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: nie jest opakowanym kluczem publicznym.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: odkodowanie się nie powiodło\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "utworzenie katalogu się nie powiodło"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
-msgstr "Plik musi zaczynać się od \"/\": %s\n"
+msgstr "Plik musi zaczynać siÄ™ od „/â€: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "Wyrażenie regularne %%dev nie jest dozwolone: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Katalog nie został odnaleziony przez wyrażenie regularne: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Nie odnaleziono pliku przez wyrażenie regularne: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
-msgstr "Nie można otworzyć pliku %s dla %%files: %m\n"
+msgstr "Nie można otworzyć pliku %s w %%files: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "wiersz: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "Pusty plik %s w %%files\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
-msgstr "BÅ‚Ä…d podczas odczytywania %%files pliku %s: %m\n"
+msgstr "Błąd podczas odczytywania pliku %s w %%files: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr "illegal _docdir_fmt %s: %s\n"
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Nie odnaleziono pliku przez wyrażenie regularne: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
-msgstr "Nie można mieszać specjalnego %s z innymi formami: %s\n"
+msgstr "Nie można mieszać specjalnego %s z innymi formami: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr "Więcej niż jeden plik na wiersz: %s\n"
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Błędny plik: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Błędny właściciel/grupa: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Sprawdzanie niespakietowanych plików: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -831,570 +979,627 @@ msgstr ""
"Odnaleziono zainstalowane (ale niespakietowane) pliki:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Przetwarzanie plików: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-"Architektura plików binarnych (%d) nie zgadza się z architekturą pakietu "
+"Architektura plików binarnych (%d) nie zgadza się z architekturą pakietu "
"(%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
-msgstr "Pliki binarne zależne od architektury w pakiecie noarch\n"
+msgstr "Pliki binarne zależne od architektury w pakiecie noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr "utworzenie archiwum się nie powiodło na pliku %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr "utworzenie archiwum się nie powiodło: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Nie można otworzyć pliku %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: wiersz: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Nie można ustalić kanonicznej nazwy komputera: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Nie można zapisać danych do %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Nie można odczytać danych z %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Nie można ustalić kanonicznej nazwy komputera: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Nieznana kompresja danych: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Nie można utworzyć niezmiennej części nagłówka.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Nie można otworzyć pliku tymczasowego.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Nie można wyszukać w pliku %s: %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Nie można zapisać tymczasowego nagłówka\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Odczytanie pliku polityki się nie powiodło: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Błędne dane CSA\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Nie można ponownie wczytać nagłówka podpisu.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Nie można otworzyć %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Nie można zapisać pakietu: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Nie można otworzyć sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Nie można odczytać nagłówka z %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Nie można zapisać nagłówka do %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Zapisano: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
-msgstr "Wykonywanie \"%s\":\n"
+msgstr "Wykonywanie „%sâ€:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
-msgstr "Wykonanie \"%s\" się nie powiodło.\n"
+msgstr "Wykonanie „%s†się nie powiodło.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
-msgstr "Sprawdzenie pakietu \"%s\" się nie powiodło.\n"
+msgstr "Sprawdzenie pakietu „%s†się nie powiodło.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Nie można utworzyć wyjściowej nazwy pliku dla pakietu %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "nie można utworzyć %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
-msgstr "wiersz %d: drugi %s\n"
+msgstr "%d. wiersz: drugie %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr "błędna data w %%changelog: %s\n"
+msgstr "błędna data w %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "Wpisy %%changelog muszą zaczynać się od *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "niepełny wpis %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
-msgstr "błędna data w %%changelog: %s\n"
+msgstr "błędna data w %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
-msgstr "Wpisy w %%changelog nie sÄ… w porzÄ…dku chronologicznym\n"
+msgstr "Wpisy w %%changelog nie są w porządku chronologicznym\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
-msgstr "brak nazwy w %%changelog\n"
+msgstr "brak nazwy w %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
-msgstr "brak opisu w %%changelog\n"
+msgstr "brak opisu w %%changelog\n"
+
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "%d. wiersz: drugi %%changelog\n"
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
-msgstr "wiersz %d: błąd podczas przetwarzania %%description: %s\n"
+msgstr "%d. wiersz: błąd podczas przetwarzania %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
-msgstr "wiersz %d: błędna opcja %s: %s\n"
+msgstr "%d. wiersz: błędna opcja %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
-msgstr "wiersz %d: za dużo nazw: %s\n"
-
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "wiersz %d: pakiet nie istnieje: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "wiersz %d: drugi opis\n"
+msgstr "%d. wiersz: za dużo nazw: %s\n"
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
-msgstr "wiersz %d: błąd podczas przetwarzania %%files: %s\n"
+msgstr "%d. wiersz: błąd podczas przetwarzania %%files: %s\n"
+
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
-msgstr "wiersz %d: błąd podczas przetwarzania %%policies: %s\n"
+msgstr "%d. wiersz: błąd podczas przetwarzania %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "BÅ‚Ä…d podczas przetwarzania pola znacznika: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
-msgstr "wiersz %d: błędny numer: %s\n"
+msgstr "%d. wiersz: błędny numer: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
-msgstr "wiersz %d: błędny numer no%s: %u\n"
+msgstr "%d. wiersz: błędny numer no%s: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
-msgstr "wiersz %d: błędny numer %s: %s\n"
+msgstr "%d. wiersz: błędny numer %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d zostało określone wiele razy\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Pobieranie %s do %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Nie można pobrać %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Architektura jest wykluczona: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Architektura nie jest dołączona: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "System operacyjny jest wykluczony: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "System operacyjny nie jest dołączony: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
-msgstr "Pole %s musi być obecne w pakiecie: %s\n"
+msgstr "Pole %s musi być obecne w pakiecie: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
-msgstr "Powtórzone wpisy %s w pakiecie: %s\n"
+msgstr "Powtórzone wpisy %s w pakiecie: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Nie można otworzyć ikony %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Nie można odczytać ikony %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Nieznany typ ikony: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
-msgstr "wiersz %d: znacznik przyjmuje tylko jeden token: %s\n"
+msgstr "%d. wiersz: znacznik przyjmuje tylko jeden token: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "wiersz %d: niedozwolony znak \"%c\" w: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr "%d. wiersz: %s w: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "wiersz %d: niedozwolony znak w: %s\n"
+msgid "%s in: %s\n"
+msgstr "%s w: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "wiersz %d: niedozwolona sekwencja \"..\" w: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "Niedozwolony znak „%c†(0x%x)"
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "Niedozwolona sekwencja „..â€"
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
-msgstr "wiersz %d: błędnie sformowany znacznik: %s\n"
+msgstr "%d. wiersz: błędnie sformowany znacznik: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
-msgstr "wiersz %d: pusty znacznik: %s\n"
+msgstr "%d. wiersz: pusty znacznik: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
-msgstr "wiersz %d: przedrostki nie mogą kończyć się na \"/\": %s\n"
+msgstr "%d. wiersz: przedrostki nie mogÄ… koÅ„czyć siÄ™ na „/â€: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
-msgstr "wiersz %d: Docdir musi zaczynać się od \"/\": %s\n"
+msgstr "%d. wiersz: Docdir musi zaczynać siÄ™ od „/â€: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
-msgstr "wiersz %d: pole Epoch musi być niepodpisaną liczbą: %s\n"
+msgstr "%d. wiersz: pole Epoch musi być niepodpisaną liczbą: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
-msgstr "wiersz %d: błędne określenia %s: %s\n"
+msgstr "%d. wiersz: błędne określenia %s: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
-msgstr "wiersz %d: błędny format BuildArchitecture: %s\n"
+msgstr "%d. wiersz: błędny format BuildArchitecture: %s\n"
+
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr "wiersz %d: obsługiwane są tylko podpakiety noarch: %s\n"
+msgstr "%d. wiersz: obsługiwane są tylko podpakiety noarch: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Wewnętrzny błąd: fałszywy znacznik %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
-msgstr "wiersz %d: %s jest przestarzałe: %s\n"
+msgstr "%d. wiersz: %s jest przestarzałe: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Błędna specyfikacja pakietu: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Pakiet już istnieje: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
-msgstr "wiersz %d: nieznany znacznik: %s\n"
+msgstr "%d. wiersz: nieznany znacznik: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} nie może być puste\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
-msgstr "%%{buildroot} nie może być \"/\"\n"
+msgstr "%%{buildroot} nie może być „/â€\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Błędne źródło: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Brak Å‚aty numer %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
-msgstr "%%patch bez odpowiadajÄ…cego mu znacznika \"Patch:\"\n"
+msgstr "%%patch bez odpowiadajÄ…cego mu znacznika „Patch:â€\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Brak źródła numer %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
-msgstr "Brak znacznika \"Source:\" w pliku spec\n"
+msgstr "Brak znacznika „Source:†w pliku spec\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "BÅ‚Ä…d podczas przetwarzania %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
-msgstr "wiersz %d: błędny parametr dla %%setup: %s\n"
+msgstr "%d. wiersz: błędny parametr dla %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
-msgstr "wiersz %d: błędna opcja %%setup %s: %s\n"
+msgstr "%d. wiersz: błędna opcja %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Nieprawidłowy numer łaty %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
-msgstr "wiersz %d: drugie %%prep\n"
+msgstr "%d. wiersz: drugie %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-"Tokeny zależności muszą zaczynać się od znaków alfanumerycznych, \"_\" lub "
-"\"/\""
+"Tokeny zależnoÅ›ci muszÄ… zaczynać siÄ™ od znaków alfanumerycznych, „_†lub „/â€"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
-msgstr "Wersja w nazwie pliku jest niedozwolona"
+msgstr "Wersja w nazwie pliku jest niedozwolona"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Wersja jest wymagana"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "Złożone zależności nie są dozwolone dla tego typu"
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "nieprawidłowa zależność"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Wersja jest wymagana"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "Tylko ścieżki bezwzględne są dozwolone w wyzwalaczach plików"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+"Wyzwalacz wywołany przez ten sam pakiet jest już określony w pliku spec"
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
-msgstr "wiersz %d: %s: %s\n"
+msgstr "%d. wiersz: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
-msgstr "wiersz %d: wyzwalacze muszą posiadać --: %s\n"
+msgstr "%d. wiersz: wyzwalacze muszą mieć --: %s\n"
+
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
-msgstr "wiersz %d: błąd podczas przetwarzania %s: %s\n"
+msgstr "%d. wiersz: błąd podczas przetwarzania %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
-msgstr "wiersz %d: wewnętrzny skrypt musi kończyć się \">\": %s\n"
+msgstr "%d. wiersz: wewnÄ™trzny skrypt musi koÅ„czyć siÄ™ „>â€: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
-msgstr "wiersz %d: program skryptu musi zaczynać się od \"/\": %s\n"
+msgstr "%d. wiersz: program skryptu musi zaczynać siÄ™ od „/â€: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr "%d. wiersz: priorytety są dozwolone tylko w wyzwalaczach plików: %s\n"
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
-msgstr "wiersz %d: drugi %s\n"
+msgstr "%d. wiersz: drugie %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
-msgstr "wiersz %d: wewnętrzny skrypt jest nieobsługiwany: %s\n"
+msgstr "%d. wiersz: wewnętrzny skrypt jest nieobsługiwany: %s\n"
+
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-"wiersz %d: parametry interpretatora nie sÄ… dozwolone w wyzwalaczach: %s\n"
+"%d. wiersz: parametry interpretatora nie są dozwolone w wyzwalaczach: %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
-msgstr "wiersz %d: %s\n"
+msgstr "%d. wiersz: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr "Makro rozszerzone w komentarzu w %d. wierszu: %s\n"
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Nie można otworzyć %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: oczekiwano parametru dla %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr "wiersz %d: niezamknięte %%if\n"
+msgstr "%d. wiersz: niezamknięte %%if\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
-msgstr "wiersz %d: niezamknięte makro lub błędna kontynuacja wiersza\n"
+msgstr "%d. wiersz: niezamknięte makro lub błędna kontynuacja wiersza\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: błędny warunek %%if\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: napotkano %%else bez %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: napotkano %%endif bez %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr "%s:%d: błędnie sformatowany zwrot %%include\n"
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "kodowanie %s nie jest obsługiwane przez system\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Pakiet %s: nieprawidłowe kodowanie %s w %s: %s — %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Nie odnaleziono zgodnych architektur do zbudowania\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
-msgstr "Pakiet nie posiada %%description: %s\n"
+msgstr "Pakiet nie ma %%description: %s\n"
#: build/policies.c:87
#, c-format
msgid "Policy module '%s' duplicated with overlapping types\n"
-msgstr "Moduł polityki \"%s\" posiada kopię z pokrywającymi się typami\n"
+msgstr "Moduł polityki „%s†ma kopię z pokrywającymi się typami\n"
#: build/policies.c:93
#, c-format
msgid "Base modules '%s' and '%s' have overlapping types\n"
-msgstr "Podstawowe moduły \"%s\" i \"%s\" posiadają pokrywające się typy\n"
+msgstr "Podstawowe moduły „%s†i „%s†mają pokrywające się typy\n"
#: build/policies.c:101
msgid "Failed to get policies from header\n"
-msgstr "Uzyskanie polityk z nagłówka się nie powiodło\n"
+msgstr "Uzyskanie polityk z nagłówka się nie powiodło\n"
#: build/policies.c:154
#, c-format
@@ -1422,8 +1627,8 @@ msgid ""
"'%s' type given with other types in %%semodule %s. Compacting types to "
"'%s'.\n"
msgstr ""
-"Typ \"%s\" został podany razem z innymi typami w %%semodule %s. "
-"Kompaktowanie typów do \"%s\".\n"
+"Typ „%s†został podany razem z innymi typami w %%semodule %s. Kompaktowanie "
+"typów do „%sâ€.\n"
#: build/policies.c:246
#, c-format
@@ -1438,463 +1643,576 @@ msgstr "Oczekiwano znacznika %%semodule: %s\n"
#: build/policies.c:262
#, c-format
msgid "Missing module path in line: %s\n"
-msgstr "Brak ścieżki do modułu w wierszu: %s\n"
+msgstr "Brak ścieżki do modułu w wierszu: %s\n"
#: build/policies.c:268
#, c-format
msgid "Too many arguments in line: %s\n"
-msgstr "Za dużo parametrów w wierszu: %s\n"
+msgstr "Za dużo parametrów w wierszu: %s\n"
#: build/policies.c:307
#, c-format
msgid "Processing policies: %s\n"
msgstr "Przetwarzanie polityk: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignorowanie nieprawidłowego wyrażenia regularnego %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Nie można utworzyć potoku dla %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Nie można wykonać %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Nie można rozdzielić %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s się nie powiodło: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "zapisanie wszystkich danych do %s się nie powiodło: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Konwersja %s na długą liczbę całkowitą się nie powiodła.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Pusty klasyfikator pliku\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Brak skonfigurowanych atrybutów plików\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) się nie powiodło: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load się nie powiodło: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
-msgstr "Rozpoznanie pliku \"%s\" się nie powiodło: tryb %06o %s\n"
+msgstr "Rozpoznanie pliku „%s†się nie powiodło: tryb %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Wyszukiwanie %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Odnalezienie %s się nie powiodło:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "odpytanie pliku spec %s się nie powiodło, nie można przetworzyć\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(błąd 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s błąd(%d) z %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Błędne magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s błąd(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Błędny/nieczytelny nagłówek"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "nierozpoznana opcja bazy danych: zignorowano „%sâ€.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Rozmiar nagłówka jest za duży"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s ma nieprawidłową wartość liczbową, pominięto\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr "Plik jest za duży dla archiwum"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s ma za dużą lub za małą wartość long, pominięto\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Nieznany typ pliku"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s ma za dużą lub za małą wartość całkowitą, pominięto\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "nie można otrzymać blokady %s na %s/%s\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Brak twardych dowiązań"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "współdzielonej"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Skrót nie zgadza się"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "wyłącznej"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Wewnętrzny błąd"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "nieprawidłowy typ indeksu %x w %s/%s\n"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Plik archiwum nie znajduje się w nagłówku"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "błąd(%d) podczas uzyskiwania wpisów „%s†z indeksu %s: %s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " się nie powiodło - "
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "błąd(%d) podczas zapisywania wpisu „%s†do %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "błąd(%d) usuwania wpisu „%s†z %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "błąd(%d) podczas dodawania wpisu nagłówka #%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "błąd(%d) podczas usuwania wpisu nagłówka #%d\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "błąd(%d) podczas przydzielania nowej instancji pakietu\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-"%s jest pakietem RPM Delta i nie może zostać bezpośrednio zainstalowany\n"
+"%s jest pakietem RPM Delta i nie może zostać bezpośrednio zainstalowany\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
-msgstr "Nieobsługiwane dane (%s) w pakiecie %s\n"
+msgstr "Nieobsługiwane dane (%s) w pakiecie %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "pakiet %s został już dodany, pomijanie %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "pakiet %s został już dodany, zastępowanie %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(nie jest „blobâ€)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(nie jest liczbÄ…)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(nie jest ciÄ…giem)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(nieprawidłowy typ)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
-msgstr "%a %b %d %Y"
+msgstr "%a %d %b %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(nie jest base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(nieprawidłowy typ)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(nie jest \"blob\")"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(nieprawidłowy typ XML)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(nie jest podpisem OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "Nieprawidłowa data %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "zwykły"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "zastÄ…piony"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "niezainstalowany"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
-msgstr "udostępniony w sieci"
+msgstr "udostępniony w sieci"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "błędny kolor"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "brak"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(nieznany)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(nie jest ciÄ…giem)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "użytkownik %s nie istnieje - używanie roota\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "grupa %s nie istnieje - używanie roota\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s zapisano jako %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s utworzono jako %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr "%s %s: usunięcie się nie powiodło: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr "katalog"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr "plik"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "pomijanie %s %s z podpisem, którego nie można sprawdzić\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "pomijanie %s z podpisem, którego nie można sprawdzić\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "load hdr: BÅĘDNE"
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "znacznik[%d]: BÅĘDNY, znacznik %d typ %d offset %d licznik %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr "znacznik regionu: BÅĘDNY, znacznik %d typ %d offset %d licznik %d"
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: BÅĘDNY, nie szesnastkowy\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr "offset regionu: BÅĘDNY, znacznik %d typ %d offset %d licznik %d"
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: BÅĘDNY, nie binarny\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr "zakoÅ„czenie regionu: BÅĘDNE, znacznik %d typ %d offset %d licznik %d"
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: BÅĘDNY, nie binarny\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "rozmiar blob(%d): BÅĘDNY, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
-msgstr "znacznik obszaru: BAD, znacznik %d typ %d offset %d licznik %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr "rozmiar hdr(%d): BÅĘDNY, odczytanie zwróciÅ‚o %d"
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "magic hdr: BÅĘDNE"
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "offset obszaru: BÅĘDNY, znacznik %d typ %d offset %d licznik %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr "znaczniki hdr: BÅĘDNE, liczba znaczników(%d) jest poza zakresem"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "koÅ„cówka obszaru: BÅĘDNA, znacznik %d typ %d offset %d licznik %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr "dane hdr: BÅĘDNE, liczba bajtów(%d) jest poza zakresem"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "rozmiar obszaru: BÅĘDNY, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr "blob hdr(%zd): BÅĘDNE, odczytanie zwróciÅ‚o %d"
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr rozmiar(%d): BÅĘDNY, read zwróciÅ‚o %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "pad sigh(%zd): BÅĘDNE, odczyt %zd bajtów"
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: BÅĘDNE\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr znacznik: BÅĘDNE, liczba znaczników(%d) poza zakresem\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr "rozmiar blob(%d): BÅĘDNY, 8 + 16 * il(%d) + dl(%d)"
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "nieprawidłowa szerokość pola"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr dane: BÅĘDNE, liczba bajtów(%d) poza zakresem\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): BÅĘDNY, read zwróciÅ‚o %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr load: BÅĘDNY\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "pusty format znacznika"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature się nie powiodło: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "pusta nazwa znacznika"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: podpis jest niedostępny\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead się nie powiodło: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "oczekiwano ] na końcu tablicy"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "nieoczekiwane ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "nieoczekiwane }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "oczekiwano ? w wyrażeniu"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "oczekiwano { po ? w wyrażeniu"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "oczekiwano } w wyrażeniu"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "oczekiwano : po podwyrażeniu ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "oczekiwano { po : w wyrażeniu"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "oczekiwano | na końcu wyrażenia"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iterator tablicy użyty na tablicach o różnych rozmiarach"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread się nie powiodło: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
+"%s: błąd: podano więcej niż jedną opcję --pipe (niezgodne aliasy biblioteki "
+"popt?)\n"
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
-msgstr "wcześniejsze określenie MAKRA z wartością WYRAŻENIE"
+msgstr "wcześniejsze określenie MAKRA z wartością WYRAŻENIE"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "\"MAKRO WYRAŻENIE\""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
-msgstr "określenie MAKRA z wartością WYRAŻENIE"
+msgstr "określenie MAKRA z wartością WYRAŻENIE"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "usunięcie określenia MAKRA"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MAKRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
-msgstr "wyświetlenie rozwinięcia makr z WYRAŻENIA"
+msgstr "wyświetlenie rozwinięcia makr z WYRAŻENIA"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "\"WYRAŻENIE\""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
-msgstr "odczytanie <PLIK:...> zamiast domyślnych plików"
+msgstr "odczytanie <PLIK:…> zamiast domyślnych plików"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
-msgstr "<PLIK:...>"
+msgstr "<PLIK:…>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "bez włączania wtyczek"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "bez sprawdzania skrótów pakietów"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "bez sprawdzania nagłówków bazy danych po pobraniu"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "bez sprawdzania podpisów pakietów"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "przekazanie standardowego wyjścia do POLECENIA"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "POLECENIE"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "użycie ROOTA jako katalogu najwyższego poziomu"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
-msgstr "użycie bazy danych w KATALOGU"
+msgstr "użycie bazy danych w KATALOGU"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "KATALOG"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "wyświetlenie znanych znaczników zapytań"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
-msgstr "wyświetlenie ostatecznej konfiguracji rpmrc i makr"
+msgstr "wyświetlenie ostatecznej konfiguracji rpmrc i makr"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "użycie mniej szczegółowego wyjścia"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "użycie bardziej szczegółowego wyjścia"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "wyświetlenie wersji używanego oprogramowania RPM"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "debugowanie maszyny stanu danych pliku"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "debugowanie wejścia/wyjścia rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: tabela opcji jest błędnie skonfigurowana (%d)\n"
@@ -1915,165 +2233,175 @@ msgstr "przesunięcia muszą zawierać ="
msgid "relocations must have a / following the ="
msgstr "przesunięcia muszą zawierać / po ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-"zainstalowanie wszystkich plików, nawet konfiguracyjnych, które w innym "
+"zainstalowanie wszystkich plików, nawet konfiguracyjnych, które w innym "
"przypadku by pominięto"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-"usunięcie wszystkich pakietów, które zgadzają się z <pakietem> (zwykle "
-"tworzony jest błąd, jeśli <pakiet> podaje wiele pakietów)"
+"usunięcie wszystkich pakietów, które zgadzają się z <pakietem> (zwykle "
+"tworzony jest błąd, jeśli <pakiet> określa wiele pakietów)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
-msgstr "przesunięcie plików w nieprzesuwalnym pakiecie"
+msgstr "przesunięcie plików w nieprzesuwalnym pakiecie"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "wyświetlenie pętli zależności jako ostrzeżenie"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "usunięcie (odinstalowanie) pakietu"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pakiet>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "bez instalacji plików konfiguracyjnych"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "bez instalacji dokumentacji"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "pominięcie plików zaczynających się od składnika <ścieżki> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<ścieżka>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "skrócona wersja --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "zaktualizowanie pakietów, jeśli są już zainstalowane"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
-msgstr "<plik_pakietu>+"
+msgstr "<plik-pakietu>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
-msgstr "wyświetlenie krzyżyków podczas instalacji pakietów (dobre z -v)"
+msgstr "wyświetlenie krzyżyków podczas instalacji pakietów (dobre z -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "bez sprawdzania architektury pakietu"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "bez sprawdzania systemu operacyjnego pakietu"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "bez sprawdzania pojemności dysku przed zainstalowaniem"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "zainstalowanie dokumentacji"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "zainstalowanie pakietów"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "zaktualizowanie bazy danych, ale bez modyfikacji systemu plików"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "bez sprawdzania zależności pakietu"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "bez sprawdzania skrótów plików"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "bez sprawdzania skrótów plików (przestarzałe)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "bez instalacji kontekstów bezpieczeństwa plików"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "bez zmieniania kolejności instalacji pakietów, aby zapewnić zależności"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "bez wykonania skryptów pakietów"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "bez wykonania skryptu %%pre (jeśli jest)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "bez wykonania skryptu %%post (jeśli jest)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "bez wykonania skryptu %%preun (jeśli jest)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "bez wykonania skryptu %%postun (jeśli jest)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "bez wykonania skryptu %%pretrans (jeśli jest)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "bez wykonania skryptu %%posttrans (jeśli jest)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "bez wykonania żadnych skryptów wyzwalanych przez ten pakiet"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "bez wykonania żadnych skryptów %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "bez wykonania żadnych skryptów %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "bez wykonania żadnych skryptów %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "bez wykonania żadnych skryptów %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "bez wykonywania żadnych działań kolekcji"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2081,369 +2409,407 @@ msgstr ""
"zaktualizowanie do poprzedniej wersji pakietu (--force podczas "
"aktualizowania robi to automatycznie)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
-msgstr "wyświetlenie stanu instalacji pakietu w procentach"
+msgstr "wyświetlenie stanu instalacji pakietu w procentach"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "przesunięcie pakietu do <katalogu>, jeśli jest przesuwalny"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<katalog>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
-msgstr "przesunięcie plików z <poprzedniej> ścieżki do <nowej>"
+msgstr "przesunięcie plików z <poprzedniej> ścieżki do <nowej>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<poprzednia>=<nowa>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "zignorowanie konfliktów plików między pakietami"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "zainstalowanie ponownie, jeśli pakiet jest już zainstalowany"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "bez instalacji, podanie tylko czy instalacja zadziała czy nie"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "zaktualizowanie pakietów"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "ponowne zainstalowanie pakietów"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "odpytanie/sprawdzenie wszystkich pakietów"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "tryb sprawdzania podpisów pakietów RPM"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "odpytanie/sprawdzenie pakietów zawierających plik"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
-msgstr "odpytanie/sprawdzenie pakietów w grupie"
+msgstr "odpytanie/sprawdzenie pakietów w grupie"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "odpytanie/sprawdzenie pliku pakietu"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
-msgstr "odpytanie/sprawdzenie pakietów z identyfikatorem pakietu"
+msgstr "odpytanie/sprawdzenie pakietów z identyfikatorem pakietu"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
-msgstr "odpytanie/sprawdzenie pakietów z identyfikatorem nagłówka"
+msgstr "odpytanie/sprawdzenie pakietów z identyfikatorem nagłówka"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "tryb odpytywania pakietów RPM"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "odpytanie/sprawdzenie instancji nagłówka"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
-msgstr "odpytanie/sprawdzenie pakietów z transakcji instalacji"
+msgstr "odpytanie/sprawdzenie pakietów z transakcji instalacji"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "odpytanie pakietów wyzwalanych przez pakiet"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "tryb sprawdzania pakietów RPM"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "odpytanie/sprawdzenie pakietów wymagających zależności"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "odpytanie/sprawdzenie pakietów dostarczających zależność"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "odpytanie/sprawdzenie pakietów zalecających zależność"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "odpytanie/sprawdzenie pakietów sugerujących zależność"
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr "odpytanie/sprawdzenie pakietów uzupełniających zależność"
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr "odpytanie/sprawdzenie pakietów ulepszających zależność"
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
-msgstr "bez używania wyrażeń regularnych w parametrach"
+msgstr "bez używania wyrażeń regularnych w parametrach"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "bez przetwarzania plików nie będących pakietami jako manifesty"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "wyświetlenie listy wszystkich plików konfiguracyjnych"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "wyświetlenie listy wszystkich plików dokumentacji"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "wyświetlenie listy wszystkich plików dokumentacji"
+msgstr "wyświetlenie listy wszystkich plików licencji"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "wyświetlenie listy wszystkich plików licencji"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
-msgstr "zrzucenie podstawowych informacji o pliku"
+msgstr "zrzucenie podstawowych informacji o pliku"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "wyświetlenie listy plików pakietu"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "pominięcie plików %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "pominięcie plików %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "wyświetlenie stanu wyświetlonych plików"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "bez sprawdzania rozmiaru plików"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "bez sprawdzania ścieżek dowiązań symbolicznych plików"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "bez sprawdzania właścicieli plików"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "bez sprawdzania grup plików"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "bez sprawdzania czasu modyfikacji plików"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "bez sprawdzania trybu plików"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "bez sprawdzania możliwości plików"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "bez sprawdzania kontekstów bezpieczeństwa plików"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "bez sprawdzania możliwości plików"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "bez sprawdzania plików pakietu"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "bez sprawdzania zależności pakietu"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "bez wykonania żadnych skryptów sprawdzania"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Brak funkcji rpmlib dla %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "oczekiwano pakietu źródłowego, odnaleziono binarny\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "pakiet źródłowy nie zawiera pliku .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "rozpakowanie archiwum się nie powiodło%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " na pliku "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s nie powiódł się na pliku %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s się nie powiodło: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "niepoprawny format: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(nie zawiera plików)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "zwykły "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "zastÄ…piony "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "niezainstalowany "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
-msgstr "udostępniony w sieci "
+msgstr "udostępniony w sieci "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "błędny kolor "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(brak stanu) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(nieznany %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
-msgstr "pakiet nie posiada list właścicieli/grup plików\n"
+msgstr "pakiet nie ma list właścicieli/grup plików\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
-msgstr "pakiet nie posiada list właścicieli ani identyfikatorów plików\n"
+msgstr "pakiet nie ma list właścicieli ani identyfikatorów plików\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "grupa %s nie zawiera żadnych pakietów\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "brak pakietów wyzwalających %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "błędnie sformowane %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "brak pakietów pasujących do %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "brak pakietów wymagających %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "brak pakietów zalecających %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "brak pakietów sugerujących %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "brak pakietów uzupełniających %s\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "brak pakietów ulepszających %s\n"
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "brak pakietów dostarczających %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "plik %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "plik %s nie należy do żadnego pakietu\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "nieprawidłowy numer pakietu: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "nie można odczytać wpisu %u\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "pakiet %s nie jest zainstalowany\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
-msgstr "nieznany znacznik: \"%s\"\n"
+msgstr "nieznany znacznik: „%sâ€\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: zaimportowanie klucza %d się nie powiodło.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: klucz %d nie jest opakowanym kluczem publicznym.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: zaimportowanie read się nie powiodło(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s: headerRead się nie powiodło: %s\n"
+msgid "Fread failed: %s"
+msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-"%s: nie można odczytać niezmiennego regionu nagłówka. Uszkodzony pakiet?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NIE DOBRZE"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (BRAK KLUCZY:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (NIEZAUFANE KLUCZE:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: otwarcie się nie powiodło: %s\n"
@@ -2468,215 +2834,447 @@ msgstr "Nie można zmienić katalogu roota: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Nie można przywrócić katalogu roota: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Tworzenie %d brakujących indeksów, proszę czekać…\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "nie można otworzyć indeksu %s za pomocą %s — %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "ścieżka bazy danych nie została ustawiona\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: pomijanie"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "błąd(%d) podczas zapisywania wpisu #%d do %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec się nie powiodło: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp się nie powiodło: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: pomijanie"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: pobrano uszkodzony nagłówek #%u — pomijanie.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: nie można odczytać nagłówka pod 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "ścieżka bazy danych nie została ustawiona"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "utworzenie katalogu %s się nie powiodło: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "nagłówek #%u w bazie danych jest błędny — pomijanie.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "nie można dodać wpisu będącego pierwotnie przy %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"przebudowanie bazy danych się nie powiodło: pierwotna baza danych pozostała "
+"na miejscu\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "zamiana poprzedniej bazy danych na nową się nie powiodła.\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NIE "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "TAK"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
-msgstr "Zależności PreReq:, Provides: i Obsoletes: obsługują wersje."
+msgstr "Zależności PreReq:, Provides: i Obsoletes: obsługują wersje."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-"nazwy plików przechowano jako krotka (dirName,baseName,dirIndex), a nie jako "
+"nazwy plików przechowano jako krotka (dirName,baseName,dirIndex), a nie jako "
"ścieżki."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
-msgstr "dane pakietu mogą zostać skompresowane używając bzip2."
+msgstr "dane pakietu mogą zostać skompresowane za pomocą bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
-msgstr "dane pakietu mogą zostać skompresowane używając xz."
+msgstr "dane pakietu mogą zostać skompresowane za pomocą xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
-msgstr "dane pakietu mogą zostać skompresowane używając lzma."
+msgstr "dane pakietu mogą zostać skompresowane za pomocą lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
-msgstr "pliki danych pakietu posiadajÄ… przedrostek \"./\"."
+msgstr "pliki danych pakietu majÄ… przedrostek „./â€."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "pakiet nazwa-wersja-wydanie nie jest domyślnie dostarczany."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "znaczniki nagłówka są zawsze porządkowane po wczytaniu."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
-msgstr "interpreter skryptów może używać parametrów z nagłówka."
+msgstr "interpreter skryptów może używać parametrów z nagłówka."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "plik twardego dowiązania może zostać zainstalowany bez ukończenia."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"skrypty pakietu mogą odwoływać się do bazy danych RPM podczas instalowania."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "wewnętrzna obsługa skryptów Lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "algorytm skrótu pliku jest konfigurowalny dla każdego pakietu osobno"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "obsługa możliwości plików POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
-msgstr "skrypty pakietu mogą być rozszerzane w czasie instalacji."
+msgstr "skrypty pakietu mogą być rozszerzane w czasie instalacji."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr "rozwiązywanie zależności obsługuje wersje zawierające tyldę."
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "obsługa plików większych niż 4 GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "obsługa złożonych zależności."
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "Nieznany operator zÅ‚ożonej zależnoÅ›ci „%.*sâ€"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Nazwa jest wymagana"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "ZÅ‚ożona zależność nie zaczyna siÄ™ od „(â€"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "Brak parametru dla operatora złożonej zależności"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "Pusta złożona zależność"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "Niezakończona złożona zależność: %s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr "Nie można połączyć różnych operatorów"
+
+#: lib/rpmds.c:1564
+#, fuzzy
+msgid "Can only chain and/or/with ops"
+msgstr "Można połączyć tylko operatory AND i OR"
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr "Błędne dane po złożonej zależności"
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Błędne magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Błędny/nieczytelny nagłówek"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Rozmiar nagłówka jest za duży"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Plik jest za duży dla archiwum"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Nieznany typ pliku"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Brak plików"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Skrót nie zgadza się"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Wewnętrzny błąd"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Plik archiwum nie znajduje się w nagłówku"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " się nie powiodło — "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (błąd 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "otwarcie %s się nie powiodło: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr "Przekroczono maksymalny poziom rekurencji manifestu: %s\n"
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: nie jest pakietem RPM (ani manifestem pakietu)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
-msgstr "Aktualizowanie/instalowanie...\n"
+msgstr "Aktualizowanie/instalowanie…\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
-msgstr "Czyszczenie/usuwanie...\n"
+msgstr "Czyszczenie/usuwanie…\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
-msgstr "Przygotowywanie..."
+msgstr "Przygotowywanie…"
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
-msgstr "Przygotowywanie pakietów..."
+msgstr "Przygotowywanie pakietów…"
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Niespełnione zależności:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: nie jest pakietem RPM (ani manifestem pakietu): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s nie może zostać zainstalowany\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Pobieranie %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
-msgstr "pomijanie %s - przesłanie się nie powiodło\n"
+msgstr "pomijanie %s — przesłanie się nie powiodło\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "pakiet %s nie jest przesuwalny\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
-msgstr "błąd podczas odczytywania z pliku %s\n"
+msgstr "błąd podczas odczytywania z pliku %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
-msgstr "\"%s\" podaje wiele pakietów:\n"
+msgstr "„%s†określa wiele pakietów:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "nie można otworzyć %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Instalowanie %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "nie jest pakietem RPM"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "niedozwolony typ podpisu"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "nieobsługiwana wersja pakietu RPM"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "odczytanie się nie powiodło: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "nie jest pakietem RPM\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "nie można utworzyć blokady %s na %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "oczekiwanie na blokadÄ™ %s na %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Wykonanie dlopen na %s %s się nie powiodło\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Rozwiązanie symbolu %s się nie powiodło: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Rozwinięcie makra %%__collection_%s się nie powiodło\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Wtyczka %%__%s_%s nie jest skonfigurowana\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Wtyczka %s nie jest wczytana\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Rozwiązanie wtyczki %s symbolu %s się nie powiodło: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "różne"
@@ -2699,17 +3297,17 @@ msgstr "pakiet %s jest już zainstalowany"
#: lib/rpmprob.c:125
#, c-format
msgid "path %s in package %s is not relocatable"
-msgstr "ścieżka %s w pakiecie %s nie jest przesuwalna"
+msgstr "ścieżka %s w pakiecie %s nie jest przesuwalna"
#: lib/rpmprob.c:130
#, c-format
msgid "file %s conflicts between attempted installs of %s and %s"
-msgstr "plik %s jest w konflikcie między instalowanymi %s i %s"
+msgstr "plik %s jest w konflikcie między instalowanymi %s i %s"
#: lib/rpmprob.c:135
#, c-format
msgid "file %s from install of %s conflicts with file from package %s"
-msgstr "plik %s z instalacji %s jest w konflikcie z plikiem z pakietu %s"
+msgstr "plik %s z instalacji %s jest w konflikcie z plikiem z pakietu %s"
#: lib/rpmprob.c:140
#, c-format
@@ -2719,12 +3317,12 @@ msgstr "pakiet %s (nowszy niż %s) jest już zainstalowany"
#: lib/rpmprob.c:145
#, c-format
msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
-msgstr "instalowanie pakietu %s wymaga %<PRIu64>%cB w systemie plików %s"
+msgstr "instalowanie pakietu %s wymaga %<PRIu64>%c B w systemie plików %s"
#: lib/rpmprob.c:155
#, c-format
msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
-msgstr "instalowanie pakietu %s wymaga %<PRIu64> i-węzłów w systemie plików %s"
+msgstr "instalowanie pakietu %s wymaga %<PRIu64> i-węzłów w systemie plików %s"
#: lib/rpmprob.c:159
#, c-format
@@ -2738,7 +3336,7 @@ msgstr "(zainstalowane) "
#: lib/rpmprob.c:163
#, c-format
msgid "%s conflicts with %s%s"
-msgstr "%s jest w konflikcie z %s%s"
+msgstr "%s jest w konflikcie z %s%s"
#: lib/rpmprob.c:167
#, c-format
@@ -2750,805 +3348,636 @@ msgstr "%s jest zastępowane przez %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "wystąpił nieznany błąd %d podczas manipulowania pakietem %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
-msgstr "brak drugiego \":\" w %s:%d\n"
+msgstr "brak drugiego „:†w %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
-msgstr "brak nazwy architektury w %s:%d\n"
+msgstr "brak nazwy architektury w %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
-msgstr "Niepełny wiersz danych w %s:%d\n"
+msgstr "Niepełny wiersz danych w %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
-msgstr "Za dużo parametrów w wierszu danych w %s:%d\n"
+msgstr "Za dużo parametrów w wierszu danych w %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Błędny numer architektury/systemu operacyjnego: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
-msgstr "Niepełny domyślny wiersz w %s:%d\n"
+msgstr "Niepełny domyślny wiersz w %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
-msgstr "Za dużo parametrów w domyślnym wierszu w %s:%d\n"
+msgstr "Za dużo parametrów w domyślnym wierszu w %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
-msgstr "brak \":\" (odnaleziono 0x%02x) w %s:%d\n"
+msgstr "brak „:†(odnaleziono 0x%02x) w %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
-msgstr "brak parametru dla %s w %s:%d\n"
+msgstr "brak parametru dla %s w %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
-msgstr "nie można otworzyć %s w %s:%d: %m\n"
+msgstr "nie można otworzyć %s w %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
-msgstr "brak architektury dla %s w %s:%d\n"
+msgstr "brak architektury dla %s w %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
-msgstr "błędna opcja \"%s\" w %s:%d\n"
+msgstr "błędna opcja „%s†w %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
"Odczytanie pomocniczego wektora się nie powiodło, nie zamontowano /proc?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Nieznany system: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
-msgstr "Proszę skontaktować się z %s\n"
+msgstr "Proszę skontaktować się z %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Nie można otworzyć %s do odczytania: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "Nie wywołano exec() po fork() w skrypcie Lua\n"
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "Nie można przywrócić bieżącego katalogu: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "Obsługa skryptów <lua> nie jest wbudowana\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Nie można utworzyć pliku tymczasowego dla %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Nie można utworzyć kopii deskryptora pliku: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "„Fwrite†się nie powiodło: %s"
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "Skrypt %s się nie powiódł, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "Skrypt %s się nie powiódł, sygnał %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "Skrypt %s się nie powiódł, stan wyjścia %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Nieznany format"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "instalacja"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "usunięcie"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
-msgstr "nie można otworzyć bazy danych pakietów w %s\n"
+msgstr "nie można otworzyć bazy danych pakietów w %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
-msgstr "dodatkowe \"(\" w etykiecie pakietu: %s\n"
+msgstr "dodatkowe „(†w etykiecie pakietu: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
-msgstr "brak \"(\" w etykiecie pakietu: %s\n"
+msgstr "brak „(†w etykiecie pakietu: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
-msgstr "brak \")\" w etykiecie pakietu: %s\n"
+msgstr "brak „)†w etykiecie pakietu: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: odczytanie klucza publicznego się nie powiodło.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transakcji"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh rozmiar(%d): BÅĘDNY, read zwróciÅ‚o %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: BÅĘDNE\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh znaczników: BÅĘDNE, liczba znaczników(%d) poza zakresem\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh dane: BÅĘDNE, liczba bajtów(%d) poza zakresem\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): BÅĘDNY, read zwróciÅ‚o %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh znacznik[%d]: BÅĘDNY, znacznik %d typ %d offset %d licznik %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh wczytanie: BÅĘDNE\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh wyrównanie(%zd): BÅĘDNE, odczytano %zd bajtów\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh rozmiar podpisu(%zd): BÅĘDNY, fstat(2) siÄ™ nie powiodÅ‚o\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Nie można odczytać niezmiennego regionu nagłówka. Uszkodzony pakiet?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "Nie można podpisywać pakietów RPM v3\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "Skrót MD5:"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Skrót SHA1 nagłówka:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
+
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Nagłówek "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "Sprawdzanie podpisu: BÅĘDNE PARAMETRY (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Nie można ponownie wczytać nagłówka podpisu.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "pominięto"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
-msgstr "nie powiodło się"
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "brak %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Niespełnione zależności dla %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "nieprawidłowa szerokość pola"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "brak { po %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "brak } po %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "pusty format znacznika"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "pusta nazwa znacznika"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "nieznany znacznik"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "oczekiwano ] na końcu tablicy"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "nieoczekiwane ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "nieoczekiwane }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "oczekiwano ? w wyrażeniu"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "oczekiwano { po ? w wyrażeniu"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "oczekiwano } w wyrażeniu"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "oczekiwano : po podwyrażeniu ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "oczekiwano { po : w wyrażeniu"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "oczekiwano | na końcu wyrażenia"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iterator tablicy użyty na tablicach o różnych rozmiarach"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Tworzenie %d brakujących indeksów, proszę czekać...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "nie można otworzyć indeksu %s używając bazy danych%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "błąd(%d) podczas uzyskiwania wpisów \"%s\" z indeksu %s: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "ścieżka bazy danych nie została ustawiona\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: pomijanie"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "błąd(%d) podczas zapisywania wpisu #%d do %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec się nie powiodło: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp się nie powiodło: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: pomijanie"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: pobrano uszkodzony nagłówek #%u - pomijanie.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "błąd(%d:%s) podczas pobierania następnego klucza z indeksu %s\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "błąd(%d) podczas dodawania wpisu nagłówka #%d\n"
+msgstr "się nie powiodło"
-#: lib/rpmdb.c:2358
+#: lib/verify.c:263
#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "błąd(%d) podczas usuwania wpisu nagłówka #%d\n"
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Podwójna nazwa użytkownika lub UID dla użytkownika %s\n"
-#: lib/rpmdb.c:2382
+#: lib/verify.c:284
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: nie można odczytać nagłówka pod 0x%x\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Podwójna nazwa grupy lub GID dla grupy %s\n"
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "błąd(%d) podczas ustawiania wpisów \"%s\" z indeksu %s\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr "brak stanu"
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "błąd(%d) podczas zapisywania wpisu \"%s\" do %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "błąd(%d) usuwania wpisu \"%s\" z %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "błąd(%d) podczas przydzielania nowej instancji pakietu\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "nieznany stan"
-#: lib/rpmdb.c:2644
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "błąd(%d) podczas otrzymywania wpisów \"%s\" z indeksu %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "błąd(%d) podczas zapisywania wpisu %s do %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "ścieżka bazy danych nie została ustawiona"
+msgid "missing %c %s"
+msgstr "brak %c %s"
-#: lib/rpmdb.c:2875
+#: lib/verify.c:503
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "utworzenie katalogu %s się nie powiodło: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Niespełnione zależności dla %s:\n"
-#: lib/rpmdb.c:2910
+#: plugins/prioreset.c:29
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "nagłówek #%u w bazie danych jest błędny - pomijanie.\n"
+msgid "Unable to reset nice value: %s"
+msgstr "Nie można przywrócić wartoÅ›ci „niceâ€: %s"
-#: lib/rpmdb.c:2924
+#: plugins/prioreset.c:40
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "nie można dodać wpisu będącego pierwotnie przy %u\n"
+msgid "Unable to reset I/O priority: %s"
+msgstr "Nie można przywrócić priorytetu wejścia/wyjścia: %s"
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"przebudowanie bazy danych się nie powiodło: pierwotna baza danych pozostała "
-"na miejscu\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "zamiana poprzedniej bazy danych na nową się nie powiodła.\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "aby odzyskać, należy zastąpić pliki w %s plikami z %s"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "usunięcie katalogu %s się nie powiodło: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "błąd bazy danych%d(%d) z %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "błąd bazy danych%d(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "nie można otrzymać blokady %s na %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "współdzielonej"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "wyłącznej"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "nieprawidłowy typ indeksu %x w %s/%s\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "nierozpoznana opcja bazy danych: \"%s\" zignorowano.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s ma nieprawidłową wartość liczbową, pominięto\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s ma za dużą lub za małą wartość long, pominięto\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s ma za dużą lub za małą wartość całkowitą, pominięto\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Odkodowanie polityki dla %s się nie powiodło\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Utworzenie pliku tymczasowego dla %s się nie powiodło: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Zapisanie polityki %s do pliku %s się nie powiodło\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Utworzenie obsługi semanage się nie powiodło\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Połączenie z obsługą polityki się nie powiodło\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Rozpoczęcie transakcji polityki się nie powiodło: %s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Usunięcie tymczasowego pliku polityki %s się nie powiodło: %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Zainstalowanie modułu polityki się nie powiodło: %s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Usunięcie modułu polityki się nie powiodło: %s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Rozdzielenie procesu się nie powiodło: %s\n"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Wykonanie %s się nie powiodło: %s\n"
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s zostało nienormalnie zakończone\n"
-
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
-#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s nie powiodło się z kodem wyjścia %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Wprowadzenie zmian w polityce się nie powiodło\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Rozwinięcie makra restorecon się nie powiodło"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-"Ponowne nadanie etykiet systemowi plików się nie powiodło. Pliki mogą "
-"posiadać błędne etykiety\n"
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-"Ponowne wczytanie kontekstów plików się nie powiodło. Pliki mogą posiadać "
-"błędne etykiety\n"
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Wydobycie polityki z %s się nie powiodło\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktywne %d puste %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(puste)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(puste)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makro %%%s posiada niezakończone ciało\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makro %%%s ma niezakończone opcje\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makro %%%s posiada niedozwolonÄ… nazwÄ™ (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makro %%%s ma niezakończoną treść\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makro %%%s posiada niezakończone opcje\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
-msgstr "Makro %%%s posiada puste ciało\n"
+msgstr "Makro %%%s ma pustą treść\n"
+
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "Makro %%%s wymaga spacji przed treścią\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Rozwinięcie makra %%%s się nie powiodło\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "Makro %%%s posiada niedozwolonÄ… nazwÄ™ (%%undefine)\n"
+msgstr "Makro %%%s ma niedozwolonÄ… nazwÄ™ (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) nie zostało użyte poniżej poziomu %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "Określono makro %%%s, ale nie jest używane w ramach zakresu\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
-msgstr "Nieznana opcja %c w %s(%s)\n"
+msgstr "Nieznana opcja %c w %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-"Za dużo poziomów rekurencji w rozwinięciu makra. Prawdopodobnie jest to "
+"Za dużo poziomów rekurencji w rozwinięciu makra. Prawdopodobnie jest to "
"spowodowane rekurencyjnÄ… deklaracjÄ… makra.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Niezakończone %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Makro niemożliwe do przetworzenia po %%\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "wczytanie pliku makra %s się nie powiodło"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktywne %d puste %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "błąd podczas tworzenia pliku tymczasowego %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Plik %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Plik %s jest mniejszy niż %u bajtów\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "utworzenie katalogu się nie powiodło"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[brak]"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(brak błędu)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "krytyczny błąd: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "błąd: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "ostrzeżenie: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "nieprawidłowa składnia skryptu Lua: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "nieprawidłowa składnia skryptu Lua: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "skrypt Lua się nie powiódł: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "nieprawidłowa składnia pliku Lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "hak Lua się nie powiódł: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[brak]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(brak błędu)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "krytyczny błąd: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "błąd: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "ostrzeżenie: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "przydzielenie pamięci (%u bajtów) zwróciło NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, identyfikator klucza %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(brak)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "błąd podczas tworzenia katalogu tymczasowego %s: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "błąd podczas tworzenia FIFO %s: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "błąd podczas usuwania FIFO %s: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "błąd podczas usuwania katalogu %s: %m\n"
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: Fwrite się nie powiodło: %s\n"
+msgstr "%s: „Fwrite†się nie powiodło: %s\n"
+
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: „Fread†się nie powiodło: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
-msgstr "%s: Fflush się nie powiodło: %s\n"
+msgstr "%s: „Fflush†się nie powiodło: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "Nieobsługiwany podpis PGP\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "Nieobsługiwany algorytm mieszania PGP %u\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "Nieobsługiwany algorytm klucza publicznego PGP %u\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Nie można wykonać %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "„Fopen†się nie powiodło\n"
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Nie można zapisać do potoku\n"
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Nie można utworzyć potoku do podpisania: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr "Nie można odczytać z pliku %s: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "wykonanie gpg się nie powiodło (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "zapisanie podpisu przez gpg się nie powiodło\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "nie można odczytać podpisu\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp się nie powiodło\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s zawiera już identyczny podpis, pomijanie\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead się nie powiodło: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature się nie powiodło: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: headerRead się nie powiodło: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "Nie można podpisywać pakietów RPM v3\n"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s zawiera już identyczny podpis, pomijanie\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature się nie powiodło: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead się nie powiodło: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "zastąpienie %s się nie powiodło: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: odczytanie manifestu się nie powiodło: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "bez sprawdzania podpisu nagłówka+danych"
diff --git a/po/pt.po b/po/pt.po
index d7e32e030..aa8056fb7 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -7,10 +7,11 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Portuguese (http://www.transifex.com/rpm-team/rpm/language/"
+"pt/)\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -43,503 +44,565 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "o exec falhou\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "o argumento não é um pacote RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "erro ao ler o cabeçalho do pacote\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "não consigo aceder de novo ao conteúdo: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opções de pesquisa (com o -q ou o --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opções de verificação (com o -V ou o --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opções de Instalação/Actualização/Remoção:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "só pode ser realizado um tipo de pesquisa/verificação de cada vez"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "opções de pesquisa inesperadas"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "formato de pesquisa inesperado"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "origem de pesquisa inesperada"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "só pode ser especificado um 'major mode'"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-"os ficheiros só podem ser mudados de sítio durante a instalação do pacote"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"o --relocate e o --excludepath só podem ser usados ao instalar pacotes novos"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "o --prefix só pode ser usado ao instalar pacotes novos"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "os argumentos do --prefix têm de começar por /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "o --replacepkgs só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "o --excludedocs só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "o --includedocs só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "só uma das opções --excludedocs e --includedocs pode ser usada"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "o --ignorearch só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "o --ignoreos só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "o --ignoresize só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "o --allmatches só pode ser indicado ao apagar o pacote"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "o --allfiles só pode ser indicado durante a instalação do pacote"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"o --justdb só pode ser indicado durante a instalação ou a remoção do pacote"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"a desactivação de 'scripts' só pode ser indicado durante a instalação ou a "
-"remoção de pacotes"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"a desactivação dos 'triggers' só pode ser usado durante a instalação ou "
-"remoção de pacotes"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "os argumentos do --root (-r) têm de começar por /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "não foram indicados pacotes para apagar"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "não foram indicados pacotes para instalar"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "não foram indicados argumentos para a pesquisa"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "não foram indicados argumentos para a verificação"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "O buildroot já foi especificado, a ignorar o %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"criar através do %prep (desempacotar o código e aplicar patches) do "
"<fichspec>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<fichspec>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "criar através do %build (%prep e depois compilar) do <fichspec>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"criar através do %install (%prep, %build e depois instalar) do <fichspec>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "verificar a secção %files do <fichspec>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "criar os pacotes binários e de código a partir do <fichspec>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "criar só o pacote binário a partir do <fichspec>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "criar só o pacote com código-fonte a partir do <fichspec>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<pacote de código>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"criar através do %install (%prep, %build e depois instalar) do <pacote de "
+"código>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"criar através do %prep (desempacotar o código e aplicar patches) do <fichtar>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<fichtar>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "criar através do %build (%prep e depois compilar) do <fichtar>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"criar através do %install (%prep, %build e depois instalar) do <fichtar>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verificar a secção %files do <fichtar>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "criar os pacotes binários e de código a partir do <fichtar>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "criar só o pacote binário a partir do <fichtar>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "criar só o pacote com código-fonte a partir do <fichtar>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "criar o pacote binário a partir do <pacote de código>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<pacote de código>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"criar através do %install (%prep, %build e depois instalar) do <pacote de "
-"código>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "ignorar a raiz de criação"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "apagar as directorias de criação quando acabar"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorar as directivas ExcludeArch: do ficheiro spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "depurar máquina de estados de ficheiros"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "não executar nenhuma etapa da criação"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "não verificar as dependências de compilação"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "não aceitar as mensagens de i18N do ficheiro spec"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "apagar o código-fonte quando acabar"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "apagar o ficheiro spec quando acabar"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "saltar directamente para a etapa indicada (só para c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "ignorar a plataforma-alvo"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Opções de criação com [ <fich spec> | <fich tar> | <pacote fonte> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Não consegui abrir ficheiro spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Não consegui abrir o 'pipe' para o tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Não consegui ler o ficheiro spec do %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Não consegui mudar o nome de %s para %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "Não consegui analisar o %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "O ficheiro %s não é um ficheiro normal.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "O ficheiro %s não parece ser um ficheiro spec.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "A construir plataformas alvo: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "A construir para o alvo %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "os argumentos do --root (-r) têm de começar por /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "inicializar a base de dados"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"reconstruir as listas invertidas da base dados com os cabeçalhos dos pacotes "
"instalados"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "verificar ficheiros da base de dados"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opções da base de dados:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "só pode ser especificado um 'major mode'"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opções de pesquisa (com o -q ou o --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opções de verificação (com o -V ou o --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opções de Instalação/Actualização/Remoção:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "só pode ser realizado um tipo de pesquisa/verificação de cada vez"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "opções de pesquisa inesperadas"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "formato de pesquisa inesperado"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "origem de pesquisa inesperada"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+"os ficheiros só podem ser mudados de sítio durante a instalação do pacote"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"o --relocate e o --excludepath só podem ser usados ao instalar pacotes novos"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "o --prefix só pode ser usado ao instalar pacotes novos"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "os argumentos do --prefix têm de começar por /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "o --replacepkgs só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "o --excludedocs só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "o --includedocs só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "só uma das opções --excludedocs e --includedocs pode ser usada"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "o --ignorearch só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "o --ignoreos só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "o --ignoresize só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "o --allmatches só pode ser indicado ao apagar o pacote"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "o --allfiles só pode ser indicado durante a instalação do pacote"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"o --justdb só pode ser indicado durante a instalação ou a remoção do pacote"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"a desactivação de 'scripts' só pode ser indicado durante a instalação ou a "
+"remoção de pacotes"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"a desactivação dos 'triggers' só pode ser usado durante a instalação ou "
+"remoção de pacotes"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "não foram indicados pacotes para apagar"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "não foram indicados pacotes para instalar"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "não foram indicados argumentos para a pesquisa"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "não foram indicados argumentos para a verificação"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opções de assinatura:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Não consegui executar %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Precisa definir o \"%%_gpg_name\" no seu ficheiro de macros\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Indique a palavra-chave: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "A palavra-chave está correcta.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "usar o formato de pesquisa seguinte"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -548,32 +611,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "A executar(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "A execução de %s falhou (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Código de saída inválido do %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -583,785 +651,920 @@ msgstr ""
"\n"
"Erros de criação do RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "erro de sintaxe ao analisar o ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "erro de sintaxe ao analisar o &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "erro de sintaxe ao analisar o ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "erro de análise na expressão\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "( não correspondido\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- só em números\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! só em números\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "os tipos têm de corresponder\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / não suportados em cadeias de caracteres\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- não suportado em cadeias de caracteres\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& e || não suportados em cadeias de caracteres\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "erro de sintaxe na expressão\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Falta um '(' em %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Falta um ')' em %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Elemento %s inválido: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Falta um %s em %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Carácter sem ser espaço a seguir a %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Sintaxe inválida: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Spec de modo inválido: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Spec de dirmode inválido: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "O ficheiro tem de começar por \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Ficheiro listado duas vezes: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "A 'symlink' aponta para a BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Ficheiro não encontrado: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "O ficheiro precisa de começar por \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Ficheiro não encontrado pelo glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "linha: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Ficheiro não encontrado pelo glob: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Ficheiro inválido: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Dono/grupo inválido: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Não consegui canonizar o nome da máquina: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Não consegui escrever o conteúdo de %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Não consegui ler o conteúdo de %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Não consegui canonizar o nome da máquina: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Não consegui criar região imutável do cabeçalho.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Não consegui abrir um ficheiro temporário.\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Não consegui ler o ficheiro spec do %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-"Não consegui gravar o cabeçalho temporário\n"
-"\n"
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Dados de CSA inválidos\n"
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Não consegui reler o cabeçalho do assinatura.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Não consigo aceder ao %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Não consegui gravar o pacote: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Não consegui abrir o sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Não consegui ler o cabeçalho de %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Não consegui gravar o cabeçalho de %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Gravei: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Não consigo gerar o ficheiro de saída para o pacote %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "não consigo criar o %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "linha %d: segundo %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "As entradas de %%changelog têm de começar por *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "entrada de %%changelog incompleta\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "data inválida no %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "O %%changelog não está na ordem cronológica descendente\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "falta o nome no %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "falta a descrição no %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "linha %d: Erro ao analisar a %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "linha %d: Opção inválida %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "linha %d: Demasiados nomes: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "linha %d: O pacote não existe: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "linha %d: Segunda descrição\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "linha %d: Erro ao analisar o %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "linha %d: Número inválido: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "linha %d: Número %s inválido: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "A arquitectura está excluída: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "A arquitectura não está incluída: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "O SO está excluído: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "O SO não está incluído: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "O campo %s tem de estar presente no pacote: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Entradas %s duplicadas no pacote: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Não consegui abrir o ícone %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Não consegui ler o ícone %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Tipo de ícone desconhecido: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "linha %d: Opção só recebe um parâmetro: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "Linha %d: Opção inválida: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "linha %d: Opção em branco: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "linha %d: Os prefixos não podem acabar em \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "linha %d: A docdir tem de começar por '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "linha %d: Qualificadores %s: inválidos: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "linha %d: Formato da BuildArchitecture inválido: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Erro interno: Opção esquisita %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Descrição do pacote inválida: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "O pacote já existe: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "linha %d: Opção desconhecida: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Código-fonte inválido: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Erro ao analisar o %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "linha %d: Argumento inválido para %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "linha %d: Opção inválida do %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "linha %d: segundo %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "linha %d: os 'triggers' (que activam) têm de ter --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "linha %d: Erro ao analisar o %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "linha %d: o programa de 'script' tem de começar por '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "linha %d: Segundo %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "linha %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Incapaz de aceder ao %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Descobri um %%else sem um %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Descobri um %%endif sem um %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Não foram encontradas arquitecturas compatíveis para as quais criar\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "O pacote não tem uma %%description: %s\n"
@@ -1432,450 +1635,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Não consegui executar o %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Não consegui executar à parte o %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Não consegui encontrar o %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "a pesquisa do ficheiro spec %s falhou, não consigo analisar\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(erro 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Código de integridade inválido"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Cabeçalho inválido/ilegível"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "opção do db desconhecida: \"%s\" ignorada.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Tamanho do cabeçalho demasiado grande"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "O %s tem um valor numérico inválido, foi ignorado\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "O %s tem um valor demasiado elevado ou pequeno, foi ignorado\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "O %s tem um valor inteiro demasiado elevado ou pequeno, foi ignorado\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "não consigo trancar o %s no %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "partilhado"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exclusivo"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Tipo de ficheiro desconhecido"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Falta(m) o(s) 'hard link(s)'"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Erro interno"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Ficheiro de arquivo não está no cabeçalho"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " falhou - "
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "erro(%d) ao criar uma nova instância do pacote\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(não é um blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(não é um número)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(tipo inválido)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr ""
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(não é um base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(tipo inválido)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(não é um blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "o utilizador %s não existe - a usar o root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "o grupo %s não existe - a usar o root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s gravado como %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s criado como %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Nenhuma assinatura disponível\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:581
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "formato da opção em branco"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "nome da opção em branco"
+
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] esperado no fim do vector"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "] inesperado"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "} inesperado"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "esperado um ? na expressão"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "esperado um { a seguir ao ? na expressão"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "esperado um } na expressão"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "esperado um : a seguir à sub-expressão ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "esperado um { a seguir ao : na expressão"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "esperado um | no fim da expressão"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: O fread falhou: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "mostrar as opções de pesquisa conhecidas"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "mostra a configuração final do rpmrc e das macros"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "devolver um resultado menos detalhado"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "devolver um resultado mais detalhado"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "imprime a versão do RPM que está a usar"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "depurar a E/S da rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1896,13 +2210,13 @@ msgstr "os novos locais têm de conter um ="
msgid "relocations must have a / following the ="
msgstr "os novos locais têm de ter um / a seguir ao ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"instala todos os ficheiros, mesmo as configurações que de outro modo seriam "
"ignoradas"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1910,152 +2224,162 @@ msgstr ""
"remove todos os pacotes que correspondam a <pacote> (normalmente aparece um "
"erro se o <pacote> especifica vários pacotes)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "apaga (desinstala) o pacote"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pacote>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "não instala a documentação"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "ignorar os ficheiros com a componente inicial <dir> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<caminho>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "abreviatura para --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "actualizar o pacote(s) se já estiver instalado"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<pacote>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "mostra cardinais enquanto o pacote instala (conveniente com o -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "não verifica a arquitectura do pacote"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "não verifica o sistema operativo do pacote"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "não verifica o espaço em disco antes de instalar"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "instala a documentação"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "actualiza a base de dados, mas não altera o sistema de ficheiros"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "não verifica as dependências do pacote"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"não reorganiza a instalação dos pacotes para satisfazer as dependências"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "não executar nenhuns scripts do pacote"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "não executar o script %%pre (se existir)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "não executar o script %%post (se existir)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "não executar o script %%preun (se existir)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "não executar o script %%postun (se existir)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "não executar nenhum dos scripts activados por este pacote"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "não executar nenhum dos scripts %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "não executar nenhum dos scripts %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "não executar nenhum dos scripts %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "não executar nenhum dos scripts %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2063,369 +2387,408 @@ msgstr ""
"actualiza para um versão antiga do pacote (o --force faz isto "
"automaticamente)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "mostra percentagens enquanto o pacote instala"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "muda o pacote para <dir>, se for possível"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "muda os ficheiros de <velho> para <novo>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<velho>=<novo>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "reinstalar se o pacote já estiver presente"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "não instala, mas indica se iria funcionar ou não"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "actualizar pacote(s)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "pesquisar/verificar todos os pacotes"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "pesquisar/verificar o(s) pacote(s) que contém(êm) o ficheiro"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "pesquisar/verificar o(s) pacote(s) no grupo"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "pesquisar/verificar o(s) pacote(s) com o identificador do pacote"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "pesquisar/verificar o(s) pacote(s) com o identificador do cabeçalho"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "modo de pesquisa do rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "pesquisar/verificar o(s) pacote(s) de transacção de instalação"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "pesquisar o(s) pacote(s) activados pelo pacote"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "modo de verificação do rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "pesquisar/verificar o(s) pacote(s) que precisa duma dependência"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "pesquisar/verificar o(s) pacote(s) que oferecem uma dependência"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "listar todos os ficheiros de configuração"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "listar todos os ficheiros de documentação"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "listar todos os ficheiros de documentação"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "listar todos os ficheiros de configuração"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "apresentar a informação básica do ficheiro"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "listar os ficheiros no pacote"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "ignorar ficheiros %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "ignorar ficheiros %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "mostrar os estados dos ficheiros listados"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "não verificar os tamanho dos ficheiros"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "não verificar as ligações simbólicas dos ficheiros"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "não verificar o dono dos ficheiros"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "não verificar o grupo dos ficheiros"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "não verificar hora de modificação dos ficheiros"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "não verificar o modo dos ficheiros"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "não verificar os ficheiros no pacote"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "não verificar as dependências do pacote"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
"esperava-se um pacote com código-fonte, foi encontrado um pacote binário\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "o pacote de código-fonte não contem um ficheiro .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "a abertura do pacote falhou%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " no ficheiro "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s falhou no ficheiro %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s falhou: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "formato incorrecto: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "substituído "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "não instalado "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "partilhado"
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(sem estado) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(desconhecido %3d)"
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "o pacote nem tem um dono do ficheiro ou as listas de IDs\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "o grupo %s não contém nenhum pacote\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "nenhum pacote activa o %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "malformado %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "nenhum pacote coincide com %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "nenhum pacote precisa do %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "nenhum pacote oferece o %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "ficheiro %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "o ficheiro %s não pertence a nenhum pacote\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "número de pacote inválido: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "o pacote %s não está instalado\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NÃO-OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (FALTAM AS CHAVES:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (CHAVES SUSPEITAS:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: o acesso falhou: %s\n"
@@ -2450,212 +2813,442 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "não foi definido o dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: não consigo ler o cabeçalho em 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "não foi definido o dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "não consigo adicionar o registo originalmente em %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"falhou a reconstrução da base de dados: a base de dados original mantém-se\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "falhou a substituição da base de dados antiga pela nova!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NÃO"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "SIM"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Código de integridade inválido"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Cabeçalho inválido/ilegível"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Tamanho do cabeçalho demasiado grande"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Tipo de ficheiro desconhecido"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Erro interno"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Ficheiro de arquivo não está no cabeçalho"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " falhou - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "o acesso ao %s falhou: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "A preparar..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "o %s não pode ser instalado\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "A obter o %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "erro ao ler do ficheiros %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "não consigo aceder ao %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "A instalar o %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "a leitura falhou: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2732,797 +3325,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "encontrado o erro desconhecido %d ao manipular o pacote %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "falta o segundo ':' em %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "falta o nome da arquitectura em %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Linha de dados incompleta em %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Demasiados argumentos na linha de dados em %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Número de arq./SO errado: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Linha por omissão incompleta em %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Demasiados argumentos na linha por omissão em %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "falta um ':' (encontrado um 0x%02x) em %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "faltam argumentos para o %s em %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "falta a arquitectura para o %s em %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "má opção '%s' em %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Sistema desconhecido: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Por favor contacte o %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "não consigo abrir a base de dados Packages em %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr ""
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Não consegui reler o cabeçalho do assinatura.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr ""
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "falta um { depois do %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "falta um } depois do %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "formato da opção em branco"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "nome da opção em branco"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "opção desconhecida"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] esperado no fim do vector"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "] inesperado"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "} inesperado"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "esperado um ? na expressão"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "esperado um { a seguir ao ? na expressão"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "esperado um } na expressão"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "esperado um : a seguir à sub-expressão ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "esperado um { a seguir ao : na expressão"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "esperado um | no fim da expressão"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/verify.c:448
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "não consigo abrir o índice de %s usando o db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "não foi definido o dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:1318
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1415
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:1897
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(vazio)"
-#: lib/rpmdb.c:2349
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(vazio)\n"
-#: lib/rpmdb.c:2358
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "A macro %%%s tem as opções incompletas\n"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: não consigo ler o cabeçalho em 0x%x\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "A macro %%%s tem o conteúdo incompleto\n"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
+msgid "Macro %%%s has empty body\n"
+msgstr "A macro %%%s tem o conteúdo em branco\n"
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "erro(%d) ao criar uma nova instância do pacote\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "erro(%d) ao obter os registos \"%s\" do índice %s\n"
-
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "erro(%d) ao guardar o registo %s em %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "não foi definido o dbpath"
+msgid "Macro %%%s failed to expand\n"
+msgstr "A macro %%%s não conseguiu ser expandida\n"
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:607
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr ""
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "A macro %%%s tem um nome ilegal (%%undefine)\n"
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:637
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "não consigo adicionar o registo originalmente em %u\n"
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "Opção desconhecida %c em %s(%s)\n"
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-"falhou a reconstrução da base de dados: a base de dados original mantém-se\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "falhou a substituição da base de dados antiga pela nova!\n"
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "substituir os ficheiros em %s por ficheiros de %s a recuperar"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "falhou a remoção da directoria %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "erro do db%d (%d) do %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "erro do db%d (%d): %s\n"
+msgid "Unterminated %c: %s\n"
+msgstr "%c não terminado: %s\n"
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "não consigo trancar o %s no %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "partilhado"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exclusivo"
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "Segue-se uma macro impossível de analisar ao %%\n"
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "opção do db desconhecida: \"%s\" ignorada.\n"
+msgid "======================== active %d empty %d\n"
+msgstr "======================== activo %d vazio %d\n"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "O %s tem um valor numérico inválido, foi ignorado\n"
+msgid "error creating temporary file %s: %m\n"
+msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "O %s tem um valor demasiado elevado ou pequeno, foi ignorado\n"
+msgid "File %s: %s\n"
+msgstr "Ficheiro %s: %s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "O %s tem um valor inteiro demasiado elevado ou pequeno, foi ignorado\n"
+msgid "File %s is smaller than %u bytes\n"
+msgstr "O ficheiro %s tem menos de %u bytes\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(nenhum erro)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "erro fatal: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "erro: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "aviso: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "a alocação de memória (%u bytes) devolveu NULL.\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== activo %d vazio %d\n"
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(vazio)"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(vazio)\n"
+msgid "error delete fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "A macro %%%s tem o conteúdo incompleto\n"
+msgid "error delete directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "A macro %%%s tem um nome inválido (%%define)\n"
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: O fwrite falhou: %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "A macro %%%s tem as opções incompletas\n"
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: O fread falhou: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr "A macro %%%s tem o conteúdo em branco\n"
+msgid "%s: Fflush failed: %s\n"
+msgstr ""
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr "A macro %%%s não conseguiu ser expandida\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "A macro %%%s tem um nome ilegal (%%undefine)\n"
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "A macro %%%s (%s) não foi usada abaixo do nível %d\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "Opção desconhecida %c em %s(%s)\n"
+msgid "Could not exec %s: %s\n"
+msgstr "Não consegui executar %s: %s\n"
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr "%c não terminado: %s\n"
-
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr "Segue-se uma macro impossível de analisar ao %%\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:302
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s: %s\n"
-msgstr "Ficheiro %s: %s\n"
+msgid "gpg exec failed (%d)\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "O ficheiro %s tem menos de %u bytes\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "o gpg não conseguiu gravar a assinatura\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "incapaz de ler a assinatura\n"
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(nenhum erro)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "erro fatal: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "erro: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "aviso: "
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "a alocação de memória (%u bytes) devolveu NULL.\n"
-
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: O fwrite falhou: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: o rpmWriteSignature falhou: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: o writeLead falhou: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr "o gpg não conseguiu gravar a assinatura\n"
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "incapaz de ler a assinatura\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: o writeLead falhou: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: o rpmWriteSignature falhou: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: a leitura do manifesto falhou: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/pt_BR.po b/po/pt_BR.po
index bb742144c..a1ae3046a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/rpm/"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rpm-team/rpm/"
"language/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
@@ -45,518 +45,580 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "a criação de um pipe para o --pipe falhou: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "a execução falhou\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "o argumento não é um pacote RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "erro ao ler o cabeçalho do pacote\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "Não foi possível reabrir a carga útil: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Consultar/Verificar as opções de seleção do pacote:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opções de consulta (com -q ou --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opções de verificação (com -V ou --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opções de Instalação/Atualização/Remoção:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Opções comuns para todos os executáveis e modos rpm:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "somente um tipo de consulta/verificação pode ser feita por vez"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "sinalizador de consulta não esperado"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "formato de consulta não esperado"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "fonte de pesquisa não esperada"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "somente um modo principal pode ser especificado"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-"os arquivos somente podem ser realocados durante a instalação de pacotes"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "não é possível usar --prefix com --relocate ou --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate e --excludepath somente podem ser usados na instalação de novos "
-"pacotes"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix somente pode ser usado na instalação de novos pacotes"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "argumentos para --prefix devem começar com uma /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-"--replacepkgs somente pode ser especificado durante a instalação de pacotes"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-"--excludedocs somente pode ser especificado durante instalação de pacotes"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr ""
-"--includedocs somente pode ser especificado durante instalação de pacotes"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "somente um entre --excludedocs e --includedocs pode ser especificado"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-"--ignorearch somente pode ser especificado durante a instalação de pacotes"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-"--ignoreos somente pode ser especificado durante a instalação de pacotes"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-"--ignoresize somente pode ser especificado durante a instalação de pacotes"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-"--allmatches somente pode ser especificado durante a remoção de pacotes"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-"--allfiles somente pode ser especificado durante a instalação de pacotes"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb somente pode ser especificado durante a instalação ou remoção de "
-"pacotes"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"opções de desativação de scripts somente podem ser especificadas durante a "
-"instalação ou remoção de pacotes"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"opções de desativação de disparador somente podem ser especificadas durante "
-"a instalação ou remoção de pacotes"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "os argumentos para --root (-r) devem começar com uma /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "nenhum pacote foi passado para remoção"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "nenhum pacote foi passado para instalação"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "nenhum argumento foi passado para consulta"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "nenhum argumento foi passado para verificação"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot já especificado, ignorando %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"construir através de %prep (desempacote os fontes e aplique as correções) a "
"partir do <specfile>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
"construir através de %build (%prep, então compile) a partir do <specfile>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"construir através de %install (%prep, %build, então instale) a partir do "
"<specfile>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "verificar seção %files do <specfile>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "construir os pacotes fontes e binários a partir do <specfile>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "construir pacote binário somente a partir do <specfile>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "construir pacote fonte somente a partir do <specfile>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<pacote fonte>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"construir através de %install (%prep, %build, então instale) a partir do "
+"<pacote fonte>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"construir através de %prep (desempacote os fontes e aplique as correções) a "
"partir do <tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
"construindo através de %build (%prep, então compile) a partir do <tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"construir através de %install (%prep, %build, então instale) a partir do "
"<tarball>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verificar seção %files do <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "construir os pacotes fontes e binários a partir do <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "construir pacote binário somente a partir do <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "construir pacote fonte somente a partir do <tarball>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "construir pacote binário a partir do <pacote fonte>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<pacote fonte>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"construir através de %install (%prep, %build, então instale) a partir do "
-"<pacote fonte>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "substituir raíz da construção"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "remover a árvore de construção quando terminar"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorar ExcludeArch: diretivas do arquivo spec"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "depurar máquina de estados do arquivo"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "não executar nenhum estágio da construção"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "não verificar dependências de construção"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "não aceitar msgstr's i18N do specfile"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "remover fontes ao finalizar"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "remover specfile ao finalizar"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "pule direto para o estágio especificado (somente para c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "substituir plataforma de destino"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "opções de construção com [ <specfile> | <tarball> | <pacote fonte> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Opções comuns para todos os executáveis e modos rpm:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Falha ao construir dependências:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Não foi possível abrir o arquivo spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Não foi possível abrir o pipe do tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Falha ao ler o arquivo spec de %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Falha ao renomear %s para %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "falha ao iniciar %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "O arquivo %s não é um arquivo normal.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "O arquivo %s não parece ser um specfile.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Construindo plataformas de destino: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Construindo para o destino %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "os argumentos para --root (-r) devem começar com uma /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "Inicializar banco de dados"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"reconstruir as listas invertidas do banco de dados a partir dos cabeçalhos "
"dos pacotes instalados"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "verificar arquivos do banco de dados"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opções de banco de dados:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "somente um modo principal pode ser especificado"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "verificar a(s) assinatura(s) do pacote"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importar uma chave pública blindada"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "nenhum argumento foi passado"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Consultar/Verificar as opções de seleção do pacote:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opções de consulta (com -q ou --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opções de verificação (com -V ou --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opções de Instalação/Atualização/Remoção:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "somente um tipo de consulta/verificação pode ser feita por vez"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "sinalizador de consulta não esperado"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "formato de consulta não esperado"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "fonte de pesquisa não esperada"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+"os arquivos somente podem ser realocados durante a instalação de pacotes"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "não é possível usar --prefix com --relocate ou --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate e --excludepath somente podem ser usados na instalação de novos "
+"pacotes"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix somente pode ser usado na instalação de novos pacotes"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argumentos para --prefix devem começar com uma /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+"--replacepkgs somente pode ser especificado durante a instalação de pacotes"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+"--excludedocs somente pode ser especificado durante instalação de pacotes"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+"--includedocs somente pode ser especificado durante instalação de pacotes"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "somente um entre --excludedocs e --includedocs pode ser especificado"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+"--ignorearch somente pode ser especificado durante a instalação de pacotes"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+"--ignoreos somente pode ser especificado durante a instalação de pacotes"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+"--ignoresize somente pode ser especificado durante a instalação de pacotes"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+"--allmatches somente pode ser especificado durante a remoção de pacotes"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+"--allfiles somente pode ser especificado durante a instalação de pacotes"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb somente pode ser especificado durante a instalação ou remoção de "
+"pacotes"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opções de desativação de scripts somente podem ser especificadas durante a "
+"instalação ou remoção de pacotes"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opções de desativação de disparador somente podem ser especificadas durante "
+"a instalação ou remoção de pacotes"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "nenhum pacote foi passado para remoção"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "nenhum pacote foi passado para instalação"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "nenhum argumento foi passado para consulta"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "nenhum argumento foi passado para verificação"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "assinar pacote(s) (idêntico ao --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "remover a assinatura dos pacotes"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opções de assinatura:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Não foi possível executar %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Você deve definir o \"%%_gpg_name\" no seu arquivo de macro\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Digite a senha: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Senha ok.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "utilizar o seguinte formato de consulta"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -565,32 +627,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Executando (%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "A execução de %s falhou (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Status de saída de %s inválido (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -600,237 +667,317 @@ msgstr ""
"\n"
"Erros na construção do RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "erro de sintaxe ao analisar ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "erro de sintaxe ao analisar &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "erro de sintaxe ao analisar ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "erro de análise na expressão\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "( sem correspondência\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- somente em números\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! somente em números\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "os tipos devem corresponder\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / não são suportados para strings\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- não é suportado para strings\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& e || não são suportados para strings\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "erro de sintaxe na expressão\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "\"(\" faltando em %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "\"(\" faltando em %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Token de %s inválido: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%s faltando em %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "caractere de espaço após %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Sintaxe inválida: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Modo spec inválido: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Dirmode spec inválido: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Capacidade inválida: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Suporte à capacidade de arquivo não embutida\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "O arquivo deve começar com uma \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
"Algoritmo de digest %u do arquivo é desconhecido, utilizando o MD5 como "
"alternativa\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Arquivo listado duas vezes: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Ligação simbólica aponta para BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Arquivo não encontrado: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: não foi possível carregar a etiqueta desconhecida (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: falha ao ler a chave pública.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: não é uma chave pública blindada.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: falha ao codificar\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "falha ao criar o diretório"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "O arquivo precisa da \"/\" inicial: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "O arquivo não foi encontrado pelo glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Não foi possível abrir %%files arquivo %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "linha: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "O arquivo não foi encontrado pelo glob: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Arquivo inválido: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Proprietário/grupo inválido: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Procurando por arquivos desempacotados: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -839,549 +986,606 @@ msgstr ""
"Arquivo(s) instalado(s) (mas não empacotado(s)) encontrado(s):\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Processando arquivos: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Binários dependentes de arquitetura no pacote noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: linha: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Não foi possível canonizar o nome de máquina: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Não foi possível gravar carga útil em %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Não foi possível ler carga útil a partir de %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Não foi possível canonizar o nome de máquina: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Compactação de carga útil desconhecida: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Não foi possível criar uma região de cabeçalho imutável.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Não foi possível abrir o arquivo temporário.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Não foi possível gravar o cabeçalho temporário\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Falha ao ler o arquivo spec de %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Dados CSA inválidos\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Não foi possível recarregar o cabeçalho da assinatura.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Não foi possível abrir %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Não foi possível gravar o pacote: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Não foi possível abrir sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Não foi possível ler o cabeçalho a partir de %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Não foi possível gravar o cabeçalho em %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Gravou: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Executando \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "A execução de \"%s\" falhou.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Falha na verificação \"%s\" do pacote.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
"Não foi possível gerar o nome de arquivo de saída para o pacote %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "Não foi possível criar %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "linha %d: segundo %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "entradas do %%changelog devem começar com *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "entrada do %%changelog incompleta\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "data inválida no %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog não está na ordem cronológica decrescente\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "Nome faltando no %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "nenhuma descrição no %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "linha %d: Erro ao analisar %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "linha %d: Opção inválida %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "linha %d: Nomes em excesso: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "linha %d: O pacote não existe: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "linha %d: Segunda descrição\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "linha %d: Erro ao analisar %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "linha %d: Número inválido: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "linha %d: Número %s inválido: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "linha %d: Número %s inválido: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d definido várias vezes\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "A arquitetura está excluída: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "A arquitetura não está excluída: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "O SO está excluído: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "O SO não está incluído: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "o campo %s deve estar presente no pacote: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Entrada %s duplicada no pacote: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Não foi possível abrir o ícone %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Não foi possível ler o ícone %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Tipo de ícone desconhecido: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "linha %d: A etiqueta toma apenas um token: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "linha %d: caractere inválido \"%c\" em: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "linha %d: caractere inválido em: %s\n"
+msgid "%s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "linha %d: caractere inválido \"..\" em: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "linha %d: Etiqueta mal formada: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "linha %d: Etiqueta vazia: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "linha %d: Os prefixos não podem terminar com \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "linha %d: O docdir deve começar com \"/\": %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "linha %d: campo Epoch deve ser um número sem sinal: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "linha %d: %s inválido: qualificadores: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "linha %d: formato BuildArchitecture inválido: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "linha %d: Somente subpacotes noarch são suportados: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Erro interno: tag %d falsa\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "linha %d: %s é obsoleto: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Especificação do pacote inválida: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "O pacote já existe: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "linha %d: Etiqueta desconhecida: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} não pode ser vazio\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} não pode ser \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Fonte inválida: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Nenhum número de patch %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch não corresponde à etiqueta \"Patch:\"\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Nenhum número de fonte %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Nenhuma etiqueta \"Source:\" no arquivo .spec\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Erro ao analisar %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "linha %d: Argumento inválido para %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "linha %d: Opção inválida %s de %%setup: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "número da correção %s inválido: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "linha %d: segundo %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "linha %d: os disparadores devem ter --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "linha %d: Erro ao analisar %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "linha %d: o script interno deve terminar com \">\": %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "linha %d: o script deve começar com \"/\": %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "linha %d: Segundo %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "linha %d: script interno não suportado: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "linha %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Não foi possível abrir %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Há um %%else sem um %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Há um %%endif sem um %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Nenhuma arquitetura compatível encontrada para a construção\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "O pacote não tem %%description: %s\n"
@@ -1452,452 +1656,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignorar regex inválida %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Não foi possível criar um pipe para %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Não foi possível executar %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Não foi possível bifurcar %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "A conversão de %s para inteiro longo falhou.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Os atributos do arquivo não foram configurados\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) falhou: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load falhou: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Falha no reconhecimento do arquivo \"%s\": modo %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Localizando %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Falha ao localizar %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "a consulta ao specfile %s falhou, não foi possível analisá-lo\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(erro 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Magic inválido"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Cabeçalho inválido/impossível de ler"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "opção db não reconhecida: \"%s\" ignorado.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Tamanho do cabeçalho muito grande"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s tem um valor numérico inválido, ignorado\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s tem valor inteiro longo muito grande ou muito pequeno, ignorado\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s tem um valor inteiro muito grande ou muito pequeno, ignorado\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "não foi possível obter o bloqueio %s em %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "compartilhado"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "exclusivo"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Tipo de arquivo desconhecido"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Ligação(ões) absoluta(s) faltando"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "erro (%d) ao armazenar o registro \"%s\" em %s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Digest incompatível"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "erro (%d) ao remover o registro \"%s\" a partir de %s\n"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Erro interno"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "erro(%d) ao adicionar o registro de cabeçalho #%d\n"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Arquivo de pacote não está no cabeçalho"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "erro(%d) ao remover o registro de cabeçalho #%d\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " falhou - "
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "erro (%d) ao alocar nova instância do pacote\n"
-#: lib/depends.c:68
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s é um Delta RPM e não pode ser instalado diretamente\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Carga útil (%s) não suportada no pacote %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "o pacote %s já foi adicionado, ignorando %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "o pacote %s já foi adicionado, substituindo por %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(não é um blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(não é um número)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(não é uma sequência)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(tipo inválido)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(não é base 64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(tipo inválido)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(não é um blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(tipo xml inválido)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(não é uma assinatura OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normal"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "substituído"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "não instalado"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "compartilhado pela rede"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "cor errada"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "faltando"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(desconhecido)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(não é uma sequência)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "o usuário %s não existe - usando o root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "o grupo %s não existe - usando o root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s salvo como %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s criado como %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "etiqueta[%d]: INVÃLIDA, etiqueta %d tipo %d offset %d contagem %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: INVÃLIDO, não é hexadecimal\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: INVÃLIDO, não é binário\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: INVÃLIDO, não é binário\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "tamanho do blob(%d): INVÃLIDO, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-"offset da região: INVÃLIDA, etiqueta %d tipo %d offset %d contagem %d\n"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-"trailer da região: INVÃLIDA, etiqueta %d tipo %d offset %d contagem %d\n"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "tamanho da região: INVÃLIDO, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "tamanho hdr(%d): INVÃLIDO, a leitura retornou %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "magic hdr: INVÃLIDO\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "etiquetas hdr: INVÃLIDAS, número de etiquetas (%d) fora do intervalo\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "dados hdr: INVÃLIDOS, número de bytes (%d) fora do intervalo\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): INVÃLIDO, a leitura retornou %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "carregamento hdr: INVÃLIDO\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "formato da etiqueta vazio"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature falhou: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "nome da etiqueta vazio"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Nenhuma assinatura disponível\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead falhou: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] esperado no fim da matriz"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "] não esperado"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "} não esperado"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? esperado na expressão"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ esperado após ? na expressão"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} esperado na expressão"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": esperado após a subexpressão ?"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ esperado após : na expressão"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| esperado no fim da expressão"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iterador da matriz utilizado com diferentes tamanhos de matrizes"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread falhou: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "predefinir MACRO com valor EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "\"MACRO EXPR\""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "definir MACRO com valor EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "imprimir expansão do macro da EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "\"EXPR\""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "ler <ARQUIVO:...> ao invés do(s) arquivo(s) padrão"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<ARQUIVO:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "não verificar digest(s) dos pacotes"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "não verificar cabeçalho(s) do banco de dados ao recuperá-lo(s)"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "não verificar a(s) assinatura(s) do pacote"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "enviar stdout para CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "utilizar ROOT como o diretório de nível mais alto"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "exibir etiquetas de consulta conhecidas"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "exibir configuração final do rpmrc e do macro"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "fornece uma saída menos detalhada"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "fornece uma saída mais detalhada"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "mostra a versão do rpm que está sendo usada"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "depurar máquina de estados do arquivo de carga últil"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "depurar E/S rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: tabela de opções mal configurada (%d)\n"
@@ -1918,12 +2231,12 @@ msgstr "realocações devem conter um ="
msgid "relocations must have a / following the ="
msgstr "realocações devem conter uma / após o ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"instala todos os arquivos, até configurações que poderiam ser ignoradas"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1931,151 +2244,161 @@ msgstr ""
"remover todos os pacotes iguais ao <pacote> (normalmente um erro é gerado se "
"o <pacote> especificou múltiplos pacotes)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "realocar arquivos em pacotes não realocáveis"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "exibir loops de dependências como aviso"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "remover (desinstalar) pacote"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<pacote>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "não instalar arquivos de configuração"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "não instalar documentação"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "ignorar arquivos com componentes principais <caminho> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<caminho>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "atalho para --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "atualizar pacote(s) se já estiver(em) instalado(s)"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<arquivo_do_pacote>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "exibir cerquilhas a medida que o pacote instala (bom com -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "não verificar a arquitetura do pacote"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "não verificar o sistema operacional do pacote"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "não verificar o espaço em disco antes de instalar"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "instalar a documentação"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "instalar pacote(s)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "atualizar o banco de dados, mas não modificar o sistema de arquivos"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "não verificar as dependências do pacote"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "não verificar o digest dos arquivos"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "não verificar o digest dos arquivos (obsoleto)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "não instalar contextos de segurança dos arquivos"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "não reordenar a instalação dos pacotes para satisfazer as dependências"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "não executar scriptlet(s) do pacote"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "não executar o scriptlet %%pre (se existir)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "não executar o scriptlet %%post (se existir)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "não executar o scriptlet %%preun (se existir)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "não executar o scriptlet %%postun (se existir)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "não executar nenhum scriptlet disparado por este pacote"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "não executar nenhum scriptlet %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "não executar nenhum scriptlet %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "não executar nenhum scriptlet %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "não executar nenhum scriptlet %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "não realizar nenhuma ação de coleção"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2083,369 +2406,407 @@ msgstr ""
"atualizar para uma versão mais antiga do pacote (--force em atualizações faz "
"isso automaticamente)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "exibir porcentagens na medida em que o pacote vai sendo instalado"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "realocar o pacote para <dir>, se for realocável"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "realocar arquivos do caminho <antigo> para o <novo>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<antigo>=<novo>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ignorar conflitos de arquivos entre pacotes"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "reinstalar se o pacote já estiver presente"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "não instalar, mas dizer se a instalação funcionaria ou não"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "atualizar pacote(s)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "consultar/verificar todos os pacotes"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "modo checksig do rpm"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "consultar/verificar pacote(s) que detém o arquivo"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "consultar/verificar pacote(s) em um grupo"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "consultar/verificar um arquivo de pacote"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "consultar/verificar pacote(s) com um identificador de pacotes"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "consultar/verificar pacote(s) com um identificador de cabeçalhos"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "modo de consulta do rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "consultar/verificar uma instância do cabeçalho"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "consultar/verificar pacote(s) da transação de instalação"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "consultar o(s) pacote(s) disparado pelo pacote"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "modo de verificação do rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "consultar/verificar pacotes que precisam de uma dependência"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "consultar/verificar pacote(s) que fornecem uma dependência"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "não fazer glob com os argumentos"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "não processar arquivos que não são de pacotes como manifestos"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "listar todos os arquivos de configuração"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "listar todos os arquivos de documentação"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "listar todos os arquivos de documentação"
+msgstr ""
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "listar todos os arquivos de configuração"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "descarregar informações básicas do arquivo"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "listar arquivos do pacote"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "ignorar arquivos %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "ignorar arquivos %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "exibir o estado dos arquivos listados"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "não verificar o tamanho dos arquivos"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "não verificar o caminho da ligação simbólica dos arquivos"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "não verificar o proprietário dos arquivos"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "não verificar o grupo dos arquivos"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "não verificar a hora de modificação dos arquivos"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "não verificar o modo dos arquivos"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "não verifica as capacidades dos arquivos"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "não verificar os contextos de segurança dos arquivos"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "não verifica as capacidades dos arquivos"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "não verificar os arquivos do pacote"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "não verificar as dependências do pacote"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "não executar script(s) de verificação"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Faltando recursos do rpmlib para %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "um pacote fonte era esperado, mas um binário foi encontrado\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "o pacote fonte não contém um arquivo .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "a descompactação do arquivo falhou %s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " no arquivo "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s falhou no arquivo %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s falhou: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "formato incorreto: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(não contém arquivos)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "substituído "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "não instalado "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "compartilhado pela rede "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "cor errada "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(sem estado) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(%3d desconhecido) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "o pacote não tem listas de proprietários/grupos\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "o pacote não tem listas de proprietários nem de ids\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "o grupo %s não contém nenhum pacote\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "nenhum disparador de pacote %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "%s malformado: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "nenhum pacote corresponde com %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "nenhum pacote requer %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "nenhum pacote fornece %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "arquivo %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "o arquivo %s não pertence a nenhum pacote\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "número de pacote inválido: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "o registro %u não pôde ser lido\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "o pacote %s não está instalado\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "etiqueta desconhecida: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: a importação da chave %d falhou.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: %d não é uma chave pública blindada.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: leitura de importação falhou (%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-"%s: A região de cabeçalho imutável não pôde ser lida. Pacote corrompido?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "Não está OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (CHAVES FALTANDO:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (CHAVES NÃO CONFIÃVEIS:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: falha ao abrir: %s\n"
@@ -2470,218 +2831,449 @@ msgstr "Não foi possível alterar o diretório raiz: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Não foi possível restaurar o diretório raiz: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "nenhum dbpath foi definido\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: ignorando"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "erro (%d) ao armazenar o registro #%d em %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: o regexec falhou: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: o regcomp falhou: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: ignorando"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: cabeçalho danificado #%u recuperado -- ignorando.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: não foi possível ler o cabeçalho em 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "nenhum dbpath foi definido"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "falha ao criar o diretório %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "o cabeçalho #%u do banco de dados é inválido -- ignorando.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "não é possível adicionar o registro originalmente em %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"falha ao reconstruir o banco de dados: o banco de dados original permanece "
+"no lugar\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "falha ao substituir o banco de dados velho pela novo!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NÃO "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "SIM"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
"PreReq:, Capacidades: e Obsoletos: as dependências suportam as versões."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"Nome(s) de arquivo(s) armazenados como tuplas (dirName,baseName,dirIndex), "
"não como um caminho."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "a carga útil do pacote pode ser compactada utilizando bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "a carga útil do pacote pode ser compactada utilizando o xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "a carga útil do pacote pode ser compactada utilizando lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "o(s) arquivo(s) da carga útil do pacote tem o prefixo \"./\"."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "o nome-versão-lançamento do pacote não está fornecido implicitamente."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
"As etiquetas de cabeçalho sempre são classificadas após serem carregadas."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "o interpretador do scriptlet pode usar argumentos do cabeçalho."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
"um conjunto de arquivos de ligação absoluta podem ser instalados sem estarem "
"completos."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"scriptlets de pacotes podem acessar o banco de dados rpm durante a "
"instalação."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "suporte interno para scripts lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "o algoritmo digest é configurável por pacote"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "suporte para as capacidades de arquivo do POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "scriptlets de pacotes podem ser expandidos durante a instalação."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Magic inválido"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Cabeçalho inválido/impossível de ler"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Tamanho do cabeçalho muito grande"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Tipo de arquivo desconhecido"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Digest incompatível"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Erro interno"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Arquivo de pacote não está no cabeçalho"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " falhou - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "falha ao abrir %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: não é um pacote rpm (ou um manifesto de pacote)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Preparando..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Dependências não satisfeitas:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: não é um pacote rpm (ou um manifesto de pacote): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s não pode ser instalado\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Obtendo %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "ignorando %s - a transferência falhou\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "o pacote %s não é realocável\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "erro ao ler o arquivo %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "\"%s\" especifica múltiplos pacotes:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "Não foi possível abrir %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Instalando %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "não é um pacote rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "tipo inválido de assinatura"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "versão do pacote RPM não suportada"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "falha na leitura: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "não é um pacote rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "não foi possível criar o bloqueio de transação %s em %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "esperando pelo bloqueio de transação %s em %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Falha ao resolver o símbolo %s: %s\n"
-#: lib/rpmplugins.c:87
-#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Falha ao expandir a macro %%__collection_%s\n"
-
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Plugin %s not loaded\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:149
+#: lib/rpmplugins.c:199
#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
+msgid "Plugin %s not loaded\n"
msgstr ""
#: lib/rpmprob.c:109
@@ -2760,798 +3352,633 @@ msgstr "%s tornou-se obsoleto pelo(a) %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "erro desconhecido %d encontrado ao manipular o pacote %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "segundo \":\" faltando em %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "nome da arquitetura faltando em %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Linha de dados incompleta em %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Argumentos em excesso na linha de dados em %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Número de arquitetura/SO inválido: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Linha padrão incompleta em %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Argumentos em excesso na linha padrão em %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "\":\" faltando (0x%02x encontrado) em %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "argumento faltando para %s em %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "não foi possível abrir %s em %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "arquitetura faltando para %s em %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "opção inválida \"%s\" em %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Sistema desconhecido: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Por favor, contate %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Não foi possível abrir %s para leitura: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "suporte a scriptlet <lua> não embutido\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Não foi possível criar um arquivo temporário para %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Não foi possível duplicar o descritor do arquivo: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "o scriptlet %s falhou, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "o scriptlet %s falhou, sinal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "o scriptlet %s falhou, status de saída %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Formato desconhecido"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "instalar"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "apagar"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "não foi possível abrir o banco de dados de pacotes em %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "\"(\" extra no rótulo do pacote: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "\"(\" faltando no rótulo do pacote: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "\")\" faltando no rótulo do pacote: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: falha na leitura da chave pública.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transação"
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh size(%d): INVÃLIDO, a leitura retornou %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: INVÃLIDO\n"
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh tags: INVÃLIDO, número de etiquetas (%d) fora do intervalo\n"
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh data: INVÃLIDO, número de bytes (%d) fora do intervalo\n"
-
-#: lib/signature.c:123
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): INVÃLIDO, a leitura retornou %d\n"
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh tag[%d]: INVÃLIDO, etiqueta %d tipo %d offset %d contagem %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh load: INVÃLIDO\n"
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh pad(%zd): INVÃLIDO, %zd bytes lidos\n"
-
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): INVÃLIDO, fstat(2) falhou\n"
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "A região de cabeçalho imutável não pôde ser lida. Pacote corrompido?\n"
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "Digest MD5:"
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Digest do cabeçalho SHA1:"
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "Cabeçalho "
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:158
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr "ignorado"
-
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr "falhou"
-
-#: lib/verify.c:372
+#: lib/rpmvs.c:178
#, c-format
-msgid "missing %c %s"
-msgstr "%c %s faltando"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Dependências não satisfeitas para %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "{ faltando após %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "} faltando após %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "formato da etiqueta vazio"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "nome da etiqueta vazio"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "etiqueta desconhecida"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] esperado no fim da matriz"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "] não esperado"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "} não esperado"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? esperado na expressão"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ esperado após ? na expressão"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} esperado na expressão"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": esperado após a subexpressão ?"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ esperado após : na expressão"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| esperado no fim da expressão"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iterador da matriz utilizado com diferentes tamanhos de matrizes"
-
-#: lib/rpmdb.c:97
+#: lib/rpmvs.c:188
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "não foi possível abrir o índice %s usando o db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/rpmvs.c:195
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "nenhum dbpath foi definido\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: ignorando"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "erro (%d) ao armazenar o registro #%d em %s\n"
-
-#: lib/rpmdb.c:1415
+#: lib/rpmvs.c:206
#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: o regexec falhou: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: o regcomp falhou: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: ignorando"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: cabeçalho danificado #%u recuperado -- ignorando.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "erro(%d) ao adicionar o registro de cabeçalho #%d\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "erro(%d) ao remover o registro de cabeçalho #%d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: não foi possível ler o cabeçalho em 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "erro (%d) ao definir registros \"%s\" a partir do índice %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "erro (%d) ao armazenar o registro \"%s\" em %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "erro (%d) ao remover o registro \"%s\" a partir de %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "erro (%d) ao alocar nova instância do pacote\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "erro (%d) ao obter os registros \"%s\" a partir do índice %s\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "erro (%d) ao armazenar o registro %s em %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "nenhum dbpath foi definido"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "falha ao criar o diretório %s: %s\n"
-
-#: lib/rpmdb.c:2910
+#: lib/rpmvs.c:261
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "o cabeçalho #%u do banco de dados é inválido -- ignorando.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "não é possível adicionar o registro originalmente em %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+msgid "%s%s %s"
msgstr ""
-"falha ao reconstruir o banco de dados: o banco de dados original permanece "
-"no lugar\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "falha ao substituir o banco de dados velho pela novo!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "substituir arquivos em %s com arquivos de %s para recuperação"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "falha ao remover o diretório %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "erro db%d (%d) de %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "erro db%d (%d): %s\n"
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "não foi possível obter o bloqueio %s em %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "compartilhado"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "exclusivo"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "opção db não reconhecida: \"%s\" ignorado.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s tem um valor numérico inválido, ignorado\n"
-
-#: lib/backend/dbconfig.c:190
+#: lib/rpmvs.c:268
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s tem valor inteiro longo muito grande ou muito pequeno, ignorado\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s tem um valor inteiro muito grande ou muito pequeno, ignorado\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "%s%s"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Cabeçalho "
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Não foi possível recarregar o cabeçalho da assinatura.\n"
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
+#: lib/transaction.c:1397
+msgid "skipped"
+msgstr "ignorado"
+
+#: lib/transaction.c:1397
+msgid "failed"
+msgstr "falhou"
-#: plugins/sepolicy.c:416
+#: lib/verify.c:263
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: lib/verify.c:284
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: lib/verify.c:448
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "%c %s faltando"
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
+#: lib/verify.c:503
+#, c-format
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Dependências não satisfeitas para %s:\n"
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== %d ativo %d vazio\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(vazio)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(vazio)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "O macro %%%s tem um corpo incompleto\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "O macro %%%s tem opções incompletas\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "O macro %%%s tem um nome inválido (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "O macro %%%s tem um corpo incompleto\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "O macro %%%s tem opções incompletas\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "O macro %%%s tem um corpo vazio\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "O macro %%%s falhou ao expandir\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "O macro %%%s tem um nome inválido (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "O macro %%%s (%s) não foi usado abaixo do nível %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Opção desconhecida %c em %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "%c incompleto: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Um %% é seguido por um macro não analisável\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== %d ativo %d vazio\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "erro ao criar o arquivo temporário %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Arquivo %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "O arquivo %s tem menos de %u bytes\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "falha ao criar o diretório"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr ""
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(sem erros)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "erro fatal: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "erro: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "aviso: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "sintaxe inválida no scriptlet lua: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "sintaxe inválida no script lua: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "falha no script lua: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "sintaxe inválida no arquivo lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "falha na conexão lua: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(sem erros)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "erro fatal: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "erro: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "aviso: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "a alocação de memória (%u bytes) retornou NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, ID da chave %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(nada)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite falhou: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread falhou: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush falhou: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Não foi possível criar um canal para assinar: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "Não foi possível executar %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "a execução do gpg falhou (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "o gpg falhou ao gravar a assinatura\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "não foi possível ler a assinatura\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "o rpmMkTemp falhou\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead falhou: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature falhou: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr ""
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature falhou: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead falhou: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: falha na leitura do manifesto: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "não verificar a assinatura do cabeçalho+carga útil"
diff --git a/po/rpm.pot b/po/rpm.pot
index a5188da2f..a2881502a 100644
--- a/po/rpm.pot
+++ b/po/rpm.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -43,487 +43,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr ""
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr ""
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr ""
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:125
-msgid "unexpected query flags"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
msgstr ""
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
msgstr ""
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
msgstr ""
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:216
+msgid "remove build tree when done"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:220
+msgid "debug file state machine"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
msgstr ""
-#: rpmqv.c:256
-msgid "no packages given for erase"
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmqv.c:314
-msgid "no arguments given for verify"
+#: rpmbuild.c:234
+#, c-format
+msgid "do not execute %check stage of the build"
+msgstr ""
+
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
+msgstr ""
+
+#: rpmbuild.c:239
+msgid "remove sources when done"
+msgstr ""
+
+#: rpmbuild.c:241
+msgid "remove specfile when done"
+msgstr ""
+
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
+msgstr ""
+
+#: rpmbuild.c:245
+msgid "override target platform"
+msgstr ""
+
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:99
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr ""
+
+#: rpmbuild.c:300
#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:120
+#: rpmbuild.c:363
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:401
+#, c-format
+msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:479
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:556
+#, c-format
+msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:564
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgid "Building for target %s\n"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
-msgid "<tarball>"
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
msgstr ""
-#: rpmbuild.c:145
-msgid "build through %build (%prep, then compile) from <tarball>"
+#: rpmdb.c:21
+msgid "initialize database"
msgstr ""
-#: rpmbuild.c:148
-msgid "build through %install (%prep, %build, then install) from <tarball>"
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmbuild.c:151
-#, c-format
-msgid "verify %files section from <tarball>"
+#: rpmdb.c:26
+msgid "verify database files"
msgstr ""
-#: rpmbuild.c:154
-msgid "build source and binary packages from <tarball>"
+#: rpmdb.c:28
+msgid "export database to stdout header list"
msgstr ""
-#: rpmbuild.c:157
-msgid "build binary package only from <tarball>"
+#: rpmdb.c:31
+msgid "import database from stdin header list"
msgstr ""
-#: rpmbuild.c:160
-msgid "build source package only from <tarball>"
+#: rpmdb.c:38
+msgid "Database options:"
msgstr ""
-#: rpmbuild.c:164
-msgid "build binary package from <source package>"
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
msgstr ""
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmkeys.c:22
+msgid "import an armored public key"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmbuild.c:173
-msgid "remove build tree when done"
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
msgstr ""
-#: rpmbuild.c:175
-msgid "ignore ExcludeArch: directives from spec file"
+#: rpmkeys.c:36
+msgid "Keyring options:"
msgstr ""
-#: rpmbuild.c:177
-msgid "debug file state machine"
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
msgstr ""
-#: rpmbuild.c:179
-msgid "do not execute any stages of the build"
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
msgstr ""
-#: rpmbuild.c:181
-msgid "do not verify build dependencies"
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
msgstr ""
-#: rpmbuild.c:183
-msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
msgstr ""
-#: rpmbuild.c:187
-#, c-format
-msgid "do not execute %clean stage of the build"
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
msgstr ""
-#: rpmbuild.c:189
-#, c-format
-msgid "do not execute %check stage of the build"
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
msgstr ""
-#: rpmbuild.c:192
-msgid "do not accept i18N msgstr's from specfile"
+#: rpmqv.c:126
+msgid "unexpected query flags"
msgstr ""
-#: rpmbuild.c:194
-msgid "remove sources when done"
+#: rpmqv.c:129
+msgid "unexpected query format"
msgstr ""
-#: rpmbuild.c:196
-msgid "remove specfile when done"
+#: rpmqv.c:132
+msgid "unexpected query source"
msgstr ""
-#: rpmbuild.c:198
-msgid "skip straight to specified stage (only for c,i)"
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
-msgid "override target platform"
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
msgstr ""
-#: rpmbuild.c:217
-msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
msgstr ""
-#: rpmbuild.c:237
-msgid "Failed build dependencies:\n"
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:255
-#, c-format
-msgid "Unable to open spec file %s: %s\n"
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
msgstr ""
-#: rpmbuild.c:317
-#, c-format
-msgid "Failed to open tar pipe: %m\n"
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
msgstr ""
-#: rpmbuild.c:336
-#, c-format
-msgid "Failed to read spec file from %s\n"
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:348
-#, c-format
-msgid "Failed to rename %s to %s: %m\n"
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
msgstr ""
-#: rpmbuild.c:419
-#, c-format
-msgid "failed to stat %s: %m\n"
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:423
-#, c-format
-msgid "File %s is not a regular file.\n"
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:430
-#, c-format
-msgid "File %s does not appear to be a specfile.\n"
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
msgstr ""
-#: rpmbuild.c:496
-#, c-format
-msgid "Building target platforms: %s\n"
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
msgstr ""
-#: rpmbuild.c:504
-#, c-format
-msgid "Building for target %s\n"
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
msgstr ""
-#: rpmdb.c:22
-msgid "initialize database"
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
msgstr ""
-#: rpmdb.c:24
-msgid "rebuild database inverted lists from installed package headers"
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
msgstr ""
-#: rpmdb.c:27
-msgid "verify database files"
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
msgstr ""
-#: rpmdb.c:33
-msgid "Database options:"
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
msgstr ""
-#: rpmkeys.c:24
-msgid "verify package signature(s)"
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:26
-msgid "import an armored public key"
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:28
-msgid "don't import, but tell if it would work or not"
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
-msgid "list keys from RPM keyring"
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
msgstr ""
-#: rpmkeys.c:40
-msgid "Keyring options:"
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
-msgid "no arguments given"
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr ""
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr ""
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
+msgid "Signature options:"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -532,473 +594,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr ""
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2039 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
+msgid "Bad file: %s: %s\n"
msgstr ""
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:434
#, c-format
-msgid "Could not open %s: %s\n"
+msgid "Failed to read %jd bytes in file %s: %s\n"
msgstr ""
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:468
+#: build/pack.c:453
#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:479
+#: build/pack.c:520
#, c-format
-msgid "Unable to read header from %s: %s\n"
+msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:489
+#: build/pack.c:527
#, c-format
-msgid "Unable to write header to %s: %s\n"
+msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1006,341 +1141,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1411,450 +1615,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:810
+msgid "exclusive"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr ""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr ""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1875,527 +2190,576 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr ""
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr ""
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
+#: lib/poptQV.c:197
msgid "list all license files"
msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+msgid "list all artifact files"
+msgstr ""
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr ""
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr ""
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr ""
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
-#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr ""
-
-#: lib/rpmchecksig.c:128
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
msgstr ""
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2420,212 +2784,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr ""
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2699,796 +3292,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr ""
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr ""
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:261
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
+#: lib/rpmvs.c:268
#, c-format
-msgid "missing %c %s"
+msgid "%s%s"
msgstr ""
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:263
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: lib/verify.c:284
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:2349
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:2358
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2448
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:551
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:557
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:562
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:566
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:607
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:637
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/macro.c:1182
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/macro.c:1197
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/macro.c:1578
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: plugins/sepolicy.c:218
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+msgid "File %s: %s\n"
msgstr ""
-#: plugins/sepolicy.c:231
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+#: rpmio/rpmlog.c:194
+msgid "error: "
msgstr ""
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: rpmio/macro.c:185
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: rpmio/macro.c:323
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/macro.c:364
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%3d<%*s(empty)\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: rpmio/macro.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:208
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:221
#, c-format
-msgid "File %s: %s\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:270
#, c-format
-msgid "File %s is smaller than %u bytes\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: sign/rpmgensig.c:302
#, c-format
-msgid "invalid syntax in lua script: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: sign/rpmgensig.c:312
#, c-format
-msgid "lua script failed: %s\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/ru.po b/po/ru.po
index 9628937ea..5d927c0de 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -3,21 +3,23 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# pbludov <pbludov@gmail.com>, 2017
+# pbludov <pbludov@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/rpm/language/"
-"ru/)\n"
+"Language-Team: Russian (http://www.transifex.com/rpm-team/rpm/language/ru/)\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
+"%100>=11 && n%100<=14)? 2 : 3);\n"
#: cliutils.c:21 lib/poptI.c:29
#, c-format
@@ -45,508 +47,571 @@ msgstr "Эту программу можно Ñвободно раÑпроÑÑ‚Ñ€
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "запуÑк не удалÑÑ\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "заданный аргумент не ÑвлÑетÑÑ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð¼ RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° из пакета\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "невозможно повторно открыть payload: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Параметры запроÑа (Ñ -q или --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Параметры проверки (Ñ -V или --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Параметры УÑтановки/ОбновлениÑ/УдалениÑ:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Общие параметры Ð´Ð»Ñ Ð²Ñех режимов и компонентов rpm:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "за один раз может быть иÑполнен только один тип проверки или запроÑа"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "неожиданные флаги запроÑа"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "неожиданный формат запроÑа"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "неожиданный иÑточник запроÑа"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "может быть указан только один из оÑновных режимов"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "файлы могут быть перемещены только при уÑтановке пакета"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "--prefix Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ñ --relocate или --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"варианты --relocate и --excludepath можно иÑпользовать только при уÑтановке "
-"новых пакетов"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "вариант --prefix можно иÑпользовать только при уÑтановке новых пакетов"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "аргументы Ð´Ð»Ñ --prefix должны начинатьÑÑ Ñ /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr ""
-"может быть иÑпользован только один из параметров --excludedocs или --"
-"includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches может быть указан только при удалении пакета"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles может быть указан только при уÑтановке пакета"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb может быть указан только при уÑтановке или удалении пакета"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"параметры запрета Ñценариев могут быть указаны только при уÑтановке или "
-"удалении пакета"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"параметры запрета триггеров могут быть указан только при уÑтановке или "
-"удалении пакета(ов)"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "аргументы Ð´Ð»Ñ --root (-r) должны начинатьÑÑ Ñ /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "не заданы пакеты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "не заданы пакеты Ð´Ð»Ñ ÑƒÑтановки"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "не заданы аргументы запроÑа"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "не заданы аргументы Ð´Ð»Ñ Ð²ÐµÑ€Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot уже указан, %s игнорируетÑÑ\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"выполнить по Ñтадию %prep (развернуть иÑходники и наложить заплаты) из <файл "
"Ñпецификации>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<файл Ñпецификации>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
"выполнить по Ñтадию %build (%prep, затем компилÑциÑ) из <файл Ñпецификации>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"выполнить по Ñтадию %install (%prep, %build, затем уÑтановка) из <файл "
"Ñпецификации>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "проверить раздел %files из <файл Ñпецификации>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "Ñобрать иÑходный и двоичный пакеты по <файл Ñпецификации>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "Ñобрать двоичный пакет по <файл Ñпецификации>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "Ñобрать иÑходный пакет по <файлу Ñпецификации>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<иÑходный пакет>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"выполнить по Ñтадию %install (%prep, %build, затем уÑтановка) из <иÑходный "
+"пакет>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"выполнить по Ñтадию %prep (развернуть иÑходники и наложить заплаты) из "
"<архив tar>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<архив tar>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "выполнить по Ñтадию %build (%prep, затем компилÑциÑ) из <архив tar>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"выполнить по Ñтадию %install (%prep, %build, затем уÑтановка) из <архив tar>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "проверить Ñекцию %files из <архив tar>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "Ñобрать иÑходный и двоичный пакеты из <архив tar>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "Ñобрать двоичный пакет из <архив tar>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "Ñобрать иÑходный пакет из <архив tar>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "Ñобрать двоичный пакет из <иÑходный пакет>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<иÑходный пакет>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"выполнить по Ñтадию %install (%prep, %build, затем уÑтановка) из <иÑходный "
-"пакет>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "переопределить build root"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ дерево иÑходников"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "игнорировать ExcludeArch: в файле конфигурации"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "отладка машины ÑоÑтоÑÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "не выполнÑÑ‚ÑŒ никаких Ñтапов Ñборки"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "не проверÑÑ‚ÑŒ завиÑимоÑти пакета перед Ñборкой"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "игнорировать Ñтроки i18N из файла Ñпецификации"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ иÑходники"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ файл Ñпецификации"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "перейти непоÑредÑтвенно к указанному Ñтапу (только Ð´Ð»Ñ c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "переопределить целевую платформу"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"Параметры Ñборки Ñ [ <файл Ñпецификации> | <тар архив> | <иÑходный пакет> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Общие параметры Ð´Ð»Ñ Ð²Ñех режимов и компонентов rpm:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Ðеудовлетворенные завиÑимоÑти Ñборки:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° Ñпецификации %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð° tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° Ñпецификации из %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Ðевозможно переименовать %s в %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "невозможно получить информацию о %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Ðе обычный файл: %s.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Файл %s не похож на файл Ñпецификации.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Платформы Ð´Ð»Ñ Ñборки: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Сборка Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "аргументы Ð´Ð»Ñ --root (-r) должны начинатьÑÑ Ñ /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "инициализировать базу данных"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"переиндекÑировать базу инвертированных ÑпиÑков из уÑтановленных заголовков "
"пакетов"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "проверить файлы базы данных"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Параметры базы данных"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "может быть указан только один из оÑновных режимов"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "проверить подпиÑÑŒ(и) пакета"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "импортировать открытый ключ"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "не заданы аргументы"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Параметры запроÑа (Ñ -q или --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Параметры проверки (Ñ -V или --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Параметры УÑтановки/ОбновлениÑ/УдалениÑ:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "за один раз может быть иÑполнен только один тип проверки или запроÑа"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "неожиданные флаги запроÑа"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "неожиданный формат запроÑа"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "неожиданный иÑточник запроÑа"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "файлы могут быть перемещены только при уÑтановке пакета"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ñ --relocate или --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"варианты --relocate и --excludepath можно иÑпользовать только при уÑтановке "
+"новых пакетов"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "вариант --prefix можно иÑпользовать только при уÑтановке новых пакетов"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "аргументы Ð´Ð»Ñ --prefix должны начинатьÑÑ Ñ /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) может быть указан только при уÑтановке или удалении пакета"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent может быть указан только при уÑтановке или удалении пакета"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr ""
+"может быть иÑпользован только один из параметров --excludedocs или --"
+"includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches может быть указан только при удалении пакета"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles может быть указан только при уÑтановке пакета"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb может быть указан только при уÑтановке или удалении пакета"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"параметры запрета Ñценариев могут быть указаны только при уÑтановке или "
+"удалении пакета"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"параметры запрета триггеров могут быть указаны только при уÑтановке или "
+"удалении пакета"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps может быть указан только при уÑтановке, удалении или проверке пакета"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test может быть указан только при уÑтановке или удалении пакета"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "не заданы пакеты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "не заданы пакеты Ð´Ð»Ñ ÑƒÑтановки"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "не заданы аргументы запроÑа"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "не заданы аргументы Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "подпиÑать пакет(Ñ‹)"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "подпиÑать пакет (то же Ñамое что --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "удалить подпиÑи пакета"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Параметры подпиÑи:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Ðевозможно выполнить %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Ð’Ñ‹ должны уÑтановить \"%%_gpg_name\" в вашем макрофайле\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Введите ключевую фразу: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "ÐšÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° принÑта.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "иÑпользуйте Ñледующий формат запроÑа"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -555,32 +620,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "ВыполнÑетÑÑ(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Выполнить %s не удалоÑÑŒ (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Ðеверный код возврата из %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -590,235 +660,315 @@ msgstr ""
"\n"
"Ошибки Ñборки пакетов:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "ÑинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при анализе ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "ÑинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при анализе &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "ÑинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при анализе ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "ошибка анализа выражениÑ\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "Ð½ÐµÐ·Ð°ÐºÑ€Ñ‹Ñ‚Ð°Ñ (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- только Ð´Ð»Ñ Ñ‡Ð¸Ñел\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! только Ð´Ð»Ñ Ñ‡Ð¸Ñел\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "типы должны Ñовпадать\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / не поддерживаетÑÑ Ð´Ð»Ñ Ñтрок\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- не поддерживаетÑÑ Ð´Ð»Ñ Ñтрок\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& и || не поддерживаютÑÑ Ð´Ð»Ñ Ñтрок\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "ÑинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в выражении\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "ОтÑутÑтвует '(' в %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "отÑутÑтвует ')' в %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Ðеверный токен %s: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "ОтÑутÑтвует %s в %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Ðе пробел Ñледует поÑле %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Ðеверный ÑинтакÑиÑ: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Ðеверные права: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Ðеверные права на каталог %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Файл должен начинатьÑÑ Ñ \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Ðе удаетÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ‚ÑŒ файл %u, возврат к MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Файл указан дважды: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "СимволичеÑÐºÐ°Ñ ÑÑылка указывает на BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Файл не найден: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: Ñто не открытый ключ.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "не удалоÑÑŒ Ñоздать каталог"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Файл должен начинатьÑÑ Ñ \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Файл не найден: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "Ñтрока: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Файл не найден: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Ðеверный файл %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¿Ð°Ñ€Ð° владелец/группа: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Проверка на неупакованный(е) файл(ы): %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -827,548 +977,605 @@ msgstr ""
"Обнаружен(Ñ‹) уÑтановленный(е) (но не упакованный(е)) файл(Ñ‹):\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
-msgstr "Двоичные данные Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑƒÑ‚Ñ€Ð¾Ð¹ в пакете noarch\n"
+msgstr "Двоичные данные Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¹ в пакете noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Ðевозможно канонизировать Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð°: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Ðевозможно запиÑать Ñодержимое в %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Ðевозможно прочитать Ñодержимое из %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Ðевозможно канонизировать Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð°: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Ðевозможно помеÑтить заголовок в нерперывную облаÑÑ‚ÑŒ памÑти.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Ðевозможно открыть временный файл.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Ðевозможно запиÑать временный заголовок\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° Ñпецификации из %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Ðеверные данные CSA\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Ðевозможно перезагрузить заголовок подпиÑи.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Ðевозможно открыть %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Ðевозможно запиÑать пакет: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Ðевозможно открыть цель подпиÑи %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Ðевозможно прочитать заголовок из %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Ðевозможно запиÑать заголовок в %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "ЗапиÑан: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Выполнение \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Выполнение \"%s\" не удалоÑÑŒ.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Ðевозможно Ñоздать Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "невозможно Ñоздать %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
-msgstr "Ñтрока %d: второе %s\n"
+msgstr "Ñтрока %d: %s повторно\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "запиÑи %%changelog должны начинатьÑÑ Ñ *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "Ð½ÐµÐ¿Ð¾Ð»Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° в %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog не в ниÑходÑщем хронологичеÑком порÑдке\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "пропущено Ð¸Ð¼Ñ Ð² %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "нет опиÑÐ°Ð½Ð¸Ñ Ð² %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "Ñтрока %d: %%changelog повторно\n"
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "Ñтрока %d: Ошибка анализа %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "Ñтрока %d: Ðеверный параметр %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "Ñтрока %d: Слишком много имен: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "Ñтрока %d: Пакет не ÑущеÑтвует: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "Ñтрока %d: Второе опиÑание\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "Ñтрока %d: Ошибка разбора %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "Ñтрока %d: Ðеверное чиÑло: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "Ñтрока %d: Ðеверное чиÑло %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Загрузка %s в %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Ðевозможно загрузить %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Ðрхитектура иÑключена: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Ðрхитектура не включена: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "ОС иÑключена: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "ОС не включена: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "Поле %s обÑзано приÑутÑтвовать в пакете: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "ПовторÑющиеÑÑ Ð·Ð°Ð¿Ð¸Ñи %s в пакете: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Ðевозможно открыть пиктограмму %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Ðевозможно прочитать пиктограмму %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "ÐеизвеÑтный тип пиктограммы: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "Ñтрока %d: Ярлык требует только один аргумент: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr ""
+msgid "line %d: %s in: %s\n"
+msgstr "Ñтрока %d: %s в: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr ""
+msgid "%s in: %s\n"
+msgstr "%s в: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "ÐедопуÑтимый Ñимвол '%c' (0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ \"..\""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "Ñтрока %d: Ðеверный Ñ‚Ñг: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "Ñтрока %d: ПуÑтой Ñ‚Ñг: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "Ñтрока %d: ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð½Ðµ может заканчиватьÑÑ Ð½Ð° \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "Ñтрока %d: Docdir должен начинатьÑÑ Ñ '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "Ñтрока %d: Ðеверное чиÑло %s: определÑет: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "Ñтрока %d: Ðеверный формат BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ÐеизвеÑтный Ñрлык %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Пакет уже ÑущеÑтвует: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "Ñтрока %d: ÐеизвеÑтный Ñ‚Ñг: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
-msgstr ""
+msgstr "%%{buildroot} не может быть пуÑтой\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
-msgstr ""
+msgstr "%%{buildroot} не может быть \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Ðеверный иÑходник: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
-msgstr ""
+msgstr "Ðет заплаты номер %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
-msgstr ""
+msgstr "Ðет иÑходника номер %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Ошибка анализа %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "Ñтрока %d: Ðеверный аргумент Ð´Ð»Ñ %%setup %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "Ñтрока %d: Ðеверный параметр %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "Ñтрока %d: второй %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "Ð’ триггерах файлов допуÑтимы только абÑолютные пути"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
-msgstr ""
+msgstr "Ñтрока %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "Ñтрока %d: триггеры должны Ñодержать --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "Ñтрока %d: Ошибка анализа %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
-msgstr ""
+msgstr "Ñтрока %d: внутренние Ñценарии должны заканчиватьÑÑ Ð½Ð° '>': %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "Ñтрока %d: Программы в ÑценариÑÑ… должны начинатьÑÑ Ñ '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr "Ñтрока %d: Приоритеты разрешены только Ð´Ð»Ñ Ñ‚Ñ€Ð¸Ð³Ð³ÐµÑ€Ð¾Ð² файлов: %s\n"
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "Ñтрока %d: Второе %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "Ñтрока %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ðевозможно открыть %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
-msgstr ""
+msgstr "%s:%d: Ð”Ð»Ñ %s требуетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
-msgstr ""
+msgstr "%s:%d: плохое %%if уÑловие\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Ðайден %%else без %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Ðайден %%endif без %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "кодировка %s не поддерживаетÑÑ ÑиÑтемой\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Ðе найдены ÑовмеÑтимые архитектуры Ð´Ð»Ñ Ñборки.\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Пакет не имеет %%description: %s\n"
@@ -1439,450 +1646,562 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Ðевозможно выполнить %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Сбой Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s не удалоÑÑŒ: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "не удалоÑÑŒ запиÑать вÑе данные в %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Идет поиÑк %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Ðевозможно найти %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñ„Ð°Ð¹Ð»Ð° Ñпецификации %s не удалÑÑ, невозможно разобрать файл\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(ошибка 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s ошибка(%d) из %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Ðеверный magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s ошибка(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Ðеверный/нечитаемый заголовок"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "неопознанный параметр базы данных: \"%s\" проигнорирован\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Заголовок Ñлишком велик"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "неверное чиÑловое значение %s, пропущено\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s имеет Ñлишком малую или Ñлишком большую величину long, пропущено\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
+"%s имеет Ñлишком малую или Ñлишком большую величину integer, пропущено\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "ÐеизвеÑтный тип файла"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "невозможно получить блокировку %s на %s/%s\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "ОтÑутÑтвует жеÑÑ‚ÐºÐ°Ñ ÑÑылка"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "разделÑемый"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "иÑключительный"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Файл архива не найден в заголовке пакета"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "ошибка(%d) ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи \"%s\" в %s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " не удалоÑÑŒ - "
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "ошибка(%d) ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи %s из %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "ошибка(%d) Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼Ñти Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð·Ð° нового пакета\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s ÑвлÑетÑÑ Delta RPM и не может быть уÑтановлен напрÑмую\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "пакет %s был уже добавлен, пропуÑкаем %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "пакет %s уже был добавлен, заменÑетÑÑ %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(не двоичный объект)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(не чиÑло)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(не Ñтрока)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(неправильный тип)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(не base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(неправильный тип)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(not a blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(неверный тип xml)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(не подпиÑÑŒ формата OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "нормальный"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "перемещен"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "не уÑтановлен"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(неизвеÑтный)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(не Ñтрока)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "пользователь %s не ÑущеÑтвует - иÑпользуетÑÑ root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "группа %s не ÑущеÑтвует - иÑпользуетÑÑ root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s Ñохранен как %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s Ñоздан как %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: ПодпиÑÑŒ недоÑтупна\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:581
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "пуÑтой формат Ñ‚Ñга"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "пуÑтое Ð¸Ð¼Ñ Ñ‚Ñга"
+
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "в конце маÑÑива ожидалаÑÑŒ \"]\""
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ \"]\""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ \"}\""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "в выражении ожидалоÑÑŒ \"?\""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "в выражении поÑле \"?\" ожидалоÑÑŒ \"{\""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "в выражении ожидалоÑÑŒ \"}\""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "в выражении поÑле \"?\" ожидалоÑÑŒ \":\""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "в выражении поÑле \":\" ожидалоÑÑŒ \"{\""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "в конце Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð»ÑÑ \"|\""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: ошибка Fread: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "преопределить MACRO Ñо значением EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MACRO EXPR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "определить MACRO Ñо значением EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "вывеÑти значение макроÑа EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'EXPR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "иÑпользовать <FILE:...> вмеÑто файла(ов) по умолчанию"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "не проверÑÑ‚ÑŒ дайджеÑÑ‚ пакета(ов)"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "не проверÑÑ‚ÑŒ заголовки, извлекаемые из базы данных"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "не проверÑÑ‚ÑŒ подпиÑÑŒ(и) в пакете(ах)"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "поÑлать Ñтандартный вывод в CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "иÑпользовать ROOT как корневой каталог"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "отобразить извеÑтные ключи запроÑа"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "показать текущее значение rpmrc и макроÑов"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "выводить минимум Ñообщений"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "выводить более детальные ÑообщениÑ"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "вывеÑти номер верÑии Ñтой прграммы"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "отладка машины ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ñоединенных файлов "
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "отладка процеÑÑа ввода/вывода rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: таблица параметров неправильно наÑтроена (%d)\n"
@@ -1903,13 +2222,13 @@ msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ñодержать ="
msgid "relocations must have a / following the ="
msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ иметь / поÑле ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"уÑтанавливать вÑе файлы, даже конфигурационные, которые могли бы быть "
"пропущены"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1917,151 +2236,161 @@ msgstr ""
"удалить вÑе пакеты, Ñовпадающие Ñ <пакет> (обычно, еÑли <пакет> "
"ÑоответÑтвует неÑкольким пакетам, генерируетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "удалить (деинÑталлировать) пакет"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<пакет>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
-msgstr ""
+msgstr "не уÑтанавливать конфигурационные файлы"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "не уÑтанавливать документацию"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "пропуÑтить файлы в пути <путь>"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<путь>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "Ñокращение Ð´Ð»Ñ --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "обновить пакет(Ñ‹) еÑли уже уÑтановлен"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<файл пакета>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "выводить \"#\" по мере уÑтановки пакета (хорошо Ñ -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "не проверÑÑ‚ÑŒ архитектуру пакета"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "не проверÑÑ‚ÑŒ операционную ÑиÑтему пакета"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "не проверÑÑ‚ÑŒ диÑковое проÑтранÑтво перед уÑтановкой"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "уÑтановить документацию"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "уÑтановить пакет(Ñ‹)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "обновить базу данных, но не модифицировать файловую ÑиÑтему"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "не проверÑÑ‚ÑŒ завиÑимоÑти пакета"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "не менÑÑ‚ÑŒ порÑдок уÑтановки пакетов Ð´Ð»Ñ ÑƒÐ´Ð¾Ð²Ð»ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "не иÑполнÑÑ‚ÑŒ никаких Ñценариев пакета(ов)"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "не иÑполнÑÑ‚ÑŒ %%pre Ñценариев (еÑли еÑÑ‚ÑŒ)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "не иÑполнÑÑ‚ÑŒ %%post Ñценариев (еÑли еÑÑ‚ÑŒ)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "не иÑполнÑÑ‚ÑŒ %%preun Ñценариев (еÑли еÑÑ‚ÑŒ)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "не иÑполнÑÑ‚ÑŒ %%postun Ñценариев (еÑли еÑÑ‚ÑŒ)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "не иÑполнÑÑ‚ÑŒ %%pretrans Ñценариев (еÑли еÑÑ‚ÑŒ)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "не иÑполнÑÑ‚ÑŒ %%posttrans Ñценариев (еÑли еÑÑ‚ÑŒ)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "не иÑполнÑÑ‚ÑŒ триггер-Ñценариев, взведенных Ñтим пакетом"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "не иÑполнÑÑ‚ÑŒ %%triggerprein Ñценариев"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "не иÑполнÑÑ‚ÑŒ %%triggerin Ñценариев"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "не иÑполнÑÑ‚ÑŒ %%triggerun Ñценариев"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "не иÑполнÑÑ‚ÑŒ %%triggerpostun Ñценариев"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2069,368 +2398,407 @@ msgstr ""
"откат на более Ñтарую верÑию пакета (--force при обновлении делает Ñто "
"автоматичеÑки)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "выводить процент готовноÑти по мере уÑтановки пакета"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "перемеÑтить пакет в <каталог>, еÑли пакет Ñто позволÑет"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<каталог>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "перемеÑтить файлы из пути <old> в <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "переуÑтановить, еÑли пакет уже уÑтановлен"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "не уÑтанавливать, а только Ñообщить, удаÑÑ‚ÑÑ Ð»Ð¸ уÑтановка"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "обновить пакет(ы)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "заново уÑтановить пакет(Ñ‹)"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "запроÑить/проверить вÑе пакеты"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "режим проверки подпиÑи"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "запроÑить/проверить пакет, которому принадлежит файл"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "запроÑить/проверить пакеты в группе"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "запроÑить/проверить файл пакета"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "запроÑить/проверить пакет(Ñ‹) по идентификатору пакета"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "запроÑить/проверить пакет(Ñ‹), по идентификатору заголовка"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "режим запроÑа rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "запроÑить/проверить заголовок"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "запроÑить/проверить пакет(Ñ‹) из транзакции уÑтановки"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "запроÑить пакеты Ñ Ñ‚Ñ€Ð¸Ð³Ð³ÐµÑ€-ÑценариÑми на пакет"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "режим проверки rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "найти/проверить пакеты, требующие ÑервиÑ"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "найти/проверить пакеты, предоÑтавлÑющие ÑервиÑ"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "показать вÑе файлы конфигурации"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "показать вÑе файлы документации"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "показать вÑе файлы документации"
+msgstr "показать вÑе файлы лицензии"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "показать вÑе файлы лицензии"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "показать оÑновную информацию о файле"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "показать ÑпиÑок файлов пакета"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "пропуÑтить файлы %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "пропуÑтить файлы %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "показать ÑоÑтоÑние перечиÑленных файлов"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "не проверÑÑ‚ÑŒ размер файлов"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "не проверÑÑ‚ÑŒ путь ÑимволичеÑких ÑÑылок"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "не проверÑÑ‚ÑŒ хозÑина файлов"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "не проверÑÑ‚ÑŒ группу файлов"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "не проверÑÑ‚ÑŒ Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ файлов"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "не проверÑÑ‚ÑŒ права доÑтупа файлов пакета"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "не проверÑÑ‚ÑŒ файлы пакета"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "не проверÑÑ‚ÑŒ завиÑимоÑти пакета"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "не иÑполнÑÑ‚ÑŒ Ñценарий(и) проверки"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "обнаружен двоичный пакет вмеÑто ожидаемого иÑходного\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "иÑходный пакет не Ñодержит файла Ñпецификации\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "раÑпаковка архива не удалаÑÑŒ%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " на файле "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s ошибка на файле %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s не удалоÑÑŒ: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "ошибка в формате: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
-msgstr ""
+msgstr "(не Ñодержит файлов)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "нормальный "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "замененный "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "не уÑтановлен "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "Ñетевой "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "неверный цвет"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(ÑоÑÑ‚. нет) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(неизв. %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "пакет не Ñодержит ÑпиÑков владельцев/групп-владельцев файлов\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "пакет не Ñодержит ÑпиÑков ни хозÑев файлов, ни их ID\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "группа %s не Ñодержит никаких пакетов\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "ни один из пакетов не взводит триггер %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "ошибка формата %s: %s.\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "ни один пакет не подходит к %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "ни один из пакетов не требует %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "ни один из пакетов не предоÑтавлÑет %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "файл %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "файл %s не принадлежит ни одному из пакетов\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "неверный номер пакета: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
-msgstr ""
+msgstr "запиÑÑŒ %u не может быть прочитана\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "пакет %s не уÑтановлен\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "ÐЕ ОК"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "ОК"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (ОТСУТСТВУЮТ КЛЮЧИ:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (ÐЕТ ДОВЕРИЯ К КЛЮЧÐÐœ:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: ошибка открытиÑ: %s\n"
@@ -2455,212 +2823,442 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "параметер dbpath не уÑтановлен\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "ошибка (%d) ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи #%d в %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: получен поврежденный заголовок #%u -- пропуÑкаетÑÑ.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: невозможно прочеÑÑ‚ÑŒ заголовок в 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "параметер dbpath не уÑтановлен"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "не удалоÑÑŒ Ñоздать каталог %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "заголовок номер %u в базе данных неверный -- пропуÑкаетÑÑ.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "невозможно добавить запиÑÑŒ (первоначально в %u)\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"переÑтроение базы данных не удалоÑÑŒ, ÑÑ‚Ð°Ñ€Ð°Ñ Ð±Ð°Ð·Ð° данных оÑтаетÑÑ Ð½Ð° меÑте\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "невозможно заменить Ñтарую базу данных на новую!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "ÐЕT"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "ДÐ"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:, Provides:, и Obsoletes: завиÑимоÑти поддерживают верÑии."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr "имена файла(ов) хранÑÑ‚ÑÑ Ð² формате (dirName,baseName,dirIndex)."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ \"./\" иÑпользуетÑÑ Ð´Ð»Ñ Ñ„Ð°Ð»Ð°(ов) Ñодержимого пакета."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "имÑ-верÑиÑ-выпуÑк пакета не предоÑтавлÑетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "Ñрлыки заголовков вÑегда ÑортируютÑÑ Ð¿Ð¾Ñле загрузки."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "интерпретатор Ñценариев может иÑпользовать аргументы из заголовка."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "поддерживаетÑÑ Ñ‡Ð°ÑÑ‚Ð¸Ñ‡Ð½Ð°Ñ ÑƒÑтановка набора жеÑтких ÑÑылок пакета."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Ðеверный magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Ðеверный/нечитаемый заголовок"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Заголовок Ñлишком велик"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "ÐеизвеÑтный тип файла"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "ОтÑутÑтвует файл(Ñ‹)"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Файл архива не найден в заголовке пакета"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " не удалоÑÑŒ - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (ошибка 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "невозможно открыть %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "Обновление / уÑтановка...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "ОчиÑтка / удаление... \n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Подготовка..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "Подготовка пакетов..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Ðеудовлетворенные завиÑимоÑти:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: не пакет (или манифеÑÑ‚ пакета) rpm : %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s не может быть уÑтановлен\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "ЗагружаетÑÑ %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· файла %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "невозможно открыть %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "УÑтанавливаетÑÑ %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "не rpm-пакет"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "неверный тип подпиÑи"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° RPM"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "ошибка чтениÑ: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
-msgstr ""
+msgstr "не rpm пакет\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "различный"
@@ -2728,805 +3326,640 @@ msgstr "%s конфликтует Ñ %s%s"
#: lib/rpmprob.c:167
#, c-format
msgid "%s is obsoleted by %s%s"
-msgstr ""
+msgstr "%s уÑтарел из-за %s%s"
#: lib/rpmprob.c:172
#, c-format
msgid "unknown error %d encountered while manipulating package %s"
msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° %d при работе Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð¼ %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "отÑутÑтвует второе ':' в %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "отÑутÑтвует название архитектуры в %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "ÐÐµÐ¿Ð¾Ð»Ð½Ð°Ñ Ñтрока данных в %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Слишком много аргументов в Ñтроке данных в %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Ðеверный номер arch/os: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "ÐÐµÐ¿Ð¾Ð»Ð½Ð°Ñ Ñтрока по умолчанию в %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Слишком много аргументов в Ñтроке по умолчанию в %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "отÑутÑтвует ':' (найден 0x%02x) в %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "отÑутÑтвует аргумент Ð´Ð»Ñ %s в %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "отÑутÑтвует архитектура Ð´Ð»Ñ %s в %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "неверный параметр '%s' в %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÑиÑтема: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "ÐеизвеÑтный формат"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "уÑтановить"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "Ñтереть"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "не могу открыть базу данных Packages в %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "транзакциÑ"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Заголовок "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Ðевозможно перезагрузить заголовок подпиÑи.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "пропущено"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
-msgstr ""
+msgstr "не удалоÑÑŒ"
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "отÑутÑтвует \"{\" поÑле \"%\""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "отÑутÑтвует \"}\" поÑле \"%{\""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "пуÑтой формат Ñ‚Ñга"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "пуÑтое Ð¸Ð¼Ñ Ñ‚Ñга"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "неизвеÑтный Ñ‚Ñг"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "в конце маÑÑива ожидалаÑÑŒ \"]\""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ \"]\""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ \"}\""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "в выражении ожидалоÑÑŒ \"?\""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "в выражении поÑле \"?\" ожидалоÑÑŒ \"{\""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "в выражении ожидалоÑÑŒ \"}\""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "в выражении поÑле \"?\" ожидалоÑÑŒ \":\""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "в выражении поÑле \":\" ожидалоÑÑŒ \"{\""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "в конце Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð»ÑÑ \"|\""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:97
+#: lib/verify.c:448
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "невозможно открыть Ð¸Ð½Ð´ÐµÐºÑ %s иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "параметер dbpath не уÑтановлен\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1318
+#: plugins/prioreset.c:29
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "ошибка (%d) ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи #%d в %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:1897
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: получен поврежденный заголовок #%u -- пропуÑкаетÑÑ.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(пуÑто)"
-#: lib/rpmdb.c:2358
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(пуÑто)\n"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:483
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: невозможно прочеÑÑ‚ÑŒ заголовок в 0x%x\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Ðезакрытые параметры в макроÑе %%%s\n"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "ошибка(%d) Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ \"%s\" запиÑей из индекÑа %s\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Ðезакрытый Ð¼Ð°ÐºÑ€Ð¾Ñ %%%s\n"
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "ошибка(%d) ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи \"%s\" в %s\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "ошибка(%d) ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи %s из %s\n"
+msgid "Macro %%%s has empty body\n"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s пуÑÑ‚\n"
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "ошибка(%d) Ñ€ÐµÐ·ÐµÑ€Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼Ñти Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð·Ð° нового пакета\n"
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "ошибка(%d) Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей \"%s\" из индекÑа %s\n"
+msgid "Macro %%%s failed to expand\n"
+msgstr "Ðевозможно раÑкрыть Ð¼Ð°ÐºÑ€Ð¾Ñ %%%s\n"
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:607
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "ошибка(%d) запиÑи запиÑи %s в %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "параметер dbpath не уÑтановлен"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ (%%undefine) макроÑа %%%s\n"
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:637
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "заголовок номер %u в базе данных неверный -- пропуÑкаетÑÑ.\n"
-
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "невозможно добавить запиÑÑŒ (первоначально в %u)\n"
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "ÐеизвеÑтный параметр %c в %s(%s)\n"
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-"переÑтроение базы данных не удалоÑÑŒ, ÑÑ‚Ð°Ñ€Ð°Ñ Ð±Ð°Ð·Ð° данных оÑтаетÑÑ Ð½Ð° меÑте\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "невозможно заменить Ñтарую базу данных на новую!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "файлы в %s заменÑÑŽÑ‚ÑÑ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ из %s Ð´Ð»Ñ Ð²Ð¾ÑÑтановлениÑ"
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "ошибка(%d) db%d из %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "ошибка(%d) db%d: %s\n"
+msgid "Unterminated %c: %s\n"
+msgstr "ÐÐµÐ·Ð°ÐºÑ€Ñ‹Ñ‚Ð°Ñ %c: %s\n"
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "невозможно получить блокировку %s на %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "разделÑемый"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "иÑключительный"
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "непонÑтный Ð¼Ð°ÐºÑ€Ð¾Ñ Ð¿Ð¾Ñле %%\n"
-#: lib/backend/db3.c:582
+#: rpmio/macro.c:1197
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1578
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "неопознанный параметр базы данных: \"%s\" проигнорирован\n"
+msgid "======================== active %d empty %d\n"
+msgstr "====================== активных %d пуÑÑ‚Ñ‹Ñ… %d\n"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "неверное чиÑловое значение %s, пропущено\n"
+msgid "error creating temporary file %s: %m\n"
+msgstr "ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ файла %s: %m\n"
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s имеет Ñлишком малую или Ñлишком большую величину long, пропущено\n"
+msgid "File %s: %s\n"
+msgstr "Файл %s: %s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
-"%s имеет Ñлишком малую или Ñлишком большую величину integer, пропущено\n"
+msgid "File %s is smaller than %u bytes\n"
+msgstr "Длина файла %s меньше чем %u байт\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(нет ошибки)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "ошибка: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "предупреждение: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "memory alloc (%u bytes) returned NULL.\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "====================== активных %d пуÑÑ‚Ñ‹Ñ… %d\n"
+msgid "error creating temp directory %s: %m\n"
+msgstr "ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ каталога %s: %m\n"
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(пуÑто)"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(пуÑто)\n"
+msgid "error delete fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Ðезакрытый Ð¼Ð°ÐºÑ€Ð¾Ñ %%%s\n"
+msgid "error delete directory %s: %m\n"
+msgstr "ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° %s: %m\n"
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ (%%define) макроÑа %%%s\n"
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: ошибка Fwrite: %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Ðезакрытые параметры в макроÑе %%%s\n"
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: ошибка Fread: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s пуÑÑ‚\n"
+msgid "%s: Fflush failed: %s\n"
+msgstr "%s: ошибка Fflush: %s\n"
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr "Ðевозможно раÑкрыть Ð¼Ð°ÐºÑ€Ð¾Ñ %%%s\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr "ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ PGP\n"
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ (%%undefine) макроÑа %%%s\n"
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s (%s) не был иÑпользован ниже ÑƒÑ€Ð¾Ð²Ð½Ñ %d\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "ÐеизвеÑтный параметр %c в %s(%s)\n"
+msgid "Could not exec %s: %s\n"
+msgstr "Ðевозможно выполнить %s: %s\n"
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr "ÐÐµÐ·Ð°ÐºÑ€Ñ‹Ñ‚Ð°Ñ %c: %s\n"
-
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr "непонÑтный Ð¼Ð°ÐºÑ€Ð¾Ñ Ð¿Ð¾Ñле %%\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:302
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s: %s\n"
-msgstr "Файл %s: %s\n"
+msgid "gpg exec failed (%d)\n"
+msgstr "запуÑк gpg не удалÑÑ (%d)\n"
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "Длина файла %s меньше чем %u байт\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "ошибка gpg при запиÑи подпиÑи\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "невозможно прочеÑÑ‚ÑŒ подпиÑÑŒ\n"
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(нет ошибки)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "ошибка: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "предупреждение: "
-
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:622
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "memory alloc (%u bytes) returned NULL.\n"
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: ошибка Fwrite: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
-msgstr "ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ PGP\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: ошибка rpmWriteSignature: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: ошибка writeLead: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr "ошибка gpg при запиÑи подпиÑи\n"
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "невозможно прочеÑÑ‚ÑŒ подпиÑÑŒ\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: ошибка writeLead: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: ошибка rpmWriteSignature: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÑпиÑка файлов: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "не проверÑÑ‚ÑŒ подпиÑÑŒ заголовока и Ñодержимого"
diff --git a/po/sk.po b/po/sk.po
index 8ec1c22b4..6de499dca 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Tomáš Vadina <kyberdev@gmail.com>, 2011.
+# Lubos Kardos <kardos.lubos@gmail.com>, 2015
+# Tomáš Vadina <inactive+kyberdev@transifex.com>, 2011
+# Tomáš Vadina <inactive+kyberdev@transifex.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/rpm/language/"
-"sk/)\n"
+"Language-Team: Slovak (http://www.transifex.com/rpm-team/rpm/language/sk/)\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -45,504 +46,566 @@ msgstr "Tento program je možné voľne šíriť podľa podmienok GNU GPL\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "vytvorenie rúry pre --pipe zlyhalo: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "vykonanie zlyhalo\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "argument nie je RPM balík\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "chyba pri Äítaní hlaviÄky balíka\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "nie je možné znova otvoriť payload: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Možnosti požiadavky a overenia balíÄka:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Možnosti požiadaviek (s -q alebo --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Možnosti kontroly (s -V alebo --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Možnosti pre Inštaláciu/Upgrade/Mazanie:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "SpooÄné možnosti pre vÅ¡etky režimy rpm a spustiteľné súbory:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "naraz môže byť vykonaný jeden typ otázky alebo overenia"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "neoÄakávaný príznak pre požiadavku"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "neoÄakávaný formát požiadavky"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "neoÄakávaný zdroj pre otázku"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "môže byť použitý iba jeden hlavný režim"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "vynútená môže byť len inštalácia a upgrade"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "súbory môžu byÅ¥ presunuté iba poÄas inÄtalácie balíka"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "nie je možné použiť --prefix s --relocate alebo --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate a --excludepath môžu byÅ¥ použité iba poÄas inÅ¡talácie nových "
-"balíkov"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix môže byÅ¥ použitý iba poÄas inÅ¡talácie nových balíkov"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "argumenty pre --prefix musia zaÄínaÅ¥ znakom /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "môže byť použitá iba jedna voľba z --excludedocs a --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches môže byÅ¥ použité iba poÄas odstránenia balíkov"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb môže byÅ¥ použité iba poÄas inÅ¡talácie a odstránenia balíka"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"možnosÅ¥ pre potlaÄenie skriptov môže byÅ¥ použitá len pri inÅ¡talácii alebo "
-"pri odstraňovaní balíÄkov"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"možnosÅ¥ pre potlaÄenie triggerov môže byÅ¥ použitá len pri inÅ¡talácii alebo "
-"odstraňovaní balíÄkov"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps môže byÅ¥ Å¡pecifikovaný iba poÄas inÅ¡talácie, mazania a overovania "
-"balíÄka"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr "-- test môže byÅ¥ Å¡pecifikovaný iba poÄas inÅ¡talácie a mazania balíÄka"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "argumenty pre --root (-r) musia zaÄínaÅ¥ znakom /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "nezadané žiadne balíÄky pre vymazanie"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "neboli zadané žiadne balíky pre inštaláciu"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "neboli zadané žiadne argumenty pre otázku"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "neboli zadané žiadne argumenty pre overenie"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot už bol nastavený, ignoruje sa %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"zostavenie podľa %prep (rozbalenie zdrojových kódov a aplikácia patchov) z "
"<spec_subor>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<spec_subor>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "zostavenie podľa %build (%prep, potom kompilácia) z <spec_subor>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"zostavenie podľa %install (%prep, %build, potom install) z <spec_subor>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "kontrola Äastí %files z <spec_subor>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "vytvorenie zdrojového kódu a binárnych balíÄkov z <spec_subor>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "vytvorenie iba binárneho balíÄka z <spec_subor>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "vytvorenie zdrojového balíÄka z <spec_subor>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<zdrojovy balicek>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"zostavenie podľa %install (%prep, %build, potom inštalácia) z <zdrojovy "
+"balicek>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"zostavenie podľa %prep (rozbalenie zdrojových kódov a aplikácia patchov) z "
"<tar_subor>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tar_subor>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "zostavenie podľa %build (%prep, potom kompilácia) z <tar_subor>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"zostavenie podľa %install (%prep, %build, potom inštalácia) z <tar_subor>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "kontrola Äastí %files z <tar_subor>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "vytvorenie zdrojového kódu a binárneho balíÄka z <tar_subor>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "vytvorenie iba binárneho balíÄka z <tar_subor>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "vytvorenie iba zdrojového balíÄka z <tar_subor>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "vytvorenie binárneho balíÄka z <zdrojovy balicek>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<zdrojovy balicek>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"zostavenie podľa %install (%prep, %build, potom inštalácia) z <zdrojovy "
-"balicek>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "predefinovať adresár pre zostavenie balíka"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "po ukonÄení odstrániÅ¥ adresár, v ktorom sa balík zostavoval"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorovať ExcludeArch: direktívy z spec súboru"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "ladiť nástroj stavu súborov"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "nevykonať žiadne etapy zostavenia"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "nekontrolovaÅ¥ závislosti balíÄkov"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr "generovanie hlaviÄiek balíÄka kompatibilné s (legacy) rpm v3 packaging"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
+msgstr "nevykonať %clean fázu zostavenia"
+
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "nevykonať %check fázu zostavenia"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "neakceptovať i18N popisy z spec súboru"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "po dokonÄení odstrániÅ¥ zdrojové kódy"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "po dokonÄení odstrániÅ¥ spec súbor"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "preskoÄiÅ¥ priamo k urÄenej etape (iba pre c, i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "predefinovať cieľovú platformu"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"Zostavovacie možnosti s [ <spec_subor> | <tar_subor> | <zdrojovy balicek> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "SpooÄné možnosti pre vÅ¡etky režimy rpm a spustiteľné súbory:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Chybné závislosti pri zostavovaní:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Nie je možné otvoriť spec súbor %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Nie je možné otvoriť rúru pre tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Nie je možné ÄítaÅ¥ spec súbor z %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Nie je možné premenovať %s na %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "nie je možné zistiť stav %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Súbor %s nie je obyÄajný súbor.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Súbor %s nevyzerá ako spec súbor.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Zostavujú sa cieľové platformy: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Zostavuje sa pre cieľ %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "argumenty pre --root (-r) musia zaÄínaÅ¥ znakom /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "inicializuje sa databáza"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "znovu zostaviÅ¥ obrátené zoznamy inÅ¡talovaných hlaviÄiek balíÄka"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "skontrolovať databázové súbory"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "exportuj databázu na stdout ako postupnosÅ¥ hlaviÄiek"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "importuj databázu z stdin postupnosti hlaviÄiek"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Možnosti databázy:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "môže byť použitý iba jeden hlavný režim"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "overiÅ¥ podpis v balíÄku"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importovaÅ¥ obrnený verejný kľúÄ"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "zobraziÅ¥ kľúÄe z kľúÄového zväzku RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Možnosti zväzku kľúÄov:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "nezadané žiadne parametre"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Možnosti požiadavky a overenia balíÄka:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Možnosti požiadaviek (s -q alebo --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Možnosti kontroly (s -V alebo --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Možnosti pre Inštaláciu/Upgrade/Mazanie:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "naraz môže byť vykonaný jeden typ otázky alebo overenia"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "neoÄakávaný príznak pre požiadavku"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "neoÄakávaný formát požiadavky"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "neoÄakávaný zdroj pre otázku"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "vynútená môže byť len inštalácia a upgrade"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "súbory môžu byÅ¥ presunuté iba poÄas inÄtalácie balíka"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "nie je možné použiť --prefix s --relocate alebo --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate a --excludepath môžu byÅ¥ použité iba poÄas inÅ¡talácie nových "
+"balíkov"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix môže byÅ¥ použitý iba poÄas inÅ¡talácie nových balíkov"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argumenty pre --prefix musia zaÄínaÅ¥ znakom /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "môže byť použitá iba jedna voľba z --excludedocs a --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches môže byÅ¥ použité iba poÄas odstránenia balíkov"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles môže byÅ¥ použité iba poÄas inÅ¡talácie balíka"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb môže byÅ¥ použité iba poÄas inÅ¡talácie a odstránenia balíka"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"možnosÅ¥ pre potlaÄenie skriptov môže byÅ¥ použitá len pri inÅ¡talácii alebo "
+"pri odstraňovaní balíÄkov"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"možnosÅ¥ pre potlaÄenie triggerov môže byÅ¥ použitá len pri inÅ¡talácii alebo "
+"odstraňovaní balíÄkov"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps môže byÅ¥ Å¡pecifikovaný iba poÄas inÅ¡talácie, mazania a overovania "
+"balíÄka"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "-- test môže byÅ¥ Å¡pecifikovaný iba poÄas inÅ¡talácie a mazania balíÄka"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "nezadané žiadne balíÄky pre vymazanie"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "neboli zadané žiadne balíky pre inštaláciu"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "neboli zadané žiadne argumenty pre otázku"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "neboli zadané žiadne argumenty pre overenie"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "podpísaÅ¥ balíÄky"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "podpísaÅ¥ balíÄky (identické s --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "vymazaÅ¥ podpis balíÄka"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Možnosti podpisu:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Nie je možné spustiť %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Je potrebné nastaviť \"%%_gpg_name\" v makro súbore\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Zadajte helo:"
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Heslo je v poriadku.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Chybne zadané heslo, alebo expirovaný kÄ¾ÃºÄ gpg\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "parsovanie spec súborov na stdout"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "generovanie spec súborov"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "pôsobenie v binárke rpm generovanej spec (predvolené)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "pôsobenie v zdroji rpm generovaného spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "použiť nasledovný formát otázky"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Spec možnosti:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "žiadne argumenty pre parsovanie"
@@ -551,32 +614,37 @@ msgstr "žiadne argumenty pre parsovanie"
msgid "Unable to open temp file: %s\n"
msgstr "Nie je možné otvoriÅ¥ doÄasný súbor: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Nie je možné otvoriť prúd: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Vykonávanie(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Spustenie %s zlyhalo (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "Chyba spustenia skriptletu %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Chybný návratový kód z %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -586,235 +654,315 @@ msgstr ""
"\n"
"Chyby zostavenia RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "chyba syntaxe pri spracovaní ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "chyba syntaxe pri spracovaní &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "chyba syntaxe pri spracovaní ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "chyba spracovania vo výraze\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "nedoplnená (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- len na Äíslach\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! len na Äíslach\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "typy musia súhlasiť\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / nie sú podporované pre reťazce\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- nie je podporované pre reťazce\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& a || nie sú podporované pre reťazce\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "chyba syntaxe vo výraze\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Chýba '(' v %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Chýba ')' v %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Neplatný %s token: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Chýba %s v %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Nasleduje nie prázdny znak %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Zlá syntax: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Zlý režim spec: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Zlý režim adresára spec: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Nepoužiteľná dĺžka lokalizácie: \"%s\" v %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Dvojitá lokalizácia %s v %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Neplatná možnosť: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Podpora možností súboru nie je zabudovaná\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Súbor musí zaÄínaÅ¥ na \"/\": %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Neznámy prehľad súborového algoritmu %u, návrat späť k MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Súbor uvedený dvakrát: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "Äítanie symlinku %s zlyhalo: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolický link ukazuje na BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "Cesta sa nachádza mimo buildroot: %s\n"
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "PrieÄinok nenájdený: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Súbor nenájdený: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Toto nie je adresár: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: nie je možné naÄítaÅ¥ neznámu znaÄku (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: Äítanie verejného kľúÄa zlyhalo.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: nie je obrnený verejný kľúÄ.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: zlyhalo kódovanie\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "vytvorenie prieÄinka zlyhalo"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Súbor potrebuje úvodný \"/\": %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "%%dev glob nie je povolený: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "PrieÄinok nebol nájdený globom: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Súbor nenájdený globom: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Nie je možné otvoriť %%files súbor %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "riadok: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Chyba Äítania %%files súboru %s: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Súbor nenájdený globom: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "Viac než jeden súbor na riadku: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Zlý súbor: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Chybný vlastník/skupina: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Kontrolujú sa nezabalené súbory: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -823,548 +971,605 @@ msgstr ""
"Nájdené nainštalované (ale nezabalené) súbory:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Spracovávajú sa súbory: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Binárky závislé na architektúre v bezarchitektúrnom balíÄku\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "vytvorenie archívu zlyhalo na súbore %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "vytvorenie archívu zlyhalo: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Nie je možné otvoriť súbor %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: riadok: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Nie je možné kanonizovaÅ¥ názov poÄítaÄa: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Nie je možné zapísať payload do %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Nie je možné ÄítaÅ¥ payload z %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Nie je možné kanonizovaÅ¥ názov poÄítaÄa: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Neznáma kompresia payloadu: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Nie je možné vytvoriÅ¥ nezmeniteľný region hlaviÄky.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Nie je možné otvoriÅ¥ doÄasný súbor.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Nie je možné zapísaÅ¥ doÄasnú hlaviÄku\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Chyba Äítania súboru politiky: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Zlé CSA dáta\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Nie je možné znova naÄítaÅ¥ hlaviÄku podpisu.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Nie je možné otvoriť %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Nie je možné zapísaÅ¥ balíÄek: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Nie je možné otvoriť cieľ pre podpísanie %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Nie je možné preÄítaÅ¥ hlaviÄku z %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Nie je možné zapísaÅ¥ hlaviÄku do %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Zapísané: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Spúšťa sa \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Spustenie \"%s\" zlyhalo.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Kontrola balíÄka \"%s\" zlyhala.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Nie je možné vytvoriť meno výstupného súboru pre balík %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "nie je možné vytvoriť %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "riadok %d: druhý %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "Položky v %%changelog musia zaÄínaÅ¥ znakom *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "nekompletná položka v %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "zlý dátum v %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog nie je zoradený zostupne podľa Äasu\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "chýbajúce meno v %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "žiadny popis v %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "riadok %d: Chyba pri parsovaní %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "riadok %d: zlá možnosť %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "riadok %d: Príliš veľa názvov: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "riadok %d: BalíÄek neexistuje: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "riadok %d: Druhý popis\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "riadok %d: Chyba pri parsovaní %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "riadok %d: Chyba parsovania %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Chyna parsovania znaÄky poľa: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "riadok %d: Zlé Äíslo: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "riadok %d: Zlé Äíslo no%s: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "riadok %d: Chybné %s Äíslo: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d definované viac krát\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "SÅ¥ahuje sa %s do %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Nie je možné stiahnuť %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Architektúra je vyradená: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Architektúra nie je zahrnutá: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS je vyradený: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS nie je zahrnutý: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "Položka %s musí byÅ¥ v balíÄku prítomná: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Duplikovaná položka %s v balíÄku: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Nie je možné otvoriť ikonu %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Nie je možné preÄítaÅ¥ ikonu %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Neznámy typ ikony: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "riadok %d: ZnaÄka má len jeden token: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "riadok %d: Neplatný znak '%c' v: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "riadok %d: Neplatný znak v: %s\n"
+msgid "%s in: %s\n"
+msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "riadok %d: Neplatná sekvencia \"..\" v: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "riadok %d: PoÅ¡kodená znaÄka: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "riadok %d: Prázdna znaÄka: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "riadok %d: Prefixy nemôžu konÄiÅ¥ \"/\": %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "riadok %d: Docdir musí zaÄínaÅ¥ '/': %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "riadok %d: Súbor epochy musí byÅ¥ nepodpísané Äíslo: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "riadok %d: Zlé urÄenie %s: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "riadok %d: Zlý formát BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "riadok %d: Podporované sú iba subbalíÄky typu noarch: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Interná chyba: Chybná znaÄka %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "riadok %d: %s je zastaralý: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Zlá Å¡pecifikácia balíÄka: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "BalíÄek už existuje: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "riadok %d: neznáma znaÄka: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} nemôže byť prázdne\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} nemôže byť \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Zlý zdroj: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Bez Äísla záplaty %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch bez zodpovedajúcej znaÄky \"Patch:\"\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Bez Äísla zdroja %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Bez znaÄky \"Source:\" v spec súbore\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Chyba pri parsovaní %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "riadok %d: Zlý parameter v %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "riadok %d: Zlá možnosť v %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Neplatné Äíslo záplaty %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "riadok %d: druhý %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr "Tokeny závislosti musia zaÄínaÅ¥ alfa-numerickými znakmi, '_' alebo '/'"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "Názov súboru s verziou nie je povolený"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Vyžadovaná verzia"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "Neplatná závislosť"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Vyžadovaná verzia"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "riadok %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "riadok %d: triggery musia obsahovať --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "riadok %d: Chyba parsovania %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "riadok %d: interné skripty musia konÄiÅ¥ s '>': %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "riadok %d: skriptovací program musí zaÄínaÅ¥ s '/': %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "riadok %d: Druhý %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "riadok %d: nepodporovaný interný skript: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr "riadok %d: argumenty interpretera nie sú v triggeroch povolené: %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "riadok %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Nie je možné otvoriť %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: OÄakávaný argument pre %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "riadok %d: neuzatvorené makro alebo zlá náväznosť riadka\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: zlá kondícia %%if\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%else bez poÄiatoÄného %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%endif bez poÄiatoÄného %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Nenájdené žiadne kompatibilné architektúry pre zostavenie\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "BalíÄek neobsahuje %%description: %s\n"
@@ -1436,450 +1641,561 @@ msgstr "Príliž veľa argumentov v riadku: %s\n"
msgid "Processing policies: %s\n"
msgstr "Vykonávaná politika: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignorovanie neplatného regexu %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Nie je možné vytvoriť rúru pre %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Nie je možné spustiť %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Nie je možné vykonať fork %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s zlyhalo: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "nie je možné zapísať všetky dáta do %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Konverzia %s na dlhý integer zlyhala.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Klasifikátor prázdneho súboru\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Nenastavené žiadne atribúty\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) zlyhalo: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load zlyhal: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Rozpoznávanie súboru \"%s\" zlyhalo: režim %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Hľadá sa %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Zlyhalo vyhľadávanie %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "otázka na spec-súbor %s zlyhala, nie je možné analyzovať\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(chyba 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Chybné magické Äíslo"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Chybná/neÄitateľná hlaviÄka"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "nerozpoznaný db parameter: \"%s\" ignorovaný.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Priveľká hlaviÄka"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s má neplatnú Äíselnú hodnotu, preskakuje sa\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s má príliš veľkú alebo príliš malú long hodnotu, preskakuje sa\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Neznámy typ súboru"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s má príliš veľkú alebo príliš malú int hodnotu, preskakuje sa\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Chýbajúce hardlinky"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "nie je možné získaž zámok %s na %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Prehľad sa nezhoduje"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "zdieľaný"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Interná chyba"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "výhradný"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Súbor z archívu nie je v hlaviÄke"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "neplatný typ indexu %x v %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " zlyhalo - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "chyba(%d) získaných \"%s\" záznamov z %s indexu: %s\n"
-#: lib/depends.c:68
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "chyba(%d) pri ukladaní záznamu \"%s\" do %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "chyba(%d) v odstraňovaní záznamu \"%s\" z %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "chyba(%d) pridania hlaviÄky #%d záznamu\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "chyba(%d) odstránenia hlaviÄky #%d záznamu\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "chyba(%d) pri alokácii novej inÅ¡tancii balíÄka\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s je Delta RPM a nemôže byž priamo inštalovaný\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Nepodporovaný payload (%s) v balíÄku %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "balíÄek %s už bol pridaný, %s sa preskakuje\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "balíÄek %s už bol pridaný, nahradzuje sa s %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(nie je blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(nie je Äíslo)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(nie je reťazec)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(neplatný typ)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(nie je base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(neplatný typ)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(nie je blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(neplatný typ xml)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(nie je OpenPGP podpis)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normálny"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "nahradený"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "nenainštalovaný"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "zdieľaný sieťou"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "zlá farba"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "chýbajúci"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(neznámy)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(nie je reťazec)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "používateľ %s neexistuje - použije sa root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "skupina %s neexistuje - použije sa root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s uložený ako %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s vytvorený ako %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "znaÄka[%d]: ZLÃ, znaÄka %d typ %d offset %d poÄet %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: ZLÃ, nie je hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: ZLÃ, nie je binárna\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: ZLÃ, nie je binárna\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "veľkosÅ¥ blobu(%d): ZLÃ, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr ""
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "offset regiónu: ZLÃ, znaÄka %d typ %d offset %d poÄet %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "trailer regiónu: ZLÃ, znaÄka %d typ %d offset %d poÄet %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "veľkosÅ¥ regiónu: ZLÃ, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr veľkosÅ¥(%d): ZLÃ, Äítanie vrátilo %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: ZLÃ\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr znaÄky: ZLÉ, poÄet znaÄiek (%d) mimo rozsah\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "neplatná šírka poľa"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr dáta: ZLÉ, bajtov (%d) mimo rozsah\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): ZLÃ, Äítanie vrátilo %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "nahratie hdr: ZLÉ\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "prázdny tag formát"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature zlyhalo: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "prázdne meno tagu"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Podpis nie je k dispozícii\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead zlahal: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] oÄakávané na konci poľa"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "neoÄakávané ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "neoÄakávané }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? oÄakávané vo výraze"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ oÄakávané po ? vo výraze"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} oÄakávané vo výraze"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": oÄakávané po ? podvýraze"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ oÄakávané po : vo výraze"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| oÄakávené na konci výrazu"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "iterátor poľa použitý s poľami inej veľkosti"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread zlyhalo: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "predefinovať <makro> s hodnotou <vyraz>"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'<makro> <vyraz>'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "definovať <makro> s hodnotou <vyraz>"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "vypísať expanziu makra <vyraz>"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'<vyraz>'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "ÄítaÅ¥ <subor:...> namiesto implicitného súboru"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<SUBOR:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "nekontrolovaÅ¥ súhrny balíÄka"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "nekontrolovaÅ¥ získané hlaviÄky databázy"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "nekontrolovaÅ¥ podpisy balíÄka"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "odoslaÅ¥ stdout do PRÃKAZU"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "PRÃKAZ"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "použiť KOREŇ ako adresár najvyššej úrovne"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "KOREŇ"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "použiť databázu v PRIEČINKU"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "PRIEÄŒINOK"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "zobraziÅ¥ známe znaÄky pre požiadavky"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "zobraziť finálne nastavenie rpmrc a makier"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "poskytnúť výstup s menej detailami"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "poskytnúť detailnejší výstup"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "vypísať verziu používaného rpm"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "ladiť nástroj stavu súboru payload"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "ladiť rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: tabuľka možností chybne nastavená (%d)\n"
@@ -1900,13 +2216,13 @@ msgstr "presunutia musia obsahovať znak ="
msgid "relocations must have a / following the ="
msgstr "presunutia musia mať za znakom = znak /"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"inÅ¡talovaÅ¥ vÅ¡etky súbory vrátane konfiguraÄných súborov, ktoré by inak mohli "
"byť vynechané"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1914,151 +2230,161 @@ msgstr ""
"odinÅ¡talovaÅ¥ vÅ¡etky balíky urÄené <balíkom> (inak je chybou, pokiaľ <balík> "
"špecifikuje viac ako jeden balík)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "premiestnenie súborov v nepriemiestniteľnom balíÄku"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "zobraziÅ¥ závislostné sluÄky ako varovanie"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "odinštalovať balík"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<balicek>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "neinštalovať súbory s nastaveniami"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "neinštalovať dokumentáciu"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "preskoÄiÅ¥ súbory s úvodnou cestou <path> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<cesta>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "skratka pre --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "upgradovaÅ¥ balíÄky ak už sú nainÅ¡talované"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<subor_balickov>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "vypisovaÅ¥ znaÄky poÄas inÅ¡talácie balíka (vhodné s -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "neoverovať architektúru balíka"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "neoverovaÅ¥ operaÄný systém balíka"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "pred inštaláciou nekontrolovať dostupné miesto na disku"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "inštalovať dokumentáciu"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "inÅ¡talovaÅ¥ balíÄky"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "aktualizovať databázu bez zmeny súborového systému"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "neoverovať závislosti balíka"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "neoverovať prehľad súborov"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "neoverovať prehľad súborov (zastarané)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "neinÅ¡talovaÅ¥ bezpeÄnostné kontexty súboru"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "nemeniť poradie balíkov kvôli vyriešeniu závislostí"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "nespúšťaÅ¥ žiadne skripty urÄené pre balíÄky"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "nespúšťať žiadne %%pre skripty (ak nejaké sú)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "nespúšťať žiadne %%post skripty (ak nejaké sú)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "nespúšťať žiadne %%preun skripty (ak nejaké sú)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "nespúšťať žiadne %%postun skripty (ak nejaké sú)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "nespúšťaÅ¥ žiadne skripty aktivované týmto balíÄkom"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "nespúšťať žiadne %%triggerprein skripty"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "nespúšťať žiadne %%triggerin skripty"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "nespúšťať žiadne %%triggerun skripty"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "nespúšťať žiadne %%triggerpostun skripty"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "nevykonať žiadne kolekcie akcií"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2066,369 +2392,407 @@ msgstr ""
"aktualizovať na staršiu verziu balíka (--force to pri aktualizácii urobí "
"automaticky)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "vypisovaÅ¥ percentá poÄas inÅ¡talácie balíka"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "presunúť balík do <adresára>, pokiaľ to balík povoľuje"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<adresár>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "premiestniť súbory zo <starej> to <novej> cesty"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<stará>=<nová>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ignorovaÅ¥ súborové konflikty medzi balíÄkami"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "preinštalovať, pokiaľ už balík existuje"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "neinÅ¡talovaÅ¥, ale oznámiÅ¥, Äi by to bolo možné"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "upgradovaÅ¥ balíÄky"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "vyžiadaÅ¥/overiÅ¥ vÅ¡etky balíÄky"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "režim rpm checksig"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "požiadavka/overenie balíÄkov vlastniacich súbor"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "požiadavka/overenie balíÄkov v skupine"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "požiadavka/overenie súboru balíÄka"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "požiadavka/overenie balíÄkov s identifikátorom balíÄka"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "požiadavka/overenie balíÄkov identifikátorom hlaviÄky"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "režim požiadavok"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "požiadavka/overenie inÅ¡tancie hlaviÄky"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "požiadavka/overenie balíÄkov z inÅ¡talaÄnej transakcie"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "požiadavka pre balíÄky aktivované balíÄkom"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "režim kontroly"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "požiadavka/overenie balíÄkov vyžadujúcich závislosÅ¥"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "požiadavka/overenie balíÄkov poskytujúcich závislosÅ¥"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "neseparovať argumenty"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "nespracovávaÅ¥ nebalíÄkové súbory ako zoznamy"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "zobraziÅ¥ vÅ¡etky konfiguraÄné súbory"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "zobraziť všetky súbory s dokumentáciou"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "zobraziť všetky súbory s dokumentáciou"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "zobraziÅ¥ vÅ¡etky konfiguraÄné súbory"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "zobraziť základné informácie o balíku"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "zobraziť súbory v balíku"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "vynechať %%ghost súbory"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "vynechať %%ghost súbory"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "zobraziiť stav daných súborov"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "nekontrolovať veľkosť súborov"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "nekontrolovať cesty symbolických linkov"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "nekontrolovať vlastníka súborov"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "nekontrolovať skupinu súborov"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "nekontrolovaÅ¥ Äas zmeny súborov"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "nekontrolovať režim súborov"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "nekontrolovať možnosti súborov"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "nekontrolovaÅ¥ bezpeÄnostné kontexty súboru"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "nekontrolovať možnosti súborov"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "nekontorlovaÅ¥ súbory v balíÄku"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "nekontrolovaÅ¥ závislosti balíÄka"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "nespúšťať kontrolné skripty"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Chýbajúce funkcie rpmlib pre %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "oÄakáva sa balíÄek so zdrojovým kódom, nájdený bol binárny\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "balíÄek so zdrojovými kódmi neobsahuje .spec súbor\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "rozbaľovanie archívu zlyhalo %s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " pre súbor "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s zlyhal na súbore %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s zlyhalo: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "nesprávny formát: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(neobsahuje žiadne súbory)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normálny "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "nahradený "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "neinštalovaný "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "zdieľaný "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "chybná farba"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(žiadny stav) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(neznámy %d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "balíÄek nemá vlastníka súboru ani zoznamy skupín\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "balíÄek nemá vlastníka súboru alebo zoznamy ID\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "skupina %s neobsahuje žiadne balíky\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "žiadny z balíkov nespúšťa %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "poškodený %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "žiadny z balíÄkov sa nezhoduje s %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "žiadny z balíkov nevyžaduje %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "žiadny z balíkov neposkytuje %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "súbor %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "súbor %s nie je vlastnený žiadnym balíkom\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "chybné Äíslo balíku: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "záznam %u nie je možné ÄítaÅ¥\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "balík %s nie je nainštalovaný\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "neznáma znaÄka: \"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: kÄ¾ÃºÄ %d import zlyhal.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: kÄ¾ÃºÄ %d nie je verejný obrnený kľúÄ.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: importné Äítanie zlyhalo(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-"%s: Nezmeniteľná oblasÅ¥ hlaviÄky nemôže byÅ¥ Äítaná. PoÅ¡kodený balíÄek?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NIE JE V PORIADKU"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "V PORIADKU"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (CHÃBAJÚCE KĽÚČE):"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (NEDÔVERUJE SA KĽÚČOM: "
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: otvorenie zlyhalo: %s\n"
@@ -2453,212 +2817,441 @@ msgstr "Nie je možné zmeniť koreňový adresár: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Nie je možné obnoviť koreňový adresár: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Generuje sa %d chýbajúcich indexov, prosím Äakajte...\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "nenastavená dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: preskakuje sa"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "chyba(%d) ukladania záznamu #%d do %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec zlyhal: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp zlyhal: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: preskakuje sa"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: poÅ¡kodená hlaviÄka #%u získaná -- preskakuje sa.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: nie je možné ÄítaÅ¥ hlaviÄku na 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "nebola nastavená žiadna dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "zlyhanie pri vytváraní prieÄinka %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "hlaviÄka #%u v databázy je zlá -- preskakuje sa.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "nie je možné pridať záznam pôvodne na %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "zlyhalo znovuzostavenie databázy: pôvodná databáza zostáva na mieste\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "nepodarilo sa nahradiť starú databázu novou!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NIE"
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "ÃNO"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:, Provides:, a Obsoletes: verzie pre podporu závislostí."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr "názvy súborov uložené ako (dirName,baseName,dirIndex), nie ako cesta."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "payload balíÄka môže byÅ¥ komprimovaný pomocou bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "payload balíÄka môže byÅ¥ komprimovaný pomocou xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "payload balíÄka môže byÅ¥ komprimovaný pomocou lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "súbory payloadu balíÄka majú predponu \"./\"."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "názov-verzia-vydanie balíÄka nie je implicitne sprostredkované."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "znaÄky hlaviÄky sú vždy zoradené po nahratí."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "interpreter skriptletov môže použiÅ¥ argumenty z hlaviÄky."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "hardlinkovaný súbor môže byť inštalovaný bez toho, aby bol kompletný."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr "skriptlety balíÄka môžu pristupovaÅ¥ k databáze rpm pri inÅ¡talácii."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "interná podpora pre lua skripty."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "prehľad algoritmu súboru je nastaviteľný v každom balíÄku"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "podpora pre schopnosti súboru POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "skriptlety balíÄka môžu byÅ¥ rozbalené poÄas inÅ¡talácie."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Chybné magické Äíslo"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Chybná/neÄitateľná hlaviÄka"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Priveľká hlaviÄka"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Neznámy typ súboru"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Prehľad sa nezhoduje"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Interná chyba"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Súbor z archívu nie je v hlaviÄke"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " zlyhalo - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "otvorenie %s zlyhalo: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: nie je balíÄek rpm (alebo balíÄek manifestu)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Pripravuje sa..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Zlyhané závislosti:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: nie je balíÄek rpm (alebo balíÄek manifestu): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s nie je možné nainštalovať\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Prenáša sa %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "preskakuje sa %s - transfer zlyhal\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "balíÄek %s nie je premiestniteľný\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "chyba pri Äítaní zo súboru %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "\"%s\" Å¡pecifikuje viacero balíÄkov:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "nie je možné otvoriť %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Inštaluje sa %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "nie je balíÄek rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "nepovolený typ podpisu"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "nepodporovaná verzia RPM balíÄka"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "Äítanie zlyhalo: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "nie je balíÄek rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "nie je možné vytvoriť %s zámok na %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "Äaká sa na %s zámok na %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Zlyhalo dlopen %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Zlyhalo vyriešenie symbolu %s: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Zlyhalo rozbalenie %%__kolekcie_%s makier\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Zásuvný modul %s nenaÄítaný\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Zlyhalo vyriešenie %s zásuvného modulu symbolu %s: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "iný"
@@ -2733,634 +3326,352 @@ msgstr "%s je zastaraný %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "neznáma chyba %d vznikla pri manipulácii s balíÄkom %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "chýba druhá ':' na %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "chýba názov architektúry na %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Neúplný dátový riadok na %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Príliž veľa argumentov na dátovom riadku na %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Zlé Äíslo architektúry alebo operaÄného systému: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Neúplný predvolený riadok na %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Príliž veľa argumentov v predvolenom riadku na %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "chýbajúce ':' (nájdené 0x%02x) na %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "chýba argument pre %s na %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "nie je možné otvoriť %s na %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "chýba architektúra pre %s na %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "zlá možnosť '%s' na %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Neznámy systém: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Prosím kontaktujte %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Nie je možné otvoriÅ¥ %s pre Äítanie: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "Nie je možné obnoviÅ¥ aktuálny prieÄinok: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "nie je zabudovaná podpora pre skriptlety <lua>\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Nie je možné vytvoriÅ¥ doÄasný súbor pre %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Nie je možné duplikovaÅ¥ popisovaÄ súboru: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s skriptlet zlyhal, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s skriplet zlahal, signál %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s skriplet zlyhal, návratový kód: %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Neznámy formát"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "inštalovať"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "zmazať"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "nie je možné otvoriÅ¥ databázu balíÄkov v %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "nadbytoÄná '(' v popise balíÄka: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "chýbajúca '(' v popise balíÄka: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "chýbajúca ')' v popise balíÄka: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: Äítanie verejného kľúÄa zlyhalo.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transakcia"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh veľkosÅ¥(%d): ZLÃ, Äítanie vrátilo %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: ZLÉ\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh znaÄky: ZLÉ, poÄet znaÄiek(%d) mimo rozsah\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh dáta: ZLÉ, poÄet bajtov(%d) mimo rozsah\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): ZLÃ, Äítane vrátilo %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh znaÄka[%d]: ZLÃ, znaÄka %d typ %d offset %d poÄet %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh naÄítanie: ZLÉ\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh zarovnanie(%zd): ZLÉ, Äítanie %zd bajtov\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): ZLÉ, fstat(2) zlyhalo\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Nezmeniteľná oblasÅ¥ hlaviÄky nemôže byÅ¥ Äítaná. PoÅ¡kodený balíÄek?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
+
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "SHA1 digest v hlaviÄke:"
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "HlaviÄka"
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Nie je možné znova naÄítaÅ¥ hlaviÄku podpisu.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "preskoÄené"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "zlyhané"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "chýba %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Nesplené závislosti pre %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "neplatná šírka poľa"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "chýbajúce { po %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "chýbajúce } po %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "prázdny tag formát"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "prázdne meno tagu"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "neznámy tag"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] oÄakávané na konci poľa"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "neoÄakávané ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "neoÄakávané }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? oÄakávané vo výraze"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ oÄakávané po ? vo výraze"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} oÄakávané vo výraze"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": oÄakávané po ? podvýraze"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ oÄakávané po : vo výraze"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| oÄakávené na konci výrazu"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "iterátor poľa použitý s poľami inej veľkosti"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Generuje sa %d chýbajúcich indexov, prosím Äakajte...\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "nie je možné otvoriť %s index pomocou db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "chyba(%d) získaných \"%s\" záznamov z %s indexu: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "nenastavená dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: preskakuje sa"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "chyba(%d) ukladania záznamu #%d do %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec zlyhal: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp zlyhal: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: preskakuje sa"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: poÅ¡kodená hlaviÄka #%u získaná -- preskakuje sa.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "chyba(%d:%s) získania ÄalÅ¡ieho kľúÄa z %s indexu\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "chyba(%d) pridania hlaviÄky #%d záznamu\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "chyba(%d) odstránenia hlaviÄky #%d záznamu\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: nie je možné ÄítaÅ¥ hlaviÄku na 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "chyba(%d) nastavenia \"%s\" záznamov z %s index\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "chyba(%d) pri ukladaní záznamu \"%s\" do %s\n"
-
-#: lib/rpmdb.c:2477
+#: lib/verify.c:263
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "chyba(%d) v odstraňovaní záznamu \"%s\" z %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "chyba(%d) pri alokácii novej inÅ¡tancii balíÄka\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "chyba(%d) získavania \"%s\" záznamov z %s indexu\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "chyba(%d) pri ukladaní záznamu %s do %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "nebola nastavená žiadna dbpath"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "zlyhanie pri vytváraní prieÄinka %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "hlaviÄka #%u v databázy je zlá -- preskakuje sa.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "nie je možné pridať záznam pôvodne na %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "zlyhalo znovuzostavenie databázy: pôvodná databáza zostáva na mieste\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "nepodarilo sa nahradiť starú databázu novou!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "nahradiť súbory v %s súbormi z %s pre obnovenie"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "nepodarilo sa odstrániť adresár %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d chyba(%d) z %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d chyba(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "nie je možné získaž zámok %s na %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "zdieľaný"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "výhradný"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "neplatný typ indexu %x v %s/%s\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "nerozpoznaný db parameter: \"%s\" ignorovaný.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s má neplatnú Äíselnú hodnotu, preskakuje sa\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s má príliš veľkú alebo príliš malú long hodnotu, preskakuje sa\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s má príliš veľkú alebo príliš malú int hodnotu, preskakuje sa\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Zlyhalo dekódovanie politiky pre %s\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Zlyhalo vytvorenie doÄasného súboru pre %s: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Zlyhalo zapísanie %s politiky do súboru %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Zlyhalo vytvorenie obsluhy semanage\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Zlyhalo pripojenie k politike obsluhy\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Zlyhalo zaÄatie transakcie politiky: %s\n"
+msgid "Duplicate username or UID for user %s\n"
+msgstr ""
-#: plugins/sepolicy.c:337
+#: lib/verify.c:284
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Zlyhalo odstránenie doÄasnej politky súboru %s: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Zlyhala inštalácia modulu politiky: %s (%s)\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr ""
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Zlyhalo odstránenie modulu politiky: %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: lib/verify.c:448
#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Zlyhal proces forku: %s\n"
+msgid "missing %c %s"
+msgstr "chýba %c %s"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Zlyhalo spustenie %s: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Nesplené závislosti pre %s:\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s nebol ukonÄený v poriadku\n"
+msgid "Unable to reset nice value: %s"
+msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s zlyhal s exit kódom %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Zlyhalo odoslanie zmien politiky\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Zlyhalo rozbalenie cesty restorecon"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-"Zlyhalo preznaÄkovanie súborového systému. Súbory môžu maÅ¥ nesprávne znaÄky\n"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"Zlyhalo znovunaÄítanie kontextu súboru. Súbory môžu maÅ¥ nesprávne znaÄky\n"
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Zlyhalo rozbalenie politiky z %s\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktívnych %d prázdnych %d\n"
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(prázdne)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(prázdne)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makro %%%s má neukonÄené telo\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makro %%%s má neukonÄené parametre\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makro %%%s má neprípustné meno (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makro %%%s má neukonÄené telo\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makro %%%s má neukonÄené parametre\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Makro %%%s má prázdné telo\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Zlyhalo vyhodnotenie makra %%%s\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Makro %%%s má nedovolené meno (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) nebolo použité pod úrovňou %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Neznáma možnosť %c v %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3368,165 +3679,282 @@ msgstr ""
"Príliž veľa úrovní rekurzie v rozbaľovaní makra. Zrejme je to spôsobené "
"vyhlásením rekurzívneho makra.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "NeukonÄené %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Po %% nasleduje nespracovateľné makro\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktívnych %d prázdnych %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "chyba pri vytvárané doÄasného súboru %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Súbor %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Súbor %s je menší než %u bytov\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "vytvorenie prieÄinka zlyhalo"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[žiadne]"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(žiadna chyba)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "fatálna chyba: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "chyba: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "varovanie: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "neplatná syntax v lua skriptlete: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "nesprávna syntax v lua skripte: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua skript zlyhal: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "neplatná syntax v súbore lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "obslúženie lua zlyhalo: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[žiadne]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(žiadna chyba)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "fatálna chyba: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "chyba: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "varovanie: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "alokácia pamäti (%u bajtov) vrátila NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, ID kľúÄa %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(žiadne)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite zlyhalo: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread zlyhalo: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush zlyhal: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Nie je možné spustiť %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Nie je možné vytvoriť rúru pre podpísanie: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "spustenie gpg zlyhalo (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg zlyhal pri zápise podpisu\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "nie je možné preÄítaÅ¥ podpis\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp zlyhal\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s už obsahuje rovnaký podpis, preskakuje sa\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead zlyhalo: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature zlyhalo: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s už obsahuje rovnaký podpis, preskakuje sa\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature zlyhalo: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead zlyhalo: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "nahradenie %s zlyhalo: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: Äítanie zoznamu zlyhalo: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "neoverovaÅ¥ podpis hlaviÄky a payloadu"
diff --git a/po/sl.po b/po/sl.po
index a6b30cc71..d852767fc 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -7,10 +7,11 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Slovenian (http://www.transifex.com/rpm-team/rpm/language/"
+"sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -44,487 +45,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "izvajanje je bilo neuspešno\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "navedeni argument ni paket RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "napaka pri branju glave paketa\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "ni možno vnoviÄ odpreti (payload): %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr ""
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "samo en tip poizvedbe/preverjanja je možen naenkrat"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "nepriÄakovane zastavice pri poizvedbi"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "nepriÄakovana oblika poizvedbe"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "nepriÄakovan izvor poizvedbe"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "izbran sme biti le en glavni naÄin"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "datoteke smemo premakniti samo med namestitvijo paketa"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr "izbiri --relocate in --excludepath se lahko uporabi le pri namestitvi"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix se sme uporabiti le pri namestitvi"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "argumenti izbire --prefix se morajo zaÄeti z /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs sme biti podan le ob namestitvi paketa"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs sme biti podatn le ob namestitvi paketa"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs sme biti podan le ob namestitvi paketa"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "izbiri --excludedocs in --includedocs se medsebojno izkljuÄujeta"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch sme biti podan le ob namestitvi paketa"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos sme podan le ob namestitvi paketa"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize sme biti podan le ob namestitvi paketa"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches sme biti podan le ob odstranitvi paketa"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles sme biti podati le ob namestitvi paketa"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb sme biti podan le ob namestitvi ali odstranitvi paketa"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "argumenti izbire --root (-r) se morajo zaÄeti z /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "paketi katere bi bilo potrebno namestiti niso navedeni"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "argumenti za poizvedbo niso podani"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "argumenti za preverjanje niso podani"
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmbuild.c:120
+#: rpmbuild.c:161
#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
msgstr ""
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:170
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr ""
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr ""
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr ""
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "brez upoštevanja vrhnjega imenika izgradnje"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "po zakljuÄku drevo imenikov v katerih smo pakete gradili odstrani"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "brez izvajanja katerekoli od stopenj izgradnje"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "po zakljuÄku naj se izvorna koda izbriÅ¡e"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "po zakljuÄku odstrani datoteko s specifikacijami"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "preskok naravnost na doloÄeno stopnjo (samo za c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "brez upoštevanja strojnega okolja ciljnega sistema"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Datoteke s specifikacijami %s ni možno odpreti: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Izgradnja za ciljna strojna okolja: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Izgradnja za ciljni sistem %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "argumenti izbire --root (-r) se morajo zaÄeti z /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr ""
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr ""
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr ""
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "izbran sme biti le en glavni naÄin"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr ""
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr ""
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr ""
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr ""
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "samo en tip poizvedbe/preverjanja je možen naenkrat"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "nepriÄakovane zastavice pri poizvedbi"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "nepriÄakovana oblika poizvedbe"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "nepriÄakovan izvor poizvedbe"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "datoteke smemo premakniti samo med namestitvijo paketa"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr "izbiri --relocate in --excludepath se lahko uporabi le pri namestitvi"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix se sme uporabiti le pri namestitvi"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argumenti izbire --prefix se morajo zaÄeti z /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs sme biti podan le ob namestitvi paketa"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs sme biti podatn le ob namestitvi paketa"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs sme biti podan le ob namestitvi paketa"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "izbiri --excludedocs in --includedocs se medsebojno izkljuÄujeta"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch sme biti podan le ob namestitvi paketa"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos sme podan le ob namestitvi paketa"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize sme biti podan le ob namestitvi paketa"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches sme biti podan le ob odstranitvi paketa"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles sme biti podati le ob namestitvi paketa"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb sme biti podan le ob namestitvi ali odstranitvi paketa"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "paketi katere bi bilo potrebno namestiti niso navedeni"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "argumenti za poizvedbo niso podani"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "argumenti za preverjanje niso podani"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr ""
-#: rpmsign.c:35
-msgid "Signature options:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Vnesite pristopno geslo: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr ""
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Pristopno geslo je pravo.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
+msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
msgstr ""
-#: rpmspec.c:26
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
+
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "uporabi naslednjo obliko poizvedbe"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -533,473 +596,546 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Izvajanje(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
"RPM build errors:\n"
msgstr ""
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr ""
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr ""
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
-#, c-format
-msgid "Bad file: %s: %s\n"
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2039 build/parsePrep.c:33
+#: build/files.c:2657
#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "NeobstojeÄ lastnik/skupina: %s\n"
+msgid "Bad file: %s: %s\n"
+msgstr ""
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Iskanje kanoniÄnega imena gostitelja je bilo neuspeÅ¡no: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr ""
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Iskanje kanoniÄnega imena gostitelja je bilo neuspeÅ¡no: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Datoteke s specifikacijami %s ni možno odpreti: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Ni možno odpreti %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Zapisano: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Neuspešno ustvarjanje izhodne datoteke za paket %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "ni možno ustvariti %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Second description\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseFiles.c:33
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1007,341 +1143,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "vrstica %d: NapaÄno Å¡tevilo %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ni možno odpreti %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1412,450 +1617,563 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "poizvedba po datoteki spec. %s je bila neuspeÅ¡na, razÄlemba ni možna\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(napaka 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "NapaÄno magiÄno Å¡tevilo"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Poškodovana/neberljiva glava"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Glava je predolga"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s ima neveljavno Å¡tevilÄno vrednost, prezrto\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s ima preveliko ali premajhno dolgo (long) vrednost, prezrto\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
msgstr ""
+"%s ima preveliko ali premajhno vrednost malega (small) celega\n"
+"Å¡tevila, prezrto\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Neznan tip datoteke"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "skupno"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "izkljuÄujoÄe"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Notranja napaka"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " neuspešno - "
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(ni Å¡tevilo)"
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Podpis ni na voljo\n"
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "oblika znaÄke manjka"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "ime znaÄke manjka"
-#: lib/package.c:581
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "na koncu polja je priÄakovan ]"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "nepriÄakovan ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "nepriÄakovan }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "v izrazu je priÄakovan ?"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "v izrazu je za { priÄakovan ?"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "v izrazu je priÄakovan }"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "za podizrazom ? je priÄakovano :"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "v izrazu je za : priÄakovan {"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "na koncu izraza je priÄakovan |"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: branje Fread je bilo neuspešno: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "prikaži znane znaÄke za poizvedovanje"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "prikaži konÄni rpmrc in nastavitev makra"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "razliÄica rpm, ki jo uporabljate"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1876,12 +2194,12 @@ msgstr "premikanja morajo vsebovati ="
msgid "relocations must have a / following the ="
msgstr "premikanja morajo imeti /, ki mu sledi ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"namestitev vseh datotek, vkljuÄno z nastavitvenimi, ki so sicer izpuÅ¡Äene"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1889,152 +2207,162 @@ msgstr ""
"odstrani vse pakete, ki vsebujejo vzorec <paket> (sicer program izide z "
"napako, Äe paket <paket> doloÄa veÄ paketov)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "izbriši (odstrani) paket"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "brez namestitve dokumentacije"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "okrajšava za --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr ""
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "z izpisom znakov # ob namestitvi (uporabno z -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "brez preverjanja arhitekture paketa"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "brez preverjanja operacijskega sistema paketa"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "brez preverjanja prostora na disku pred nameÅ¡Äanjem"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "namesti dokumentacijo"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "obnovi podatkovno zbirko, a ne spreminjaj datoteÄnega sistema"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "brez preverjanja soodvisnosti paketa"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"brez spreminjanja vrstnega reda paketov z namenom zadovoljevanja soodvisnosti"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2042,368 +2370,407 @@ msgstr ""
"nadgraditev na starejÅ¡o razliÄico paketa (--force pri nadgradnjah "
"avtomatiÄno vkljuÄi to izbiro)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "izpis odstotkov med namestitvijo"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "Äe je mogoÄe, bo paket prestavljen v imenik <imenik>"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "ponovno namesti, Äe paket že obstaja"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "ne namesti, a ugotovi, Äe bi delovalo"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "izpis vseh nastavitvene datoteke"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "izpis vseh dokumentacijske datoteke"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "izpis vseh dokumentacijske datoteke"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "izpis vseh nastavitvene datoteke"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "iznos osnovnih podatkov o datoteki"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "izpis seznama datotek v paketu"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "izpis stanja seznama datotek"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "brez preverjanja datotek v paketu"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " za datoteko "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normalno "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "nadomeÅ¡Äeno "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "ni nameÅ¡Äeno "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "omrežni "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(brez stanja) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(neznano %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "skupina %s ne vsebuje nobenega paketa\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "noben paket ne proži %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "noben paket ne potrebuje %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "noben paket ne nudi %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "datoteka %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "datoteka %s ni del nobenega paketa\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "neveljavna Å¡tevilka paketa: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "paket %s ni nameÅ¡Äen\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NI DOBRO"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "V REDU"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (MANJKAJOÄŒI KLJUÄŒI:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (NEPREVERJENI KLJUÄŒI:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: odpiranje je bilo neuspešno: %s\n"
@@ -2428,212 +2795,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "dbpath ni nastavljena"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "zamenjava stare podatkovne zbirke z novo je bila neuspešna!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "NapaÄno magiÄno Å¡tevilo"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Poškodovana/neberljiva glava"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Glava je predolga"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Neznan tip datoteke"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Notranja napaka"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " neuspešno - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "odpiranje %s je bilo neuspešno: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s ni možno namestiti\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Prenašanje %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "napaka pri branju iz datoteke %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "ni možno odpreti %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "NameÅ¡Äanje %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr ""
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2707,798 +3303,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Neznan sistem: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:268
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/signature.c:489
-msgid "Header "
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "skipped"
msgstr ""
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr ""
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "manjkajoÄi { za %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "manjkajoÄi } za %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "oblika znaÄke manjka"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "ime znaÄke manjka"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "neznana znaÄka"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "na koncu polja je priÄakovan ]"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "nepriÄakovan ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "nepriÄakovan }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "v izrazu je priÄakovan ?"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "v izrazu je za { priÄakovan ?"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "v izrazu je priÄakovan }"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "za podizrazom ? je priÄakovano :"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "v izrazu je za : priÄakovan {"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "na koncu izraza je priÄakovan |"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:97
+#: lib/verify.c:448
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/verify.c:503
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:516
+#: plugins/prioreset.c:29
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1318
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(prazni)"
-#: lib/rpmdb.c:2250
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(prazni)\n"
-#: lib/rpmdb.c:2349
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2358
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:551
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:607
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:637
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:761
#, c-format
-msgid "error(%d) storing record %s into %s\n"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "dbpath ni nastavljena"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:1182
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "zamenjava stare podatkovne zbirke z novo je bila neuspešna!\n"
-
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1197
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:1578
#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "neuspešna odstranitev imenika %s: %s\n"
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktivni %d prazni %d\n"
-#: lib/backend/db3.c:33
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "File %s: %s\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "skupno"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "izkljuÄujoÄe"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
msgstr ""
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s ima neveljavno Å¡tevilÄno vrednost, prezrto\n"
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "usodna napaka: "
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s ima preveliko ali premajhno dolgo (long) vrednost, prezrto\n"
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "napaka: "
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
-"%s ima preveliko ali premajhno vrednost malega (small) celega\n"
-"Å¡tevila, prezrto\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "opozorilo: "
-#: plugins/sepolicy.c:218
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:231
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "alokacija pomnilnika (%u bajtov) vrnjeno NIČ.\n"
-#: plugins/sepolicy.c:416
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: sign/rpmgensig.c:54
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:594
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktivni %d prazni %d\n"
-
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(prazni)"
-
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(prazni)\n"
-
-#: rpmio/macro.c:537 rpmio/macro.c:575
-#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr ""
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: pisanje Fwrite je bilo neuspešno: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr ""
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: branje Fread je bilo neuspešno: %s\n"
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:649
-#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unterminated %c: %s\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
-#, c-format
-msgid "error creating temporary file %s: %m\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:302
#, c-format
-msgid "File %s: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:319
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s is smaller than %u bytes\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "usodna napaka: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "napaka: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "opozorilo: "
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "alokacija pomnilnika (%u bajtov) vrnjeno NIČ.\n"
-
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: pisanje Fwrite je bilo neuspešno: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: rpmWriteSignature je bilo neuspešno: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead je bil neuspešen: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead je bil neuspešen: %s\n"
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: rpmWriteSignature je bilo neuspešno: %s\n"
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/sr.po b/po/sr.po
index 2f9620f4e..96407a5e8 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Serbian (http://www.transifex.com/rpm-team/rpm/language/sr/)\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -44,497 +44,559 @@ msgstr "Овај програм Ñе Ñме Ñлободно диÑтрибуиÑ
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "неуÑпело прављење цеви за --pipe: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "неуÑпело извршавање\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "аргумент није RPM пакет\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "грешка при читању заглавља из пакета\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "не могу да поново отворим товар: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Опције упита (Ñа -q или --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Опције провере (Ñа -V или --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Опције инÑталације/надградње/бриÑања:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Заједничке опције за Ñве rpm режиме и извршне програме:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "једна врÑта упита/провере Ñме бити урађена одједном"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "неочекиване заÑтавице упита"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "неочекиван облик упита"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "неочекивани извор упита"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "Ñамо један главни режим Ñме бити наведен"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "датотеке Ñмеју бити премештане Ñамо током инÑталације пакета"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "не може Ñе кориÑтити --prefix уз --relocate или --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate и --excludepath могу бити употребљене Ñамо при инÑталацији нових "
-"пакета"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix може бити употребљена Ñамо при инÑталацији нових пакета"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "аргументи за --prefix морају почети знаком /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludecocs може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includecocs може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "може Ñе навеÑти Ñамо једна од --excludedocs или --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches може бити наведена Ñамо током бриÑања пакета"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles може бити наведена Ñамо током инÑталације пакета"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb може бити наведена Ñамо током инÑталације и бриÑања пакета"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"опције иÑкључивања Ñкрипте могу бити наведене Ñамо током инÑталације и "
-"бриÑања пакета"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"опције иÑкључивања окидача могу бити наведене Ñамо током инÑталације и "
-"бриÑања пакета"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "аргументи за --root (-r) морају почети знаком /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "нема задатих пакета за бриÑање"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "нема задатих пакета за инÑталацију"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "нема задатих аргумената за упит"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "нема задатих аргумената за проверу"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot је већ наведен, занемарујем %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"направи кроз %prep (раÑпаковани извори и примењене закрпе) из <specfile>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "направи кроз %build (%prep, онда компилирај) из <specfile>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "направи кроз %install (%prep, %build, затим инÑталирај) из <specfile>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "провери %files одељак из <specfile>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "направи изворне и бинарне пакете из <specfile>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "направи бинарне пакете Ñамо из <specfile>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "направи изворне пакете Ñамо из <specfile>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"направи кроз %install (%prep, %build, затим инÑталирај) из <source package>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"направи кроз %prep (раÑпаковани извори и примењене закрпе) из <tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "направи кроз %build (%prep, онда компилирај) из <tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "направи кроз %install (%prep, %build, онда инÑталирај) из <tarball>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "провери %files одељак из <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "направи изворне и бинарне пакете из <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "направи бинарне пакете Ñамо из <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "направи изворне пакете Ñамо из <tarball>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "направи бинарни пакет из <source package>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<source package>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"направи кроз %install (%prep, %build, затим инÑталирај) из <source package>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "премоÑти корен прављења"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "уклони Ñтабло прављења по завршетку"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "занемари ExcludeArch: упутÑтва из датотеке Ñпецификације"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "отклони грешке у машини Ñтања датотека"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "немој извршити ниједну фазу прављења"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "немој проверавати завиÑноÑти прављења"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "не прихватај i18N msgstr ниÑке из датотеке Ñпецификације"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "уклони изворе по завршетку"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "уклони датотеку Ñпецификације по завршетку"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "преÑкочи право до одређене фазе (Ñамо за c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "премоÑти циљну платформу"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Опције прављења уз [ <specfile> | <tarball> | <source package> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Заједничке опције за Ñве rpm режиме и извршне програме:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "ÐеуÑпело прављење завиÑноÑти:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Ðе могу да отворим датотеку Ñпецификације %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "ÐеуÑпело отварање tar цеви: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "ÐеуÑпела промена имена %s у %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "stat није уÑпео %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Датотека %s није обична датотека.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Датотека %s не личи на датотеку Ñпецификације.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Правим циљне платформе: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Правим за циљ %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "аргументи за --root (-r) морају почети знаком /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "иницијализуј базу података"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"поново направи обрнуте ÑпиÑкове базе података из заглавља инÑталираних пакета"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "провера датотека базе података"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Опције базе података:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "Ñамо један главни режим Ñме бити наведен"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "провери потпиÑе пакета"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "увези ојачани јавни кључ"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "нема задатих аргумената"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Опције упита (Ñа -q или --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Опције провере (Ñа -V или --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Опције инÑталације/надградње/бриÑања:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "једна врÑта упита/провере Ñме бити урађена одједном"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "неочекиване заÑтавице упита"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "неочекиван облик упита"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "неочекивани извор упита"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "датотеке Ñмеју бити премештане Ñамо током инÑталације пакета"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "не може Ñе кориÑтити --prefix уз --relocate или --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate и --excludepath могу бити употребљене Ñамо при инÑталацији нових "
+"пакета"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix може бити употребљена Ñамо при инÑталацији нових пакета"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "аргументи за --prefix морају почети знаком /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludecocs може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includecocs може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "може Ñе навеÑти Ñамо једна од --excludedocs или --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches може бити наведена Ñамо током бриÑања пакета"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles може бити наведена Ñамо током инÑталације пакета"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb може бити наведена Ñамо током инÑталације и бриÑања пакета"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"опције иÑкључивања Ñкрипте могу бити наведене Ñамо током инÑталације и "
+"бриÑања пакета"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"опције иÑкључивања окидача могу бити наведене Ñамо током инÑталације и "
+"бриÑања пакета"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "нема задатих пакета за бриÑање"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "нема задатих пакета за инÑталацију"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "нема задатих аргумената за упит"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "нема задатих аргумената за проверу"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "потпиши пакет(е) (иÑтоветно Ñа --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "обриши потпиÑе пакета"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Опције потпиÑа:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Ðе могу да извршим %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Морате поÑтавити „%%_gpg_name“ у макро датотеци\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "УнеÑите лозинку: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Лозинка је добра.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "кориÑти Ñледећи облик упита"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -543,32 +605,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Извршавам(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Извршавање %s није уÑпело (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Лош ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð»Ð°Ð·Ð° из %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -578,235 +645,315 @@ msgstr ""
"\n"
"Грешке RPM прављења:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "ÑинтакÑна грешка при рашчлањивању ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "ÑинтакÑна грешка при рашчлањивању &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "ÑинтакÑна грешка при рашчлањивању ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "грешка рашчлањивања у изразу\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "неупарена (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- Ñамо код бројева\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! Ñамо код бројева\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "врÑте Ñе морају поклапати\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / није подржано за Ñтрингове\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- није подржано за Ñтрингове\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& и || ниÑу подржани за Ñтрингове\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "ÑинтакÑна грешка у изразу\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "ÐедоÑтаје „(“ у %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "ÐедоÑтаје „)“ у %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "ÐеиÑправан %s знак: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "ÐедоÑтаје %s у %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Размак који није празан Ñледи %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Лоша ÑинтакÑа: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Лоша Ñпецификација режима: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Лоша Ñпецификација режима директоријума: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "ÐеиÑправна могућноÑÑ‚: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Ðије уграђена подршка за могућноÑÑ‚ датотеке\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Датотека мора почети Ñа „/“: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Ðепознат алгоритам %u за Ñажимање датотека, враћам Ñе на MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Датотека наведена двапут: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symlink тачке за BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Датотека није пронађена: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: не могу да учитам непознату ознаку (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: неуÑпело читање јавног кључа.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: јавни кључ није ојачан.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "неуÑпело креирање директоријума"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "ИÑпред датотеке је потребно да Ñтоји „/“: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Датотека није пронађена поклапањем: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Ðе могу да отворим %%files датотеку %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "ред: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Датотека није пронађена поклапањем: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Лоша датотека: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Лош влаÑник/група: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Проверавам за незапаковане датотеке: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -815,548 +962,605 @@ msgstr ""
"Пронађене Ñу инÑталиране (али незапаковане) датотеке:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Бинарне датотеке завиÑне од архитектуре у noarch пакету\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: ред: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Ðије могуће утврдити назив домаћина: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Ðе могу да упишем товар у %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Ðе могу да прочитам товар из %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Ðије могуће утврдити назив домаћина: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Ðепозната компреÑија товара: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Ðе могу да направим непроменљиву облаÑÑ‚ заглавља.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Ðе могу да отворим temp датотеку.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Ðе могу да упишем привремено заглавље\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Лоши CSA подаци\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Ðе могу да поново учитам заглавље потпиÑа.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Ðе могу да отворим %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Ðе могу да запишем пакет: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Ðе могу да отворим sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Ðе могу да прочитам заглавље из %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Ðе могу да упишем заглавље у %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "ЗапиÑано: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Извршавам „%s“:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Извршавање „%s“ није уÑпело.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "ÐеуÑпела провера пакета „%s“.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Ðе могу да направим име излазне датотеке за пакет %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "не могу да направим %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "ред %d: други %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog Ñтавке морају почети Ñа *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "непотпуна %%changelog Ñтавка\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "лош датум у %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog није у опадајућем хронолошком редоÑледу\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "недоÑтаје име у %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "нема опиÑа у %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "ред %d: Грешка при тумачењу %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "ред %d: Лоша опција %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "ред %d: Превише имена: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "ред %d: Пакет не поÑтоји: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "ред %d: Други опиÑ\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "ред %d: Грешка при тумачењу %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "ред %d: Лош број: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "ред %d: Лош no%s број: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "ред %d: Лош %s број: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d дефиниÑано више пута\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Ðрхитектура је изоÑтављена: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Ðрхитектура није уврштена: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS је изоÑтављен: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS није уврштен: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "%s поље мора бити приÑутно у пакету: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Удвојене %s Ñтавке у пакету: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Ðе могу да отворим икону %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Ðе могу да прочитам икону %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Ðепозната врÑта иконе: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "ред %d: Ознака прихвата Ñамо један жетон: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "ред %d: Лоше обликована ознака: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "ред %d: Празна ознака: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "ред %d: ПрефикÑи Ñе не Ñмеју завршавати Ñа „/“: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "ред %d: Docdir мора почети Ñа „/“: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "ред %d: Поље епохе мора бити број без предзнака: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "ред %d: Лоши %s: квалификатори: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "ред %d: Лош облик за BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "ред %d: Само noarch подпакети Ñу подржани: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Интерна грешка: Лажна ознака %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Лоша Ñпецификација пакета: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Пакет већ поÑтоји: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "ред %d: Ðепозната ознака: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} не може бити празно\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} не може бити „/“\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Лош извор: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Ðема закрпе број %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch без одговарајуће „Patch:“ ознаке\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Ðема извора број %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Ðема ознаке „Source:“ у датотеци Ñпецификације\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Грешка у тумачењу %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "ред %d: Лош аргумент за %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "ред %d: Лоша %%setup опција %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "ÐеиÑправан број закрпе %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "ред %d: други %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "ред %d: окидачи морају имати --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "ред %d: Грешка при тумачењу %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "ред %d: интерна Ñкрипта Ñе мора завршити Ñа „>“: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "ред %d: Ñкрипта програма мора почети Ñа „/“: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "ред %d: Други %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "ред %d: неподржана интерна Ñкрипта: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "ред %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ðе могу да отворим %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Добио %%else без %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Добио %%endif без %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "ÐиÑу пронађене уÑаглашене архитектуре за прављење\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Пакет нема %%description: %s\n"
@@ -1427,450 +1631,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Ðе могу да направим цев за %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Ðе могу да извршим %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Ðе могу да одвојим %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Пребацивање %s у дуги цео број није уÑпело.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) није уÑпело: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load није уÑпело: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Препознавање датотеке „%s“ није уÑпело: режим %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Проналазак %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "ÐеуÑпело тражење %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "упит на датотеком Ñпецификације %s није уÑпео, не могу да протумачим\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(грешка 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Лош magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Лоше/нечитљиво заглавље"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "није препозната опција базе података: „%s“ занемарено.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Превелика величина заглавља"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s има неправилну бројчану вредноÑÑ‚, преÑкочено\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s има превелику или премалу long вредноÑÑ‚, преÑкочено\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s има превелику или премалу целобројну вредноÑÑ‚, преÑкочено\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "не могу да добијем %s катанац на %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "дељено"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "екÑклузивно"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Ðепозната врÑта датотеке"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "ÐедоÑтаје чврÑта веза"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "грешка(%d) при Ñкладиштењу Ñлога „%s“ у %s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "грешка(%d) при уклањању Ñлога „%s“ из %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Интерна грешка"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Датотека архиве није у заглављу"
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "грешка(%d) при заузимању новог примерка пакета\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " неуÑпело - "
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s је Делта RPM и не може Ñе директно инÑталирати\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Ðеподржан терет (%s) у пакету %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "пакет %s је већ додат, преÑкачем %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "пакет %s је већ додат, замењујем Ñа %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(није blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(није број)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(неиÑправна врÑта)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(није base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(неиÑправна врÑта)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(није blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(неиÑправна xml врÑта)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(није OpenPGP потпиÑ)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "кориÑник %s не поÑтоји - кориÑтим root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "група %s не поÑтоји - кориÑтим root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s Ñачувано као %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s направљено као %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "ознака[%d]: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: ЛОШЕ, није хекÑадекадно\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: ЛОШЕ, није бинарно\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: ЛОШЕ, није бинарно\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "blob величина (%d): ЛОШЕ, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "померај региона: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "репни регион: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "величина региона: ЛОШЕ, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr size(%d): ЛОШЕ, читам враћено %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: ЛОШЕ\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr tags: ЛОШЕ, број ознака(%d) је ван домета\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr data: ЛОШЕ, број бајтова(%d) је ван домета\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): ЛОШЕ, читам враћено %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr load: ЛОШЕ\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "празан облик ознаке"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature није уÑпело: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "празно име ознаке"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ðема потпиÑа на раÑполагању\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead није уÑпело: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] очекиван на крају низа"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "неочекиван ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "неочекиван }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? очекиван у изразу"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ очекивано поÑле ? у изразу"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} очекиван у изразу"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": очекиван након ? подизраза"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ очекивано поÑле : у изразу"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| очекиван на крају израза"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "показивач низа коришћен Ñа низовима различитих величина"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread није уÑпело: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "унапред дефиниÑани MACRO Ñа вредношћу EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "„MACRO EXPR“"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "дефинише MACRO Ñа вредношћу EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "иÑпиши макро проширење за EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "„EXPR“"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "читај <FILE:...> умеÑто подразумеваних датотека"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "немој проверавати Ñажетак(е) пакета"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "немој проверавати заглавље(а) базе података по добављању"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "немој проверавати потпиÑ(е) пакета"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "пошаљи stdout ка CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "кориÑти ROOT као директоријум највишег нивоа"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "прикажи ознаке познатих упита"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "прикажи коначну конфигурацију за rpmrc и macro"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "пружа мање детаљан излаз"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "пружа детаљнији излаз"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "напиши која Ñе rpm верзија кориÑти"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "отклони грешке у машини Ñтања датотеке товара"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "отклони грешке за rpmio У/И"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: табела опција није добро подешена (%d)\n"
@@ -1891,12 +2206,12 @@ msgstr "премештања морају Ñадржати ="
msgid "relocations must have a / following the ="
msgstr "премештања морају имати / након ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"инÑталирај Ñве датотеке, чак и подешавања која би иначе могла бити преÑкочена"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1904,520 +2219,569 @@ msgstr ""
"уклони Ñве пакете који одговарају <package> (обично Ñе пријављује грешка ако "
"<package> одређује више пакета)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "премеÑти датотеке у пакету који Ñе не може премеÑтити"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "штампај петље завиÑноÑти као упозорење"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "избриши (деинÑталирај) пакет"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "немој инÑталирати датотеке подешавања"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "немој да инÑталираш документацију"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "преÑкочи датотеке које Ñадрже компоненту <path> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "Ñкраћеница за --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "надгради пакете ако Ñу већ инÑталирани"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "иÑпиÑуј знак тарабе док Ñе пакет инÑталира (добро уз -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "немој проверавати архитектуру пакета"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "немој проверавати оперативни ÑиÑтем пакета"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "немој проверавати проÑтор на диÑку пре инÑталације"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "инÑталирај документацију"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "инÑталирај пакет(е)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "ажурирај базу података, али немој мењати ÑиÑтем датотека"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "немој проверавати завиÑноÑти пакета"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "немој инÑталирати безбедноÑне контекÑте датотека"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"немој преуређивати редоÑлед инÑталације пакета ради задовољавања завиÑноÑти"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "немој извршити Ñкриптицу(е) пакета"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "немој извршити %%pre Ñкриптицу (ако поÑтоји)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "немој извршити %%post Ñкриптицу (ако поÑтоји)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "немој извршити %%preun Ñкриптицу (ако поÑтоји)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "немој извршити %%postun Ñкриптицу (ако поÑтоји)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "немој извршити ниједну Ñкриптицу(е) коју активира овај пакет"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "немој извршити ниједну %%triggerprein Ñкриптицу(е)"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "немој извршити ниједну %%triggerin Ñкриптицу(е)"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "немој извршити ниједну %%triggerun Ñкриптицу(е)"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "немој извршити ниједну %%triggerpostun Ñкриптицу(е)"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
"надгради на Ñтару верзију пакета (--force код надградње ово ради ÑамоÑтално)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "иÑпиÑуј проценте док Ñе пакет инÑталира"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "премеÑти пакет у <dir>, ако Ñе може премеÑтити"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "премеÑти датотеке из путање <old> у <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "занемари Ñукобе датотека између пакета"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "поново инÑталирај ако је пакет већ приÑутан"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "немој инÑталирати, али реци да ли би радило или не"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "надгради пакет(е)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "иÑпитај/провери Ñве пакете"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "rpm checksig режим"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "иÑпитај/провери пакет(е) које поÑедују датотеку"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "иÑпитај/провери пакет(е) у групи"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "иÑпитај/провери датотеку пакета"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "иÑпитај/провери пакет(е) Ñа идентификатором пакета"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "иÑпитај/провери пакет(е) Ñа идентификатором заглавља"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "режим rpm упита"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "иÑпитај/провери инÑтанцу заглавља"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "иÑпитај/провери пакет(е) из транÑакције инÑталације"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "иÑпитај пакет(е) које је активирао овај пакет"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "режим rpm провере"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "иÑпитај/провери пакет(е) који захтевају завиÑноÑти"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "иÑпитај/провери пакет(е) који пружају завиÑноÑти"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "немој преклапати аргументе"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "немој обрађивати датотеке које ниÑу пакети као манифеÑте"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "иÑпиши Ñве датотеке подешавања"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "иÑпиши Ñве датотеке документације"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "иÑпиши Ñве датотеке документације"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "иÑпиши Ñве датотеке подешавања"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "избаци оÑновне податке о датотеци"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "иÑпиши датотеке у пакету"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "преÑкочи %%ghost датотеке"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "преÑкочи %%ghost датотеке"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "прикажи Ñтања наведених датотека"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "немој проверавати величину датотека"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "немој проверавати путање Ñимболичких веза датотека"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "немој проверавати влаÑника датотека"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "немој проверавати групу датотека"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "немој проверавати време мењања датотека"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "немој проверавати режим приÑтупа датотека"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "немој проверавати могућноÑти датотека"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "немој проверавати безбедноÑне контекÑте датотека"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "немој проверавати могућноÑти датотека"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "немој проверавати датотеке у пакету"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "немој проверавати завиÑноÑти пакета"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "немој извршити Ñкрипту(е) провере"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "очекиван је изворни пакет, пронађен је бинарни\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "изворни пакет не Ñадржи .spec датотеку\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "раÑпакивање архиве није уÑпело %s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " на датотеци "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s није уÑпело код датотеке %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s није уÑпело: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "неиÑправан облик: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(не Ñадржи датотеке)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "нормално "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "замењено "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "није инÑталиран "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "дељено на мрежи "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "погрешна боја "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(без Ñтања) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(непознат %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "пакет нема ÑпиÑкове влаÑника/групе датотека\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "пакет нема ÑпиÑкове нити влаÑника ни id датотека\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "група %s не Ñадржи ниједан пакет\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "ниједан пакет не активира %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "лоше обликован %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "ниједан пакет не одговара %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "ниједан пакет не захтева %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "ниједан пакет не пружа %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "датотека %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "датотека %s не припада ниједном пакету\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "неиÑправан број пакета: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "пакет %s није инÑталиран\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "непозната ознака: „%s“\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: увозно читање није уÑпело(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
-msgstr "%s: Ðепромењива регија заглавља Ñе не може ишчитати. Оштећен пакет?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "ÐИЈЕ УРЕДУ"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "УРЕДУ"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (ÐЕДОСТÐЈУЋИ КЉУЧЕВИ:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (ÐЕПОУЗДÐÐИ КЉУЧЕВИ:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: отварање није уÑпело: %s\n"
@@ -2442,214 +2806,445 @@ msgstr "Ðе могу да променим коренÑки директориÑ
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "није поÑтављен dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: преÑкачем"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "грешка(%d) при запиÑивању Ñлога #%d у %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec није уÑпео: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp није уÑпео: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: преÑкачем"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: оштећено заглавље #%u враћено -- преÑкачем.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: не могу да прочитам заглавље на 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "није поÑтављен dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "неуÑпело креирање директоријума %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "заглавље #%u у бази податак је лоше -- преÑкачем.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "не могу да додам Ñлог првобитно на %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"неуÑпело поновно прављење базе података: оÑновна база података је оÑтала на "
+"меÑту\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "неуÑпела замена Ñтаре базе података Ñа новом базом података!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "ÐЕ "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "ДÐ"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "Ðеопходне:, Обезбеђене:, и ЗаÑтареле: верзије подршке завиÑноÑти."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"име(на) датотеке Ñачувано као (називДиректоријума,оÑновноИме,"
"индекÑДиректоријума) пар, не као путања."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "товар пакета може бити компримован кориÑтећи bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "товар пакета може бити компримован кориÑтећи lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "датотека(е) товара пакета има Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ â€ž./“."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "назив пакета-верзија-издање није имплицитно наведено."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "ознаке заглавља Ñе увек Ñортирају након учитавања."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "преводилац Ñкриптице може кориÑтити аргументе заглавља."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "датотека чврÑте везе може бити инÑталирана иако није потпуна."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr "Ñкриптица пакета може приÑтупити rpm бази података током инÑталације."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "унутрашња подршка за Ñкрипте lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "подршка за POSIX.1e могућноÑти датотека"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Лош magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Лоше/нечитљиво заглавље"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Превелика величина заглавља"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Ðепозната врÑта датотеке"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Интерна грешка"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Датотека архиве није у заглављу"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " неуÑпело - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "отварање %s није уÑпело: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: није rpm пакет (или манифеÑÑ‚ пакета)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Припремам..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "ÐеуÑпеле завиÑноÑти:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: није rpm пакет (или манифеÑÑ‚ пакета): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s Ñе не може инÑталирати\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Прибављам %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "преÑкачем %s - неуÑпео преноÑ\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "пакет %s Ñе не може премештати\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "грешка при читању из датотеке %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "„%s“ одређује више пакета:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "не могу да отворим %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "ИнÑталирам %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "није rpm пакет"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "неправилан тип потпиÑа"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "неподржана верзија RPM пакета"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "неуÑпело читање: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "различито"
@@ -2724,798 +3319,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "непозната грешка %d Ñе деÑила у току руковања пакетом %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "недоÑтаје друго „:“ код %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "недоÑтаје име архитектуре на %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Ðепотпун ред података на %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Превише аргумената у реду података на %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Лош број архитектуре/оÑ-а: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Ðепотпун подразумевани ред на %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Премало аргумената у подразумеваном реду на %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "недоÑтаје „:“ (пронађено 0x%02x) код %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "недоÑтаје аргумент за %s на %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "не могу да отворим %s на %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "недоÑтаје архитектура за %s на %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "лоша опција „%s“ код %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Ðепознати ÑиÑтем: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Молим Ð²Ð°Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ˜Ñ‚Ðµ %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Ðе могу да отворим %s за читање: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "није уграђена подршка <lua> Ñкриптица\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Ðе могу да направим привремену датотеку за %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Ðе могу да удвојим опиÑника датотеке: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s Ñкриптица није уÑпела, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s Ñкриптица није уÑпела, Ñигнал %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s Ñкриптица није уÑпела, излазни ÑÑ‚Ð°Ñ‚ÑƒÑ %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Ðепознат облик"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "не могу да отворим Packages базу података у %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "Ñувишна „(“ у ознаци пакета: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "недоÑтаје „(“ у ознаци пакета: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "недоÑтаје „)“ у ознаци пакета: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: неуÑпело читање јавног кључа.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh величина(%d): ЛОШЕ, читање враћено %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: ЛОШЕ\n"
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh ознаке: ЛОШЕ, број ознака(%d) је ван домета\n"
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh подаци: ЛОШЕ, број бајтова(%d) је ван домета\n"
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): ЛОШЕ, читање враћено %d\n"
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh ознака[%d]: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh учитавање: ЛОШЕ\n"
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh подлошка(%zd): ЛОШЕ, читам %zd бајтова\n"
-
-#: lib/signature.c:235
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): ЛОШЕ, fstat(2) није уÑпео\n"
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Ðепромењива регија заглавља Ñе не може ишчитати. Оштећен пакет?\n"
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 Ñажетак:"
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "SHA1 Ñажетак заглавља:"
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "Заглавље "
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:158
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "недоÑтаје %c %s"
-
-#: lib/verify.c:422
+#: lib/rpmvs.c:178
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Ðезадовољене завиÑноÑти за %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "недоÑтаје { поÑле %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "недоÑтаје } поÑле %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "празан облик ознаке"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "празно име ознаке"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "непозната ознака"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] очекиван на крају низа"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "неочекиван ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "неочекиван }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? очекиван у изразу"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ очекивано поÑле ? у изразу"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} очекиван у изразу"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": очекиван након ? подизраза"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ очекивано поÑле : у изразу"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| очекиван на крају израза"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "показивач низа коришћен Ñа низовима различитих величина"
-
-#: lib/rpmdb.c:97
+#: lib/rpmvs.c:188
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/rpmvs.c:195
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "не могу да отворим %s Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ñ€Ð¸Ñтећи db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "није поÑтављен dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: преÑкачем"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "грешка(%d) при запиÑивању Ñлога #%d у %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec није уÑпео: %s\n"
-
-#: lib/rpmdb.c:1596
+#: lib/rpmvs.c:206
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp није уÑпео: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: преÑкачем"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: оштећено заглавље #%u враћено -- преÑкачем.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/rpmdb.c:2349
+#: lib/rpmvs.c:261
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: не могу да прочитам заглавље на 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "грешка(%d) при поÑтављању „%s“ Ñлогова из %s индекÑа\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "грешка(%d) при Ñкладиштењу Ñлога „%s“ у %s\n"
-
-#: lib/rpmdb.c:2477
+#: lib/rpmvs.c:268
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "грешка(%d) при уклањању Ñлога „%s“ из %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "грешка(%d) при заузимању новог примерка пакета\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "грешка(%d) при добављању „%s“ Ñлогова из %s индекÑа\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "грешка(%d) при запиÑивању Ñлога %s у %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "није поÑтављен dbpath"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "неуÑпело креирање директоријума %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "заглавље #%u у бази податак је лоше -- преÑкачем.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "не могу да додам Ñлог првобитно на %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+msgid "%s%s"
msgstr ""
-"неуÑпело поновно прављење базе података: оÑновна база података је оÑтала на "
-"меÑту\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "неуÑпела замена Ñтаре базе података Ñа новом базом података!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "замени датотеке у %s Ñа датотекама из %s да вратиш у претходно Ñтање"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "неуÑпело уклањање директоријума %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "база података%d грешка(%d) из %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "база података%d грашка(%d): %s\n"
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "не могу да добијем %s катанац на %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "дељено"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "екÑклузивно"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "није препозната опција базе података: „%s“ занемарено.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s има неправилну бројчану вредноÑÑ‚, преÑкочено\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s има превелику или премалу long вредноÑÑ‚, преÑкочено\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s има превелику или премалу целобројну вредноÑÑ‚, преÑкочено\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Заглавље "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Ðе могу да поново учитам заглавље потпиÑа.\n"
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: plugins/sepolicy.c:386
+#: lib/verify.c:263
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: lib/verify.c:284
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: lib/verify.c:448
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "недоÑтаје %c %s"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: lib/verify.c:503
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Ðезадовољене завиÑноÑти за %s:\n"
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== активно %d празно %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(празно)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(празно)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Макро %%%s има незавршено тело\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Макро %%%s има незавршене опције\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Макро %%%s има неправилно име (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Макро %%%s има незавршено тело\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Макро %%%s има незавршене опције\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Макро %%%s има празно тело\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Макро %%%s није могао да Ñе прошири\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Макро %%%s има неправилно име (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Макро %%%s (%s) није коришћен иÑпод нивоа %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Ðепозната опција %c у %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Ðеограничено %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "%% је праћена Ñа макроом кога није могуће рашчланити\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== активно %d празно %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "грешка при прављењу привремене датотеке %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Датотека %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Датотека %s је мања од %u бајтова\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "неуÑпело креирање директоријума"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr ""
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(без грешке)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "кобна грешка: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "грешка: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "упозорење: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "неправилна ÑинтакÑа у lua Ñкриптици: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "неправилна ÑинтакÑа у lua Ñкрипти: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua Ñкрипта није уÑпела: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "неправилна ÑинтакÑа у lua датотеци: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua удица није уÑпела: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: rpmio/rpmmalloc.c:25
+#, c-format
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "алокација меморије (%u бајта) је вратила ÐÐЛ.\n"
+
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(без грешке)"
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "кобна грешка: "
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "грешка: "
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "упозорење: "
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:62
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "алокација меморије (%u бајта) је вратила ÐÐЛ.\n"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:83
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite није уÑпело: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread није уÑпело: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush није уÑпело: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Ðе могу да извршим %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Ðе могу да направим цев за потпиÑивање: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "неуÑпело gpg извршавање (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg није уÑпео да запише потпиÑ\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "не могу да прочитам потпиÑ\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp није уÑпело\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead није уÑпело: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature није уÑпело: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr ""
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature није уÑпело: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead није уÑпело: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: неуÑпело читање манифеÑта: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "немој проверавати Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°+товара"
diff --git a/po/sr@latin.po b/po/sr@latin.po
index 679131cfe..dcc5ef06b 100644
--- a/po/sr@latin.po
+++ b/po/sr@latin.po
@@ -7,10 +7,11 @@ msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: Serbian (Latin) (http://www.transifex.com/rpm-team/rpm/"
+"language/sr@latin/)\n"
"Language: sr@latin\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -44,498 +45,560 @@ msgstr "Ovaj program se sme slobodno distribuirati pod GNU OJL odredbama.\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "neuspelo pravljenje cevi za --pipe: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "neuspelo izvršavanje\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "argument nije RPM paket\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "greÅ¡ka pri Äitanju zaglavlja iz paketa\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "ne mogu da ponovo otvorim tovar: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Opcije upita (sa -q ili --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Opcije provere (sa -V ili --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Opcije instalacije/nadgradnje/brisanja:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "ZajedniÄke opcije za sve rpm režime i izvrÅ¡ne programe:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "jedna vrsta upita/provere sme biti urađena odjednom"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "neoÄekivane zastavice upita"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "neoÄekivan oblik upita"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "neoÄekivani izvor upita"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "samo jedan glavni režim sme biti naveden"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "datoteke smeju biti premeštane samo tokom instalacije paketa"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "ne može se koristiti --prefix uz --relocate ili --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate i --excludepath mogu biti upotrebljene samo pri instalaciji novih "
-"paketa"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix može biti upotrebljena samo pri instalaciji novih paketa"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "argumenti za --prefix moraju poÄeti znakom /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludecocs može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includecocs može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "može se navesti samo jedna od --excludedocs ili --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches može biti navedena samo tokom brisanja paketa"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles može biti navedena samo tokom instalacije paketa"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb može biti navedena samo tokom instalacije i brisanja paketa"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"opcije iskljuÄivanja skripte mogu biti navedene samo tokom instalacije i "
-"brisanja paketa"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"opcije iskljuÄivanja okidaÄa mogu biti navedene samo tokom instalacije i "
-"brisanja paketa"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "argumenti za --root (-r) moraju poÄeti znakom /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "nema zadatih paketa za brisanje"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "nema zadatih paketa za instalaciju"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "nema zadatih argumenata za upit"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "nema zadatih argumenata za proveru"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot je već naveden, zanemarujem %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"napravi kroz %prep (raspakovani izvori i primenjene zakrpe) iz <specfile>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "napravi kroz %build (%prep, onda kompiliraj) iz <specfile>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "napravi kroz %install (%prep, %build, zatim instaliraj) iz <specfile>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "proveri %files odeljak iz <specfile>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "napravi izvorne i binarne pakete iz <specfile>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "napravi binarne pakete samo iz <specfile>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "napravi izvorne pakete samo iz <specfile>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"napravi kroz %install (%prep, %build, zatim instaliraj) iz <source package>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"napravi kroz %prep (raspakovani izvori i primenjene zakrpe) iz <tarball>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "napravi kroz %build (%prep, onda kompiliraj) iz <tarball>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "napravi kroz %install (%prep, %build, onda instaliraj) iz <tarball>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "proveri %files odeljak iz <tarball>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "napravi izvorne i binarne pakete iz <tarball>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "napravi binarne pakete samo iz <tarball>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "napravi izvorne pakete samo iz <tarball>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "napravi binarni paket iz <source package>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<source package>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"napravi kroz %install (%prep, %build, zatim instaliraj) iz <source package>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "premosti koren pravljenja"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "ukloni stablo pravljenja po završetku"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "zanemari ExcludeArch: uputstva iz datoteke specifikacije"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "otkloni greške u mašini stanja datoteka"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "nemoj izvršiti nijednu fazu pravljenja"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "nemoj proveravati zavisnosti pravljenja"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "ne prihvataj i18N msgstr niske iz datoteke specifikacije"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "ukloni izvore po završetku"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "ukloni datoteku specifikacije po završetku"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "preskoÄi pravo do odreÄ‘ene faze (samo za c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "premosti ciljnu platformu"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Opcije pravljenja uz [ <specfile> | <tarball> | <source package> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "ZajedniÄke opcije za sve rpm režime i izvrÅ¡ne programe:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Neuspelo pravljenje zavisnosti:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Ne mogu da otvorim datoteku specifikacije %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Neuspelo otvaranje tar cevi: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Neuspela promena imena %s u %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "stat nije uspeo %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Datoteka %s nije obiÄna datoteka.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Datoteka %s ne liÄi na datoteku specifikacije.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Pravim ciljne platforme: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Pravim za cilj %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "argumenti za --root (-r) moraju poÄeti znakom /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "inicijalizuj bazu podataka"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"ponovo napravi obrnute spiskove baze podataka iz zaglavlja instaliranih "
"paketa"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "provera datoteka baze podataka"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Opcije baze podataka:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "samo jedan glavni režim sme biti naveden"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "proveri potpise paketa"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "uvezi ojaÄani javni kljuÄ"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr ""
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "nema zadatih argumenata"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Opcije upita (sa -q ili --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Opcije provere (sa -V ili --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Opcije instalacije/nadgradnje/brisanja:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "jedna vrsta upita/provere sme biti urađena odjednom"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "neoÄekivane zastavice upita"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "neoÄekivan oblik upita"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "neoÄekivani izvor upita"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "datoteke smeju biti premeštane samo tokom instalacije paketa"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "ne može se koristiti --prefix uz --relocate ili --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate i --excludepath mogu biti upotrebljene samo pri instalaciji novih "
+"paketa"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix može biti upotrebljena samo pri instalaciji novih paketa"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argumenti za --prefix moraju poÄeti znakom /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludecocs može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includecocs može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "može se navesti samo jedna od --excludedocs ili --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches može biti navedena samo tokom brisanja paketa"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles može biti navedena samo tokom instalacije paketa"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb može biti navedena samo tokom instalacije i brisanja paketa"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opcije iskljuÄivanja skripte mogu biti navedene samo tokom instalacije i "
+"brisanja paketa"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"opcije iskljuÄivanja okidaÄa mogu biti navedene samo tokom instalacije i "
+"brisanja paketa"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "nema zadatih paketa za brisanje"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "nema zadatih paketa za instalaciju"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "nema zadatih argumenata za upit"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "nema zadatih argumenata za proveru"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "potpiši paket(e) (istovetno sa --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "obriši potpise paketa"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Opcije potpisa:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Ne mogu da izvršim %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Morate postaviti „%%_gpg_name“ u makro datoteci\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Unesite lozinku: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Lozinka je dobra.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "koristi sledeći oblik upita"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -544,32 +607,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Izvršavam(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Izvršavanje %s nije uspelo (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Loš status izlaza iz %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -579,235 +647,315 @@ msgstr ""
"\n"
"Greške RPM pravljenja:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "sintaksna greÅ¡ka pri raÅ¡Älanjivanju ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "sintaksna greÅ¡ka pri raÅ¡Älanjivanju &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "sintaksna greÅ¡ka pri raÅ¡Älanjivanju ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "greÅ¡ka raÅ¡Älanjivanja u izrazu\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "neuparena (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- samo kod brojeva\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! samo kod brojeva\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "vrste se moraju poklapati\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / nije podržano za stringove\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- nije podržano za stringove\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& i || nisu podržani za stringove\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "sintaksna greška u izrazu\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Nedostaje „(“ u %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Nedostaje „)“ u %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Neispravan %s znak: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Nedostaje %s u %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Razmak koji nije prazan sledi %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Loša sintaksa: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Loša specifikacija režima: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Loša specifikacija režima direktorijuma: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Neispravna mogućnost: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Nije ugrađena podrška za mogućnost datoteke\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Datoteka mora poÄeti sa „/“: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Nepoznat algoritam %u za sažimanje datoteka, vraćam se na MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Datoteka navedena dvaput: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symlink taÄke za BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Datoteka nije pronađena: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: ne mogu da uÄitam nepoznatu oznaku (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: neuspelo Äitanje javnog kljuÄa.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: javni kljuÄ nije ojaÄan.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "neuspelo kreiranje direktorijuma"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Ispred datoteke je potrebno da stoji „/“: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Datoteka nije pronađena poklapanjem: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Ne mogu da otvorim %%files datoteku %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "red: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Datoteka nije pronađena poklapanjem: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Loša datoteka: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Loš vlasnik/grupa: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Proveravam za nezapakovane datoteke: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -816,548 +964,605 @@ msgstr ""
"Pronađene su instalirane (ali nezapakovane) datoteke:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Binarne datoteke zavisne od arhitekture u noarch paketu\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: red: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Nije moguće utvrditi naziv domaćina: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Ne mogu da upišem tovar u %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Ne mogu da proÄitam tovar iz %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Nije moguće utvrditi naziv domaćina: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Nepoznata kompresija tovara: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Ne mogu da napravim nepromenljivu oblast zaglavlja.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Ne mogu da otvorim temp datoteku.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Ne mogu da upišem privremeno zaglavlje\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Loši CSA podaci\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Ne mogu da ponovo uÄitam zaglavlje potpisa.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Ne mogu da otvorim %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Ne mogu da zapišem paket: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Ne mogu da otvorim sigtarget %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Ne mogu da proÄitam zaglavlje iz %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Ne mogu da upišem zaglavlje u %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Zapisano: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Izvršavam „%s“:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Izvršavanje „%s“ nije uspelo.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Neuspela provera paketa „%s“.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Ne mogu da napravim ime izlazne datoteke za paket %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "ne mogu da napravim %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "red %d: drugi %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog stavke moraju poÄeti sa *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "nepotpuna %%changelog stavka\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "loš datum u %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog nije u opadajućem hronološkom redosledu\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "nedostaje ime u %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "nema opisa u %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "red %d: GreÅ¡ka pri tumaÄenju %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "red %d: Loša opcija %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "red %d: Previše imena: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "red %d: Paket ne postoji: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "red %d: Drugi opis\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "red %d: GreÅ¡ka pri tumaÄenju %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "red %d: Loš broj: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "red %d: Loš no%s broj: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "red %d: Loš %s broj: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d definisano više puta\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Arhitektura je izostavljena: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Arhitektura nije uvrštena: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS je izostavljen: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS nije uvršten: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "%s polje mora biti prisutno u paketu: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Udvojene %s stavke u paketu: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Ne mogu da otvorim ikonu %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Ne mogu da proÄitam ikonu %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Nepoznata vrsta ikone: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "red %d: Oznaka prihvata samo jedan žeton: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "red %d: Loše oblikovana oznaka: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "red %d: Prazna oznaka: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "red %d: Prefiksi se ne smeju završavati sa „/“: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "red %d: Docdir mora poÄeti sa „/“: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "red %d: Polje epohe mora biti broj bez predznaka: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "red %d: Loši %s: kvalifikatori: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "red %d: Loš oblik za BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "red %d: Samo noarch podpaketi su podržani: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Interna greška: Lažna oznaka %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Loša specifikacija paketa: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Paket već postoji: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "red %d: Nepoznata oznaka: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} ne može biti prazno\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} ne može biti „/“\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Loš izvor: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Nema zakrpe broj %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch bez odgovarajuće „Patch:“ oznake\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Nema izvora broj %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Nema oznake „Source:“ u datoteci specifikacije\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "GreÅ¡ka u tumaÄenju %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "red %d: Loš argument za %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "red %d: Loša %%setup opcija %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Neispravan broj zakrpe %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "red %d: drugi %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "red %d: okidaÄi moraju imati --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "red %d: GreÅ¡ka pri tumaÄenju %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "red %d: interna skripta se mora završiti sa „>“: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "red %d: skripta programa mora poÄeti sa „/“: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "red %d: Drugi %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "red %d: nepodržana interna skripta: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "red %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ne mogu da otvorim %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Dobio %%else bez %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Dobio %%endif bez %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Nisu pronađene usaglašene arhitekture za pravljenje\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Paket nema %%description: %s\n"
@@ -1428,450 +1633,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Ne mogu da napravim cev za %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Ne mogu da izvršim %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Ne mogu da odvojim %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Prebacivanje %s u dugi ceo broj nije uspelo.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) nije uspelo: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load nije uspelo: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Prepoznavanje datoteke „%s“ nije uspelo: režim %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Pronalazak %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Neuspelo traženje %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "upit na datotekom specifikacije %s nije uspeo, ne mogu da protumaÄim\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(greška 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Loš magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "LoÅ¡e/neÄitljivo zaglavlje"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "nije prepoznata opcija baze podataka: „%s“ zanemareno.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Prevelika veliÄina zaglavlja"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s ima nepravilnu brojÄanu vrednost, preskoÄeno\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s ima preveliku ili premalu long vrednost, preskoÄeno\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s ima preveliku ili premalu celobrojnu vrednost, preskoÄeno\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "ne mogu da dobijem %s katanac na %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "deljeno"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "ekskluzivno"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Nepoznata vrsta datoteke"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Nedostaje Ävrsta veza"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "greška(%d) pri skladištenju sloga „%s“ u %s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "greška(%d) pri uklanjanju sloga „%s“ iz %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Interna greška"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Datoteka arhive nije u zaglavlju"
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "greška(%d) pri zauzimanju novog primerka paketa\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " neuspelo - "
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s je Delta RPM i ne može se direktno instalirati\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Nepodržan teret (%s) u paketu %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "paket %s je već dodat, preskaÄem %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "paket %s je već dodat, zamenjujem sa %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(nije blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(nije broj)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr ""
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(neispravna vrsta)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(nije base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(neispravna vrsta)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(nije blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(neispravna xml vrsta)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(nije OpenPGP potpis)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "korisnik %s ne postoji - koristim root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "grupa %s ne postoji - koristim root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s saÄuvano kao %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s napravljeno kao %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr ""
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "oznaka[%d]: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: LOÅ E, nije heksadekadno\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: LOÅ E, nije binarno\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: LOÅ E, nije binarno\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "blob veliÄina (%d): LOÅ E, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "pomeraj regiona: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "repni region: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "veliÄina regiona: LOÅ E, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr size(%d): LOÅ E, Äitam vraćeno %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic: LOÅ E\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr tags: LOÅ E, broj oznaka(%d) je van dometa\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr data: LOÅ E, broj bajtova(%d) je van dometa\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hdr blob(%zd): LOÅ E, Äitam vraćeno %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr load: LOÅ E\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "prazan oblik oznake"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature nije uspelo: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "prazno ime oznake"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Nema potpisa na raspolaganju\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead nije uspelo: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] oÄekivan na kraju niza"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "neoÄekivan ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "neoÄekivan }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? oÄekivan u izrazu"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ oÄekivano posle ? u izrazu"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} oÄekivan u izrazu"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": oÄekivan nakon ? podizraza"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ oÄekivano posle : u izrazu"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| oÄekivan na kraju izraza"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "pokazivaÄ niza korišćen sa nizovima razliÄitih veliÄina"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread nije uspelo: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "unapred definisani MACRO sa vrednošću EXPR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "„MACRO EXPR“"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "definiše MACRO sa vrednošću EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "ispiši makro proširenje za EXPR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "„EXPR“"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "Äitaj <FILE:...> umesto podrazumevanih datoteka"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "nemoj proveravati sažetak(e) paketa"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "nemoj proveravati zaglavlje(a) baze podataka po dobavljanju"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "nemoj proveravati potpis(e) paketa"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "pošalji stdout ka CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "koristi ROOT kao direktorijum najvišeg nivoa"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "prikaži oznake poznatih upita"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "prikaži konaÄnu konfiguraciju za rpmrc i macro"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "pruža manje detaljan izlaz"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "pruža detaljniji izlaz"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "napiši koja se rpm verzija koristi"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "otkloni greške u mašini stanja datoteke tovara"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "otkloni greške za rpmio U/I"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: tabela opcija nije dobro podešena (%d)\n"
@@ -1892,13 +2208,13 @@ msgstr "premeštanja moraju sadržati ="
msgid "relocations must have a / following the ="
msgstr "premeštanja moraju imati / nakon ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"instaliraj sve datoteke, Äak i podeÅ¡avanja koja bi inaÄe mogla biti "
"preskoÄena"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1906,521 +2222,569 @@ msgstr ""
"ukloni sve pakete koji odgovaraju <package> (obiÄno se prijavljuje greÅ¡ka "
"ako <package> određuje više paketa)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "premesti datoteke u paketu koji se ne može premestiti"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "Å¡tampaj petlje zavisnosti kao upozorenje"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "izbriši (deinstaliraj) paket"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "nemoj instalirati datoteke podešavanja"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "nemoj da instaliraš dokumentaciju"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "preskoÄi datoteke koje sadrže komponentu <path> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "skraćenica za --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "nadgradi pakete ako su već instalirani"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "ispisuj znak tarabe dok se paket instalira (dobro uz -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "nemoj proveravati arhitekturu paketa"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "nemoj proveravati operativni sistem paketa"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "nemoj proveravati prostor na disku pre instalacije"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "instaliraj dokumentaciju"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "instaliraj paket(e)"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "ažuriraj bazu podataka, ali nemoj menjati sistem datoteka"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "nemoj proveravati zavisnosti paketa"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "nemoj instalirati bezbednosne kontekste datoteka"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
"nemoj preuređivati redosled instalacije paketa radi zadovoljavanja zavisnosti"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "nemoj izvršiti skripticu(e) paketa"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "nemoj izvršiti %%pre skripticu (ako postoji)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "nemoj izvršiti %%post skripticu (ako postoji)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "nemoj izvršiti %%preun skripticu (ako postoji)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "nemoj izvršiti %%postun skripticu (ako postoji)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "nemoj izvršiti nijednu skripticu(e) koju aktivira ovaj paket"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "nemoj izvršiti nijednu %%triggerprein skripticu(e)"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "nemoj izvršiti nijednu %%triggerin skripticu(e)"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "nemoj izvršiti nijednu %%triggerun skripticu(e)"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "nemoj izvršiti nijednu %%triggerpostun skripticu(e)"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
"nadgradi na staru verziju paketa (--force kod nadgradnje ovo radi samostalno)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "ispisuj procente dok se paket instalira"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "premesti paket u <dir>, ako se može premestiti"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "premesti datoteke iz putanje <old> u <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "zanemari sukobe datoteka između paketa"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "ponovo instaliraj ako je paket već prisutan"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "nemoj instalirati, ali reci da li bi radilo ili ne"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "nadgradi paket(e)"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "ispitaj/proveri sve pakete"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "rpm checksig režim"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "ispitaj/proveri paket(e) koje poseduju datoteku"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "ispitaj/proveri paket(e) u grupi"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "ispitaj/proveri datoteku paketa"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "ispitaj/proveri paket(e) sa identifikatorom paketa"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "ispitaj/proveri paket(e) sa identifikatorom zaglavlja"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "režim rpm upita"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "ispitaj/proveri instancu zaglavlja"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "ispitaj/proveri paket(e) iz transakcije instalacije"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "ispitaj paket(e) koje je aktivirao ovaj paket"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "režim rpm provere"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "ispitaj/proveri paket(e) koji zahtevaju zavisnosti"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "ispitaj/proveri paket(e) koji pružaju zavisnosti"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "nemoj preklapati argumente"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "nemoj obrađivati datoteke koje nisu paketi kao manifeste"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "ispiši sve datoteke podešavanja"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "ispiši sve datoteke dokumentacije"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "ispiši sve datoteke dokumentacije"
+msgstr ""
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "ispiši sve datoteke podešavanja"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "izbaci osnovne podatke o datoteci"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "ispiši datoteke u paketu"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "preskoÄi %%ghost datoteke"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "preskoÄi %%ghost datoteke"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "prikaži stanja navedenih datoteka"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "nemoj proveravati veliÄinu datoteka"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "nemoj proveravati putanje simboliÄkih veza datoteka"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "nemoj proveravati vlasnika datoteka"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "nemoj proveravati grupu datoteka"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "nemoj proveravati vreme menjanja datoteka"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "nemoj proveravati režim pristupa datoteka"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "nemoj proveravati mogućnosti datoteka"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "nemoj proveravati bezbednosne kontekste datoteka"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "nemoj proveravati mogućnosti datoteka"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "nemoj proveravati datoteke u paketu"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "nemoj proveravati zavisnosti paketa"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "nemoj izvršiti skriptu(e) provere"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "oÄekivan je izvorni paket, pronaÄ‘en je binarni\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "izvorni paket ne sadrži .spec datoteku\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "raspakivanje arhive nije uspelo %s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " na datoteci "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s nije uspelo kod datoteke %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s nije uspelo: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "neispravan oblik: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(ne sadrži datoteke)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normalno "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "zamenjeno "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "nije instaliran "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "deljeno na mreži "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "pogrešna boja "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(bez stanja) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(nepoznat %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "paket nema spiskove vlasnika/grupe datoteka\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "paket nema spiskove niti vlasnika ni id datoteka\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "grupa %s ne sadrži nijedan paket\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "nijedan paket ne aktivira %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "loše oblikovan %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "nijedan paket ne odgovara %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "nijedan paket ne zahteva %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "nijedan paket ne pruža %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "datoteka %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "datoteka %s ne pripada nijednom paketu\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "neispravan broj paketa: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "paket %s nije instaliran\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "nepoznata oznaka: „%s“\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: uvozno Äitanje nije uspelo(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-"%s: Nepromenjiva regija zaglavlja se ne može iÅ¡Äitati. OÅ¡tećen paket?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "NIJE UREDU"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "UREDU"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (NEDOSTAJUĆI KLJUČEVI:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (NEPOUZDANI KLJUÄŒEVI:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: otvaranje nije uspelo: %s\n"
@@ -2445,214 +2809,445 @@ msgstr "Ne mogu da promenim korenski direktorijum: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "nije postavljen dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: preskaÄem"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "greška(%d) pri zapisivanju sloga #%d u %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec nije uspeo: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp nije uspeo: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: preskaÄem"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: oÅ¡tećeno zaglavlje #%u vraćeno -- preskaÄem.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: ne mogu da proÄitam zaglavlje na 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "nije postavljen dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "neuspelo kreiranje direktorijuma %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "zaglavlje #%u u bazi podatak je loÅ¡e -- preskaÄem.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "ne mogu da dodam slog prvobitno na %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"neuspelo ponovno pravljenje baze podataka: osnovna baza podataka je ostala "
+"na mestu\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "neuspela zamena stare baze podataka sa novom bazom podataka!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NE "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "DA"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "Neophodne:, Obezbeđene:, i Zastarele: verzije podrške zavisnosti."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"ime(na) datoteke saÄuvano kao (nazivDirektorijuma,osnovnoIme,"
"indeksDirektorijuma) par, ne kao putanja."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "tovar paketa može biti komprimovan koristeći bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "tovar paketa može biti komprimovan koristeći lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "datoteka(e) tovara paketa ima prefiks „./“."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "naziv paketa-verzija-izdanje nije implicitno navedeno."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "oznake zaglavlja se uvek sortiraju nakon uÄitavanja."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "prevodilac skriptice može koristiti argumente zaglavlja."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "datoteka Ävrste veze može biti instalirana iako nije potpuna."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr "skriptica paketa može pristupiti rpm bazi podataka tokom instalacije."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "unutrašnja podrška za skripte lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "podrška za POSIX.1e mogućnosti datoteka"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Loš magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "LoÅ¡e/neÄitljivo zaglavlje"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Prevelika veliÄina zaglavlja"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Nepoznata vrsta datoteke"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Interna greška"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Datoteka arhive nije u zaglavlju"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " neuspelo - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "otvaranje %s nije uspelo: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: nije rpm paket (ili manifest paketa)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Pripremam..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Neuspele zavisnosti:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: nije rpm paket (ili manifest paketa): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s se ne može instalirati\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Pribavljam %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "preskaÄem %s - neuspeo prenos\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "paket %s se ne može premeštati\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "greÅ¡ka pri Äitanju iz datoteke %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "„%s“ određuje više paketa:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "ne mogu da otvorim %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Instaliram %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "nije rpm paket"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "nepravilan tip potpisa"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "nepodržana verzija RPM paketa"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "neuspelo Äitanje: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr ""
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "razliÄito"
@@ -2727,798 +3322,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "nepoznata greška %d se desila u toku rukovanja paketom %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "nedostaje drugo „:“ kod %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "nedostaje ime arhitekture na %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Nepotpun red podataka na %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Previše argumenata u redu podataka na %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Loš broj arhitekture/os-a: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Nepotpun podrazumevani red na %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Premalo argumenata u podrazumevanom redu na %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "nedostaje „:“ (pronađeno 0x%02x) kod %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "nedostaje argument za %s na %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "ne mogu da otvorim %s na %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "nedostaje arhitektura za %s na %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "loša opcija „%s“ kod %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Nepoznati sistem: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Molim vas kontaktirajte %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Ne mogu da otvorim %s za Äitanje: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "nije ugrađena podrška <lua> skriptica\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Ne mogu da napravim privremenu datoteku za %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Ne mogu da udvojim opisnika datoteke: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s skriptica nije uspela, waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s skriptica nije uspela, signal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s skriptica nije uspela, izlazni status %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Nepoznat oblik"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "ne mogu da otvorim Packages bazu podataka u %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "suvišna „(“ u oznaci paketa: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "nedostaje „(“ u oznaci paketa: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "nedostaje „)“ u oznaci paketa: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: neuspelo Äitanje javnog kljuÄa.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
-#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh veliÄina(%d): LOÅ E, Äitanje vraćeno %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: LOÅ E\n"
-
-#: lib/signature.c:101
-#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh oznake: LOÅ E, broj oznaka(%d) je van dometa\n"
-
-#: lib/signature.c:107
-#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh podaci: LOÅ E, broj bajtova(%d) je van dometa\n"
-
-#: lib/signature.c:123
-#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d): LOÅ E, Äitanje vraćeno %d\n"
-
-#: lib/signature.c:196
-#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh oznaka[%d]: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh uÄitavanje: LOÅ E\n"
-
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sigh podloÅ¡ka(%zd): LOÅ E, Äitam %zd bajtova\n"
-
-#: lib/signature.c:235
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): LOÅ E, fstat(2) nije uspeo\n"
-
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Nepromenjiva regija zaglavlja se ne može iÅ¡Äitati. OÅ¡tećen paket?\n"
-
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 sažetak:"
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "SHA1 sažetak zaglavlja:"
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr "Zaglavlje "
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:158
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "nedostaje %c %s"
-
-#: lib/verify.c:422
+#: lib/rpmvs.c:178
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Nezadovoljene zavisnosti za %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "nedostaje { posle %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "nedostaje } posle %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "prazan oblik oznake"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "prazno ime oznake"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "nepoznata oznaka"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] oÄekivan na kraju niza"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "neoÄekivan ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "neoÄekivan }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? oÄekivan u izrazu"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ oÄekivano posle ? u izrazu"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} oÄekivan u izrazu"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": oÄekivan nakon ? podizraza"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ oÄekivano posle : u izrazu"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| oÄekivan na kraju izraza"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "pokazivaÄ niza korišćen sa nizovima razliÄitih veliÄina"
-
-#: lib/rpmdb.c:97
+#: lib/rpmvs.c:188
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/rpmdb.c:191
+#: lib/rpmvs.c:195
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "ne mogu da otvorim %s indeks koristeći db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "nije postavljen dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: preskaÄem"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "greška(%d) pri zapisivanju sloga #%d u %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec nije uspeo: %s\n"
-
-#: lib/rpmdb.c:1596
+#: lib/rpmvs.c:206
#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp nije uspeo: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: preskaÄem"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: oÅ¡tećeno zaglavlje #%u vraćeno -- preskaÄem.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/rpmdb.c:2349
+#: lib/rpmvs.c:261
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: ne mogu da proÄitam zaglavlje na 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "greška(%d) pri postavljanju „%s“ slogova iz %s indeksa\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "greška(%d) pri skladištenju sloga „%s“ u %s\n"
-
-#: lib/rpmdb.c:2477
+#: lib/rpmvs.c:268
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "greška(%d) pri uklanjanju sloga „%s“ iz %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "greška(%d) pri zauzimanju novog primerka paketa\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "greška(%d) pri dobavljanju „%s“ slogova iz %s indeksa\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "greška(%d) pri zapisivanju sloga %s u %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "nije postavljen dbpath"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "neuspelo kreiranje direktorijuma %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "zaglavlje #%u u bazi podatak je loÅ¡e -- preskaÄem.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "ne mogu da dodam slog prvobitno na %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+msgid "%s%s"
msgstr ""
-"neuspelo ponovno pravljenje baze podataka: osnovna baza podataka je ostala "
-"na mestu\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "neuspela zamena stare baze podataka sa novom bazom podataka!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "zameni datoteke u %s sa datotekama iz %s da vratiš u prethodno stanje"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "neuspelo uklanjanje direktorijuma %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "baza podataka%d greška(%d) iz %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "baza podataka%d graška(%d): %s\n"
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "ne mogu da dobijem %s katanac na %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "deljeno"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "ekskluzivno"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "nije prepoznata opcija baze podataka: „%s“ zanemareno.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s ima nepravilnu brojÄanu vrednost, preskoÄeno\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s ima preveliku ili premalu long vrednost, preskoÄeno\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s ima preveliku ili premalu celobrojnu vrednost, preskoÄeno\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Zaglavlje "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Ne mogu da ponovo uÄitam zaglavlje potpisa.\n"
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: plugins/sepolicy.c:386
+#: lib/verify.c:263
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: lib/verify.c:284
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: lib/verify.c:448
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "nedostaje %c %s"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: lib/verify.c:503
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Nezadovoljene zavisnosti za %s:\n"
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktivno %d prazno %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(prazno)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(prazno)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makro %%%s ima nezavršeno telo\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makro %%%s ima nezavršene opcije\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makro %%%s ima nepravilno ime (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makro %%%s ima nezavršeno telo\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makro %%%s ima nezavršene opcije\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Makro %%%s ima prazno telo\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Makro %%%s nije mogao da se proširi\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "Makro %%%s ima nepravilno ime (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) nije korišćen ispod nivoa %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Nepoznata opcija %c u %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "NeograniÄeno %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "%% je praćena sa makroom koga nije moguće raÅ¡Älaniti\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktivno %d prazno %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "greška pri pravljenju privremene datoteke %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Datoteka %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Datoteka %s je manja od %u bajtova\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "neuspelo kreiranje direktorijuma"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr ""
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(bez greške)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "kobna greška: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "greška: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "upozorenje: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "nepravilna sintaksa u lua skriptici: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "nepravilna sintaksa u lua skripti: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua skripta nije uspela: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "nepravilna sintaksa u lua datoteci: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua udica nije uspela: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: rpmio/rpmmalloc.c:25
+#, c-format
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "alokacija memorije (%u bajta) je vratila NAL.\n"
+
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(bez greške)"
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "kobna greška: "
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "greška: "
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "upozorenje: "
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/rpmmalloc.c:25
+#: sign/rpmgensig.c:62
#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "alokacija memorije (%u bajta) je vratila NAL.\n"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:83
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite nije uspelo: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread nije uspelo: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush nije uspelo: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Ne mogu da izvršim %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Ne mogu da napravim cev za potpisivanje: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "neuspelo gpg izvršavanje (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg nije uspeo da zapiše potpis\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "ne mogu da proÄitam potpis\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp nije uspelo\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead nije uspelo: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature nije uspelo: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr ""
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature nije uspelo: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead nije uspelo: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: neuspelo Äitanje manifesta: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "nemoj proveravati potpis zaglavlja+tovara"
diff --git a/po/sv.po b/po/sv.po
index d318714de..cfdb93357 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -3,17 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Göran Uddeborg <goeran@uddeborg.se>, 2011.
-# Göran Uddeborg <goeran@uddeborg.se>, 2004, 2007-2009, 2011.
+# Göran Uddeborg <goeran@uddeborg.se>, 2011,2013,2015
+# Göran Uddeborg <goeran@uddeborg.se>, 2011,2013,2015
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/rpm/language/"
-"sv/)\n"
+"Language-Team: Swedish (http://www.transifex.com/rpm-team/rpm/language/sv/)\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -46,500 +45,563 @@ msgstr "Detta program kan distribueras fritt enligt villkoren i GNU GPL\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "misslyckades att skapa rör för --pipe: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "exec misslyckades\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "argumentet är inte ett RPM-paket\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "fel vid läsning av pakethuvud\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "kan inte återöppna lasten: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "Flaggor för att fråga/kontrollera paket:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Frågeflaggor (med -q eller --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Verifieringsflaggor (med -V eller --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Installations-/Uppdaterings-/Raderingsflaggor"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Gemensamma flaggor för alla rpm-lägen och binärer:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "endast en typ av fråga/verifiering kan utföras åt gången"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "oväntade frågeflaggor"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "oväntat frågeformat"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "oväntad frågekälla"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "enbart ett huvudläge kan anges"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "bara installation och uppgradering kan tvingas fram"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "filer kan relokeras endast under paketinstallation"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "kan inte använda --prefix med --relocate eller --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate och --excludepath kan endast användas när nya paket installeras"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix kan endast användas när nya paket installeras"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "argument till --prefix måste börja med /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "enbart en av --excludedocs och --includedocs kan användas"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches kan enbart användas när paket raderas"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles kan enbart användas vid paketinstallation"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb kan enbart användas när paket installeras eller raderas"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"skriptinaktiveringsflaggor kan enbart användas när paket installeras eller "
-"raderas"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"utlösarinaktiveringsflaggor kan enbart användas när paket installeras eller "
-"raderas"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps kan enbart användas vid paketinstallation, -radering och -"
-"verifikation"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr "--test kan enbart användas vid paketinstallation och -radering"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "argument till --root (-r) måste börja med /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "inga paket angivna att radera"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "inga paket angivna för installation"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "inga parametrar angivna för fråga"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "inga parametrar angivna för verifiering"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot redan angivet, ignorerar %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"bygg till %prep (packa upp källkod samt applicera patchar) från <specfil>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfil>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "bygg till och med %build (%prep, kompilera sedan) från <specfil>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"bygg till och med %install (%prep, %build, installera sedan) från <specfil>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "verifiera %files-sektionen i <specfil>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "bygg käll- och binärpaket från <specfil>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "bygg endast binärpaket från <specfil>"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "bygg endast källpaket från <specfil>"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+"bygg till %prep (packa upp källkod samt applicera patchar) från <källpaket>"
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<källpaket>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr "bygg till och med %build (%prep, kompilera sedan) från <källpaket>"
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"bygg till och med %install (%prep, %build, installera sedan) från <källpaket>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr "verifiera %files-sektionen från <källpaket>"
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr "bygg käll- och binärpaket från <källpaket>"
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "bygg endast binärpaket från <källpaket>"
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr "bygg endast källpaket från <källpaket>"
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"bygg till och med %prep (packa upp källkod samt applicera patchar) från <tar-"
"arkiv>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tar-arkiv>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "bygg till och med %build (%prep, kompilera sedan) från <tar-arkiv>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"bygg till och med %install (%prep, %build, installera sedan) från <tar-arkiv>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "verifiera %files-sektionen från <tar-arkiv>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "bygg käll- och binärpaket från <tar-arkiv>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "bygg endast binärpaket från <tar-arkiv>"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "bygg endast källpaket från <tar-arkiv>"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "bygg binärpaket från <källpaket>"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<källpaket>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"bygg till och med %install (%prep, %build, installera sedan) från <källpaket>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "åsidosätt byggrot"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "kör bygget i aktuell katalog"
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "ta bort byggträd efteråt"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "ignorera ExcludeArch:-direktiv från specfil"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "felsök filtillståndsmaskin"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "utför inga steg i byggnationen"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "verifiera inte byggberoenden"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr "generera pakethuvd(en) kompatibla med (äldre) rpm-v3-paketering"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
-msgstr ""
+msgstr "utför inte %clean-steget i byggnationen"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "utför inte %prep-steget i byggnationen"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "utför inte %check-steget i byggnationen"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
-msgstr "acceptera inte översatta â€msgstr†frÃ¥n specfilen"
+msgstr "acceptera inte i18N-msgstr:er från specfilen"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "ta bort källkod efteråt"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "ta bort specfil efteråt"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "gå direkt till angivet steg (endast för c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "åsidosätt målplattform"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "Byggflaggor med [ <specfil> | <tar-arkiv> | <källpaket> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Gemensamma flaggor för alla rpm-lägen och binärer:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Ouppfyllda byggberoenden:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Kan inte öppna specfilen %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Kunde inte öppna â€tarâ€-rör: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "Hittade mer än en spec-fil i %s\n"
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Kunde inte läsa specfil från %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Kunde inte byta namn på %s till %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "kunde inte ta status på %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Filen %s är inte en vanlig fil.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "Filen %s tycks inte vara en specfil.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Bygger målplattformar: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Bygger för målet %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "argument till --root (-r) måste börja med /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "initiera databas"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "bygg om databasens inverterade listor från installerade pakets huvuden"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "verifiera databasfiler"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "exportera databasen till standard ut huvudlista"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "importera databasen från standard in huvudlista"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Databasflaggor:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "enbart ett huvudläge kan anges"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "verifiera paketsignatur(er)"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "importera en publik nyckel med skal"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
-msgstr ""
+msgstr "importera inte, men tala om ifall det skulle fungera eller inte"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "lista nycklar från RPM-nyckelringen"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Nyckelringsflaggor:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "inga argument angivna"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Flaggor för att fråga/kontrollera paket:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Frågeflaggor (med -q eller --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Verifieringsflaggor (med -V eller --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Installations-/Uppdaterings-/Raderingsflaggor:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "endast en typ av fråga/verifiering kan utföras åt gången"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "oväntade frågeflaggor"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "oväntat frågeformat"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "oväntad frågekälla"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "bara installation och uppgradering kan tvingas fram"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "filer kan relokeras endast under paketinstallation"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "kan inte använda --prefix med --relocate eller --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate och --excludepath kan endast användas när nya paket installeras"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix kan endast användas när nya paket installeras"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "argument till --prefix måste börja med /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) kan enbart användas vid paketinstallation och -radering"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent kan enbart användas vid paketinstallation och -radering"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "enbart en av --excludedocs och --includedocs kan användas"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches kan enbart användas när paket raderas"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles kan enbart användas vid paketinstallation"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb kan enbart användas när paket installeras eller raderas"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"skriptinaktiveringsflaggor kan enbart användas när paket installeras eller "
+"raderas"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"utlösarinaktiveringsflaggor kan enbart användas när paket installeras eller "
+"raderas"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps kan enbart användas vid paketinstallation, -radering och -"
+"verifikation"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test kan enbart användas vid paketinstallation och -radering"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "inga paket angivna att radera"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "inga paket angivna för installation"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "inga parametrar angivna för fråga"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "inga parametrar angivna för verifiering"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "signera paket"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "signera paket (detsamma som --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "tag bort paketsignaturer"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Signaturflaggor:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Kunde inte köra %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Du mÃ¥ste sätta â€%%_gpg_name†i din makrofil\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Ange lösenfras: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Lösenfrasen är ok.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "Kontrollen av lösenfrasen misslyckades eller gpg-nyckeln har gått ut\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "tolka spec-fil(er) till standard ut"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "fråga spec-fil(er)"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "arbeta på binära rpm:er som genereras av spec (standard)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "arbeta på käll-rpm genererad av spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "använd följande frågeformat"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Spec-flaggor:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "inga parametrar angivna för tolkning"
@@ -548,32 +610,37 @@ msgstr "inga parametrar angivna för tolkning"
msgid "Unable to open temp file: %s\n"
msgstr "Kan inte öppna temporär fil: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Kan inte öppna ström: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "Kör(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Körning (exec) av %s misslyckades (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "Fel vid körning av skript %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Dålig slutstatus från %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -583,235 +650,315 @@ msgstr ""
"\n"
"RPM-byggfel:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "syntaxfel vid tolkning av ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "syntaxfel vid tolkning av &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "syntaxfel vid tolkning av ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "tolkningsfel i uttryck\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "ensam (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- endast i tal\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! endast på tal\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "typer måste passa ihop\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / stöds inte för strängar\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- stöds inte för strängar\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& och || stöds inte för strängar\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "syntaxfel i uttryck\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "â€(†saknas i %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "â€)†saknas i %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Ogiltigt %s-element: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%s saknas i %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "Annat än blanktecken följer på %s(): %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Felaktig syntax: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Felaktig rättighetsspecifikation: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Felaktig specifikation av katalogrättigheter: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Ovanlig lokallängd: â€%s†i %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Duplicerad lokal %s i %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Ogiltig förmåga (capability): %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Stöd för filförmågor (capability) är inte inbyggt\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Filnamn mÃ¥ste börja med â€/â€: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "Okänd filkontrollsummealgoritm %u, faller tillbaka på MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Filen uppräknad två gånger: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "läsning av symlänk %s misslyckades: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Symbolisk länk pekar på BuildRoot: %s → %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "Sökvägen är utanför buildroot: %s\n"
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Katalogen hittades inte: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Filen hittades inte: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Inte en katalog: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: kan inte läsa okänd tagg (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: läsning av publik nyckel misslyckades.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: inte en publik nyckel med skal.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: misslyckades att koda\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "misslyckades att skapa katalog"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Filen behöver inledande â€/â€: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "%%dev-matchning inte tillåten: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Hittade ingen katalog vid matchningen: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Hittade ingen fil vid matchningen: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Kunde inte öppna %%files-fil %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "rad: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "Tom %%files-fil %s\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Fel vid läsning av %%files-fil %s: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "ogiltigt _docdir_fmt: %s: %s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Hittade ingen fil vid matchningen: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
+msgstr "Kan inte blanda special %s med andra former: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "Mer än en fil på en rad: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Felaktig fil: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Felaktig ägare/grupp: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Letar efter opackade fil(er): %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -820,548 +967,605 @@ msgstr ""
"Installerade (men opaketerade) filer funna:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Bearberar filer: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
-msgstr ""
+msgstr "Binärers arkitektur (%d) matchar inte paketarkitekturen (%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "Arkitekturberoende binärfiler i noarch-paket\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "misslyckades skapa arkiv vid filen %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "misslyckades skapa arkiv: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Kunde inte öppna %s-fil: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: rad: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Kunde inte kanonisera värdnamn: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Kan inte skriva last till %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Kan inte läsa last från %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Kunde inte kanonisera värdnamn: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Okänd lastkomprimering: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Kan inte skapa oföränderlig huvudregion.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Kan inte öppna temporär fil.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Kunde inte söka i filen %s: %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Kan inte skriva temporärhuvud\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Misslyckades med att läsa policyfil: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Felaktig CSA-data\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Kan inte läsa om signaturhuvud.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Kunde inte öppna %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Kunde inte skriva paket: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Kan inte läsa signaturen %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Kan inte läsa huvud från %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Kan inte skriva huvud till %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Skrev: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Kör â€%sâ€:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Körning av â€%s†misslyckades.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Paketkontroll â€%s†misslyckades.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Kunde inte generera utfilnamn för paketet %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "kan inte skapa %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "rad %d: andra %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr ""
+msgstr "felaktigt datum i %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog-poster måste starta med *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "ofullständig %%changelog-post\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "felaktigt datum i %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog är inte i fallande kronologisk ordning\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "saknat namn i %%changelog\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "ingen beskrivning i %%changelog\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "rad %d: andra %%changelog\n"
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "rad %d: Fel i tolkning av %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "rad %d: otillåten flagga %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "rad %d: För många namn: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "rad %d: Paketet existerar inte: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "rad %d: En andra beskrivning\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "rad %d: Fel i tolkning av %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "rad %d: Fel vid tolkning av %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Fel vid tolkning av taggfält: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "rad %d: Felaktigt nummer: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "rad %d: Felaktigt no%s-nummer: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "rad %d: Felaktigt %s-tal: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d definierat flera gånger\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Hämtar %s till %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Kunde inte hämta %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Arkitekturen är utesluten: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Arkitekturen är inte medtagen: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS är uteslutet: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS är inte medtaget: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "%s-fält måste finnas med i paketet: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Dubbla %s-poster i paketet: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Kan inte öppna ikon %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Kan inte läsa ikon %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Okänd ikontyp: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "rad %d: Taggen tar endast ett värde: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "rad %d: OtillÃ¥tet tecken â€%c†i: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr "rad %d: %s i: %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "rad %d: Otillåtet tecken i: %s\n"
+msgid "%s in: %s\n"
+msgstr "%s i: %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "rad %d: OtillÃ¥ten sekvens â€..†i: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "OtillÃ¥tet tecken â€%c†(0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "OtillÃ¥ten sekvens â€..â€"
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "rad %d: Felaktig tagg: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "rad %d: Tom tagg: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "rad %d: Prefix fÃ¥r inte sluta med â€/â€: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "rad %d: Docdir mÃ¥ste börja med â€/â€: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "rad %d: Epoch-fält måste vara ett teckenlöst tal: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "rad %d: Felaktigt %s: bestämningar: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "rad %d: Felaktigt BuildArchitecture-format: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "rad %d: Endast noarch-underpaket stöds: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Internt fel: felaktig tagg %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "rad %d: %s är föråldrad: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Felaktig paketangivelse %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Paketet existerar redan: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "rad %d: Okänd tagg: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} fick inte vara tom\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} kan inte vara â€/â€\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Dålig källa: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Inget patch-nummer %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch utan motsvarande â€Patch:â€-tagg\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Inget källkodsnummer %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "Ingen â€Source:â€-tagg i spec-filen\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Fel i tolkning av %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "rad %d: Felaktigt argument till %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "rad %d: Felaktig %%setup-flagga %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Felaktigt patch-nummer %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "rad %d: andra %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr "Beroenden mÃ¥ste börja alfanumeriskt, med â€_†eller med â€/â€"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "Filnamn med version inte tillåtet"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Version krävs"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "Inga rika beroenden tillåtna för denna typ"
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "ogiltigt beroende"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Version krävs"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "Endast absoluta sökvägar är tillåtna i filutlösare"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr "En utlösare startad av samma paket är redan definierad i spec-filen"
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "rad %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "rad %d: utlösare måste ha --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "rad %d: Fel vid tolkning av %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "rad %d: internt skript mÃ¥ste sluta med â€>â€: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "rad %d: skriptprogram mÃ¥ste börja med â€/â€: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr "rad %d: prioriteter är endast tillåta för filutlösare: %s\n"
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "rad %d: En andra %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "rad %d: ej stött internt skript: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr "rad %d: argument till tolken tillåts inte i utlösare: %s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "rad %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr "Makro expanderat i kommentar på rad %d: %s\n"
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Kan inte öppna %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: Argument förväntades för %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr ""
+msgstr "rad %d: Oavslutat %%if\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "rad %d: oavslutat makro eller felaktig fortsättning på rad\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: felaktigt %%if-villkor\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: Fick ett %%else utan något %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: Fick ett %%endif utan något %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d: felformaterad %%include-sats\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "kodningen %s stödjs inte av systemet\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Paketet %s: felaktig %s-kodning i %s: %s — %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Hittade inga kompatibla arkitekturer att bygga\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Paketet har ingen %%description: %s\n"
@@ -1433,450 +1637,561 @@ msgstr "För många argument på rad: %s\n"
msgid "Processing policies: %s\n"
msgstr "Bearbetning policyer: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ignorerar ogiltigt reguttr %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Kunde inte öppna rör för %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Kunde inte köra %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Kunde inte grena (fork) %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s misslyckades: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "misslyckades med att skriva all data till %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Konvertering av %s till långt heltal misslyckades.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Tom filklassificerare\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Inga filattribut konfigurerade\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) misslyckades: %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load misslyckades: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Igenkänning av filen â€%s†misslyckades: läge %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Letar efter %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Misslyckades med att hitta %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "fråga av specfil %s misslyckades, kan inte tolka\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(fel 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s-fel(%d) från %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Felaktigt magiskt tal"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s-fel(%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Felaktigt/oläsbart huvud"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "okänd db-flagga: â€%s†ignorerad\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Huvudstorleken för stor"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s har ett ogiltigt numeriskt värde, hoppar över\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr ""
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s har för stort eller för litet â€longâ€-värde, hoppar över\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Okänd filtyp"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s har för stort eller för litet heltalsvärde, hoppar över\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Saknade hårda länkar"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "kan inte få %s lås på %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "Kontrollsumman stämmer inte"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "delat"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Internt fel"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "uteslutande"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Ingen arkivfilen i huvud"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "ogiltig indextyp %x på %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " misslyckades - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "fel(%d) när â€%sâ€-poster hämtades frÃ¥n %s-indexet: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "fel(%d) när post â€%s†sparades i %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "fel(%d) när post â€%s†togs bort frÃ¥n %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "fel(%d) vid tillägg av post för huvud nr. %d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "fel(%d) tar bort post för huvud nr. %d\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "fel(%d) vid allokering av ny paketinstans\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr "%s är en delta-RPM och kan inte installeras direkt\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Ej stödd last (%s) i paket %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "paket %s var redan tillagt, hoppar över %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "paket %s är redan tillagt, ersätter med %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(inte en klick)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(inte ett tal)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(inte en sträng)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(felaktig typ)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %d %b %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(inte base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(felaktig typ)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(inte en klick)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(felaktig xml-typ)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(inte en OpenPGP-signatur)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
-msgstr ""
+msgstr "Ogiltig tidpunkt %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normal"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "ersatt"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "inte installerad"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "nätdelad"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "fel färg"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "saknas"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(okänd)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(inte en sträng)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "användare %s finns inte - använder root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "grupp %s finns inte - använder root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s sparades som %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s skapades som %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s: borttagande misslyckades: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "katalog"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "fil"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "hvdlast: FEL"
+
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "tagg[%d]: FEL, tagg %d typ %d position %d antal %d\n"
-
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hvd SHA1: FEL, ej hex\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr "regiontagg: FEL, tagg %d typ %d position %d antal %d"
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hvd RSA: FEL, ej binär\n"
-
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hvd DSA: FEL, ej binär\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr "regionposition: FEL, tagg %d typ %d position %d antal %d"
-#: lib/package.c:296
+#: lib/header.c:1824
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "klickstorlek(%d): FEL, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr "regionavslutning: FEL, tagg %d typ %d position %d antal %d"
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1833
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1841
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "regionposition: FEL, tagg %d typ %d position %d antal %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1876
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "regionavslutning: FEL, tagg %d typ %d position %d antal %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr "hvdstorlek(%d): FEL, läsning returnerade %d"
-#: lib/package.c:358 lib/signature.c:185
-#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "regionstorlek: FEL, ril(%d) > il(%d)\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "hvdmagi: FEL"
-#: lib/package.c:427
+#: lib/header.c:1885
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hvdstorlek(%d): FEL, läsning returnerade %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr "hvdtaggar: FEL, antal taggar(%d) utanför intervall"
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hvdmagi: FEL\n"
+#: lib/header.c:1890
+#, c-format
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr "hvddata: FEL, antal byte(%d) utanför intervall"
-#: lib/package.c:436
+#: lib/header.c:1900
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hvdtaggar: FEL, antal taggar(%d) utanför intervall\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr "hvdklick(%zd): FEL, läsning returnerade %d"
-#: lib/package.c:442
+#: lib/header.c:1909
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hvddata: FEL, antal byte(%d) utanför intervall\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "sighutfyllnad(%zd): FEL, läste %zd byte"
+
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "hvdklick(%zd): FEL, läsning returnerade %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr "klickstorlek(%d): FEL, 8 + 16 * il(%d) + dl(%d)"
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hvdlast: FEL\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "ogiltig fältbredd"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: rpmReadSignature misslyckades: %s"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ingen signatur tillgänglig\n"
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "tomt taggformat"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "tomt taggnamn"
-#: lib/package.c:581
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: headerRead misslyckades: %s"
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] förväntades vid slutet på vektor"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "oväntad ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "oväntad }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? förväntades i uttryck"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ förväntades efter ? i uttryck"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} förväntades i uttryck"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": förväntades efter ? i deluttryck"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ förväntades efter : i uttryck"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| förväntades vid slutet på uttryck"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "vektoriterator använd med vektor av annan storlek"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread misslyckades: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr "%s: fel: mer än en --pipe angiven (inkompatibla popt-alias?)\n"
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "fördefiniera MAKRO till värdet UTTR"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'MAKRO UTTR'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "definiera MAKRO till värdet UTTR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "odefinierat MAKRO"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MAKRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "skriv ut makroexpansion av UTTR"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'UTTR'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "läs <FIL:...> istället för standardfil(er)"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FIL:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "aktivera inga insticksmoduler"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "verifiera inte paketkontrollsummor"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "verifiera inte databashuvuden när de hämtas"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "verifiera inte paketsignatur(er)"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "skicka standard ut till KMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "KMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "använd ROT som toppnivåkatalog"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "använd databasen i KATALOG"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "KATALOG"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "visa kända frågetaggar"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "visa slutliga rpmrc- och makrokonfigurationer"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "visa mindre detaljerad utdata"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "visa mer detaljerad utdata"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "visa vilken version av rpm som används"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "felsök lastfilstillståndsmaskin"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "felsök rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: flaggtabell felkonfigurerad (%d)\n"
@@ -1897,12 +2212,12 @@ msgstr "omflyttningar måste innehålla ett ="
msgid "relocations must have a / following the ="
msgstr "omflyttningar måste ha ett / efter ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"installera alla filer, även konfigurationer som annars kunde hoppats över"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1910,152 +2225,162 @@ msgstr ""
"ta bort alla paket som matchar <paket> (normalt ger det ett fel om <paket> "
"anger flera paket)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "relokera filer i ej relokerbart paket"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "skriv beroendecykler som varningar"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "radera (avinstallera) paket"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<paket>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "installera inte konfigurationsfiler"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "installera inte dokumentation"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "hoppa över filer med inledande <sökväg>"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<sökväg>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "kortform för --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "uppgradera paket om redan installerade"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<paketfil>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
"skriv ut brädgårdar allteftersom paketet installeras (bra tillsammans med -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "verifiera inte paketarkitektur"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "verifiera inte paketets operativsystem"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "kontrollera inte diskutrymme före installation"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "installera dokumentation"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "installera paket"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "uppdatera databasen, men ändra inte filsystemet"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "verifiera inte paketberoenden"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "verifiera inte kontrollsummor av filer"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "verifiera inte kontrollsummor av filer (föråldrad)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "installera inte filsäkerhetskontexter"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "flytta inte om paketinstallationen för att tillfredsställa beroenden"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "kör inte paketskript"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "utför inte (eventuellt) %%pre-skript"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "utför inte (eventuellt) %%post-skript"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "utför inte (eventuellt) %%preun-skript"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "utför inte (eventuellt) %%postun-skript"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "utför inte (eventuellt) %%pretrans-skript"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "utför inte (eventuellt) %%posttrans-skript"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "kör inte skript utlösta av detta paket"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "kör inte %%triggerprein-skript"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "kör inte %%triggerin-skript"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "kör inte %%triggerun-skript"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "kör inte %%triggerpostun-skript"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "utför inte några samlingsåtgärder"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2063,368 +2388,407 @@ msgstr ""
"uppgradera till en gammal version av paketet (--force vid uppgraderingar gör "
"detta automatiskt)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "skriv procent allt eftersom paketet installeras"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "flytta paketet till <katalog>, om flyttbart"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<kat>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "relokera filer från <gammal> till <ny>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<gammal>=<ny>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ingorera filkonflikter mellan paket"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "ominstallera när paketet redan är installerat"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "installera inte, men tala om ifall det skulle fungera eller inte"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "uppgradera paket"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "ominstallera paket"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "fråga/verifiera alla paket"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "rpm signaturkontrolläge"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "fråga/verifiera paket som äger fil"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "fråga/verifiera paket i grupp"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "fråga/verifiera en paketfil"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "fråga/verifiera paket som med paketidentifierare"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "fråga/verifiera paket med huvudidentifierare"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm frågeläge"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "fråga/verifiera en huvudinstans"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "fråga/verifiera paket från installationstransaktion"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "fråga paket utlösta av paketet"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm verifieringsläge"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "fråga/verifiera paket som behöver ett beroende"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "fråga/verifiera paket som tillhandahåller ett beroende"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "fråga/verifiera paket som rekommenderar ett beroende"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "fråga/verifiera paket som föreslår ett beroende"
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr "fråga/verifiera paket som kompletterar ett beroende"
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr "fråga/verifiera paket som förbättrar ett beroende"
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "mönstermatcha inte argument"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "behandla inte icke-paket-filer som förteckningar"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "lista alla konfigurationsfiler"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "lista alla dokumentationsfiler"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "lista alla dokumentationsfiler"
+msgstr "lista alla licensfiler"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "lista alla licensfiler"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "visa filinformation"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "lista filer i paketet"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "hoppa över %%ghost-filer"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "hoppa över %%ghost-filer"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "visa tillstånd för de listade filerna"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "verifiera inte storlekar på filer"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "verifiera inte sökvägen i symboliska länkar"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "verifiera inte ägare till filer"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "verifiera inte grupper till filer"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "verifiera inte modifikationstiden för filer"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "verifiera inte rättigheter för filer"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "verifiera inte förmågor (capabilities) på filer"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "verifiera inte filsäkerhetskontexter"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "verifiera inte förmågor (capabilities) på filer"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "verifiera inte filerna i paketet"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "verifiera inte paketberoenden"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "utför inte verifieringsskript"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Saknade rpmlib-funktioner för %s:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "källpaket förväntades, fann binärpaket\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "källpaket innehåller ingen .spec-fil\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "uppackning av arkiv misslyckades%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " vid fil "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%s misslyckades på fil %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s misslyckades: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "fel format: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(innehåller inga filer)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "ersatt "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "oinstallerat "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "nätdelad "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "fel färg "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(ej tillstnd) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(okänd %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "paketet har inte filägare-/-grupplistor\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "paketet har varken filägare eller id-listor\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "grupp %s innehåller inga paket\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "inga paketutlösare %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "felformaterad %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "inga paket matchar %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "inget paket behöver %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "inget paket rekommenderar %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "inget paket föreslår %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "inget paket kompletterar %s\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "inget paket förbättrar %s\n"
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "inget paket tillhandahåller %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "fil %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "filen %s tillhör inget paket\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "felaktigt paketnummer: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "post %u kunde inte läsas\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "paket %s är inte installerat\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "okänd tagg: â€%sâ€\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: import av nyckeln %d misslyckades.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: nyckeln %d är inte en bepansrad publik nyckel.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: importläsning misslyckades(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
-msgstr "%s: Oföränderlig huvudregion kunde inte läsas. Trasigt paket?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "EJ OK"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "OK"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (SAKNADE NYCKLAR:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (EJ BETRODDA NYCKLAR:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: open misslyckades: %s\n"
@@ -2449,212 +2813,442 @@ msgstr "Kunde inte ändra rotkatalog: %m\n"
msgid "Unable to restore root directory: %m\n"
msgstr "Det går inte att återställa root-katalogen: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Genererar %d saknade index, vänta …\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "kan inte öppna %s-indexet med %s - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "ingen dbpath har satts\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: hoppar över"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "fel(%d) när post nr. %d sparades i %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec misslyckades: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp misslyckades: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: hoppar över"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: skadat huvud nr. %u hämtat -- hoppar över.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: kan inte läsa huvud vid 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "ingen dbpath har satts"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "misslyckades att skapa katalogen %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "huvud nr. %u i databasen är felaktigt -- hoppar över.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "kan inte lägga till post ursprungligen vid %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "kunde inte bygga om databasen: orginaldatabasen finns kvar\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "kunde inte ersätta gammal databas med ny databas!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "NEJ "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "JA"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:, Provides:, and Obsoletes:-beroenden stödjer versioner."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr "filnamn lagrade som (katNamn,basNam,katIndex)-tupel, inte som sökväg."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "paketlasten kan komprimeras med bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "paketets nyttolast kan komprimeras med xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "paketlasten kan komprimeras med lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "paketlastfiler har â€./â€-prefix."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "paketets namn-version-utgåva tillhandahålls inte implicit."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "huvudtaggar sorteras alltid efter att ha lästs in."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "skriptinterpretatorn kan använda argument från huvudet."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "en hårdlänkad filuppsättning får installeras utan att vara komplett."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr "paketskript kan komma åt rpm-databasen under installation."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "internt stöd för lua-skript."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr "kontrollsummealgoritm för filer kan konfigureras per paket"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "stöd för filförmågor (capabilities) enligt POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "paketskript kan utökas vid installationstillfället."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
+msgstr "beroendejämförelser stödjer versioner med tilde."
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "stöd filer större än 4 GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "stöd för rika beroenden"
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "Okänt rikt-beroende-op â€%.*sâ€"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Namn behövs"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "Rikt beroende börjar inte med â€(â€"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "Argument saknas till rikt-beroende-op"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "Tomt rikt beroende"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "Oavslutat rikt beroende: %s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr "Kan inte kedja olika operatorer"
+
+#: lib/rpmds.c:1564
+#, fuzzy
+msgid "Can only chain and/or/with ops"
+msgstr "Kan endast kedja AND- och OR-operatorer"
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr "Skräp efter rikt beroende"
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Felaktigt magiskt tal"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Felaktigt/oläsbart huvud"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Huvudstorleken för stor"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Filen är för stor att arkivera"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Okänd filtyp"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Saknade filer"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Kontrollsumman stämmer inte"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Internt fel"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Ingen arkivfilen i huvud"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " misslyckades - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (fel 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "misslyckades med att öppna %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr "Maxnivå på förteckningsrekursion överskriden: %s\n"
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: inte ett rpm-paket (eller paketspecifikation)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
-msgstr ""
+msgstr "Uppdaterar / installerar …\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
-msgstr ""
+msgstr "Städar upp / tar bort …\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Förbereder..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
-msgstr ""
+msgstr "Förbereder paket …"
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Ouppfyllda beroenden:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: inte ett rpm-paket (eller paketspecifikation): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s kan inte installeras\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "Hämtar %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "hoppar över %s - överföring misslyckades\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "paket %s är inte relokerbart\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "fel vid läsning från fil %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "â€%s†anger flera paket:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "kan inte öppna %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Installerar %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "inte ett rpm-paket"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "ogiltig signaturtyp"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "ej stödd RPM-paketversion"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "läsning misslyckades: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "inte ett rpm-paket\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "det går inte att skapa %s-lås på %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "väntar på %s-lås på %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Misslyckades med att göra dlopen på %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Misslyckades med att lösa upp symbolen %s: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Det gick inte att expandera makrot %%__collection_%s\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Insticksmodulen %%__%s_%s är inte konfigurerad\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Insticksmodulen %s är inte inläst\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Misslyckades med att lösa upp insticksmodulen %s symbol %s: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "annan"
@@ -2728,800 +3322,635 @@ msgstr "%s är föråldrat av %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "okänt fel %d uppträdde under behandling av paket %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "andra â€:†saknas vid %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "arkitekturnamn saknas vid %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Ofullständig datarad vid %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "För många argument i datarad vid %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Felaktigt arkitektur-/os-nummer: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Ofullständig standardvärdesrad vid %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "För många argument i standardvärdesrad vid %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "â€:†saknas (hittade 0x%02x) vid %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "argument till %s saknas vid %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "kan inte öppna %s vid %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "arkitektur saknas för %s vid %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "okänd flagga â€%s†vid %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
+msgstr "Misslyckades att läsa extra vektor, /proc inte monterat?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Okänt system: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Var god kontakta %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Kan inte öppna %s för läsning: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "Ingen exec() anropad efter fork() i lua-skript\n"
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "Det går inte att återställa aktuell katalog: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr "<lua>-skriptstöd är inte inbyggt\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Kunde inte skapa temporärfil för %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
-msgstr "Kunde inte duplicera filbeskrivare: %s: %s\n"
+msgstr "Kunde inte duplicera filidentifierare: %s: %s\n"
+
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "Fwrite misslyckades: %s"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "%s-skript misslyckades, waitpid(%d) rk %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "%s-skript misslyckades, signal %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "%s-skript misslyckades, slutstatus %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Okänt format"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "installera"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "radera"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "kan inte öppna paketdatabas i %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "överflödigt â€(†i paketetikett: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "â€(†saknas i etikett: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "â€)†saknas i paketetikett: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: misslyckades att läsa publik nyckel.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "transaktion"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sighstorlek(%d): FEL, läsning returnerade %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sighmagi: FEL\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sightaggar: FEL, antal taggar(%d) utanför intervall\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sighdata: FEL, antal byte(%d) itanför intevall\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sighklick(%d): FEL, läsning returnerade %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sightagg[%d]: FEL, tagg %d typ %d position %d antal %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sighlast: FEL\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "sighutfyllnad(%zd): FEL, läste %zd byte\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigh sigSize(%zd): FEL, fstat(2) misslyckades\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Oföränderlig huvudregion kunde inte läsas. Trasigt paket?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5-summa:"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Huvudets SHA1-summa:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
+
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Huvud "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Kan inte läsa om signaturhuvud.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "hoppade över"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "misslyckades"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "saknas %c %s"
-
-#: lib/verify.c:422
+#: lib/verify.c:263
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Ouppfyllda beroenden för %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "ogiltig fältbredd"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "{ saknas efter %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "} saknas efter %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "tomt taggformat"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "tomt taggnamn"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "okänd tagg"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] förväntades vid slutet på vektor"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "oväntad ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "oväntad }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? förväntades i uttryck"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ förväntades efter ? i uttryck"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} förväntades i uttryck"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": förväntades efter ? i deluttryck"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ förväntades efter : i uttryck"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| förväntades vid slutet på uttryck"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "vektoriterator använd med vektor av annan storlek"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Genererar %d saknade index, vänta …\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "kan inte öppna %s-indexet med db%d - %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "fel(%d) när â€%sâ€-poster hämtades frÃ¥n %s-indexet: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "ingen dbpath har satts\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: hoppar över"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "fel(%d) när post nr. %d sparades i %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: regexec misslyckades: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: regcomp misslyckades: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: hoppar över"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: skadat huvud nr. %u hämtat -- hoppar över.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "fel(%d:%s) när nästa nyckel från %s-index hämtades\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "fel(%d) vid tillägg av post för huvud nr. %d\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "fel(%d) tar bort post för huvud nr. %d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: kan inte läsa huvud vid 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "fel(%d) när â€%sâ€-poster frÃ¥n %s-indexet sattes\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "fel(%d) när post â€%s†sparades i %s\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "fel(%d) när post â€%s†togs bort frÃ¥n %s\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "fel(%d) vid allokering av ny paketinstans\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "fel(%d) när â€%sâ€-poster hämtades frÃ¥n %s-indexet\n"
-
-#: lib/rpmdb.c:2660
-#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "fel(%d) när post %s sparades i %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "ingen dbpath har satts"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "misslyckades att skapa katalogen %s: %s\n"
-
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "huvud nr. %u i databasen är felaktigt -- hoppar över.\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "kan inte lägga till post ursprungligen vid %u\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "kunde inte bygga om databasen: orginaldatabasen finns kvar\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "kunde inte ersätta gammal databas med ny databas!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "byt ut filer i %s med filer från %s för att återställa"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "kunde inte ta bort katalogen %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d-fel(%d) från %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d-fel(%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "kan inte få %s lås på %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "delat"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "uteslutande"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "ogiltig indextyp %x på %s/%s\n"
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Dubblerat användarnamn eller UID för användaren %s\n"
-#: lib/backend/dbconfig.c:144
+#: lib/verify.c:284
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "okänd db-flagga: â€%s†ignorerad\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s har ogiltigt ogiltigt numeriskt värde, hoppar över\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s har för stort eller för litet â€longâ€-värde, hoppar över\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s har för stort eller för litet heltalsvärde, hoppar över\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Misslyckades med att avkoda policy för %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Dubblerat gruppnamn eller GID för gruppen %s\n"
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Misslyckades med att skapa temporär fil för %s: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Misslyckades med att skriva %s-policy för att filen %s\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr "inget tillstånd"
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Misslyckades med att skapa semanage-handtag\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "okänt tillstånd"
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Misslyckades att ansluta till policyhanterare\n"
-
-#: plugins/sepolicy.c:306
+#: lib/verify.c:448
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Misslyckades med att börja policytransaktion: %s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Misslyckades att ta bort den tillfälliga policyfilen %s: %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Misslyckades att installera policymodul: %s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Misslyckades att ta bort policymodul: %s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Misslyckades med att grena process: %s\n"
+msgid "missing %c %s"
+msgstr "saknas %c %s"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: lib/verify.c:503
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Misslyckades med att köra %s: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Ouppfyllda beroenden för %s:\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s avslutades onormalt\n"
+msgid "Unable to reset nice value: %s"
+msgstr "Kan inte återställa nice-värde: %s"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: plugins/prioreset.c:40
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s misslyckades med slutstatus %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Misslyckades med att fastställa policyförändringar\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Misslyckades med att expandera restorecon-sökväg"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-"Misslyckades med etikettera om filsystemet. Filer kan vara felmärkta\n"
+msgid "Unable to reset I/O priority: %s"
+msgstr "Kan inte återställa I/O-prioritet: %s"
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"Misslyckades med att ladda om filkontexter. Filer kan vara felmärkta\n"
-#: plugins/sepolicy.c:594
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Misslyckades att extrahera policy från %s\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== aktiva %d tomma %d\n"
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(tom)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(tom)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Makro %%%s har oavslutad kropp\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Makrot %%%s har oavslutade flaggor\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "Makro %%%s har otillåtet namn (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Makrot %%%s har oavslutad kropp\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Makro %%%s har oavslutade flaggor\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
-msgstr "makro %%%s har tom kropp\n"
+msgstr "Makrot %%%s har tom kropp\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "Makrot %%%s måste ha blanksteg före kroppen\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Makro %%%s misslyckades att expandera\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "Makro %%%s har otillåtet namn (%%undefine)\n"
+msgstr "Makrot %%%s har ett otillåtet namn (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "Makro %%%s (%s) användes inte under nivå %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "Makrot %%%s definierat men inte använt i sin räckvidd\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Okänd flagga %c i %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-"Alltför många nivåer av rekursion i makro expansion. Det beror sannolikt på "
-"en rekursiv makrodeklaration.\n"
+"Alltför många nivåer av rekursion i en makroexpansion. Det beror sannolikt "
+"på en rekursiv makrodeklaration.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Oavslutad %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "Ett %% följs av ett makro som inte kan tolkas\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "misslyckades med att läsa in makrofilen %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== aktiva %d tomma %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "fel när tämporärfil %s skapades: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Fil %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Filen %s är mindre än %u byte\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "misslyckades att skapa katalog"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[ingen]"
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(inget fel)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "ödesdigert fel: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "fel: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "varning: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "felaktig syntax i lua-skript: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "felaktig syntax i lua-skript: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua-skript misslyckades: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "felaktig syntax i lua-fil: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "lua-hake misslyckades: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[ingen]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(inget fel)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "ödesdigert fel: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "fel: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "varning: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "minnesallokering (%u byte) returnerade NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, nyckel-ID %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(ingen)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "fel när temporärkatalog %s skapades: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "fel när fifo %s skapades: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "fel när fifo %s togs bort: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "fel när katalogen %s togs bort: %m\n"
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite misslyckades: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread misslyckades: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: Fflush misslyckades: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
-msgstr ""
+msgstr "PGP-signaturen stödjs inte\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
-msgstr ""
+msgstr "PGP-hash-algoritm %u stödjs inte\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgstr "PGP-publik nyckelalgoritm %u stödjs inte\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Det gick inte att skapa ett rör för signering: %m"
+msgid "Could not exec %s: %s\n"
+msgstr "Kunde inte köra %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "Fopen misslyckades\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Kunde inte skriva till ett rör\n"
+
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr "Kunde inte läsa från filen %s: %s\n"
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "gpg exec misslyckades (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg kunde inte skriva signatur\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "kan inte läsa signaturen\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp misslyckades\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s innehåller redan en identisk signatur, hoppar över\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead misslyckades: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature misslyckades: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: headerRead misslyckades: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "Kan inte signera RPM-v3-paket\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s innehåller redan en identisk signatur, hoppar över\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: rpmWriteSignature misslyckades: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead misslyckades: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "misslyckades med att ersätta %s: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: läsning av paketlista misslyckades: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "verifiera inte huvud+lastsignatur"
diff --git a/po/te.po b/po/te.po
index 0e9ae62a5..32ba90e66 100644
--- a/po/te.po
+++ b/po/te.po
@@ -3,17 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# à°ªà±à°°à°µà±€à°£à± ఇళà±à°³ <mail2ipn@gmail.com>, 2011.
-# à°ªà±à°°à°µà±€à°£à± యిళà±à°³ <mail2ipn@gmail.com>, 2011.
+# à°ªà±à°°à°µà±€à°£à± ఇళà±à°³ <mail2ipn@gmail.com>, 2011
+# à°ªà±à°°à°µà±€à°£à± ఇళà±à°³ <mail2ipn@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Telugu (http://www.transifex.com/projects/p/rpm/language/"
-"te/)\n"
+"Language-Team: Telugu (http://www.transifex.com/rpm-team/rpm/language/te/)\n"
"Language: te\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -46,487 +45,549 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr ""
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr ""
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr ""
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr ""
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr ""
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr ""
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr ""
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr ""
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr ""
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr ""
-
-#: rpmqv.c:128
-msgid "unexpected query format"
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
msgstr ""
-#: rpmqv.c:131
-msgid "unexpected query source"
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
msgstr ""
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
msgstr ""
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
msgstr ""
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
msgstr ""
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
msgstr ""
-#: rpmqv.c:170
+#: rpmbuild.c:161
+#, c-format
msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
+"build through %prep (unpack sources and apply patches) from <source package>"
msgstr ""
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr ""
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr ""
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr ""
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<వనరౠపà±à°¯à°¾à°•à±‡à°œà±€>"
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
msgstr ""
-#: rpmqv.c:230
+#: rpmbuild.c:167 rpmbuild.c:208
msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr ""
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr ""
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr ""
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr ""
-
-#: rpmbuild.c:99
-#, c-format
-msgid "buildroot already specified, ignoring %s\n"
-msgstr ""
-
-#: rpmbuild.c:120
-#, c-format
-msgid "build through %prep (unpack sources and apply patches) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
-msgid "<specfile>"
-msgstr ""
-
-#: rpmbuild.c:123
-msgid "build through %build (%prep, then compile) from <specfile>"
-msgstr ""
-
-#: rpmbuild.c:126
-msgid "build through %install (%prep, %build, then install) from <specfile>"
+"build through %install (%prep, %build, then install) from <source package>"
msgstr ""
-#: rpmbuild.c:129
+#: rpmbuild.c:170
#, c-format
-msgid "verify %files section from <specfile>"
+msgid "verify %files section from <source package>"
msgstr ""
-#: rpmbuild.c:132
-msgid "build source and binary packages from <specfile>"
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
msgstr ""
-#: rpmbuild.c:135
-msgid "build binary package only from <specfile>"
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
msgstr ""
-#: rpmbuild.c:138
-msgid "build source package only from <specfile>"
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
msgstr ""
-#: rpmbuild.c:142
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr ""
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr ""
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr ""
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr ""
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr ""
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr ""
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<వనరౠపà±à°¯à°¾à°•à±‡à°œà±€>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
+#: rpmbuild.c:212
+msgid "override build root"
msgstr ""
-#: rpmbuild.c:171
-msgid "override build root"
+#: rpmbuild.c:214
+msgid "run build in current directory"
msgstr ""
-#: rpmbuild.c:173
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr ""
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr ""
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr ""
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr ""
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr ""
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "అయిన తరà±à°µà°¾à°¤ వనరà±à°²à°¨à± తీసివేయి"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr ""
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr ""
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr ""
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr ""
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr ""
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr ""
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr ""
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr ""
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr ""
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr ""
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr ""
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr ""
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr ""
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr ""
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "డేటాబేసà±à°¨à± ఆరంభించà±"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "డేటాబేసౠఫైళà±à°³à°¨à± సరిచూడà±"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "డేటాబేసౠà°à°šà±à°›à°¿à°•à°¾à°²à±:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr ""
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "à°ªà±à°¯à°¾à°•à±‡à°œà±€ సంతకా(à°²)నౠసరిచూడà±"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "కీరింగౠà°à°šà±à°›à°¿à°•à°¾à°²à±:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr ""
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr ""
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr ""
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr ""
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr ""
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr ""
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr ""
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr ""
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr ""
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr ""
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr ""
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr ""
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr ""
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr ""
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "à°ªà±à°¯à°¾à°•à±‡à°œà±€ సంతకాలనౠతొలగించà±"
-#: rpmsign.c:35
-msgid "Signature options:"
-msgstr "సంతకం à°à°šà±à°›à°¿à°•à°¾à°²à±:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
msgstr ""
-#: rpmsign.c:108
-#, c-format
-msgid "You must set \"%%_gpg_name\" in your macro file\n"
+#: rpmsign.c:40
+msgid "<key>"
msgstr ""
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:117
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "సంతకం à°à°šà±à°›à°¿à°•à°¾à°²à±:"
+
+#: rpmsign.c:101
#, c-format
-msgid "Pass phrase is good.\n"
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr ""
-#: rpmsign.c:123
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr ""
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr ""
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr ""
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -535,32 +596,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr ""
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr ""
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr ""
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -570,441 +636,509 @@ msgstr ""
"\n"
"RPM నిరà±à°®à°¾à°£ దోషాలà±:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr ""
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr ""
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr ""
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr ""
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr ""
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr ""
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr ""
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr ""
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr ""
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr ""
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr ""
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr ""
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr ""
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr ""
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr ""
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr ""
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr ""
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr ""
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr ""
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr ""
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr ""
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr ""
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "ఫైలౠకనపడలేదà±: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr ""
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr ""
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr ""
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "వరà±à°¸: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr ""
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "చెడà±à°¡ ఫైలà±: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr ""
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr ""
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr ""
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
msgstr ""
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr ""
-
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr ""
-
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr ""
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:440
+#: build/pack.c:434
#, c-format
-msgid "Could not open %s: %s\n"
+msgid "Failed to read %jd bytes in file %s: %s\n"
msgstr ""
-#: build/pack.c:452
-#, c-format
-msgid "Unable to write package: %s\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:468
+#: build/pack.c:453
#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
+msgid "Unable to write header to %s: %s\n"
msgstr ""
-#: build/pack.c:479
+#: build/pack.c:520
#, c-format
-msgid "Unable to read header from %s: %s\n"
+msgid "Could not open %s: %s\n"
msgstr ""
-#: build/pack.c:489
+#: build/pack.c:527
#, c-format
-msgid "Unable to write header to %s: %s\n"
+msgid "Unable to write package: %s\n"
msgstr ""
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr ""
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr ""
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr ""
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr ""
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr ""
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr ""
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr ""
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr ""
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr ""
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr ""
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr ""
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
+#: build/parseFiles.c:33
#, c-format
-msgid "line %d: Package does not exist: %s\n"
+msgid "line %d: Error parsing %%files: %s\n"
msgstr ""
-#: build/parseDescription.c:74
+#: build/parseFiles.c:73
#, c-format
-msgid "line %d: Second description\n"
-msgstr ""
-
-#: build/parseFiles.c:33
-#, c-format
-msgid "line %d: Error parsing %%files: %s\n"
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
@@ -1012,341 +1146,410 @@ msgstr ""
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr ""
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr ""
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr ""
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr ""
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr ""
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr ""
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr ""
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr ""
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr ""
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr ""
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr ""
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr ""
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr ""
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr ""
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr ""
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "చెడà±à°¡ వనరà±: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr ""
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr ""
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr ""
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr ""
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr ""
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr ""
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr ""
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr ""
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr ""
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr ""
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr ""
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr ""
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr ""
@@ -1417,450 +1620,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr ""
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr ""
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr ""
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
msgstr ""
-#: lib/cpio.c:392
-msgid "Header size too big"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
msgstr ""
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "తెలియని ఫైలౠరకం"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:810
+msgid "shared"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
+#: lib/backend/db3.c:810
+msgid "exclusive"
msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr ""
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr ""
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr ""
-#: lib/formats.c:125
-#, c-format
-msgid "%c"
+#: lib/formats.c:44
+msgid "(not a string)"
msgstr ""
-#: lib/formats.c:135
-msgid "%a %b %d %Y"
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
msgstr ""
-#: lib/formats.c:314
-msgid "(not base64)"
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
msgstr ""
-#: lib/formats.c:326
-msgid "(invalid type)"
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
msgstr ""
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
+#: lib/formats.c:253
+msgid "(not base64)"
msgstr ""
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr ""
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr ""
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr ""
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr ""
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr ""
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr ""
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr ""
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr ""
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr ""
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr ""
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr ""
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr ""
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr ""
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr ""
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr ""
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ""
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr ""
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr ""
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr ""
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr ""
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr ""
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr ""
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr ""
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr ""
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1881,528 +2195,577 @@ msgstr ""
msgid "relocations must have a / following the ="
msgstr ""
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr ""
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr ""
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr ""
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr ""
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr ""
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr ""
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr ""
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr ""
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr ""
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr ""
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr ""
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr ""
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr ""
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr ""
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr ""
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr ""
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr ""
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr ""
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr ""
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr ""
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr ""
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr ""
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr ""
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr ""
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr ""
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr ""
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr ""
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr ""
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr ""
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr ""
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr ""
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr ""
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr ""
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr ""
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr ""
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr ""
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr ""
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "à°…à°¨à±à°¨à°¿ à°¸à±à°µà°°à±‚పణం ఫైళà±à°³à°¨à± జాబితాగా చూపà±"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr ""
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
+msgstr ""
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
msgstr "à°…à°¨à±à°¨à°¿ à°¸à±à°µà°°à±‚పణం ఫైళà±à°³à°¨à± జాబితాగా చూపà±"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr ""
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr ""
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr ""
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, c-format
+msgid "skip %%artifact files"
+msgstr ""
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr ""
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr ""
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr ""
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr ""
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr ""
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr ""
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr ""
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr ""
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr ""
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr ""
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr ""
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr ""
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr ""
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr ""
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr ""
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr ""
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr ""
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr ""
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr ""
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr ""
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr ""
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr ""
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr ""
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr ""
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr ""
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "ఫైలౠ%s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr ""
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr ""
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr ""
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ""
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
msgstr ""
-#: lib/rpmchecksig.c:393
-msgid ")"
+#: lib/rpmchecksig.c:268
+msgid "OK"
msgstr ""
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr ""
@@ -2427,212 +2790,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr ""
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr ""
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr ""
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr ""
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr ""
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr ""
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr ""
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr ""
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr ""
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "తెలియని ఫైలౠరకం"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr ""
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr ""
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr ""
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr ""
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr ""
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr ""
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr ""
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr ""
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr ""
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "rpm à°ªà±à°¯à°¾à°•à±‡à°œà±€ కాదà±"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr ""
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr ""
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "rpm à°ªà±à°¯à°¾à°•à±‡à°œà±€ కాదà±\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr ""
@@ -2706,796 +3298,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr ""
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr ""
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr ""
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr ""
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr ""
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr ""
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr ""
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr ""
-
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr ""
-
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
-msgid "Header "
-msgstr ""
-
-#: lib/signature.c:530
+#: lib/rpmvs.c:268
#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "skipped"
-msgstr ""
-
-#: lib/transaction.c:1426
-msgid "failed"
-msgstr ""
-
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr ""
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
+msgid "%s%s"
msgstr ""
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+#: lib/rpmvs.c:396
+msgid "Header "
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
msgstr ""
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+#: lib/transaction.c:1397
+msgid "skipped"
msgstr ""
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+#: lib/transaction.c:1397
+msgid "failed"
msgstr ""
-#: lib/rpmdb.c:1415
+#: lib/verify.c:263
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: lib/verify.c:284
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:2250
+#: lib/verify.c:448
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "missing %c %s"
msgstr ""
-#: lib/rpmdb.c:2358
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2382
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2448
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2477
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:286
#, c-format
-msgid "error(%d) allocating new package instance\n"
+msgid "%3d>%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
+msgid "%3d<%*s(empty)\n"
msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
+msgid "Macro %%%s has unterminated opts\n"
msgstr ""
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Macro %%%s has unterminated body\n"
msgstr ""
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:551
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:557
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
+msgid "Macro %%%s has empty body\n"
msgstr ""
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:562
#, c-format
-msgid "replace files in %s with files from %s to recover"
+msgid "Macro %%%s needs whitespace before body\n"
msgstr ""
-#: lib/rpmdb.c:2960
+#: rpmio/macro.c:566
#, c-format
-msgid "failed to remove directory %s: %s\n"
+msgid "Macro %%%s failed to expand\n"
msgstr ""
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:607
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
+msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr ""
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:637
#, c-format
-msgid "db%d error(%d): %s\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
+msgid "Unknown option %c in %s(%s)\n"
msgstr ""
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
+msgid "Unterminated %c: %s\n"
msgstr ""
-#: lib/backend/dbconfig.c:181
+#: rpmio/macro.c:1182
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
+msgid "A %% is followed by an unparseable macro\n"
msgstr ""
-#: lib/backend/dbconfig.c:190
+#: rpmio/macro.c:1197
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "failed to load macro file %s"
msgstr ""
-#: lib/backend/dbconfig.c:199
+#: rpmio/macro.c:1578
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
+msgid "======================== active %d empty %d\n"
msgstr ""
-#: plugins/sepolicy.c:218
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "Failed to decode policy for %s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: plugins/sepolicy.c:225
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+msgid "File %s: %s\n"
+msgstr "ఫైలౠ%s: %s\n"
-#: plugins/sepolicy.c:231
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "Failed to write %s policy to file %s\n"
+msgid "File %s is smaller than %u bytes\n"
msgstr ""
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
msgstr ""
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
msgstr ""
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+#: rpmio/rpmlog.c:194
+msgid "error: "
msgstr ""
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+#: rpmio/rpmlog.c:195
+msgid "warning: "
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to execute %s: %s\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
-#: rpmio/macro.c:185
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "======================== active %d empty %d\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: rpmio/macro.c:323
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%3d>%*s(empty)"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Macro %%%s has unterminated body\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
+msgid "error creating temp directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
+msgid "error creating fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:83
#, c-format
-msgid "Macro %%%s has empty body\n"
+msgid "error delete fifo %s: %m\n"
msgstr ""
-#: rpmio/macro.c:611
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s failed to expand\n"
+msgid "error delete directory %s: %m\n"
msgstr ""
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgid "%s: Fwrite failed: %s\n"
msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
+msgid "%s: Fread failed: %s\n"
msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
msgstr ""
-#: rpmio/macro.c:1175
+#: sign/rpmgensig.c:208
#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:221
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:270
#, c-format
-msgid "File %s: %s\n"
-msgstr "ఫైలౠ%s: %s\n"
-
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
msgstr ""
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: sign/rpmgensig.c:302
#, c-format
-msgid "invalid syntax in lua script: %s\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: sign/rpmgensig.c:312
#, c-format
-msgid "lua script failed: %s\n"
+msgid "gpg exec failed (%d)\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlog.c:151
-msgid "error: "
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlog.c:152
-msgid "warning: "
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
+msgid "%s: writeLead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr ""
-
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/tr.po b/po/tr.po
index 5b6be9f2a..7f6ec70b8 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -3,21 +3,21 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Muhammet Kara <muhammet.k@gmail.com>, 2011-2012.
+# Muhammet Kara <muhammetk@gmail.com>, 2011-2012,2014
+# Muhammet Kara <muhammetk@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 08:10+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/rpm/language/"
-"tr/)\n"
+"Language-Team: Turkish (http://www.transifex.com/rpm-team/rpm/language/tr/)\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cliutils.c:21 lib/poptI.c:29
#, c-format
@@ -46,508 +46,570 @@ msgstr ""
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "icra başarısız\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "argüman bir RPM paketi değil\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "paketten başlık okunması sırasında hata oluştu\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "payload %s tekrar açılamıyor\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr ""
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Sorgulama seçenekleri (-q ya da --query ile)"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Denetleme seçenekleri (-V ya da --verify ile)"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Kurma/Güncelleme/Kaldırma seçenekleri:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Tüm rpm kipleri ve yürütülebilir dosyaları için ortak seçenekler:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "bir anda sadece bir tarz sorgulama/denetleme yapılabilir"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "beklenmeyen sorgulama bayrakları"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "beklenmeyen sorgulama biçemi"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "beklenmeyen sorgulama kaynağı"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "sadece bir ana kip belirtilebilir"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr ""
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr ""
-"dosyalar sadece paket kurulumu sırasında yeni yerlerine yerleştirilebilir"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr ""
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate ve --excludepath sadece yeni paket kurulumunda kullanılabilir"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix sadece yeni paketlerin kurulması sırasında kullanılabilir"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "--prefix ile belirtilenler '/' ile başlamalı"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "--excludedocs ve --includedocs bir arada kullanılamaz"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles sadece paket kurulumu sırasında kullanılabilir"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb sadece paket kurulumu ve kaldırılması sırasında kullanılabilir"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"betik iptal etme seçenekleri sadece paketin kurulması ve silinmesi sırasında "
-"kullanılabilir"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"tetikleme iptal seçenekleri sadece paketin kurulması ve silinmesi sırasında "
-"kullanılabilir"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "--root (-r) ile verilenler '/' ile başlamalı"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr ""
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "yüklenecek paket(ler) belirtilmedi"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "sorgulama için hiç argüman belirtilmedi"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "denetleme için hiç argüman belirtilmedi"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot zaten belirtilmiş, %s yoksayılıyor\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"<specDosyası>ndan %prep adımı sayesinde oluşturulur (kaynak paketi açılır "
"ve yamalar uygulanır)"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specDosyası>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
"<specDosyası>ndan %build adımı sayesinde oluşturulur (%prep, sonra da "
"derlenir)"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"<specDosyası>ndan %install adımı sayesinde oluşturulur (%prep, %build, sonra "
"da kurulum)"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "<specDosyası>ndan %files bölümünü denetler"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "kaynak ve çalıştırılabilir paketleri <specDosyası>ndan oluşturur"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "çalıştırılabilir paketi sadece <specDosyası>ndan oluşturur"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "kaynak paketi sadece <specDosyası>ndan oluşturur"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<kaynak paketi>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"<kaynak paketi>nden %install adımı sayesinde oluşturulur (%prep, %build, "
+"sonra da kurulur)"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"<tarpaketi>nden %prep adımı sayesinde oluşturulur (kaynak paketi açılır ve "
"yamalar uygulanır)"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarPaketi>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr ""
"<tarPaketi>nden %build adımı sayesinde oluşturulur (%prep, sonra da derleme)"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"<tarpaketi>nden %install adımı sayesinde oluşturulur (%prep, %build, sonra "
"da kurulur)"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "<tarpaketi>nden %files bölümünü denetler"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "kaynak ve çalıştırılabilir paketleri <tarpaketi>nden oluşturur"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "çalıştırılabilir paketi sadece <tarpaketi>nden oluşturur"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "kaynak paketi sadece <tarpaketi>nden oluÅŸturur"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "çalıştırılabilir paketi <kaynak paketi>nden oluşturur"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<kaynak paketi>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"<kaynak paketi>nden %install adımı sayesinde oluşturulur (%prep, %build, "
-"sonra da kurulur)"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "build root'a zorlar"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "işlem sonunda paket oluşturma ağacını siler"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "spec dosyasındaki ExcludeArch: yönergeleri yoksayılıyor"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "hata ayıklama dosyası durum motoru"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "oluşumun herhangi bir adımı icra edilmez"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr ""
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "spec dosyası içindeki i18n msgstr'leri kabul edilmez"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "işlem sonunda kaynakları siler"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "işlem sonunda spec dosyasını siler"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "doğrudan belirtilen adıma atlar (sadece c ve i için)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "hedef platforma zorlar"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"[ <specDosyası> | <tarPaketi> | <kaynakPaketi> ] ile paketleme seçenekleri:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Tüm rpm kipleri ve yürütülebilir dosyaları için ortak seçenekler:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr ""
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "%s spec dosyası açılamadı: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "tar veriyolu açılamadı: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "%s paketinden spec dosyası okunamadı\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "%s %s olarak deÄŸiÅŸtirilemedi: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "%s durum bilgileri alınamadı: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "%s bir normal bir dosya deÄŸil.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "%s bir spec dosyası gibi görünmüyor.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Hedef platformlar derleniyor: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "%s için derleniyor\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "--root (-r) ile verilenler '/' ile başlamalı"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "veritabanını başlangıç durumuna getirir"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "kurulu paket başlıklarından veritabanı listelerini yeniden oluşturur"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "veritabanı dosyaralını doğrular"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Veritabanı seçenekleri:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "sadece bir ana kip belirtilebilir"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "paket imza(lar)ını doğrula"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr ""
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr ""
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Anahtarlık seçenekleri:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr ""
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr ""
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Sorgulama seçenekleri (-q ya da --query ile)"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Denetleme seçenekleri (-V ya da --verify ile)"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Kurma/Güncelleme/Kaldırma seçenekleri:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "bir anda sadece bir tarz sorgulama/denetleme yapılabilir"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "beklenmeyen sorgulama bayrakları"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "beklenmeyen sorgulama biçemi"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "beklenmeyen sorgulama kaynağı"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr ""
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr ""
+"dosyalar sadece paket kurulumu sırasında yeni yerlerine yerleştirilebilir"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate ve --excludepath sadece yeni paket kurulumunda kullanılabilir"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix sadece yeni paketlerin kurulması sırasında kullanılabilir"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix ile belirtilenler '/' ile başlamalı"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "--excludedocs ve --includedocs bir arada kullanılamaz"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles sadece paket kurulumu sırasında kullanılabilir"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb sadece paket kurulumu ve kaldırılması sırasında kullanılabilir"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"betik iptal etme seçenekleri sadece paketin kurulması ve silinmesi sırasında "
+"kullanılabilir"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"tetikleme iptal seçenekleri sadece paketin kurulması ve silinmesi sırasında "
+"kullanılabilir"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr ""
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "yüklenecek paket(ler) belirtilmedi"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "sorgulama için hiç argüman belirtilmedi"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "denetleme için hiç argüman belirtilmedi"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "paket(ler)i imzala"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr ""
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "paket imzalarını sil"
-#: rpmsign.c:35
-msgid "Signature options:"
-msgstr "İmza seçenekleri:"
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
msgstr ""
-#: rpmsign.c:108
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "İmza seçenekleri:"
+
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Makro dosyanızda \"%%_pgp_name\" tanımlanmış olmalı\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Anahtar parolasını girin: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Anahtar parolası doğru.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "sorgu belirtim dosyaları"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr ""
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr ""
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "izleyen sorgulama biçimini kullanır"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Belirtim seçenekleri:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -556,32 +618,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "%s icra ediliyor: %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "%s 'in icrası başarısız (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "%s çıkışında hata (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -591,783 +658,920 @@ msgstr ""
"\n"
"RPM derleme hataları:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "== çözümlenirken sözdizimi hatası bulundu\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "&& çözümlenirken sözdizimi hatası bulundu\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "|| çözümlenirken sözdizimi hatası bulundu\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "ifadede çözümleme hatası\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "uyumsuz (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- sadece sayılarda\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! sadece sayılarda\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "türler eşleşmeli\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / dizgelerde desteklenmez\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- dizgelerde desteklenmez\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& ve || dizgelerde desteklenmez\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "ifadede sözdizimi hatası\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "%s içinde '(' yok: %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "%s içinde ')' yok: (%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Andaç %s geçersiz: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
+msgid "Missing %s in %s(%s)\n"
msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "%s() boşluksuz yazılmış: %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Sözdizimi hatası: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "mode spec hatalı: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "dirmode spec hatalı: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Geçersiz yeterlilik: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr ""
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Dosya \"/\" ile başlamalı: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Dosya iki kere gösterildi: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Sembolik bağ BuildRoot gösteriyor: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Dosya bulunamadı: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Dizin deÄŸil: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr ""
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: genel anahtar okuması başarısız oldu.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr ""
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: kodlama başarısız oldu\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr ""
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Dosya \"/\" ile içermeli: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "Dosya glob tarafından bulunamadı: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "satır: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Dosya glob tarafından bulunamadı: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Dosya hatalı: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Kullanıcı/grup hatalı: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr ""
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
"%s"
msgstr ""
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Dosyalar iÅŸleniyor: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr ""
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: satır: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Böyle bir makina yok: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "%s'e payload yazılamadı: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "%s'den payload okunamadı: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Böyle bir makina yok: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
msgstr ""
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Geçici dosya açılamadı.\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "%s paketinden spec dosyası okunamadı\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
msgstr ""
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "CSA verisi geçersiz\n"
-
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "İmza başlığı yeniden yüklenemedi.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "%s açılamadı: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "paket yazılamadı: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "sigtarget %s açılamadı: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "%s'den başlık okunamadı: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "%s'e başlık yazılamadı: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "Yazıldı: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "\"%s\" yürütülüyor:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "\"%s\"in yürütülmesi başarısız oldu.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr ""
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "%s paket dosyası için çıktı dosya adı üretilemedi: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "%s dosyası oluşturulamıyor: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "%d satır: %s saniye\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog girdi * ile başlamalı\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "%%changelog girdi eksik\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "%%changelog içinde tarih hatası: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr ""
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "%%changelog içinde isim yok\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "%%changelog içinde açıklama yok\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "satır %d: %%description ayrıştırılırken hata: %s \n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "satır %d: %s seçeneği hatalı: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "satır %d: İsim sayısı fazla: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "satır %d: Paket yok: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "satır %d: İkinci açıklama\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "satır %d: %%files ayrıştırılırken hata: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr ""
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "satır %d: Numara hatalı: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "satır %d: Hatalı %s numarası: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr ""
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Mimari dışlandı: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Mimari içerilmedi: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "OS dışlandı: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "OS içerilmedi: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "Pakette %s alan mevcut olmalı: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Pakette %s girdi tekrarlanmış: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "%s kısayol simgesi açılamadı: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "%s kısayol simgesi okunamadı: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "bilinmeyen kısayol simgesi türü: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "satır %d: Etiket sadece tek dizgecik alır: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "satır %d: Etiket bozuk: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "satır %d: Etiket boş: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "satır %d: Önekler \"/\" ile bitemez: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "satır %d: Docdir '/' ile başlamalı: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "satır %d: %s hatalı: niteleyiciler: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "satır %d: BuildArchitecture biçimi hatalı: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "İçsel hata: %d etiketi sahte\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Paket özellikleri hatalı: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Paket zaten var: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "satır %d: Bilinmeyen etiket: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Kaynak hatalı: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr ""
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr ""
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr ""
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "%%setup çözümlenirken hata: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "satır %d: %%setup argumanı hatalı: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "satır %d: %%setup seçeneği %s hatalı: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Geçersiz yama numarası %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "satır %d: %%prep saniye\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "satır %d: tetikleyiciler -- içermeli: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "satır %d: %s çözümlenirken hata oluştu: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "satır %d: içsel betik '>' ile bitmeli: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "satır %d: betik programı '/' ile başlamalı: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "satır %d: %s saniye\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "satır %d: desteklenmeyen içsel betik: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "satır %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "%s açılamadı: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: %%if'siz bir %%else alındı\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: %%if'siz bir %%endif alındı\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Kurgulamak için uyumlu mimari yok\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "Paket %%description içermiyor: %s\n"
@@ -1438,450 +1642,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr ""
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "%s icra edilemedi: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "%s ayrılamadı: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr ""
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr ""
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr ""
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr ""
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr ""
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr ""
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr ""
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "%s bulunamadı:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "%s spec dosyasının sorgulanması başarısız, çözümlenemiyor\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(hata 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Magic hatalı"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Hatalı/okunamayan başlık"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "tanınmayan db seçeneği: \"%s\" yoksayıldı\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Başlık çok uzun"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s geçersiz sayısal değer içeriyor, atlandı\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s ya çok büyük ya da çok küçük 'long' değer içeriyor, atlandı\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s ya çok büyük ya da çok küçük 'integer' değer içeriyor, atlandı\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "%s kilit %s/%s'den alınamadı\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "paylaşımlı"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "bağdaşık"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Bilinmeyen dosya türü"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Sabit baÄŸ(lar) eksik"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "İç hata"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " başarısız - "
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "yeni paket örneğini tutma hatası(%d)\n"
-#: lib/depends.c:68
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr ""
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr ""
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr ""
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(bir sayı değil)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(dizge deÄŸil)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(geçersiz tür)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
-msgstr ""
+msgstr "%a %d %b %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
-msgstr ""
-
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr ""
+msgstr "(base64 deÄŸil)"
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr ""
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(geçersiz xml türü)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(OpenPGP imzası değil)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "normal"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr ""
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "kurulmamış"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr ""
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "yanlış renk"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "eksik"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(bilinmiyor)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(dizge deÄŸil)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "kullanıcı %s yok - root kullanılacak\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "grup %s yok - root kullanılacak\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s %s olarak kaydedildi\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s %s olarak oluÅŸturuldu\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "dizin"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "dosya"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:348 lib/signature.c:175
-#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1885
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1890
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1909
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
msgstr ""
-#: lib/package.c:442
-#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:452
+#: lib/header.c:1949
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
+#: lib/headerfmt.c:356
+msgid "invalid field width"
msgstr ""
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:362
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:384
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ä°mza bulundurmuyor\n"
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "etiket biçemi boş"
-#: lib/package.c:581
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "etiket ismi boÅŸ"
+
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: headerRead failed: %s"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "dizinin sonunda ] gerekli"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "beklenmeyen ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "beklenmeyen }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "ifade içerisinde ? gerekli"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "ifade içerisinde ? dan sonra { gerekli"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "ifade içinde } gerekli"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "? alt ifadesinden sonra : gerekli"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "ifade içersinde : den sonra { gerekli"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "ifadenin sonunda | gerekli"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr ""
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: Fread başarısız: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr ""
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr ""
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr ""
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr ""
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr ""
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr ""
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr ""
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr ""
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr ""
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr ""
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr ""
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr ""
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr ""
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr ""
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "tanımlanmış sorgulama etiketlerini gösterir"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "son rpmrc ve makro yapılandırmasını gösterir"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "daha az ayrıntılı çıktı sağlar"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "daha ayrıntılı çıktı sağlar"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "Kullanılan RPM sürümünü verir"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr ""
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "rpmio G/Ç hata kontrolu"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr ""
@@ -1902,11 +2217,11 @@ msgstr "yeniden konumlandırma işlemleri = içermelidir"
msgid "relocations must have a / following the ="
msgstr "yeniden konumlandırma için = den sonra bir / gerekir"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr "yapılandırmalarda atlanmış bile olsa tüm dosyaları kurar"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1914,151 +2229,161 @@ msgstr ""
"<paket> ile eşlenen tüm paketleri kaldırır(<paket> ile çok sayıda paket "
"belirtilmiÅŸse normalde bir hata oluÅŸur)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr ""
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr ""
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "paketi kaldırır"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<paket>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr ""
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "belgeleri kurmaz"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "<dosyayolu> ile başlayan dosyaları atlar "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<dosyaYolu>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "--replacepkgs --replacefiles için kısaltma"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "paket(ler) kurulu ise paket(ler)i günceller"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<paketDosyası>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr "paketin kurulma sürecini gösteren imler basar (-v ile)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "paket mimarisi denetlenmez"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "paketin ait olduÄŸu iÅŸletim sistemini doÄŸrulamaz"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "yüklemeden önce yeterli disk alanı kontrolu yapmaz"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "paket ile gelen belgeleri kurar"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr ""
+msgstr "paket(ler)i kur"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "veri tabanını günceller, ama dosya sistemini değiştirmez"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "paket bağımlılıklarını denetlemez"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr ""
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr ""
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr ""
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "paket kurulum sırasını bağımlılıklara göre düzenlemez"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "paket betikleri çalıştırılmaz"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "%%pre betiği (varsa) çalıştırılmaz"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "%%post betiği (varsa) çalıştırılmaz"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "%%preun betiği (varsa) çalıştırılmaz"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "%%postun betiği (varsa) çalıştırılmaz"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "bu paket tarafından tetiklenen hiç bir betik çalıştırılmaz"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "hiçbir %%triggerprein betiği çalıştırılmaz"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "hiçbir %%triggerin betiği çalıştırılmaz."
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "hiçbir %%triggerun betiği çalıştırılmaz."
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "hiçbir %%triggerpostun betiği çalıştırılmaz."
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2066,368 +2391,407 @@ msgstr ""
"paketin eski bir sürüme güncellenmesini sağlar (--force aynı işi otomatik "
"yapar)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "kurulumun gelişimi yüzde olarak gösterilir"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "eÄŸer deÄŸitirilebiliyorsa paketin yerini <dizin>'e deÄŸiÅŸtirir"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dizin>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "dosyaları <eski> dizininden kaldırıp <yeni> dizinine yerleştirir"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<eski>=<yeni>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr ""
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "paketi yeniden kurar"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "yükleme yapmaz, sadece çalışıp çalışmayacağını belirtir"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "paket günceller"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "tüm paketleri sorgular/doğrular"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr ""
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "dosyayı içeren paketleri sorgular/denetler"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "gruptaki paketleri sorgular/denetler"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr ""
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr ""
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr ""
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm sorgulama kipi"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr ""
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr ""
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "paket tarafından tetiklenen paketleri sorgular"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm denetleme kipi"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "bir bağımlılık gerektiren paketleri sorgular/denetler"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "bir bağımlılığı sağlayan paketleri sorgular/denetler"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr ""
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "tüm yapılandırma dosyalarını listeler"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "tüm belgeleme dosyalarını gösterir"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "tüm belgeleme dosyalarını gösterir"
+msgstr ""
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "tüm yapılandırma dosyalarını listeler"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "temel dosya bilgilerini gösterir"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "paketteki dosyaları gösterir"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "%%ghost dosyaları atlanır"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "%%ghost dosyaları atlanır"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "listelenmiş dosyaların durumunu gösterir"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "dosyaların uzunlukları doğrulanmaz"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "dosyaların sembolik bağ dosya yolları doğrulanmaz"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "dosyaların sahipleri doğrulanmaz"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "dosyaların grupları doğrulanmaz"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "dosyaların değişiklik zamanları doğrulanmaz"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "dosyaların kipleri doğrulanmaz"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
msgstr ""
-#: lib/poptQV.c:236
-msgid "don't verify file security contexts"
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
msgstr ""
-#: lib/poptQV.c:238
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "paketteki dosyalar doÄŸrulanamaz"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "paket bağımlılıkları doğrulanmaz"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr ""
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "kaynak paketi gerekirken çalıştırılabilir paketi bulundu\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "kaynak paketi .spec dosyası içermiyor\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "arşiv paketi açılırken başarısız%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " dosyada "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "biçem yanlış: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr ""
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "normal "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "yerine "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "yüklenmedi "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "ağ paylaşımlı "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
-msgstr ""
+msgstr "yanlış renk"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(durumsuz) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(bilinmeyen %3d)"
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr ""
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr "paket ne dosya sahibi ne de kimlik listesi içeriyor\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "%s grubu hiç paket içermiyor\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "%s tetikleyen paket yok\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr ""
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr ""
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "%s gerektiren paket yok\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "%s saÄŸlayan paket yok\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "dosya %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "%s dosyası, hiç bir pakete ait değil\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "geçersiz paket numarası: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "%s paketi kurulu deÄŸil\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr ""
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr ""
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "TAMAM DEĞİL"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "Tamam"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (EKSÄ°K ANAHTARLAR:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (GÃœVENCESÄ°Z ANAHTARLAR:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: açılamadı: %s\n"
@@ -2440,7 +2804,7 @@ msgstr ""
#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
#, c-format
msgid "%s: chroot directory not set\n"
-msgstr ""
+msgstr "%s: chroot dizini belirlenmemiÅŸ\n"
#: lib/rpmchroot.c:70
#, c-format
@@ -2452,215 +2816,446 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "belirtilmiÅŸ bir dbpath deÄŸeri yok\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr ""
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: 0x%x de başlık okunamadı\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "belirtilmiÅŸ bir dbpath yok"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "kayıt özgün olarak %u e eklenemedi\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"veritabanı yeniden oluşturulamadı: mevcut veritabanı değişmeden\n"
+"yerinde bırakıldı\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "eski veritabanının yenisiyle değiştirilirmesi başarısız!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "HAYIR "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "EVET"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr ""
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr ""
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr ""
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr ""
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr ""
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
-msgstr ""
+msgstr "lua betikleri için dahili destek."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Magic hatalı"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Hatalı/okunamayan başlık"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Başlık çok uzun"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Dosya arşiv için çok büyük"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Bilinmeyen dosya türü"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr ""
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "İç hata"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr ""
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " başarısız - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "%s açılamadı: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
-msgstr ""
+msgstr "Güncelleniyor / kuruluyor...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
-msgstr ""
+msgstr "Temizleniyor / kaldırılıyor...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Hazırlanıyor..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
-msgstr ""
+msgstr "Paketler hazırlanıyor..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
-msgstr ""
+msgstr "Sağlanamayan bağımlılıklar:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr ""
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s yüklenemedi\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "%s alınıyor\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
-msgstr ""
+msgstr "%s atlanıyor - aktarım başarısız\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr ""
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "%s dosyasından okuma hatalı\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr ""
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "%s açılamadı: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "%s kuruluyor\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
-msgstr ""
+msgstr "rpm paketi deÄŸil"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr ""
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
-msgstr ""
+msgstr "desteklenmeyen RPM paketi sürümü"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "okuma başarısız: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
-msgstr ""
+msgstr "rpm paketi deÄŸil\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr ""
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
-msgstr ""
+msgstr "farklı"
#: lib/rpmprob.c:114
#, c-format
@@ -2714,7 +3309,7 @@ msgstr ""
#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
msgid "(installed) "
-msgstr ""
+msgstr "(kuruldu)"
#: lib/rpmprob.c:163
#, c-format
@@ -2731,798 +3326,633 @@ msgstr ""
msgid "unknown error %d encountered while manipulating package %s"
msgstr "anlaşılamayan %d hatası, %s paketi işlenirken saptandı"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "%s:%d - ikinci ':' eksik\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "%s:%d - mimari ismi eksik\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "%s:%d - veri satırı tamamlanmamış\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "%s:%d - veri satırında çok fazla argüman\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "arch/os numarası hatalı: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "%s:%d - öntanımlı satır tamamlanmamış\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "%s:%d - öntanımlı satırda çok fazla argüman\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "(0x%02x bulundu) %s:%d de ':' yok\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "%s için %s:%d de argüman eksik\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "%s için %s:%d'de eksik mimari\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "seçenek '%s' (%s:%d) de hatalı\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Bilinmeyen sistem: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr ""
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Bilinmeyen biçim"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "kur"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "sil"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "%s de Paket veritabanı açılamadı\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr ""
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr ""
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:219
-#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:268
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr ""
-
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Başlık"
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "İmza başlığı yeniden yüklenemedi.\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "atlandı"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "başarısız oldu"
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
-msgstr "eksik %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "%% den sonraki { yok"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "%%{ den sonraki } yok"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "etiket biçemi boş"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "etiket ismi boÅŸ"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "bilinmeyen etiket"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "dizinin sonunda ] gerekli"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "beklenmeyen ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "beklenmeyen }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "ifade içerisinde ? gerekli"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "ifade içerisinde ? dan sonra { gerekli"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "ifade içinde } gerekli"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr "? alt ifadesinden sonra : gerekli"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "ifade içersinde : den sonra { gerekli"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "ifadenin sonunda | gerekli"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
+#: lib/verify.c:284
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "%s indeksi db%d - %s (%d) kullanarak açılamadı\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "belirtilmiÅŸ bir dbpath deÄŸeri yok\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr ""
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "bilinmeyen durum"
-#: lib/rpmdb.c:1318
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "eksik %c %s"
-#: lib/rpmdb.c:1415
+#: lib/verify.c:503
#, c-format
-msgid "%s: regexec failed: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: plugins/prioreset.c:29
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
+#: plugins/prioreset.c:40
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:2349
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(boÅŸ)"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:316
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: 0x%x de başlık okunamadı\n"
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(boÅŸ)\n"
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr ""
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "%%%s makrosunu seçenekleri sonlandırılmamış\n"
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
+msgid "Macro %%%s has unterminated body\n"
+msgstr "%%%s makrosunun gövdesi sonlandırılmamış\n"
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:551
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "yeni paket örneğini tutma hatası(%d)\n"
+msgid "Macro %%%s has empty body\n"
+msgstr "%%%s makrosu boÅŸ\n"
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "hata(%d): \"%s\" kayıt %s indeksinden alınıyor\n"
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "hata(%d): %s kayıt %s içine yazılıyor\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "belirtilmiÅŸ bir dbpath yok"
+msgid "Macro %%%s failed to expand\n"
+msgstr "%%%s makrosu genişletmede başarısız\n"
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:607
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr ""
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "%%%s makrosunun ismi kuraldışı (%%define)\n"
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:637
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
+msgid "Macro %%%s defined but not used within scope\n"
msgstr ""
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:761
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "kayıt özgün olarak %u e eklenemedi\n"
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "%c seçeneği %s(%s) de anlaşılamadı\n"
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
msgstr ""
-"veritabanı yeniden oluşturulamadı: mevcut veritabanı değişmeden\n"
-"yerinde bırakıldı\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "eski veritabanının yenisiyle değiştirilirmesi başarısız!\n"
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "kurtarmak için %s içindeki dosyalar %s deki dosyalarla değiştiriliyor"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "%s dizininin silinmesi başarısız: %s\n"
+msgid "Unterminated %c: %s\n"
+msgstr "%c sonlandırılmamış: %s\n"
-#: lib/backend/db3.c:33
+#: rpmio/macro.c:1182
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d hata(%d) %s'den: %s\n"
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "Bir ayrıştırılamayan makro tarafından bir %% izlendi\n"
-#: lib/backend/db3.c:36
+#: rpmio/macro.c:1197
#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d hata(%d): %s\n"
+msgid "failed to load macro file %s"
+msgstr "makro dosyası %s'in yüklenmesi başarısız oldu"
-#: lib/backend/db3.c:500
+#: rpmio/macro.c:1578
#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "%s kilit %s/%s'den alınamadı\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "paylaşımlı"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "bağdaşık"
+msgid "======================== active %d empty %d\n"
+msgstr "======================== %d etkin %d boÅŸ\n"
-#: lib/backend/db3.c:582
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "invalid index type %x on %s/%s\n"
+msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "tanınmayan db seçeneği: \"%s\" yoksayıldı\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s geçersiz sayısal değer içeriyor, atlandı\n"
-
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s ya çok büyük ya da çok küçük 'long' değer içeriyor, atlandı\n"
+msgid "File %s: %s\n"
+msgstr "%s dosyası: %s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s ya çok büyük ya da çok küçük 'integer' değer içeriyor, atlandı\n"
+msgid "File %s is smaller than %u bytes\n"
+msgstr "%s dosyası %u bayttan küçük\n"
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
+#: rpmio/rpmio.c:298
+msgid "[none]"
msgstr ""
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(hata yok)"
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "ölümcül hata: "
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "hata: "
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "uyarı: "
-#: plugins/sepolicy.c:306
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
+msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: plugins/sepolicy.c:386
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
+msgid "lua script failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:416
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "invalid syntax in lua file: %s\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to fork process: %s\n"
+msgid "lua hook failed: %s\n"
msgstr ""
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "bellek ayrılırken (%u bayt) NULL döndü.\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "%s terminated abnormally\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
+msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
msgstr ""
-#: plugins/sepolicy.c:594
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to extract policy from %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:54
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== %d etkin %d boÅŸ\n"
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:62
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr "%3d>%*s(boÅŸ)"
+msgid "error creating fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:364
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr "%3d<%*s(boÅŸ)\n"
+msgid "error delete fifo %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:91
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "%%%s makrosunun gövdesi sonlandırılmamış\n"
+msgid "error delete directory %s: %m\n"
+msgstr ""
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "%%%s makrosunun ismi kuraldışı (%%define)\n"
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: Fwrite başarısız: %s\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:173
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "%%%s makrosunu seçenekleri sonlandırılmamış\n"
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread başarısız: %s\n"
-#: rpmio/macro.c:605
+#: sign/rpmgensig.c:177
#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr "%%%s makrosu boÅŸ\n"
+msgid "%s: Fflush failed: %s\n"
+msgstr ""
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr "%%%s makrosu genişletmede başarısız\n"
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr "Desteklenmeyen PGP imzası\n"
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr "%%%s makrosunun ismi kuraldışı (%%define)\n"
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "%%%s (%s) makrosu %d seviyenin altında kullanılmadı\n"
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr "%c seçeneği %s(%s) de anlaşılamadı\n"
-
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
+msgid "Could not exec %s: %s\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
-msgstr "%c sonlandırılmamış: %s\n"
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
-msgstr "Bir ayrıştırılamayan makro tarafından bir %% izlendi\n"
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:245
+#: sign/rpmgensig.c:302
#, c-format
-msgid "error creating temporary file %s: %m\n"
+msgid "Could not read from file %s: %s\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: sign/rpmgensig.c:312
#, c-format
-msgid "File %s: %s\n"
-msgstr "%s dosyası: %s\n"
+msgid "gpg exec failed (%d)\n"
+msgstr ""
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "%s dosyası %u bayttan küçük\n"
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "imzanın yazılması sırasında gpg hata verdi\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "imza okunamadı\n"
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
-#, c-format
-msgid "lua hook failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(hata yok)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "ölümcül hata: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "hata: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "uyarı: "
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "bellek ayrılırken (%u bayt) NULL döndü.\n"
-
-#: rpmio/rpmpgp.c:1008
+#: sign/rpmgensig.c:622
#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: Fwrite başarısız: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr ""
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
+msgid "%s: headerRead failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
-msgstr ""
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "RPM v3 paketleri imzalanamıyor\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
+msgid "%s already contains identical signature, skipping\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr ""
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: rpmWriteSignature başarısız: %s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: writeLead başarısız: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
+msgid "replacing %s failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
-msgstr "imzanın yazılması sırasında gpg hata verdi\n"
-
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "imza okunamadı\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: writeLead başarısız: %s\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
-msgstr "%s: rpmWriteSignature başarısız: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr ""
diff --git a/po/uk.po b/po/uk.po
index 71ec660a6..1f478f62a 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Yuri Chornoivan <yurchor@ukr.net>, 2011-2012.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011-2012,2014-2015
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-11-05 11:05+0000\n"
-"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation@linux.org.ua>\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Ukrainian (http://www.transifex.com/rpm-team/rpm/language/"
+"uk/)\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -45,517 +46,585 @@ msgstr "Цю програму можна вільно поширювати за
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "Ñпроба ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñƒ Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° --pipe зазнала невдачі: %m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "помилка Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ exec\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
msgstr "аргумент не є пакунком RPM\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° з пакунка\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "не вдалоÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ відкрити вміÑÑ‚: %s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "ОпитуваннÑ/Перевірка параметрів вибору пакунка:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "Опитати параметри (за допомогою -q або --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "Перевірити параметри (за допомогою -V або --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "Параметри вÑтановленнÑ/оновленнÑ/вилученнÑ:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "Загальні параметри Ð´Ð»Ñ Ð²ÑÑ–Ñ… режимів та виконуваних файлів rpm:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "за один раз можна виконувати лише один тип запиту або перевірки"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "неочікувані прапорці запитів"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "неочікуваний формат запитів"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "неочікуване джерело запиту"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "можна визначати лише один оÑновний режим"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "примуÑово можна виконувати лише вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ– оновленнÑ"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "змінювати Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² можна лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "не можна викориÑтовувати --prefix разом з --relocate або --excludepath"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr ""
-"--relocate Ñ– --excludepath можна викориÑтовувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ "
-"нових пакунків"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr ""
-"--prefix можна викориÑтовувати, лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… пакунків"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "аргументи параметра --prefix мають починатиÑÑ Ñимволом /"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-"--hash (-h) можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-"--percent можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr ""
-"можна вказувати лише один з параметрів, --excludedocs або --includedocs"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr ""
-"--justdb можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"параметри Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñкриптів можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ "
-"Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr ""
-"параметри Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ñ–Ð² можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ "
-"або Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-"--nodeps можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑтановленнÑ, Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ перевірки "
-"пакунків"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-"--test можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "аргументи параметра --root (-r) мають починатиÑÑ Ñимволом /"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "не вказано пакунків Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "не вказано пакунків Ð´Ð»Ñ Ð²ÑтановленнÑ"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "не вказано аргументів запиту"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "не вказано аргументів перевірки"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot вже вказано, ігноруємо %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr ""
"виконати команди аж до %prep (розпакувати коди Ñ– наклаÑти латки) з <файла "
"Ñпецифікації>"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<файл Ñпецифікації>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr ""
"виконати аж до команди %build (%prep, потім збираннÑ) з <файла Ñпецифікації>"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr ""
"виконати аж до команди %install (%prep, %build, потім вÑтановити) з <файла "
"Ñпецифікації>"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "перевірити розділ %files з <файла Ñпецифікації>"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "зібрати пакунки з кодами та бінарними файлами за <файлом Ñпецифікації>"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "зібрати за <файлом Ñпецифікації> лише пакунок з бінарними файлами"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "зібрати за <файлом Ñпецифікації> лише пакунок з кодами"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+"виконати команди аж до %prep (розпакувати коди Ñ– наклаÑти латки) з <пакунка "
+"з початковим кодом>"
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<пакунок з кодами>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+"виконати аж до команди %build (%prep, потім збираннÑ) з <пакунка з "
+"початковим кодом>"
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"виконати аж до команди %install (%prep, %build, потім вÑтановити) з <пакунка "
+"з кодами>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr "перевірити розділ %files з <пакунка з початковим кодом>"
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+"зібрати за <пакунком з кодами> пакунок з бінарними файлами та пакунок з "
+"початковим кодом"
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "зібрати за <пакунком з кодами> лише пакунок з бінарними файлами"
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+"зібрати за <пакунком з початковими кодами> лише пакунок з початковими кодами"
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr ""
"виконати команди аж до %prep (розпакувати коди Ñ– наклаÑти латки) з <архіву "
"tar>"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<архів tar>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "виконати аж до команди %build (%prep, потім збираннÑ) з <архіву tar>"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr ""
"виконати аж до команди %install (%prep, %build, потім вÑтановити) з <архіву "
"tar>"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "перевірити розділ %files з <архіву tar>"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "зібрати пакунки з кодами та бінарними файлами за <архівом tar>"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "зібрати за <архівом tar> лише пакунок з бінарними файлами"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "зібрати за <архівом tar> лише пакунок з кодами"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "зібрати за <пакунком з кодами> пакунок з бінарними файлами"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<пакунок з кодами>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr ""
-"виконати аж до команди %install (%prep, %build, потім вÑтановити) з <пакунка "
-"з кодами>"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "перевизначити кореневий каталог збираннÑ"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "запуÑтити Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ñƒ поточному каталозі"
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "вилучити ієрархію каталогу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ ExcludeArch: наÑтанови з файла Ñпецифікації"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ–Ð½Ñ†ÐµÐ²Ð¾Ð³Ð¾ автомата файлів"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "не виконувати жодного з кроків збираннÑ"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "не перевірÑти залежноÑÑ‚Ñ– збираннÑ"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
"Ñтворити заголовки пакунків, ÑуміÑні з (заÑтарілим) пакуваннÑм верÑій rpm 3"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr "не виконувати етапу %clean збираннÑ"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "не виконувати етапу %prep збираннÑ"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr "не виконувати етапу %check збираннÑ"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "не приймати Ñ€Ñдки перекладів з файла Ñпецифікації"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "вилучити коди піÑÐ»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "вилучити файл Ñпецифікації піÑÐ»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "перейти одразу до вказаного кроку (лише Ð´Ð»Ñ c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "перевизначити платформу призначеннÑ"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr ""
"Параметри Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· [ <файл spec> | <архів tar> | <пакунок з кодами> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Загальні параметри Ð´Ð»Ñ Ð²ÑÑ–Ñ… режимів та виконуваних файлів rpm:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "Ðе вдалоÑÑ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ залежноÑÑ‚Ñ–:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл spec %s: %s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ канал tar: %m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "У %s виÑвлено декілька файлів Ñпецифікації\n"
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл spec з %s\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ %s на %s: %m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані за допомогою stat з %s: %m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "Файл %s не є звичайним файлом.\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "ЗдаєтьÑÑ, файл %s не Ñ” файлом spec.\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "Ð—Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¸Ñ… платформ: %s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "Ð—Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "аргументи параметра --root (-r) мають починатиÑÑ Ñимволом /"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "ініціалізувати базу даних"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr ""
"перебудувати зворотні ÑпиÑки бази даних на оÑнові заголовків вÑтановлених "
"пакунків"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "перевірити файли бази даних"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "екÑпортувати базу даних до ÑпиÑку заголовків stdout"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "імпортувати базу даних зі ÑпиÑку заголовків stdin"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "Параметри бази даних:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "можна визначати лише один оÑновний режим"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "перевірити підпиÑи пакунка"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "імпортувати захищених відкритий ключ"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr "не імпортувати, але повідомити, працюватиме чи ні"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "показати ÑпиÑок ключів зі Ñховища ключів RPM"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "Параметри Ñховища ключів:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "не вказано жодних параметрів"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "ОпитуваннÑ/Перевірка параметрів вибору пакунка:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Опитати параметри (за допомогою -q або --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Перевірити параметри (за допомогою -V або --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Параметри вÑтановленнÑ/оновленнÑ/вилученнÑ:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "за один раз можна виконувати лише один тип запиту або перевірки"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "неочікувані прапорці запитів"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "неочікуваний формат запитів"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "неочікуване джерело запиту"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "примуÑово можна виконувати лише вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ– оновленнÑ"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "змінювати Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² можна лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "не можна викориÑтовувати --prefix разом з --relocate або --excludepath"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"--relocate Ñ– --excludepath можна викориÑтовувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ "
+"нових пакунків"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr ""
+"--prefix можна викориÑтовувати, лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… пакунків"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "аргументи параметра --prefix мають починатиÑÑ Ñимволом /"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"--hash (-h) можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"--percent можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr ""
+"можна вказувати лише один з параметрів, --excludedocs або --includedocs"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"--justdb можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"параметри Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñкриптів можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ "
+"Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"параметри Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ñ‡Ñ–Ð² можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ "
+"або Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+"--nodeps можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑтановленнÑ, Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ перевірки "
+"пакунків"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"--test можна вказувати лише під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "не вказано пакунків Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "не вказано пакунків Ð´Ð»Ñ Ð²ÑтановленнÑ"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "не вказано аргументів запиту"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "не вказано аргументів перевірки"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "підпиÑати пакунки"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "підпиÑати пакунки (тотожне до --addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "вилучити підпиÑи пакунка"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "Параметри підпиÑуваннÑ:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "Вам Ñлід вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"%%_gpg_name\" у вашому файлі макроÑу\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "Введіть пароль: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "Пароль підтверджено.\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-"Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ð¹Ñ‚Ð¸ перевірку паролем або Ñтрок дії ключа gpg вичерпано\n"
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "вивеÑти оброблені дані файлів spec до stdout"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "опитати файли spec"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "обробити бінарні rpm, Ñтворені на оÑнові spec (типово)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "обробити srpm, Ñтворені на оÑнові spec"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "викориÑтовувати вказаний нижче формат запиту"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Параметри spec:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "не вказано аргументів обробки"
@@ -564,32 +633,37 @@ msgstr "не вказано аргументів обробки"
msgid "Unable to open temp file: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл тимчаÑових даних: %s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ потік даних: %s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "ВиконаннÑ(%s): %s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s (%s): %s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¾Ð³Ð¾ Ñкрипту %s (%s)\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "Отримано Ñтан виходу з помилкою від %s (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -599,237 +673,317 @@ msgstr ""
"\n"
"Помилки Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ RPM:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "ÑинтакÑична помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ ==\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "ÑинтакÑична помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ &&\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "ÑинтакÑична помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ ||\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "помилка обробки у виразі\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "незакрита дужка (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- лише Ð´Ð»Ñ Ñ‡Ð¸Ñел\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! лише Ð´Ð»Ñ Ñ‡Ð¸Ñел\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "типи мають збігатиÑÑ\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / не підтримуєтьÑÑ Ð´Ð»Ñ Ñ€Ñдків\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- не підтримуєтьÑÑ Ð´Ð»Ñ Ñ€Ñдків\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& Ñ– || не підтримуютьÑÑ Ð´Ð»Ñ Ñ€Ñдків\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "ÑинтакÑична помилка у виразі\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "Ðе виÑтачає «(» у %s %s\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "Ðе виÑтачає «)» у %s(%s\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "Ðекоректний елемент %s: %s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "Ðе виÑтачає %s у %s %s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "За %s() вказано непробільне значеннÑ: %s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "Помилковий ÑинтакÑиÑ: %s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "Помилкові права доÑтупу: %s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "Помилкові права доÑтупу до каталогу: %s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "Ðезвичайна довжина locale: «%s» у %%lang(%s)\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ locale %s у %%lang(%s)\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "Ðекоректний мандат: %s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "Підтримку мандатів на файли не було зібрано\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "Ðазва файла має починатиÑÑ Ð· «/»: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
"Ðевідомий алгоритм обчиÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¾Ñ— Ñуми файла %u, буде викориÑтано "
"MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "Файл вказано двічі: %s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñимволічного поÑÐ¸Ð»Ð°Ð½Ð½Ñ %s ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "Символічне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·ÑƒÑ” на BuildRoot: %s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "ШлÑÑ… поза межами кореневої теки збираннÑ: %s\n"
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "Ðе знайдено каталогу: %s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "Файл не знайдено: %s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Ðе Ñ” каталогом: %s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ невідомий теґ (%d).\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s: невдала Ñпроба Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа.\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: не є захищеним відкритим ключем.\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s: не вдалоÑÑ Ð·Ð°ÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "не вдалоÑÑ Ñтворити каталог"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "Ðазва файла має починатиÑÑ Ð· «/»: %s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "Ðе можна викориÑтовувати glob %%dev: %s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "Каталог не знайдено glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "У glob файла не виÑвлено: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %%files %s: %m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "Ñ€Ñдок: %s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "Порожній файл %%files %s\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° %%files %s: %m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr "некоректний формат каталогу документації %s: %s\n"
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "У glob файла не виÑвлено: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr "Ðе можна змішувати Ñпеціальний %s з іншими формами: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr "Декілька файлів у одному Ñ€Ñдку: %s\n"
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "Помилковий файл: %s: %s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "Помилкові дані щодо влаÑника/групи: %s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "Пошук незапакованих файлів: %s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -838,553 +992,612 @@ msgstr ""
"ВиÑвлено вÑтановлені (але не запаковані) файли:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "Обробка файлів: %s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
"Ðрхітектура виконуваних файлів (%d) не збігаєтьÑÑ Ð· архітектурою пакунка "
"(%d).\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "ВиÑвлено залежні від архітектури бінарні файли у пакунку noarch\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr "Ñпроба ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ зазнала невдачі на файлі %s: %s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr "Ñпроба ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ зазнала невдачі: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s: %s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: Ñ€Ñдок: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð²ÐµÑти до канонічної форми назву вузла: %s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати вміÑÑ‚ до %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ з %s: %s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð²ÐµÑти до канонічної форми назву вузла: %s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr "Ðевідомий ÑпоÑіб ÑтиÑÐ½ÐµÐ½Ð½Ñ Ð²Ð¼Ñ–Ñту: %s\n"
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "Ðе вдалоÑÑ Ñтворити незмінну облаÑÑ‚ÑŒ заголовка.\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл тимчаÑових даних.\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ файлі %s: %s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати тимчаÑовий заголовок\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл правил: %s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "Помилкові дані CSA\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ заголовок підпиÑу.\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s: %s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати пакунок: %s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ ціль підпиÑÑƒÐ²Ð°Ð½Ð½Ñ %s: %s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок з %s: %s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати заголовок до %s: %s\n"
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "ЗапиÑано: %s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Â«%s»:\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "Спроба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Â«%s» зазнала невдачі.\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
msgstr "Спроба перевірки пакунка «%s» зазнала невдачі.\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
msgstr "Ðе вдалоÑÑ Ñтворити назву файла виведених даних Ð´Ð»Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ° %s: %s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "не вдалоÑÑ Ñтворити %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "Ñ€Ñдок %d: друге %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr "зайва дата у %%changelog: %s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "запиÑи %%changelog мають починатиÑÑ Ð½Ð° *\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "неповний Ð·Ð°Ð¿Ð¸Ñ %%changelog\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "помилкова дата у %%changelog: %s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog вказано не у порÑдку ÑÐ¿Ð°Ð´Ð°Ð½Ð½Ñ Ð´Ð°Ñ‚\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "у %%changelog не вказано імені\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "у %%changelog не вказано опиÑу\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "Ñ€Ñдок %d: другий Ð·Ð°Ð¿Ð¸Ñ %%changelog\n"
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "Ñ€Ñдок %d: помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ %%description: %s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "Ñ€Ñдок %d: помилковий параметр %s: %s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "Ñ€Ñдок %d: забагато назв: %s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "Ñ€Ñдок %d: пакунка не Ñ–Ñнує: %s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "Ñ€Ñдок %d: повторний опиÑ\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "Ñ€Ñдок %d: помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ %%files: %s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "Ñ€Ñдок %d: помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ %%policies: %s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби обробки Ð¿Ð¾Ð»Ñ Ñ‚ÐµÒ‘Ñƒ: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "Ñ€Ñдок %d: помилкова кількіÑÑ‚ÑŒ: %s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr "Ñ€Ñдок %d: помилкова кількіÑÑ‚ÑŒ no%s: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "Ñ€Ñдок %d: помилкова кількіÑÑ‚ÑŒ %s: %s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d визначено декілька разів\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr "Ð—Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ %s до %s\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "Виключено архітектуру: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "Ðе включено архітектуру: %s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "Виключено ОС: %s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "Ðе включено ОС: %s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
msgstr "У пакунку має бути поле %s: %s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів %s у пакунку: %s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ піктограму %s: %s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ піктограму %s: %s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "Ðевідомий тип піктограми: %s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "Ñ€Ñдок %d: у тезі має бути лише один елемент: %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "Ñ€Ñдок %d: некоректний Ñимвол «%c» у: %s\n"
+msgid "line %d: %s in: %s\n"
+msgstr "Ñ€Ñдок %d: %s у %s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "Ñ€Ñдок %d: некоректний Ñимвол у: %s\n"
+msgid "%s in: %s\n"
+msgstr "%s у %s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
-msgstr "Ñ€Ñдок %d: некоректна поÑлідовніÑÑ‚ÑŒ «..» у: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "Ðекоректний Ñимвол «%c» (0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "Заборонена поÑлідовніÑÑ‚ÑŒ «..»"
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "Ñ€Ñдок %d: помилковий теґ: %s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "Ñ€Ñдок %d: порожній теґ: %s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "Ñ€Ñдок %d: префікÑи не повинні завершуватиÑÑ Ð½Ð° «/»: %s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "Ñ€Ñдок %d: Ð·Ð°Ð¿Ð¸Ñ Docdir має починатиÑÑ Ð· «/»: %s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr "Ñ€Ñдок %d: у полі Epoch має бути вказано ціле невід’ємне чиÑло: %s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "Ñ€Ñдок %d: помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s: Ñпецифікатори: %s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "Ñ€Ñдок %d: помилковий формат BuildArchitecture: %s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr "Ñ€Ñдок %d: передбачено підтримку лише підпакунків типу noarch: %s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: зайвий теґ %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr "Ñ€Ñдок %d: %s вважаєтьÑÑ Ð·Ð°Ñтарілим: %s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
msgstr "Помилкова ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ°: %s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "Пакунок вже Ñ–Ñнує: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "Ñ€Ñдок %d: невідомий теґ: %s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr "%%{buildroot} не може бути порожнім\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr "%%{buildroot} не може приймати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«/»\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "Помилкове джерело: %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "Латки з номером %u не Ñ–Ñнує\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr "%%patch без відповідного теґу \"Patch:\"\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "Джерела з номером %u не Ñ–Ñнує\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "У файлі spec немає теґу \"Source:\"\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ %%setup: %s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "Ñ€Ñдок %d: помилковий аргумент %%setup: %s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "Ñ€Ñдок %d: помилковий параметр %%setup %s: %s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "Ðекоректний номер латки %s: %s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "Ñ€Ñдок %d: друге %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr "запиÑи залежноÑтей мають починатиÑÑ Ð· букви, чиÑла, «_» або «/»"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr "не можна викориÑтовувати верÑÑ–Ñ— у назвах файлів"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr "Слід вказати верÑÑ–ÑŽ"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу розширені залежноÑÑ‚Ñ– заборонено"
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr "некоректна залежніÑÑ‚ÑŒ"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Слід вказати верÑÑ–ÑŽ"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "У файлових перемикачах можна викориÑтовувати лише абÑолютні шлÑхи"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr "Перемикач Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ Ñамого пакунка вже визначено у файлі Ñпецифікації"
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr "Ñ€Ñдок %d: %s: %s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "Ñ€Ñдок %d: у запиÑах перемикачів має бути --: %s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "Ñ€Ñдок %d: помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ %s: %s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr ""
"Ñ€Ñдок %d: Ð·Ð°Ð¿Ð¸Ñ Ð²Ð±ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñкрипту має завершуватиÑÑ Ñимволом «>»: %s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "Ñ€Ñдок %d: програма Ñкрипту має починатиÑÑ Ð· Ñимволу «/»: %s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+"Ñ€Ñдок %d: пріоритетніÑÑ‚ÑŒ можна вÑтановлювати лише Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ… перемикачів: "
+"%s\n"
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "Ñ€Ñдок %d: друге %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "Ñ€Ñдок %d: непідтримуваний вбудований Ñкрипт: %s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
"Ñ€Ñдок %d: у перемикачах не можна викориÑтовувати аргументи інтерпретатора: "
"%s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "Ñ€Ñдок %d: %s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ð¾ у коментарі у Ñ€Ñдку %d: %s\n"
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s: %s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr "%s:%d: мало бути вказано аргумент Ð´Ð»Ñ %s\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr "Ñ€Ñдок %d: незавершена команда %%if\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr "Ñ€Ñдок %d: незавершений Ð¼Ð°ÐºÑ€Ð¾Ñ Ð°Ð±Ð¾ помилкове Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ€Ñдка\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr "%s:%d: помилкова умова %%if\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d: вказано %%else без %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d: вказано %%endif без %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr "%s:%d: помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукції %%include\n"
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "у ÑиÑтемі не передбачено підтримки ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ %s\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Пакунок %s: некоректне ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ %s у %s: %s - %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "Ðе знайдено ÑуміÑних архітектур Ð´Ð»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
msgstr "У пакунка немає Ð¿Ð¾Ð»Ñ %%description: %s\n"
@@ -1457,453 +1670,567 @@ msgstr "Забагато аргументів у Ñ€Ñдку: %s\n"
msgid "Processing policies: %s\n"
msgstr "Обробка правил: %s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr "Ігноруємо некоректний формальний вираз %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "Ðе вдалоÑÑ Ñтворити канал Ð´Ð»Ñ %s: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ %s: %s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "Помилка %s: %x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати вÑÑ– дані до %s: %s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "Ðевдала Ñпроба Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %s у формат long integer.\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr "Порожній клаÑифікатор файла\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "Ðе вказано атрибутів файла\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "помилка magic_open(0x%x): %s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "помилка magic_load: %s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "Спроба Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» зазнала невдачі: режим %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "Пошук %s: %s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr ""
"Ñпроба Ð¾Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° Ñпецифікації %s зазнала невдачі, не вдалоÑÑ "
"обробити\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(помилка 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s помилка (%d), повідомлено %s: %s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ magic"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s помилка (%d): %s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "Помилковий/Ðепридатний до Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "невідомий параметр db: «%s» проігноровано.\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "Розмір заголовка занадто великий"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s має некоректне чиÑлове значеннÑ, пропущено\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
-msgstr "Файл Ñ” занадто великим Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²ÑƒÐ²Ð°Ð½Ð½Ñ"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr ""
+"%s має занадто велике або занадто мале довге ціле значеннÑ, пропущено\n"
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "Ðевідомий тип файла"
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s має занадто велике або занадто мале ціле значеннÑ, пропущено\n"
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "Ðе виÑтачає жорÑткого поÑиланнÑ"
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ %s на %s/%s\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "ÐевідповідніÑÑ‚ÑŒ контрольних Ñум"
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "Ñпільний"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "екÑклюзивний"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "Файла архіву не вказано у заголовку"
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "некоректний тип покажчика %x у %s/%s\n"
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " помилка - "
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "помилка(%d) Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів «%s» з покажчика %s: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "помилка (%d) під Ñ‡Ð°Ñ Ñпроби Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу «%s» до %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "помилка (%d) під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу «%s» з %s\n"
-#: lib/depends.c:68
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "помилка (%d) під Ñ‡Ð°Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу заголовка â„–%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "помилка (%d) під Ñ‡Ð°Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу заголовка â„–%d\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "помилка (%d) розподілу нового екземплÑра пакунка\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
"%s належить до типу Delta RPM, його не можна вÑтановлювати безпоÑередньо\n"
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr "Ðепідтримуваний вміÑÑ‚ (%s) у пакунку %s\n"
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
msgstr "пакунок %s вже було додано, пропуÑкаємо %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
msgstr "пакунок %s вже було додано, замінюємо на %s\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(не є бінарним об’єктом)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(не Ñ” чиÑлом)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(не Ñ” Ñ€Ñдком)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(некоректний тип)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(не є base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(некоректний тип)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(не є бінарним об’єктом)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(некоректний тип xml)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(не Ñ” підпиÑом OpenPGP)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "Ðекоректна дата %u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "звичайний"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "замінено"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "не вÑтановлено"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "мережевий"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "помилковий колір"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "немає"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(невідомо)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(не Ñ” Ñ€Ñдком)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "запиÑу кориÑтувача %s не Ñ–Ñнує, — викориÑтовуємо root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "запиÑу групи %s не Ñ–Ñнує, — викориÑтовуємо root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s збережено Ñк %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s Ñтворено Ñк %s\n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr "%s %s: Ñпроба Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдачі: %s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr "каталог"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr "файл"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "пропущено %s %s з непридатним Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ підпиÑом\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "пропущено %s з непридатним Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ підпиÑом\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°: ПОМИЛКÐ"
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "теґ[%d]: ПОМИЛКÐ, теґ %d тип %d Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d лічильник %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr "мітка облаÑÑ‚Ñ–: BAD, мітка %d тип %d відÑтуп %d кількіÑÑ‚ÑŒ %d"
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "SHA1 заголовка: ПОМИЛКÐ, не Ñ” шіÑтнадцÑтковою\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð´Ñ–Ð»Ñнки: ПОМИЛКÐ, теґ %d тип %d Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d к-Ñ‚ÑŒ %d"
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "RSA заголовка: ПОМИЛКÐ, не Ñ” двійковою\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr "залишок ділÑнки: ПОМИЛКÐ, теґ %d тип %d Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d к-Ñ‚ÑŒ %d"
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "DSA заголовка: ПОМИЛКÐ, не Ñ” двійковою\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "розмір бінарного об’єкта (%d): ПОМИЛКÐ, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
-msgstr "мітка облаÑÑ‚Ñ–: BAD, мітка %d тип %d відÑтуп %d кількіÑÑ‚ÑŒ %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr "розмір заголовка(%d): ПОМИЛКÐ, read повернуто %d"
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "magic заголовка: ПОМИЛКÐ"
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð´Ñ–Ð»Ñнки: ПОМИЛКÐ, теґ %d тип %d Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d лічильник %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr "теґи заголовка: ПОМИЛКÐ, кількіÑÑ‚ÑŒ теґів(%d) перевищує макÑимальну"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "залишок ділÑнки: ПОМИЛКÐ, теґ %d тип %d Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d лічильник %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr "дані заголовка: ПОМИЛКÐ, кількіÑÑ‚ÑŒ байтів(%d) перевищує макÑимальну"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "розмір ділÑнки: ПОМИЛКÐ, ril(%d) > il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr "бінарний елемент заголовка(%zd): ПОМИЛКÐ, read повернуто %d"
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "розмір заголовка(%d): ПОМИЛКÐ, read повернуто %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "pad sigh (%zd): ПОМИЛКÐ, прочитано %zd байтів"
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "magic заголовка: ПОМИЛКÐ\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "теґи заголовка: ПОМИЛКÐ, кількіÑÑ‚ÑŒ теґів(%d) перевищує макÑимальну\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr "розмір бінарного об’єкта (%d): ПОМИЛКÐ, 8 + 16 * il(%d) + dl(%d)"
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "некоректна ширина полÑ"
-#: lib/package.c:442
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "дані заголовка: ПОМИЛКÐ, кількіÑÑ‚ÑŒ байтів(%d) перевищує макÑимальну\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
-msgstr "бінарний елемент заголовка(%zd): ПОМИЛКÐ, read повернуто %d\n"
+msgid "missing } after %%{"
+msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°: ПОМИЛКÐ\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "порожній формат теґу"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s: помилка rpmReadSignature: %s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° теґу"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s: Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð½ÐµÐ´Ð¾Ñтупний\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s: помилка headerRead: %s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "не виÑтачає ] у кінці запиÑу маÑиву"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "неочікувана ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "неочікувана }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "не виÑтачає ? у виразі"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "у виразі піÑÐ»Ñ ? Ñлід вказати {"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "у виразі не виÑтачає }"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": піÑÐ»Ñ ? не виÑтачає підвиразу"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "у виразі піÑÐ»Ñ : Ñлід вказати {"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "вираз має завершуватиÑÑ Ñимволом |"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "ітератор маÑиву викориÑтано з двома маÑивами різної розмірноÑÑ‚Ñ–"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s: помилка fread: %s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
+"%s: помилка: вказано декілька параметрів --pipe (неÑуміÑні альтернативні "
+"назви popt?)\n"
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "попередньо визначити Ð´Ð»Ñ ÐœÐКРОСу Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð’Ð˜Ð ÐЗ"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "'ÐœÐКРОС ВИРÐЗ'"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "визначити ÐœÐКРОС зі значеннÑм ВИРÐЗ"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "ÑкаÑувати Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ MACRO"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MACRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "вивеÑти розгорнуте Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÐºÑ€Ð¾Ñу ВИРÐЗ"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "'ВИРÐЗ'"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "читати <ФÐЙЛ:...> заміÑÑ‚ÑŒ типових файлів"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<ФÐЙЛ:...>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "не вмикати жодних додатків"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
msgstr "не перевірÑти контрольні Ñуми пакунків"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "не перевірÑти заголовки, отримані з бази даних"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "не перевірÑти підпиÑи пакунків"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "вивеÑти stdout у CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "викориÑтовувати КОРІÐЬ Ñк каталог найвищого рівнÑ"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "КОРІÐЬ"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "викориÑтовувати базу даних у КÐТÐЛОЗІ"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "КÐТÐЛОГ"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "показати відомі теґи запитів"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "показати оÑтаточний rpmrc Ñ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÐºÑ€Ð¾Ñів"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "обмежити Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "вивеÑти докладні дані"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "вивеÑти викориÑтану верÑÑ–ÑŽ rpm"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ–Ð½Ñ†ÐµÐ²Ð¾Ð³Ð¾ автомата файлів вміÑту"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "Ð·Ð½ÐµÐ²Ð°Ð´Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð²Ð¾Ð´Ñƒ-виводу rpmio"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s: помилкове Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– параметрів (%d)\n"
@@ -1924,13 +2251,13 @@ msgstr "запиÑи переміщень повинні міÑтити ="
msgid "relocations must have a / following the ="
msgstr "у запиÑах переміщень має бути /, за Ñким Ñлід вказати ="
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr ""
"вÑтановити вÑÑ– файли, навіть файли налаштувань, Ñкі у іншому разі можна було "
"б пропуÑтити"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
@@ -1938,153 +2265,163 @@ msgstr ""
"вилучити вÑÑ– пакунки, що відповідають ключу <пакунок> (зазвичай, Ñкщо "
"<пакунок> вказує на декілька пакунків, буде повідомлено про помилку)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
msgstr "переміÑтити файли у непридатному до Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑƒ"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "вивеÑти циклічні залежноÑÑ‚Ñ– у попередженні"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "вилучити пакунок"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<пакунок>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "не вÑтановлювати файли налаштувань"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "не вÑтановлювати документацію"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "пропуÑтити файли, назви Ñких починаютьÑÑ Ð½Ð° <шлÑÑ…> "
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<шлÑÑ…>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ --replacepkgs --replacefiles"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "оновити пакунки, Ñкщо Ñ—Ñ… вже вÑтановлено"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<файл пакунка>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
msgstr ""
"виводити Ñимволи решіток Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñтупу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ (варто "
"викориÑтовувати разом з -v)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "не перевірÑти архітектуру пакунка"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "не перевірÑти операційну ÑиÑтему пакунка"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "не перевірÑти наÑвніÑÑ‚ÑŒ міÑÑ†Ñ Ð½Ð° диÑку перед вÑтановленнÑм"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "вÑтановити документацію"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "вÑтановити пакунки"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "оновити базу даних, але не вноÑити змін до файлової ÑиÑтеми"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "не перевірÑти залежноÑтей пакунків"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "не перевірÑти контрольних Ñум файлів"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "не перевірÑти контрольних Ñум файлів (заÑтаріле)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "не вÑтановлювати контекÑтів безпеки файлів"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "не змінювати порÑдок пакунків Ð´Ð»Ñ Ð·Ð°Ð´Ð¾Ð²Ð¾Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾Ñтей"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
msgstr "не виконувати допоміжних Ñкриптів пакунка"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "не виконувати допоміжного Ñкрипту %%pre (Ñкщо такий вказано)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "не виконувати допоміжного Ñкрипту %%post (Ñкщо такий вказано)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "не виконувати допоміжного Ñкрипту %%preun (Ñкщо такий вказано)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "не виконувати допоміжного Ñкрипту %%postun (Ñкщо такий вказано)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "не виконувати допоміжного Ñкрипту %%pretrans (Ñкщо такий вказано)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "не виконувати допоміжного Ñкрипту %%posttrans (Ñкщо такий вказано)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
msgstr "не виконувати жодних допоміжних Ñкриптів, Ñкі ÑтоÑуютьÑÑ Ñ†ÑŒÐ¾Ð³Ð¾ пакунка"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "не виконувати жодних допоміжних Ñкриптів %%triggerprein"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "не виконувати жодних допоміжних Ñкриптів %%triggerin"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "не виконувати жодних допоміжних Ñкриптів %%triggerun"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "не виконувати жодних допоміжних Ñкриптів %%triggerpostun"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr "не виконувати жодних дій зі збірками"
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
@@ -2092,370 +2429,408 @@ msgstr ""
"оновити до Ñтарішої верÑÑ–Ñ— пакунка (--force у командах Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ” "
"таку операцію автоматично)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "виводити дані щодо поÑтупу вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñƒ відÑотках"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
msgstr "переміÑтити пакунок до <каталогу>, Ñкщо пакунок можна переміщувати"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<каталог>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "переміÑтити файли з каталогу <Ñтарий> до каталогу <новий>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<Ñтарий>=<новий>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "ігнорувати конфлікти файлів між пакунками"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "перевÑтановити, Ñкщо пакунок вже вÑтановлено"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "не вÑтановлювати, лише повідомити, чи буде працювати"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "оновити пакунки"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "перевÑтановити пакунки"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "опитати/перевірити вÑÑ– пакунки"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "режим перевірки підпиÑів"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "опитати/перевірити пакунки, до Ñких належить файл"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "опитати/перевірити пакунки з групи"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "опитати/перевірити файл пакунка"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
msgstr "опитати/перевірити пакунки за ідентифікатором пакунка"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
msgstr "опитати/перевірити пакунки за ідентифікатором заголовка"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "режим Ð¾Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ rpm"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "опитати/перевірити екземплÑÑ€ заголовка"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
msgstr "опитати/перевірити пакунки з операції зі вÑтановленнÑ"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
msgstr "опитати пакунки, Ñкі пов’Ñзано з пакунком"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "режим перевірки rpm"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
msgstr "опитати/перевірити пакунки, Ñким потрібні залежні пакунки"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
msgstr "опитати/перевірити пакунки, Ñкі надають файли залежноÑтей"
-#: lib/poptQV.c:98
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "опитати або перевірити пакунки, Ñкі рекомендують залежніÑÑ‚ÑŒ"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "опитати або перевірити пакунки, Ñкі пропонують залежніÑÑ‚ÑŒ"
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr "опитати/перевірити пакунки, Ñкі доповнюють залежніÑÑ‚ÑŒ"
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr "опитати/перевірити пакунки, Ñкі покращують роботу залежноÑÑ‚Ñ–"
+
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "не збирати аргументи разом"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "не оброблÑти не запаковані файли Ñк маніфеÑти"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "показати ÑпиÑок вÑÑ–Ñ… файлів налаштувань"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "показати ÑпиÑок вÑÑ–Ñ… файлів документації"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "показати ÑпиÑок вÑÑ–Ñ… файлів документації"
+msgstr "показати ÑпиÑок уÑÑ–Ñ… файлів ліцензуваннÑ"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "показати ÑпиÑок уÑÑ–Ñ… файлів ліцензуваннÑ"
+
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "Ñтворити дамп оÑновних даних щодо файлів"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
msgstr "показати ÑпиÑок файлів у пакунку"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "пропуÑкати файли %%ghost"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "пропуÑкати файли %%ghost"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "показати Ñтан файлів зі ÑпиÑку"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "не перевірÑти розмірів файлів"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "не перевірÑти шлÑхи Ñимволічних поÑилань на файли"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "не перевірÑти влаÑників файлів"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "не перевірÑти групу влаÑників файлів"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "не перевірÑти Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ файлів"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "не перевірÑти права доÑтупу до файлів"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "не перевірÑти можливоÑÑ‚Ñ– файлів"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "не перевірÑти контекÑти безпеки файла"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "не перевірÑти можливоÑÑ‚Ñ– файлів"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "не перевірÑти файли у пакунку"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "не перевірÑти залежноÑÑ‚Ñ– пакунків"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "не виконувати Ñкриптів перевірки"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr "Ð”Ð»Ñ %s можливоÑÑ‚Ñ– rpmlib Ñ” недоÑтатніми:\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "Ñлід було вказати пакунок з кодами, вказано бінарний пакунок\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "у пакунку з кодами не міÑтитьÑÑ Ñ„Ð°Ð¹Ð»Ð° .spec\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "Ñпроба Ñ€Ð¾Ð·Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾%s%s: %s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " на файлі "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "помилка дії %s на файлі %s: %s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "помилка дії %s: %s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "помилковий формат: %s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(не міÑтить файлів)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "звичайний "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "замінено "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "не вÑтановлено "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "мережевий "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "помилк. колір "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(не має Ñтану)"
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(невідомий %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
msgstr "у пакунку немає ÑпиÑків влаÑника/групи файлів\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
msgstr ""
"у пакунку немає ні ÑпиÑку влаÑників файлів, ні ÑпиÑку ідентифікаторів\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "у групі %s не міÑтитьÑÑ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾ пакунка\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
msgstr "жоден з пакунків не перемикає %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "помилковий формат %s: %s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
msgstr "жодне з пакунків не відповідає ключу %s: %s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
msgstr "жоден з пакунків не потребує %s\n"
-#: lib/query.c:392
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "жоден із пакунків не рекомендує %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "жоден із пакунків не пропонує %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "жоден із пакунків не доповнює %s\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "жоден із пакунків не розширює можливоÑÑ‚Ñ– %s\n"
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
msgstr "жоден з пакунків не надає %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "файл %s: %s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
msgstr "файл %s не належить до жодного з пакунків\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
msgstr "некоректний номер пакунка: %s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ %u\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "пакунок %s не вÑтановлено\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "невідомий теґ: «%s»\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr "%s: Ñпроба Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° %d завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾.\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr "%s: ключ %d не є захищеним відкритим ключем.\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s: помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ(%d).\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
-msgstr "%s: помилка headerRead: %s\n"
+msgid "Fread failed: %s"
+msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-"%s: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ незмінну ділÑнку заголовка. Пакунок пошкоджено?\n"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "ПОМИЛКÐ"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "Гаразд"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (ÐЕ ВИСТÐЧÐЄ КЛЮЧІВ:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (ÐЕÐÐДІЙÐІ КЛЮЧІ:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s: помилка відкриттÑ: %s\n"
@@ -2480,218 +2855,450 @@ msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ кореневий каталог: %m
msgid "Unable to restore root directory: %m\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ кореневий каталог: %m\n"
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %d пропущених покажчиків, будь лаÑка, зачекайте…\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ покажчик %s за допомогою %s — %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "не було вÑтановлено шлÑху dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: пропущено"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "помилка (%d) Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу â„–%d до %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: помилка regexec: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: помилка regcomp: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: пропущено"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: отримано пошкоджений заголовок №%u — пропущено.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок за адреÑою 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "не було вÑтановлено шлÑху dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "не вдалоÑÑ Ñтворити каталог %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "заголовок №%u у базі даних є помилковим — пропущено.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð· початковим розташуваннÑм у %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ базу даних: початкова база даних залишаєтьÑÑ Ð½Ð° "
+"міÑці\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "не вдалоÑÑ Ð·Ð°Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñтару базу даних новою!\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "ÐІ "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "ТÐК"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:, Provides: Ñ– Obsoletes: підтримка верÑій залежноÑтей."
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
"назви файлів збережено Ñк кортеж (dirName,baseName,dirIndex), а не Ñк шлÑÑ…."
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
msgstr "вміÑÑ‚ пакунка може бути ÑтиÑнуто за допомогою bzip2."
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr "вміÑÑ‚ пакунка може бути ÑтиÑнуто за допомогою xz."
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr "вміÑÑ‚ пакунка може бути ÑтиÑнуто за допомогою lzma."
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
msgstr "файли вміÑту пакунка мають Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Â«./»."
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
msgstr "назва-верÑÑ–Ñ-випуÑк пакунка не надаютьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾."
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "теґи заголовка завжди впорÑдковуютьÑÑ Ð¿Ñ–ÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ."
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
"інтерпретатор допоміжних Ñкриптів може викориÑтовувати аргументи з заголовка."
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "підтримуєтьÑÑ Ñ‡Ð°Ñткове вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ жорÑтких поÑилань пакунка."
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
msgstr ""
"допоміжні Ñкрипти пакунка можуть отримувати доÑтуп до бази даних rpm під Ñ‡Ð°Ñ "
"вÑтановленнÑ."
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "вбудована підтримка Ñкриптів lua."
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
"алгоритм обчиÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¸Ñ… Ñум може бути вибрано Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ з пакунків "
"окремо"
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr "підтримка мандатів файлів POSIX.1e"
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr "допоміжні Ñкрипти пакунка може бути розширено під Ñ‡Ð°Ñ Ð²ÑтановленнÑ."
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr "порівнÑннÑм залежноÑтей підтримуєтьÑÑ Ð·Ð°Ð¿Ð¸Ñ Ð²ÐµÑ€Ñій з тильдою."
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "підтримка файлів, розмір Ñких перевищує 4 ГБ"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "підтримка розширених залежноÑтей."
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "Ðевідома Ð´Ñ–Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— залежноÑÑ‚Ñ–, «%.*s»"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Потрібна назва"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "Розширена залежніÑÑ‚ÑŒ не починаєтьÑÑ Ð· «(»"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "Пропущено аргумент до дії із розширеною залежніÑÑ‚ÑŽ"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð° залежніÑÑ‚ÑŒ"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "Ðезавершений Ð·Ð°Ð¿Ð¸Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ñ— залежноÑÑ‚Ñ–: %s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr "Ðе можна Ñтворювати ланцюжок із різних дій"
+
+#: lib/rpmds.c:1564
+#, fuzzy
+msgid "Can only chain and/or/with ops"
+msgstr "Ланцюжок можна Ñтворювати лише з дій AND Ñ– OR"
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr "Зайві дані піÑÐ»Ñ Ð·Ð°Ð¿Ð¸Ñу розширеної залежноÑÑ‚Ñ–"
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Помилковий/Ðепридатний до Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Розмір заголовка занадто великий"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Файл Ñ” занадто великим Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²ÑƒÐ²Ð°Ð½Ð½Ñ"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Ðевідомий тип файла"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Ðе виÑтачає файлів"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "ÐевідповідніÑÑ‚ÑŒ контрольних Ñум"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Файла архіву не вказано у заголовку"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " помилка - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (помилка 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %s: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr "Перевищено рівень макÑимальної рекурÑÑ–Ñ— у маніфеÑÑ‚Ñ–: %s\n"
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr "%s: не Ñ” пакунком rpm (або маніфеÑтом пакунка)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ вÑтановленнÑ…\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "Ð¡Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ вилученнÑ…\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "Підготовка..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "ÐŸÑ€Ð¸Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð²â€¦"
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "Помилкові залежноÑÑ‚Ñ–:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
msgstr "%s: не Ñ” пакунком rpm (або маніфеÑтом пакунка): %s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s не можна вÑтановити\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr "пропуÑкаємо %s — помилка отриманнÑ\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
msgstr "пакунок %s не придатний до переміщеннÑ\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файла %s\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
msgstr "«%s» задає декілька пакунків:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s: %s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "не є пакунком rpm"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "некоректний тип підпиÑу"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "непідтримувана верÑÑ–Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ° RPM"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "помилка читаннÑ: %s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
msgstr "не є пакунком rpm\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr "не вдалоÑÑ Ñтворити Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ %s Ð´Ð»Ñ %s (%s)\n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr "Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ %s на %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ dlopen %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr "Спроба Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу %s завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ð¸ Ð¼Ð°ÐºÑ€Ð¾Ñ %%__collection_%s\n"
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Додаток %%__%s_%s не налаштовано\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "Модуль %s не завантажено\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ %s Ñимвол %s: %s\n"
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "різні"
@@ -2766,641 +3373,354 @@ msgstr "%s Ñтав заÑтарілим через %s%s"
msgid "unknown error %d encountered while manipulating package %s"
msgstr "ÑталаÑÑ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° помилка %d під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ пакунка %s"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "не вказано другий Ñимвол «:» у %s:%d\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "не вказано назву архітектури у %s:%d\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "Ðеповний Ñ€Ñдок даних у %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "Забагато аргументів у Ñ€Ñдку даних %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "Помилкове чиÑло архітектури/ОС: %s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "Ðеповний типовий Ñ€Ñдок у %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "Забагато аргументів у типовому Ñ€Ñдку у %s:%d\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "не виÑтачає «:» (виÑвлено 0x%02x) у %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "не виÑтачає аргументу Ð´Ð»Ñ %s у %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s у %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "не виÑтачає архітектури Ð´Ð»Ñ %s у %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "помилковий параметр «%s» у %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ допоміжний вектор, /proc не змонтовано?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "Ðевідома ÑиÑтема: %s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "Будь лаÑка, зв’ÑжітьÑÑ Ð· %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ: %m.\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "У Ñкрипті Lua не викликано exec() піÑÐ»Ñ fork()\n"
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ поточний каталог: %m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
"підтримку допоміжних Ñкриптів мовою <lua> не було передбачено під Ñ‡Ð°Ñ "
"збираннÑ\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий файл Ð´Ð»Ñ %s: %s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr "Ðе вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ деÑкриптор файла: %s: %s\n"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "Помилка fwrite: %s"
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr "помилка допоміжного Ñкрипту %s, Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ pid (%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr "помилка допоміжного Ñкрипту %s, Ñигнал %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr "помилка допоміжного Ñкрипту %s, Ñтан виходу %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "Ðевідомий формат"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "вÑтановити"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "вилучити"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ базу даних Packages у %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
msgstr "зайвий Ñимвол «(» у мітці пакунка: %s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
msgstr "не виÑтачає «(» у мітці пакунка: %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
msgstr "не виÑтачає «)» у мітці пакунка: %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr "%s: Ñпроба Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾.\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "операціÑ"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "розмір sigh(%d): ПОМИЛКÐ, read повернуто %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic: ПОМИЛКÐ\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "мітки sigh: ПОМИЛКÐ, кількіÑÑ‚ÑŒ міток (%d) перевищує макÑимальну\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "дані sigh: ПОМИЛКÐ, кількіÑÑ‚ÑŒ байтів (%d) перевищує макÑимальну\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "бінарний об’єкт sigh (%d): ПОМИЛКÐ, read повернуто %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "теґ sigh[%d]: ПОМИЛКÐ, теґ %d тип %d Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ %d к-Ñ‚ÑŒ %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ sigh: ПОМИЛКÐ\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
-msgstr "pad sigh (%zd): ПОМИЛКÐ, прочитано %zd байтів\n"
+msgid "%s: tag %u: invalid hex"
+msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
-msgstr "sigSize sigh (%zd): ПОМИЛКÐ, помилка fstat(2)\n"
+msgid "%s%s %s"
+msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
-msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ незмінну ділÑнку заголовка. Пакунок пошкоджено?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
-msgstr "ПідпиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð² RPM верÑÑ–Ñ— 3 неможливе\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "Сума MD5:"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "Сума SHA1 заголовка:"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "Заголовок "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
-msgstr "Перевірка підпиÑу: ПОМИЛКОВІ ПÐРÐМЕТРИ (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
+
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ заголовок підпиÑу.\n"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "пропущено"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "невдача"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "не виÑтачає %c %s"
-
-#: lib/verify.c:422
+#: lib/verify.c:263
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr "Ðезадоволені залежноÑÑ‚Ñ– Ð´Ð»Ñ %s:\n"
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr "некоректна ширина полÑ"
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "не виÑтачає { піÑÐ»Ñ %"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "не виÑтачає } піÑÐ»Ñ %{"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "порожній формат теґу"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° теґу"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "невідома мітка"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "не виÑтачає ] у кінці запиÑу маÑиву"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "неочікувана ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "неочікувана }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "не виÑтачає ? у виразі"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "у виразі піÑÐ»Ñ ? Ñлід вказати {"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "у виразі не виÑтачає }"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": піÑÐ»Ñ ? не виÑтачає підвиразу"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "у виразі піÑÐ»Ñ : Ñлід вказати {"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "вираз має завершуватиÑÑ Ñимволом |"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "ітератор маÑиву викориÑтано з двома маÑивами різної розмірноÑÑ‚Ñ–"
-
-#: lib/rpmdb.c:97
-#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %d пропущених покажчиків, будь лаÑка, зачекайте…\n"
-
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ покажчик %s за допомогою db%d — %s (%d)\n"
-
-#: lib/rpmdb.c:516
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr "помилка(%d) Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів «%s» з покажчика %s: %s\n"
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "не було вÑтановлено шлÑху dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader: пропущено"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "помилка (%d) Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу â„–%d до %s\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
-msgstr "%s: помилка regexec: %s\n"
-
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
-msgstr "%s: помилка regcomp: %s\n"
-
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator: пропущено"
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb: отримано пошкоджений заголовок №%u — пропущено.\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr "помилка(%d:%s) Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½Ð°Ñтупного ключа з покажчика %s\n"
-
-#: lib/rpmdb.c:2349
-#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr "помилка (%d) під Ñ‡Ð°Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу заголовка â„–%d\n"
-
-#: lib/rpmdb.c:2358
-#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr "помилка (%d) під Ñ‡Ð°Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу заголовка â„–%d\n"
-
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок за адреÑою 0x%x\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "помилка (%d) вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів «%s» за покажчиком %s\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "помилка (%d) під Ñ‡Ð°Ñ Ñпроби Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу «%s» до %s\n"
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ–Ð¼ÐµÐ½Ñ– кориÑтувача або UID Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %s\n"
-#: lib/rpmdb.c:2477
+#: lib/verify.c:284
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "помилка (%d) під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу «%s» з %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Ð”ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ групи або GID Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ %s\n"
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "помилка (%d) розподілу нового екземплÑра пакунка\n"
+#: lib/verify.c:395
+msgid "no state"
+msgstr "немає Ñтану"
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "помилка(%d) Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів «%s» з покажчика %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "невідомий Ñтан"
-#: lib/rpmdb.c:2660
+#: lib/verify.c:448
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "помилка (%d) під Ñ‡Ð°Ñ Ñпроби Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу %s до %s\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "не було вÑтановлено шлÑху dbpath"
+msgid "missing %c %s"
+msgstr "не виÑтачає %c %s"
-#: lib/rpmdb.c:2875
+#: lib/verify.c:503
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr "не вдалоÑÑ Ñтворити каталог %s: %s\n"
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Ðезадоволені залежноÑÑ‚Ñ– Ð´Ð»Ñ %s:\n"
-#: lib/rpmdb.c:2910
+#: plugins/prioreset.c:29
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "заголовок №%u у базі даних є помилковим — пропущено.\n"
+msgid "Unable to reset nice value: %s"
+msgstr "Ðе вдалоÑÑ Ñкинути Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ–: %s"
-#: lib/rpmdb.c:2924
+#: plugins/prioreset.c:40
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð· початковим розташуваннÑм у %u\n"
+msgid "Unable to reset I/O priority: %s"
+msgstr "Ðе вдалоÑÑ Ñкинути пріоритетніÑÑ‚ÑŒ введеннÑ-виведеннÑ: %s"
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-"не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ базу даних: початкова база даних залишаєтьÑÑ Ð½Ð° "
-"міÑці\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "не вдалоÑÑ Ð·Ð°Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñтару базу даних новою!\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "замінити файли у %s файлами з %s Ð´Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ каталог %s: %s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "помилка db%d (%d) з %s: %s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "помилка db%d (%d): %s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ %s на %s/%s\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "Ñпільний"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "екÑклюзивний"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr "некоректний тип покажчика %x у %s/%s\n"
-
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "невідомий параметр db: «%s» проігноровано.\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s має некоректне чиÑлове значеннÑ, пропущено\n"
-#: lib/backend/dbconfig.c:190
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-"%s має занадто велике або занадто мале довге ціле значеннÑ, пропущено\n"
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s має занадто велике або занадто мале ціле значеннÑ, пропущено\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ правила Ð´Ð»Ñ %s\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий файл Ð´Ð»Ñ %s: %s\n"
-
-#: plugins/sepolicy.c:231
-#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ запиÑу правил %s до файла %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr "Ðе вдалоÑÑ Ñтворити обробник semanage\n"
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "Ðе вдалоÑÑ Ð²Ñтановити зв’Ñзок з обробником правил\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ñ‡Ð°Ñ‚Ð¸ дію над правилами: %s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ тимчаÑовий файл правил %s: %s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "Ðе вдалоÑÑ Ð²Ñтановити модуль правил: %s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ модуль правил: %s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "Ðе вдалоÑÑ Ñтворити Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑу: %s\n"
-
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s\n"
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "Ðварійне Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %s\n"
-
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
-#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "Помилка %s з кодом Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð½ÐµÑти зміни до правил\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ð¸ шлÑÑ… Ð¼Ð°ÐºÑ€Ð¾Ñ restorecon"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ мітки у файловій ÑиÑтемі. Файли може бути позначено "
-"помилковими мітками.\n"
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
-"Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ контекÑти файлів. Файли може бути позначено "
-"помилковими мітками.\n"
-
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ правила з %s\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "=================== активних %d порожніх %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(порожньо)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(порожньо)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¼Ð°ÐºÑ€Ð¾Ñу %%%s не завершено\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² макроÑу %%%s не завершено\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s має некоректну назву (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¼Ð°ÐºÑ€Ð¾Ñу %%%s не завершено\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² макроÑу %%%s не завершено\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "Тіло макроÑу %%%s Ñ” порожнім\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "У макроÑÑ– %%%s мало бути викориÑтано пробіл перед текÑтом макроÑу\n"
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ð¸ Ð¼Ð°ÐºÑ€Ð¾Ñ %%%s\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s має некоректну назву (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s (%s) не було викориÑтано під рівнем %d\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%%s визначено, але не викориÑтано у облаÑÑ‚Ñ– видимоÑÑ‚Ñ–\n"
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "Ðевідомий параметр %c у %s(%s)\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
@@ -3408,166 +3728,283 @@ msgstr ""
"Забагато рівнів вкладеноÑÑ‚Ñ– у макроÑÑ–. Ймовірно, це викликано рекурÑивним "
"оголошеннÑм макроÑу.\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "Ðе закрито %c: %s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "За %% вказано непридатний до обробки макроÑ\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл макроÑу %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "=================== активних %d порожніх %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr "помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового файла %s: %m\n"
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "Файл %s: %s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "Розмір файла %s є меншим за %u байтів\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "не вдалоÑÑ Ñтворити каталог"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[нічого]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(без помилок)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "критична помилка: "
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "помилка: "
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "попередженнÑ: "
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ñƒ допоміжному Ñкрипті lua: %s\n"
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ñƒ Ñкрипті lua: %s\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "помилка Ñкрипту lua: %s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "некоректний ÑинтакÑÐ¸Ñ Ñƒ файлі lua: %s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr "помилка виклику lua: %s\n"
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[нічого]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(без помилок)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "критична помилка: "
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "помилка: "
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "попередженнÑ: "
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr ""
"у відповідь на Ñпробу Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñ– пам’ÑÑ‚Ñ– (%u байтів) повернуто NULL.\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr "V%d %s/%s %s, ід. ключа %s"
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(нічого)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового каталогу %s: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "помилка під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ fifo %s: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ fifo %s: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ %s: %m\n"
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: помилка Fwrite: %s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: помилка fread: %s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr "%s: помилка Fflush: %s\n"
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr "Ðепідтримуваний Ð¿Ñ–Ð´Ð¿Ð¸Ñ PGP\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr "Ðепідтримуваний алгоритм Ñ…ÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ PGP, %u\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr "Ðепідтримуваний алгоритм обчиÑÐ»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа PGP, %u\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "Помилка fopen\n"
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ каналу\n"
+
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "Ðе вдалоÑÑ Ñтворити канал Ð´Ð»Ñ Ð¿Ñ–Ð´Ð¿Ð¸ÑуваннÑ: %m"
+msgid "Could not read from file %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· файла %s: %s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "помилка Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ gpg (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "gpg не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати підпиÑ\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ підпиÑ\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "помилка rpmMkTemp\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
-msgstr "%s вже міÑтить ідентичний підпиÑ, пропуÑкаємо\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s: помилка writeLead: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: помилка rpmReadSignature: %s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: помилка headerRead: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "ПідпиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÑ–Ð² RPM верÑÑ–Ñ— 3 неможливе\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s вже міÑтить ідентичний підпиÑ, пропуÑкаємо\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s: помилка rpmWriteSignature: %s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: помилка writeLead: %s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr "Ñпроба заміни %s зазнала невдачі: %s\n"
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s: помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ð½Ñ–Ñ„ÐµÑту: %s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "не перевірÑти Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° та вміÑту"
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 000000000..b1c28de24
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,4014 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Trần Ngá»c Quân <vnwildman@gmail.com>, 2015
+# Trần Ngá»c Quân <vnwildman@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: RPM\n"
+"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/rpm-team/rpm/language/"
+"vi/)\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: cliutils.c:21 lib/poptI.c:29
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#: cliutils.c:27 lib/poptALL.c:56
+#, c-format
+msgid "RPM version %s\n"
+msgstr "RPM phiên bản %s\n"
+
+#: cliutils.c:32
+#, c-format
+msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n"
+msgstr "Bản quyá»n (C) 1998-2002 - Red Hat, Inc.\n"
+
+#: cliutils.c:33
+#, c-format
+msgid ""
+"This program may be freely redistributed under the terms of the GNU GPL\n"
+msgstr ""
+"Phần má»m này được phân phối lại má»™t cách tá»± do nhÆ° theo các Ä‘iá»u khoản của "
+"giấy phép Công GNU\n"
+
+#: cliutils.c:53
+#, c-format
+msgid "creating a pipe for --pipe failed: %m\n"
+msgstr "lá»—i tạo má»™t ống dẫn cho “--pipeâ€: %m\n"
+
+#: cliutils.c:62
+#, c-format
+msgid "exec failed\n"
+msgstr "gặp lỗi khi exec (thực thi lệnh)\n"
+
+#: rpm2archive.c:91 rpm2cpio.c:68
+#, c-format
+msgid "argument is not an RPM package\n"
+msgstr "đối số không phải là một gói RPM\n"
+
+#: rpm2archive.c:96 rpm2cpio.c:73
+#, c-format
+msgid "error reading header from package\n"
+msgstr "gặp lá»—i khi Ä‘á»c phần đầu từ gói\n"
+
+#: rpm2archive.c:111 rpm2cpio.c:88
+#, c-format
+msgid "cannot re-open payload: %s\n"
+msgstr "không thể mở lại phần trá»ng tải: %s\n"
+
+#: rpmbuild.c:114
+#, c-format
+msgid "buildroot already specified, ignoring %s\n"
+msgstr "gốc-biên-dịch đã được chỉ ra rồi, bỠqua %s\n"
+
+#: rpmbuild.c:139
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <specfile>"
+msgstr ""
+"xây dựng qua %prep (chuẩn bị: mở gói nguồn và áp dụng những miếng vá) từ "
+"<tập_tin_đặc_tả>"
+
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
+msgid "<specfile>"
+msgstr "<tập_tin_đặc_tả>"
+
+#: rpmbuild.c:142
+msgid "build through %build (%prep, then compile) from <specfile>"
+msgstr ""
+"xây dựng qua %build (xây dựng: %prep [chuẳn bị], sau đó biên dịch) từ "
+"<tập_tin_đặc_tả>"
+
+#: rpmbuild.c:145
+msgid "build through %install (%prep, %build, then install) from <specfile>"
+msgstr ""
+"xây dựng qua %install (cài đặt: %prep [chuẩn bị], %build [xây dựng], sau đó "
+"cài đặt) từ <tập_tin_đặc_tả>"
+
+#: rpmbuild.c:148
+#, c-format
+msgid "verify %files section from <specfile>"
+msgstr "thẩm tra phần tập tin (%files) từ <tập_tin_đặc_tả>"
+
+#: rpmbuild.c:151
+msgid "build source and binary packages from <specfile>"
+msgstr "xây dựng các gói kiểu nguồn và nhị phân từ <tập_tin_đặc_tả>"
+
+#: rpmbuild.c:154
+msgid "build binary package only from <specfile>"
+msgstr "xây dựng gói chỉ gói nhị phân từ <tập_tin_đặc_tả>"
+
+#: rpmbuild.c:157
+msgid "build source package only from <specfile>"
+msgstr "xây dựng chỉ gói nguồn từ <tập_tin_đặc_tả>"
+
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+"xây dựng qua %prep (chuẩn bị: mở gói nguồn và áp dụng những miếng vá) từ "
+"<gói nguồn>"
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<gói nguồn>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+"xây dựng qua %build (xây dựng: %prep [chuẳn bị], sau đó biên dịch) từ <gói "
+"nguồn>"
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr ""
+"xây dựng qua %install (cài đặt: %prep [chuẩn bị], %build [xây dựng], sau đó "
+"cài đặt) từ <gói nguồn>"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr "thẩm tra phần %files từ <gói nguồn>"
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr "xây dựng gói nguồn và nhị phân từ <gói nguồn>"
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "chỉ xây dựng gói nhị phân từ <gói nguồn>"
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr "chỉ xây dựng gói nguồn từ <gói nguồn>"
+
+#: rpmbuild.c:183
+#, c-format
+msgid "build through %prep (unpack sources and apply patches) from <tarball>"
+msgstr ""
+"xây dựng qua %prep (chuẩn bị: giải nén các nguồn và áp dụng các đắp vá) từ "
+"<kho_tar>"
+
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
+msgid "<tarball>"
+msgstr "<kho_tar>"
+
+#: rpmbuild.c:186
+msgid "build through %build (%prep, then compile) from <tarball>"
+msgstr ""
+"xây dựng qua %build (xây dựng: %prep [chuẩn bị], sau đó biên dịch) từ "
+"<kho_tar>"
+
+#: rpmbuild.c:189
+msgid "build through %install (%prep, %build, then install) from <tarball>"
+msgstr ""
+"xây dựng qua %install (cài đặt: %prep [chuẩn bị], %build [xây dựng], sau đó "
+"cài đặt) từ <kho_tar>"
+
+#: rpmbuild.c:192
+#, c-format
+msgid "verify %files section from <tarball>"
+msgstr "xác nhận phần tập tin (%files) từ <kho_tar>"
+
+#: rpmbuild.c:195
+msgid "build source and binary packages from <tarball>"
+msgstr "xây dựng các gói kiểu nguồn và nhị phân từ <kho_tar>"
+
+#: rpmbuild.c:198
+msgid "build binary package only from <tarball>"
+msgstr "xây dựng chỉ gói nhị phân từ <kho_tar>"
+
+#: rpmbuild.c:201
+msgid "build source package only from <tarball>"
+msgstr "xây dựng chỉ gói nguồn từ <kho_tar>"
+
+#: rpmbuild.c:205
+msgid "build binary package from <source package>"
+msgstr "xây dựng gói nhị phân từ <gói nguồn>"
+
+#: rpmbuild.c:212
+msgid "override build root"
+msgstr "đè lên gốc biên dịch"
+
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "chạy biên dịch trong thư mục hiện tại"
+
+#: rpmbuild.c:216
+msgid "remove build tree when done"
+msgstr "làm xong thì gỡ bỠcây xây dựng"
+
+#: rpmbuild.c:218
+msgid "ignore ExcludeArch: directives from spec file"
+msgstr "bỠqua ExcludeArch: các chỉ thị từ tập tin spec"
+
+#: rpmbuild.c:220
+msgid "debug file state machine"
+msgstr "gõ lỗi tập tin máy trạng thái"
+
+#: rpmbuild.c:222
+msgid "do not execute any stages of the build"
+msgstr "không thực thi bất kỳ giai đoạn nào của việc xây dựng"
+
+#: rpmbuild.c:224
+msgid "do not verify build dependencies"
+msgstr "không xác nhận quan hệ phụ thuộc khi xây dựng"
+
+#: rpmbuild.c:226
+msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
+msgstr "tạo phần đầu gói tương thích với gói rmp phiên bản 3 kiểu cũ"
+
+#: rpmbuild.c:230
+#, c-format
+msgid "do not execute %clean stage of the build"
+msgstr "không thể thực thi bước %clean để biên dịch"
+
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "không thực thi bước %prep khi biên dịch"
+
+#: rpmbuild.c:234
+#, c-format
+msgid "do not execute %check stage of the build"
+msgstr "không thể thực thi bước %check để biên dịch"
+
+#: rpmbuild.c:237
+msgid "do not accept i18N msgstr's from specfile"
+msgstr "không chấp nhận chuỗi đã dịch i18n từ tập tin đặc tả"
+
+#: rpmbuild.c:239
+msgid "remove sources when done"
+msgstr "làm xong thì cũng gỡ bỠcác nguồn"
+
+#: rpmbuild.c:241
+msgid "remove specfile when done"
+msgstr "làm xong thì cũng gỡ bỠtập tin đặc tả"
+
+#: rpmbuild.c:243
+msgid "skip straight to specified stage (only for c,i)"
+msgstr "bỠqua thẳng tới giai đoạn định rõ (chỉ cho c,i)"
+
+#: rpmbuild.c:245
+msgid "override target platform"
+msgstr "có quyá»n cao hÆ¡n ná»n tảng đích"
+
+#: rpmbuild.c:262
+msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
+msgstr "Tùy chá»n xây dá»±ng vá»›i [ <tập_tin_đặc_tả> | <kho_tar> | <gói nguồn> ]:"
+
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "Các tùy chá»n chung vá»›i má»i chế Ä‘á»™ và tập tin thá»±c hiện được kiểu rpm:"
+
+#: rpmbuild.c:282
+msgid "Failed build dependencies:\n"
+msgstr "Gặp lỗi khi xây dựng các thành phần phụ thuộc:\n"
+
+#: rpmbuild.c:300
+#, c-format
+msgid "Unable to open spec file %s: %s\n"
+msgstr "Không thể mở tập tin đặc tả %s: %s\n"
+
+#: rpmbuild.c:363
+#, c-format
+msgid "Failed to open tar pipe: %m\n"
+msgstr "Gặp lá»—i khi mở Ä‘Æ°á»ng ống tar: %m\n"
+
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "Thấy nhiá»u hÆ¡n má»™t tập tin đặc tả %s\n"
+
+#: rpmbuild.c:389
+#, c-format
+msgid "Failed to read spec file from %s\n"
+msgstr "Gặp lá»—i Ä‘á»c tập tin đặc tả từ %s\n"
+
+#: rpmbuild.c:401
+#, c-format
+msgid "Failed to rename %s to %s: %m\n"
+msgstr "Lỗi thay đổi tên %s thành %s: %m\n"
+
+#: rpmbuild.c:479
+#, c-format
+msgid "failed to stat %s: %m\n"
+msgstr "lỗi lấy trạng thái vỠ%s: %m\n"
+
+#: rpmbuild.c:483
+#, c-format
+msgid "File %s is not a regular file.\n"
+msgstr "Tập tin %s không phải là má»™t tập tin thÆ°á»ng.\n"
+
+#: rpmbuild.c:490
+#, c-format
+msgid "File %s does not appear to be a specfile.\n"
+msgstr "Tập tin %s hình như không phải là tập tin đặc tả.\n"
+
+#: rpmbuild.c:556
+#, c-format
+msgid "Building target platforms: %s\n"
+msgstr "Äang xây dá»±ng các ná»n tảng đích: %s\n"
+
+#: rpmbuild.c:564
+#, c-format
+msgid "Building for target %s\n"
+msgstr "Äang xây dá»±ng cho ná»n tảng đích %s\n"
+
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "đối số của “--root†(-r) phải bắt đầu vá»›i dấu sổ chéo “/â€"
+
+#: rpmdb.c:21
+msgid "initialize database"
+msgstr "khởi tạo cơ sở dữ liệu"
+
+#: rpmdb.c:23
+msgid "rebuild database inverted lists from installed package headers"
+msgstr ""
+"xây dựng lại các danh sách nghịch chuyển cơ sở dữ liệu từ các phần đầu gói "
+"được cài đặt"
+
+#: rpmdb.c:26
+msgid "verify database files"
+msgstr "thẩm tra các tập tin cơ sở dữ liệu"
+
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "xuất cơ sở dữ liệu ra danh sách phần đầu đầu ra tiêu chuẩn"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "nhập cơ sở dữ liệu từ danh sách phần đầu đầu vào tiêu chuẩn"
+
+#: rpmdb.c:38
+msgid "Database options:"
+msgstr "Tùy chá»n cÆ¡ sở dữ liệu:"
+
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "chỉ có thể đưa ra một chế độ chính"
+
+#: rpmkeys.c:20
+msgid "verify package signature(s)"
+msgstr "thẩm tra (các) chữ ký của gói"
+
+#: rpmkeys.c:22
+msgid "import an armored public key"
+msgstr "nhập một khóa công dạng văn bản"
+
+#: rpmkeys.c:24
+msgid "don't import, but tell if it would work or not"
+msgstr "không thể nhập, nhưng hãy thông báo nó có chạy hay không"
+
+#: rpmkeys.c:27 rpmkeys.c:29
+msgid "list keys from RPM keyring"
+msgstr "liệt kê các khóa từ chùm chìa khóa RPM"
+
+#: rpmkeys.c:36
+msgid "Keyring options:"
+msgstr "Tùy chá»n chùm chìa khóa:"
+
+#: rpmkeys.c:64 rpmsign.c:161
+msgid "no arguments given"
+msgstr "chưa đưa ra đối số"
+
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "Các tùy chá»n Truy vấn hay Thẩm định gói chá»n:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "Tùy chá»n truy vấn (vá»›i -q hoặc --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "Tùy chá»n kiểm tra (vá»›i -V hoặc --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "Tùy chá»n cho Cài-đặt/Nâng-cấp/Xóa:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "mỗi lần chỉ có thể làm một kiểu hành vi truy vấn/xác nhận"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "gặp cá» truy vấn bất thÆ°á»ng"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "gặp định dạng truy vấn bất thÆ°á»ng"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "gặp nguồn truy vấn bất thÆ°á»ng"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "chỉ có cài đặt và nâng cấp là có thể ép buộc"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "chỉ có thể tái định vị tập tin trong khi cài đặt gói"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr ""
+"không cho phép dùng tùy chá»n “--prefix†(tiá»n tố) cùng vá»›i “--relocate†(tái "
+"định vị) hoặc “--excludepath†(loại trừ Ä‘Æ°á»ng dẫn)"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr ""
+"tùy chá»n “--relocate†(tái định vị) và --excludepath (loại trừ Ä‘Æ°á»ng dẫn) "
+"chỉ có thể được dùng khi cài đặt gói mới"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "tùy chá»n “--prefix†(tiá»n tố) chỉ có thể được dùng khi cài đặt gói má»›i"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "đối số cho “--prefix†(tiá»n tố) phải bắt đầu vá»›i dấu sổ chéo “/â€"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+"tùy chá»n --hash (-h) chỉ có thể được chỉ ra trong khi cài đặt và xóa gói"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+"tùy chá»n “--percent†(phần trăm) chỉ có thể được chỉ ra trong khi cài đặt và "
+"xóa gói"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr ""
+"tùy chá»n “--replacepkgs†(thay thế các gói) chỉ có thể được chỉ ra trong khi "
+"cài đặt gói"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr ""
+"tùy chá»n “--excludedocs†(loại bá» các tài liệu) chỉ có thể được chỉ ra trong "
+"khi cài đặt gói"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr ""
+"tùy chá»n “--includedocs†(bao gồm các tài liệu) chỉ có thể được chỉ ra trong "
+"khi cài đặt gói"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr ""
+"có thể chỉ ra chỉ má»™t trong hai tùy chá»n “-excludedocs†(loại bá» các tài "
+"liệu) và “-includedocs†(bao gồm các tài liệu)"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr ""
+"tùy chá»n “--ignorearch†(bá» qua kiến trúc) chỉ có thể được chỉ ra trong khi "
+"cài đặt gói"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr ""
+"tùy chá»n “--ignoreos†(bá» qua hệ Ä‘iá»u hành) chỉ có thể được chỉ ra trong khi "
+"cài đặt gói"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize chỉ được chỉ ra trong quá trình cài đặt"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr ""
+"tùy chá»n “--allmatches†(má»i sá»± tÆ°Æ¡ng ứng) chỉ có thể được chỉ ra trong khi "
+"xóa gói"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr ""
+"tùy chá»n “--allfiles†(má»i tập tin) chỉ có thể được chỉ ra trong khi cài đặt "
+"gói"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr ""
+"tùy chá»n “--justdb†(chỉ cÆ¡ sở dữ liệu) chỉ có thể được chỉ ra trong khi cài "
+"đặt và xóa gói"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"các tùy chá»n vô hiệu hóa văn lệnh chỉ có thể được chỉ ra trong khi cài đặt "
+"và xóa gói"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr ""
+"các tùy chá»n vô hiệu hóa bá»™ gây nên chỉ có thể được chỉ ra trong khi cài đặt "
+"và xóa gói"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr "--nodeps chỉ được chỉ ra trong quá trình cài đặt, tẩy hay thẩm tra"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+"tùy chá»n “--test†(kiểm tra) chỉ có thể được chỉ ra trong khi cài đặt và xóa "
+"gói"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "chưa đưa ra gói cần xóa"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "chưa đưa ra gói cần cài đặt"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "chưa đưa ra đối số để truy vấn"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "chưa đưa ra đối số để xác nhận"
+
+#: rpmsign.c:30
+msgid "sign package(s)"
+msgstr "ký (các) gói"
+
+#: rpmsign.c:32
+msgid "sign package(s) (identical to --addsign)"
+msgstr "ký tên gói (đồng nhất tới --addsign)"
+
+#: rpmsign.c:34
+msgid "delete package signatures"
+msgstr "xóa chữ ký của gói"
+
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
+msgid "Signature options:"
+msgstr "Tùy chá»n chữ ký:"
+
+#: rpmsign.c:101
+#, c-format
+msgid "You must set \"%%_gpg_name\" in your macro file\n"
+msgstr "Bạn phải đặt \"%%_gpg_name\" trong tập tin vĩ lệnh\n"
+
+#: rpmsign.c:114
+#, c-format
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
+
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
+
+#: rpmspec.c:25
+msgid "parse spec file(s) to stdout"
+msgstr "phân tích các tập tin đặc tả ra đầu ra tiêu chuẩn"
+
+#: rpmspec.c:27
+msgid "query spec file(s)"
+msgstr "truy vấn (các) tập tin đặc tả"
+
+#: rpmspec.c:29
+msgid "operate on binary rpms generated by spec (default)"
+msgstr "thao tác trên gói nhị phân rpm được tạo bởi spec (mặc định)"
+
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
+msgid "operate on source rpm generated by spec"
+msgstr "thao tác trên gói nguồn rpm được tạo bởi spec"
+
+#: rpmspec.c:35 lib/poptQV.c:221
+msgid "use the following query format"
+msgstr "dùng định dạng truy vấn theo đây"
+
+#: rpmspec.c:44
+msgid "Spec options:"
+msgstr "Tùy chá»n đặc tả:"
+
+#: rpmspec.c:91
+msgid "no arguments given for parse"
+msgstr "chưa đưa ra đối số để phân tích"
+
+#: build/build.c:120
+#, c-format
+msgid "Unable to open temp file: %s\n"
+msgstr "Không thể mở tập tin tạm: %s\n"
+
+#: build/build.c:125
+#, c-format
+msgid "Unable to open stream: %s\n"
+msgstr "Không thể mở luồng dữ liệu: %s\n"
+
+#: build/build.c:158
+#, c-format
+msgid "Executing(%s): %s\n"
+msgstr "Äang thá»±c hiện (%s): %s\n"
+
+#: build/build.c:163
+#, c-format
+msgid "Exec of %s failed (%s): %s\n"
+msgstr "Gặp lỗi khi thực thi %s (%s): %s\n"
+
+#: build/build.c:172
+#, c-format
+msgid "Error executing scriptlet %s (%s)\n"
+msgstr "Gặp lỗi khi thực thi scriptlet %s (%s)\n"
+
+#: build/build.c:178
+#, c-format
+msgid "Bad exit status from %s (%s)\n"
+msgstr "Trạng thái thoát sai từ %s (%s)\n"
+
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
+msgid ""
+"\n"
+"\n"
+"RPM build errors:\n"
+msgstr ""
+"\n"
+"\n"
+"Lỗi xây dựng RPM:\n"
+
+#: build/expression.c:215
+msgid "syntax error while parsing ==\n"
+msgstr "gặp lỗi cú pháp khi phân tích ==\n"
+
+#: build/expression.c:245
+msgid "syntax error while parsing &&\n"
+msgstr "gặp lỗi cú pháp khi phân tích &&\n"
+
+#: build/expression.c:254
+msgid "syntax error while parsing ||\n"
+msgstr "gặp lỗi cú pháp khi phân tích ||\n"
+
+#: build/expression.c:304
+msgid "parse error in expression\n"
+msgstr "gặp lỗi phân tích trong biểu thức\n"
+
+#: build/expression.c:336
+msgid "unmatched (\n"
+msgstr "có dấu ngoặc mở “(†lẻ đôi\n"
+
+#: build/expression.c:368
+msgid "- only on numbers\n"
+msgstr "- chỉ với con số\n"
+
+#: build/expression.c:384
+msgid "! only on numbers\n"
+msgstr "! chỉ với con số\n"
+
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
+msgid "types must match\n"
+msgstr "các kiểu phải tương ứng\n"
+
+#: build/expression.c:439
+msgid "* / not suported for strings\n"
+msgstr "* / không được hỗ trợ cho chuỗi\n"
+
+#: build/expression.c:490
+msgid "- not suported for strings\n"
+msgstr "- không được hỗ trợ cho chuỗi\n"
+
+#: build/expression.c:637
+msgid "&& and || not suported for strings\n"
+msgstr "&& và || không được hỗ trợ cho chuỗi\n"
+
+#: build/expression.c:669
+msgid "syntax error in expression\n"
+msgstr "gặp lỗi cú pháp trong biểu thức\n"
+
+#: build/files.c:343 build/files.c:524 build/files.c:743
+#, c-format
+msgid "Missing '(' in %s %s\n"
+msgstr "Thiếu dấu ngoặc mở “(†trong %s %s\n"
+
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
+#, c-format
+msgid "Missing ')' in %s(%s\n"
+msgstr "Thiếu dấu ngoặc đóng “)†trong %s(%s\n"
+
+#: build/files.c:378 build/files.c:684
+#, c-format
+msgid "Invalid %s token: %s\n"
+msgstr "Hiệu bài %s không hợp lệ: %s\n"
+
+#: build/files.c:490
+#, c-format
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
+
+#: build/files.c:539
+#, c-format
+msgid "Non-white space follows %s(): %s\n"
+msgstr "Không có khoảng trắng theo sau %s(): %s\n"
+
+#: build/files.c:579
+#, c-format
+msgid "Bad syntax: %s(%s)\n"
+msgstr "Cú pháp sai: %s(%s)\n"
+
+#: build/files.c:588
+#, c-format
+msgid "Bad mode spec: %s(%s)\n"
+msgstr "Äặc tả chế Ä‘á»™ sai: %s(%s)\n"
+
+#: build/files.c:600
+#, c-format
+msgid "Bad dirmode spec: %s(%s)\n"
+msgstr "Äặc tả dirmode (chế Ä‘á»™ thÆ° mục) sai: %s(%s)\n"
+
+#: build/files.c:705
+#, c-format
+msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
+msgstr "Chiá»u dài miá»n địa phÆ°Æ¡ng không bình thÆ°á»ng “%s†trong %%lang(%s)\n"
+
+#: build/files.c:712
+#, c-format
+msgid "Duplicate locale %s in %%lang(%s)\n"
+msgstr "Miá»n địa phÆ°Æ¡ng trùng %s trong %%lang(%s)\n"
+
+#: build/files.c:827
+#, c-format
+msgid "Invalid capability: %s\n"
+msgstr "Dung lượng không hợp lệ: %s\n"
+
+#: build/files.c:837
+msgid "File capability support not built in\n"
+msgstr "Hỗ trợ dung lượng tập tin không được biên dịch sẵn\n"
+
+#: build/files.c:888
+#, c-format
+msgid "File must begin with \"/\": %s\n"
+msgstr "Tập tin phải bắt đầu bằng dấu sổ chéo “/â€: %s\n"
+
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
+#, c-format
+msgid "Unknown file digest algorithm %u, falling back to MD5\n"
+msgstr "Không hiểu thuật toán băm tập tin %u, quay lại dùng MD5\n"
+
+#: build/files.c:1074
+#, c-format
+msgid "File listed twice: %s\n"
+msgstr "Tập tin được liệt kê hai lần: %s\n"
+
+#: build/files.c:1196
+#, c-format
+msgid "reading symlink %s failed: %s\n"
+msgstr "gặp lá»—i khi Ä‘á»c liên kết má»m “%sâ€: %s\n"
+
+#: build/files.c:1204
+#, c-format
+msgid "Symlink points to BuildRoot: %s -> %s\n"
+msgstr "Liên kết má»m chỉ tá»›i BuildRoot (gốc xây dá»±ng): %s -> %s\n"
+
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "ÄÆ°á»ng dẫn nằm ngoài buildroot (gốc xây dá»±ng): %s\n"
+
+#: build/files.c:1386
+#, c-format
+msgid "Directory not found: %s\n"
+msgstr "Không tìm thấy thư mục: %s\n"
+
+#: build/files.c:1387 lib/rpminstall.c:449
+#, c-format
+msgid "File not found: %s\n"
+msgstr "Không tìm thấy tập tin: %s\n"
+
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "Không phải là một thư mục: %s\n"
+
+#: build/files.c:1592
+#, c-format
+msgid "%s: can't load unknown tag (%d).\n"
+msgstr "%s: không thể nạp thẻ bất thÆ°á»ng (%d).\n"
+
+#: build/files.c:1598
+#, c-format
+msgid "%s: public key read failed.\n"
+msgstr "%s: gặp lá»—i khi Ä‘á»c khóa công.\n"
+
+#: build/files.c:1602
+#, c-format
+msgid "%s: not an armored public key.\n"
+msgstr "%s: không phải là khóa công dạng văn bản.\n"
+
+#: build/files.c:1611
+#, c-format
+msgid "%s: failed to encode\n"
+msgstr "%s: gặp lỗi khi giải mã\n"
+
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "gặp lỗi khi tạo thư mục"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
+#, c-format
+msgid "File needs leading \"/\": %s\n"
+msgstr "Tập tin cần có dấu sổ chéo “/†đi trước: %s\n"
+
+#: build/files.c:2122
+#, c-format
+msgid "%%dev glob not permitted: %s\n"
+msgstr "không cho phép %%dev glob: %s\n"
+
+#: build/files.c:2134
+#, c-format
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
+
+#: build/files.c:2136
+#, c-format
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
+
+#: build/files.c:2171
+#, c-format
+msgid "Could not open %%files file %s: %m\n"
+msgstr "Không thể mở tập tin %%files %s: %m\n"
+
+#: build/files.c:2182
+#, c-format
+msgid "line: %s\n"
+msgstr "dòng: %s\n"
+
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "Tập tin %%files trống rỗng %s\n"
+
+#: build/files.c:2200
+#, c-format
+msgid "Error reading %%files file %s: %m\n"
+msgstr "Gặp lá»—i khi Ä‘ang Ä‘á»c tập tin %%files %s: %m\n"
+
+#: build/files.c:2223
+#, c-format
+msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "_docdir_fmt không hợp lệ %s: %s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "Glob (chức năng mở rộng mẫu khi tìm kiếm) không tìm thấy tập tin: %s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
+#, c-format
+msgid "Can't mix special %s with other forms: %s\n"
+msgstr "Không thể trộn lẫn %s đặc biệt với dạng khác: %s\n"
+
+#: build/files.c:2471
+#, c-format
+msgid "More than one file on a line: %s\n"
+msgstr "Nhiá»u hÆ¡n má»™t tập tin má»—i dòng: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
+#, c-format
+msgid "Bad file: %s: %s\n"
+msgstr "Tập tin sai: %s: %s\n"
+
+#: build/files.c:2725
+#, c-format
+msgid "Checking for unpackaged file(s): %s\n"
+msgstr "Äang kiểm tra có tập tin chÆ°a đóng gói: %s\n"
+
+#: build/files.c:2738
+#, c-format
+msgid ""
+"Installed (but unpackaged) file(s) found:\n"
+"%s"
+msgstr ""
+"Tìm thấy tập tin đã cài đặt (nhưng chưa đóng gói):\n"
+"%s"
+
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
+#, c-format
+msgid "Processing files: %s\n"
+msgstr "Äang xá»­ lý tập tin: %s\n"
+
+#: build/files.c:3124
+#, c-format
+msgid "Binaries arch (%d) not matching the package arch (%d).\n"
+msgstr "Kiến trúc nhị phân (%d) không khớp với kiến trúc gói (%d).\n"
+
+#: build/files.c:3130
+msgid "Arch dependent binaries in noarch package\n"
+msgstr "Nhị phân phụ thuộc kiến trúc trong gói không phụ thuộc kiến trúc\n"
+
+#: build/pack.c:91
+#, c-format
+msgid "create archive failed on file %s: %s\n"
+msgstr "tiến trình tạo kho nén bị lỗi với tập tin %s: %s\n"
+
+#: build/pack.c:94
+#, c-format
+msgid "create archive failed: %s\n"
+msgstr "tiến trình tạo kho nén bị lỗi: %s\n"
+
+#: build/pack.c:121
+#, c-format
+msgid "Could not open %s file: %s\n"
+msgstr "Không thể mở tập tin %s: %s\n"
+
+#: build/pack.c:138
+#, c-format
+msgid "%s: line: %s\n"
+msgstr "%s: dòng: %s\n"
+
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
+
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
+
+#: build/pack.c:198
+#, c-format
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "Không thể làm hợp quy tắc tên máy: %s\n"
+
+#: build/pack.c:358
+#, c-format
+msgid "Unknown payload compression: %s\n"
+msgstr "Không thể nén phần trá»ng tải: %s\n"
+
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "Không thể di chuyển vị trí Ä‘á»c trong tập tin %s: %s\n"
+
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "Gặp lá»—i khi Ä‘á»c tập tin chính sách: %s\n"
+
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
+
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
+
+#: build/pack.c:520
+#, c-format
+msgid "Could not open %s: %s\n"
+msgstr "Không thể mở %s: %s\n"
+
+#: build/pack.c:527
+#, c-format
+msgid "Unable to write package: %s\n"
+msgstr "Không thể ghi gói: %s\n"
+
+#: build/pack.c:611
+#, c-format
+msgid "Wrote: %s\n"
+msgstr "Äã ghi: %s\n"
+
+#: build/pack.c:630
+#, c-format
+msgid "Executing \"%s\":\n"
+msgstr "Thực hiện %s:\n"
+
+#: build/pack.c:633
+#, c-format
+msgid "Execution of \"%s\" failed.\n"
+msgstr "Việc thực hiện %s bị lỗi\n"
+
+#: build/pack.c:637
+#, c-format
+msgid "Package check \"%s\" failed.\n"
+msgstr "Gặp lá»—i khi kiểm tra “%sâ€.\n"
+
+#: build/pack.c:684
+#, c-format
+msgid "Could not generate output filename for package %s: %s\n"
+msgstr "Không thể tạo tên tập tin kết xuất cho gói %s: %s\n"
+
+#: build/pack.c:701
+#, c-format
+msgid "cannot create %s: %s\n"
+msgstr "không thể tạo %s: %s\n"
+
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
+#, c-format
+msgid "line %d: second %s\n"
+msgstr "dòng %d: %s thứ hai\n"
+
+#: build/parseChangelog.c:185
+#, c-format
+msgid "bogus date in %%changelog: %s\n"
+msgstr "ngày tháng sai trong bản ghi thay đổi (%%changelog): %s\n"
+
+#: build/parseChangelog.c:218
+#, c-format
+msgid "%%changelog entries must start with *\n"
+msgstr "mục nhập bản ghi thay đổi (%%changelog) phải bắt đầu với dấu sao *\n"
+
+#: build/parseChangelog.c:226
+#, c-format
+msgid "incomplete %%changelog entry\n"
+msgstr "mục nhập bản ghi thay đổi (%%changelog) chưa hoàn tất\n"
+
+#: build/parseChangelog.c:237
+#, c-format
+msgid "bad date in %%changelog: %s\n"
+msgstr "ngày tháng sai trong bản ghi thay đổi (%%changelog): %s\n"
+
+#: build/parseChangelog.c:242
+#, c-format
+msgid "%%changelog not in descending chronological order\n"
+msgstr "bản ghi thay đổi (%%changelog) không theo thứ tá»± thá»i gian giảm dần\n"
+
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
+#, c-format
+msgid "missing name in %%changelog\n"
+msgstr "thiếu tên trong bản ghi thay đổi (%%changelog)\n"
+
+#: build/parseChangelog.c:272
+#, c-format
+msgid "no description in %%changelog\n"
+msgstr "không có mô tả trong bản ghi thay đổi (%%changelog)\n"
+
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "dòng %d: %%changelog thứ hai\n"
+
+#: build/parseDescription.c:32
+#, c-format
+msgid "line %d: Error parsing %%description: %s\n"
+msgstr "dòng %d: Gặp lỗi khi phân tích mô tả (%%description): %s\n"
+
+#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
+#: build/parseScript.c:321
+#, c-format
+msgid "line %d: Bad option %s: %s\n"
+msgstr "dòng %d: Tùy chá»n sai %s: %s\n"
+
+#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
+#: build/parseScript.c:332
+#, c-format
+msgid "line %d: Too many names: %s\n"
+msgstr "dòng %d: Quá nhiá»u tên: %s\n"
+
+#: build/parseFiles.c:33
+#, c-format
+msgid "line %d: Error parsing %%files: %s\n"
+msgstr "dòng %d: Gặp lỗi khi phân tích tập tin (%%files): %s\n"
+
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
+#: build/parsePolicies.c:32
+#, c-format
+msgid "line %d: Error parsing %%policies: %s\n"
+msgstr "dòng %d: Gặp lỗi khi phân tích %%policies: %s\n"
+
+#: build/parsePreamble.c:71
+#, c-format
+msgid "Error parsing tag field: %s\n"
+msgstr "Gặp lá»—i khi phân tích trÆ°á»ng thẻ: %s\n"
+
+#: build/parsePreamble.c:164
+#, c-format
+msgid "line %d: Bad number: %s\n"
+msgstr "dòng %d: Số sai: %s\n"
+
+#: build/parsePreamble.c:170
+#, c-format
+msgid "line %d: Bad no%s number: %u\n"
+msgstr "dòng %d: Số no%s sai: %u\n"
+
+#: build/parsePreamble.c:233
+#, c-format
+msgid "line %d: Bad %s number: %s\n"
+msgstr "dòng %d: Số %s sai: %s\n"
+
+#: build/parsePreamble.c:247
+#, c-format
+msgid "%s %d defined multiple times\n"
+msgstr "%s %d được xác định nhiá»u lần\n"
+
+#: build/parsePreamble.c:292
+#, c-format
+msgid "Downloading %s to %s\n"
+msgstr "Äang tải %s vá» %s\n"
+
+#: build/parsePreamble.c:295
+#, c-format
+msgid "Couldn't download %s\n"
+msgstr "Không thể tải vỠ%s\n"
+
+#: build/parsePreamble.c:439
+#, c-format
+msgid "Architecture is excluded: %s\n"
+msgstr "Kiến trúc bị loại trừ: %s\n"
+
+#: build/parsePreamble.c:444
+#, c-format
+msgid "Architecture is not included: %s\n"
+msgstr "Kiến trúc không được bao gồm: %s\n"
+
+#: build/parsePreamble.c:449
+#, c-format
+msgid "OS is excluded: %s\n"
+msgstr "Hệ Ä‘iá»u hành bị loại trừ: %s\n"
+
+#: build/parsePreamble.c:454
+#, c-format
+msgid "OS is not included: %s\n"
+msgstr "Hệ Ä‘iá»u hành không được bao gồm: %s\n"
+
+#: build/parsePreamble.c:480
+#, c-format
+msgid "%s field must be present in package: %s\n"
+msgstr "TrÆ°á»ng %s phải nằm trong gói: %s\n"
+
+#: build/parsePreamble.c:503
+#, c-format
+msgid "Duplicate %s entries in package: %s\n"
+msgstr "Mục nhập %s trùng trong gói: %s\n"
+
+#: build/parsePreamble.c:568
+#, c-format
+msgid "Unable to open icon %s: %s\n"
+msgstr "Không thể mở biểu tượng %s: %s\n"
+
+#: build/parsePreamble.c:584
+#, c-format
+msgid "Unable to read icon %s: %s\n"
+msgstr "Không thể Ä‘á»c biểu tượng %s: %s\n"
+
+#: build/parsePreamble.c:594
+#, c-format
+msgid "Unknown icon type: %s\n"
+msgstr "Không hỗ trợ kiểu biểu tượng: %s\n"
+
+#: build/parsePreamble.c:608
+#, c-format
+msgid "line %d: Tag takes single token only: %s\n"
+msgstr "dòng %d: Thẻ chấp nhận chỉ một hiệu bài: %s\n"
+
+#: build/parsePreamble.c:616
+#, c-format
+msgid "line %d: %s in: %s\n"
+msgstr "dòng %d: %s trong: %s\n"
+
+#: build/parsePreamble.c:618
+#, c-format
+msgid "%s in: %s\n"
+msgstr "%s trong: %s\n"
+
+#: build/parsePreamble.c:637
+#, c-format
+msgid "Illegal char '%c' (0x%x)"
+msgstr "ký tự không hợp lệ “%c†(0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "chuỗi không hợp lệ \"..\""
+
+#: build/parsePreamble.c:737
+#, c-format
+msgid "line %d: Malformed tag: %s\n"
+msgstr "dòng %d: Thẻ dạng sai: %s\n"
+
+#: build/parsePreamble.c:745
+#, c-format
+msgid "line %d: Empty tag: %s\n"
+msgstr "dòng %d: Thẻ rỗng: %s\n"
+
+#: build/parsePreamble.c:806
+#, c-format
+msgid "line %d: Prefixes must not end with \"/\": %s\n"
+msgstr "dòng %d: Tiá»n tố không nên kết thúc vá»›i dấu sổ chéo “/â€: %s\n"
+
+#: build/parsePreamble.c:818
+#, c-format
+msgid "line %d: Docdir must begin with '/': %s\n"
+msgstr ""
+"dòng %d: Docdir (thÆ° mục tài liệu) phải bắt đầu vá»›i dấu sổ chéo “/â€: %s\n"
+
+#: build/parsePreamble.c:831
+#, c-format
+msgid "line %d: Epoch field must be an unsigned number: %s\n"
+msgstr "dòng %d: trÆ°á»ng Epoch (Ká»· nguyên) phải là con số không dấu: %s\n"
+
+#: build/parsePreamble.c:868
+#, c-format
+msgid "line %d: Bad %s: qualifiers: %s\n"
+msgstr "dòng %d: %s sai: Ä‘iá»u kiện: %s\n"
+
+#: build/parsePreamble.c:902
+#, c-format
+msgid "line %d: Bad BuildArchitecture format: %s\n"
+msgstr "dòng %d: định dạng BuildArchitecture (kiến trúc xây dựng) sai: %s\n"
+
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
+#, c-format
+msgid "line %d: Only noarch subpackages are supported: %s\n"
+msgstr "dòng %d: Chỉ hỗ trợ gói phụ kiểu “noarch†(không có kiến trúc): %s\n"
+
+#: build/parsePreamble.c:934
+#, c-format
+msgid "Internal error: Bogus tag %d\n"
+msgstr "Lỗi nội bộ: Thẻ giả %d\n"
+
+#: build/parsePreamble.c:1032
+#, c-format
+msgid "line %d: %s is deprecated: %s\n"
+msgstr "dòng %d: không tán thành %s: %s\n"
+
+#: build/parsePreamble.c:1093
+#, c-format
+msgid "Bad package specification: %s\n"
+msgstr "Äặc tả gói sai: %s\n"
+
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
+
+#: build/parsePreamble.c:1144
+#, c-format
+msgid "line %d: Unknown tag: %s\n"
+msgstr "dòng %d: Không rõ thẻ: %s\n"
+
+#: build/parsePreamble.c:1176
+#, c-format
+msgid "%%{buildroot} couldn't be empty\n"
+msgstr "%%{buildroot} không thể là rỗng\n"
+
+#: build/parsePreamble.c:1180
+#, c-format
+msgid "%%{buildroot} can not be \"/\"\n"
+msgstr "%%{buildroot} không thể là \"/\"\n"
+
+#: build/parsePrep.c:29
+#, c-format
+msgid "Bad source: %s: %s\n"
+msgstr "Nguồn sai: %s: %s\n"
+
+#: build/parsePrep.c:74
+#, c-format
+msgid "No patch number %u\n"
+msgstr "Không có miếng và số %u\n"
+
+#: build/parsePrep.c:76
+#, c-format
+msgid "%%patch without corresponding \"Patch:\" tag\n"
+msgstr "%%patch mà không có thẻ \"Patch:\" tương ứng\n"
+
+#: build/parsePrep.c:164
+#, c-format
+msgid "No source number %u\n"
+msgstr "Không có số nguồn %u\n"
+
+#: build/parsePrep.c:166
+msgid "No \"Source:\" tag in the spec file\n"
+msgstr "Không có thẻ \"Source:\" trong tập tin đặc tả\n"
+
+#: build/parsePrep.c:300
+#, c-format
+msgid "Error parsing %%setup: %s\n"
+msgstr "Lỗi phân tích thiết lập (%%setup): %s\n"
+
+#: build/parsePrep.c:311
+#, c-format
+msgid "line %d: Bad arg to %%setup: %s\n"
+msgstr "dòng %d: Äối số sai tá»›i thiết lập (%%setup): %s\n"
+
+#: build/parsePrep.c:326
+#, c-format
+msgid "line %d: Bad %%setup option %s: %s\n"
+msgstr "dòng %d: Tùy chá»n thiết lập (%%setup) sai %s: %s\n"
+
+#: build/parsePrep.c:495
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#: build/parsePrep.c:508
+#, c-format
+msgid "Invalid patch number %s: %s\n"
+msgstr "Miếng và sô %s không hợp lệ: %s\n"
+
+#: build/parsePrep.c:535
+#, c-format
+msgid "line %d: second %%prep\n"
+msgstr "dòng %d: chuẩn bị (%%prep) thứ hai\n"
+
+#: build/parseReqs.c:52
+msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
+msgstr ""
+"Các thẻ bài vỠquan hệ phụ thuộc phải bắt đầu với chữ cái, chữ số, dấu gạch "
+"dÆ°á»›i “_†hoặc dấu sổ chéo “/â€"
+
+#: build/parseReqs.c:57
+msgid "Versioned file name not permitted"
+msgstr "Không cho phép tên tập tin đặt phiên bản"
+
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "Không có phần phụ thuộc dồi dào cho phép với kiểu này"
+
+#: build/parseReqs.c:232 build/parseReqs.c:307
+msgid "invalid dependency"
+msgstr "phần phụ thuộc không hợp lệ"
+
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "Yêu cầu phiên bản"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "Chỉ có Ä‘Æ°á»ng dẫn tuyệt đối là cho phép trong bẫy tập tin"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr "Bẫy bị kích sập bởi cùng một gói đã sẵn được định nghĩa trong tập tin "
+
+#: build/parseReqs.c:324
+#, c-format
+msgid "line %d: %s: %s\n"
+msgstr "dòng %d: %s: %s\n"
+
+#: build/parseScript.c:263
+#, c-format
+msgid "line %d: triggers must have --: %s\n"
+msgstr "dòng %d: các bẫy phải có --: %s\n"
+
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
+#, c-format
+msgid "line %d: Error parsing %s: %s\n"
+msgstr "dòng %d: Lỗi phân tích %s: %s\n"
+
+#: build/parseScript.c:293
+#, c-format
+msgid "line %d: internal script must end with '>': %s\n"
+msgstr "dòng %d: văn lệnh ná»™i tại phải kết thúc bằng “>â€: %s\n"
+
+#: build/parseScript.c:299
+#, c-format
+msgid "line %d: script program must begin with '/': %s\n"
+msgstr ""
+"dòng %d: ChÆ°Æ¡ng trình đặt văn lệnh phải bắt đầu vá»›i dấu sổ chéo “/â€: %s\n"
+
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr "dòng %d: Ưu tiên chỉ cho phép với các bẫy tập tin: %s\n"
+
+#: build/parseScript.c:344
+#, c-format
+msgid "line %d: Second %s\n"
+msgstr "dòng %d: %s thứ hai\n"
+
+#: build/parseScript.c:386
+#, c-format
+msgid "line %d: unsupported internal script: %s\n"
+msgstr "dòng %d: văn lệnh nội bộ không được hỗ trợ: %s\n"
+
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
+#, c-format
+msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
+msgstr "dòng %d: phiên dịch tham số không được phép trong bẫy: %s\n"
+
+#: build/parseSpec.c:190
+#, c-format
+msgid "line %d: %s\n"
+msgstr "dòng %d: %s\n"
+
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr "Vĩ lệnh được khai triển trong phần ghi chú trên dòng %d: %s\n"
+
+#: build/parseSpec.c:317
+#, c-format
+msgid "Unable to open %s: %s\n"
+msgstr "Không thể mở %s: %s\n"
+
+#: build/parseSpec.c:351
+#, c-format
+msgid "%s:%d: Argument expected for %s\n"
+msgstr "%s:%d: Cần đối số cho %s\n"
+
+#: build/parseSpec.c:373
+#, c-format
+msgid "line %d: Unclosed %%if\n"
+msgstr "dòng %d: Chưa đóng %%if\n"
+
+#: build/parseSpec.c:378
+#, c-format
+msgid "line %d: unclosed macro or bad line continuation\n"
+msgstr "dòng %d: chưa đóng vĩ lệnh hoặc dòng kéo dài sai\n"
+
+#: build/parseSpec.c:420
+#, c-format
+msgid "%s:%d: bad %%if condition\n"
+msgstr "%s:%d: Ä‘iá»u kiện %%if sai\n"
+
+#: build/parseSpec.c:428
+#, c-format
+msgid "%s:%d: Got a %%else with no %%if\n"
+msgstr "%s:%d: Có một toán tử %%else (nếu không) mà không có %%if (nếu)\n"
+
+#: build/parseSpec.c:439
+#, c-format
+msgid "%s:%d: Got a %%endif with no %%if\n"
+msgstr "%s:%d: Có một toán tử %%endif (kết thúc nếu) mà không có %%if (nếu)\n"
+
+#: build/parseSpec.c:460
+#, c-format
+msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d: câu lệnh bao gồm (%%include) sai dạng\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "bảng mã %s không được hệ thống hỗ trợ\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "Gói %s: bảng mã %s không hợp lệ trong %s: %s - %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
+msgid "No compatible architectures found for build\n"
+msgstr "Không tìm thấy kiến trúc tương thích để xây dựng\n"
+
+#: build/parseSpec.c:912
+#, c-format
+msgid "Package has no %%description: %s\n"
+msgstr "Gói không có mô tả (%%description): %s\n"
+
+#: build/policies.c:87
+#, c-format
+msgid "Policy module '%s' duplicated with overlapping types\n"
+msgstr "Mô-đun chính sách bị trùng “%s†với kiểu đè lên nhau\n"
+
+#: build/policies.c:93
+#, c-format
+msgid "Base modules '%s' and '%s' have overlapping types\n"
+msgstr "Các mô-đun cơ sở “%s†và “%s†có kiểu đè lên nhau\n"
+
+#: build/policies.c:101
+msgid "Failed to get policies from header\n"
+msgstr "Gặp lỗi khi lấy chính sách từ phần đầu\n"
+
+#: build/policies.c:154
+#, c-format
+msgid "%%semodule requires a file path\n"
+msgstr "%%semodule cần Ä‘Æ°á»ng dẫn tập tin\n"
+
+#: build/policies.c:163
+#, c-format
+msgid "Failed to read policy file: %s\n"
+msgstr "Gặp lá»—i khi Ä‘á»c tập tin chính sách: %s\n"
+
+#: build/policies.c:170
+#, c-format
+msgid "Failed to encode policy file: %s\n"
+msgstr "Gặp lỗi khi giải mã tập tin chính sách: %s\n"
+
+#: build/policies.c:187
+#, c-format
+msgid "Failed to determine a policy name: %s\n"
+msgstr "Gặp lỗi khi dò tìm tên chính sách: %s\n"
+
+#: build/policies.c:199
+#, c-format
+msgid ""
+"'%s' type given with other types in %%semodule %s. Compacting types to "
+"'%s'.\n"
+msgstr ""
+"kiểu “%s†đưa ra với kiểu khác trong %%semodule %s. Tóm lược các kiểu thành "
+"“%sâ€.\n"
+
+#: build/policies.c:246
+#, c-format
+msgid "Error parsing %s: %s\n"
+msgstr "Lỗi phân tích cú pháp %s: %s\n"
+
+#: build/policies.c:252
+#, c-format
+msgid "Expecting %%semodule tag: %s\n"
+msgstr "Cần thẻ %%semodule: %s\n"
+
+#: build/policies.c:262
+#, c-format
+msgid "Missing module path in line: %s\n"
+msgstr "Thiếu Ä‘Æ°á»ng dẫn mô-Ä‘un trong dòng: %s\n"
+
+#: build/policies.c:268
+#, c-format
+msgid "Too many arguments in line: %s\n"
+msgstr "Quá nhiá»u đối số trong dòng: %s\n"
+
+#: build/policies.c:307
+#, c-format
+msgid "Processing policies: %s\n"
+msgstr "Thực hiện các chính sách: %s\n"
+
+#: build/rpmfc.c:160
+#, c-format
+msgid "Ignoring invalid regex %s\n"
+msgstr "BỠqua biểu thức chính quy không hợp lệ %s\n"
+
+#: build/rpmfc.c:266
+#, c-format
+msgid "Couldn't create pipe for %s: %m\n"
+msgstr "Không thể tạo ống dẫn cho %s: %m\n"
+
+#: build/rpmfc.c:289
+#, c-format
+msgid "Couldn't exec %s: %s\n"
+msgstr "Không thể thực hiện %s: %s\n"
+
+#: build/rpmfc.c:294 lib/rpmscript.c:320
+#, c-format
+msgid "Couldn't fork %s: %s\n"
+msgstr "Không thể tạo tiến trình con %s: %s\n"
+
+#: build/rpmfc.c:377
+#, c-format
+msgid "%s failed: %x\n"
+msgstr "%s bị lỗi: %x\n"
+
+#: build/rpmfc.c:381
+#, c-format
+msgid "failed to write all data to %s: %s\n"
+msgstr "gặp lỗi khi toàn bộ dữ liệu vào %s: %s\n"
+
+#: build/rpmfc.c:1032
+msgid "Empty file classifier\n"
+msgstr "Phân loại tập tin trống rỗng\n"
+
+#: build/rpmfc.c:1041
+msgid "No file attributes configured\n"
+msgstr "Chưa có các thuộc tính tập tin được cấu hình\n"
+
+#: build/rpmfc.c:1060
+#, c-format
+msgid "magic_open(0x%x) failed: %s\n"
+msgstr "magic_open(0x%x) bị lỗi: %s\n"
+
+#: build/rpmfc.c:1066
+#, c-format
+msgid "magic_load failed: %s\n"
+msgstr "magic_load gặp lỗi: %s\n"
+
+#: build/rpmfc.c:1108
+#, c-format
+msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
+msgstr "Gặp lỗi khi chấp nhận tập tin \"%s\": chế độ %06o %s\n"
+
+#: build/rpmfc.c:1309
+#, c-format
+msgid "Finding %s: %s\n"
+msgstr "Äang tìm %s: %s\n"
+
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
+#, c-format
+msgid "Failed to find %s:\n"
+msgstr "Gặp lỗi khi tìm %s:\n"
+
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
+#, c-format
+msgid "query of specfile %s failed, can't parse\n"
+msgstr "lỗi truy vấn tập tin đặc tả %s nên không phân tích được\n"
+
+#: lib/backend/db3.c:97
+#, c-format
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s lỗi(%d) từ %s: %s\n"
+
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s lá»—i(%d): %s\n"
+
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "không nhận ra tùy chá»n cÆ¡ sở dữ liệu “%s†nên bá» qua.\n"
+
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s có giá trị thuộc số không hợp lệ nên bỠqua\n"
+
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s có giá trị dài quá lớn hoặc quá nhỠnên bỠqua\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s có giá trị nguyên quá lớn hoặc quá nhỠnên bỠqua\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "không thể lấy khóa %s ở %s/%s\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "chung"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "Ä‘á»™c quyá»n"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "kiểu bảng mục mục không hợp lệ %x trên %s/%s\n"
+
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr "gặp lỗi (%d) khi lấy bản ghi \"%s\" từ chỉ mục %s: %s\n"
+
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "gặp lỗi (%d) khi ghi bản ghi %s vào %s\n"
+
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "Gặp lá»—i (%d) khi gỡ bá» bản ghi “%s†ra khá»i %s\n"
+
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr "lỗi (%d) khi thêm bản ghi phần đầu #%d\n"
+
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "lỗi (%d) khi gỡ bỠbản ghi phần đầu #%d\n"
+
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "lỗi (%d) phân bỠminh dụ gói mới\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
+#, c-format
+msgid "%s is a Delta RPM and cannot be directly installed\n"
+msgstr "%s là một Delta RPM và không thể được cài đặt trực tiếp\n"
+
+#: lib/depends.c:97
+#, c-format
+msgid "Unsupported payload (%s) in package %s\n"
+msgstr "Không hỗ trợ phần tải (%s) trong gói %s\n"
+
+#: lib/depends.c:377
+#, c-format
+msgid "package %s was already added, skipping %s\n"
+msgstr "gói %s đã được thêm vào nên bỠqua %s\n"
+
+#: lib/depends.c:378
+#, c-format
+msgid "package %s was already added, replacing with %s\n"
+msgstr "gói %s đã được thêm vào nên thay thế bằng %s\n"
+
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(không phải blob)"
+
+#: lib/formats.c:43
+msgid "(not a number)"
+msgstr "(không phải con số)"
+
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(không phải chuỗi)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(kiểu không hợp lệ)"
+
+#: lib/formats.c:116
+#, c-format
+msgid "%c"
+msgstr "%c"
+
+#: lib/formats.c:122
+msgid "%a %b %d %Y"
+msgstr "%a %d %b %Y"
+
+#: lib/formats.c:253
+msgid "(not base64)"
+msgstr "(không phải base64)"
+
+#: lib/formats.c:313
+msgid "(invalid xml type)"
+msgstr "(kiểu XML không hợp lệ)"
+
+#: lib/formats.c:358
+msgid "(not an OpenPGP signature)"
+msgstr "(không phải chữ ký OpenPGP)"
+
+#: lib/formats.c:369
+#, c-format
+msgid "Invalid date %u"
+msgstr "Ngày không hợp lệ %u"
+
+#: lib/formats.c:417
+msgid "normal"
+msgstr "thông thÆ°á»ng"
+
+#: lib/formats.c:420 lib/verify.c:393
+msgid "replaced"
+msgstr "đã thay thế"
+
+#: lib/formats.c:423 lib/verify.c:387
+msgid "not installed"
+msgstr "chưa cài đặt"
+
+#: lib/formats.c:426 lib/verify.c:389
+msgid "net shared"
+msgstr "chia sẻ qua mạng"
+
+#: lib/formats.c:429 lib/verify.c:391
+msgid "wrong color"
+msgstr "màu sai"
+
+#: lib/formats.c:432
+msgid "missing"
+msgstr "thiếu"
+
+#: lib/formats.c:435
+msgid "(unknown)"
+msgstr "(không hiểu)"
+
+#: lib/fsm.c:745
+#, c-format
+msgid "%s saved as %s\n"
+msgstr "%s được lưu dạng %s\n"
+
+#: lib/fsm.c:798
+#, c-format
+msgid "%s created as %s\n"
+msgstr "%s được tạo dạng %s\n"
+
+#: lib/fsm.c:1082
+#, c-format
+msgid "%s %s: remove failed: %s\n"
+msgstr "%s %s: gặp lá»—i khi gỡ bá»: %s\n"
+
+#: lib/fsm.c:1083
+msgid "directory"
+msgstr "thư mục"
+
+#: lib/fsm.c:1083
+msgid "file"
+msgstr "tập tin"
+
+#: lib/header.c:285
+#, c-format
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
+
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "tải hdr: SAI"
+
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr "thẻ vùng: SAI, thẻ %d kiểu %d bù %d số lượng %d"
+
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr "bù vùng: SAI, thẻ %d kiểu %d bù %d số lượng %d"
+
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr "vùng theo đuôi: SAI, thẻ %d kiểu %d bù %d số lượng %d"
+
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
+
+#: lib/header.c:1841
+#, c-format
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
+
+#: lib/header.c:1876
+#, c-format
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr "kích cỡ hdr (%d): SAI, hàm Ä‘á»c đã trả vá» %d"
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "ma thuật hdr: SAI"
+
+#: lib/header.c:1885
+#, c-format
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr "thẻ hdr: SAI, tổng số thẻ (%d) ở ngoài phạm vi"
+
+#: lib/header.c:1890
+#, c-format
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr "dữ liệu hdr: SAI, tổng số byte (%d) ở ngoài phạm vi"
+
+#: lib/header.c:1900
+#, c-format
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr "hdr blob(%zd): SAI, việc Ä‘á»c trả vá» %d"
+
+#: lib/header.c:1909
+#, c-format
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "đệm sigh(%zd): SAI, Ä‘á»c %zd byte"
+
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
+
+#: lib/header.c:1949
+#, c-format
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr "kích cỡ blob (%d): SAI, 8 + 16 * il(%d) + dl(%d)"
+
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "sai chiá»u rá»™ng trÆ°á»ng"
+
+#: lib/headerfmt.c:362
+#, c-format
+msgid "missing { after %%"
+msgstr ""
+
+#: lib/headerfmt.c:384
+#, c-format
+msgid "missing } after %%{"
+msgstr ""
+
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "định dạng thẻ trống"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "tên thẻ trống"
+
+#: lib/headerfmt.c:413
+#, c-format
+msgid "unknown tag: \"%s\""
+msgstr ""
+
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "cần dấu ngoặc vuông đóng “]†ở kết thúc của mảng"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "gặp dấu ngoặc vuông đóng “]†bất thÆ°á»ng"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "gặp dấu ngoặc móc đóng “}†bất thÆ°á»ng"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "cần dấu há»i “?†trong biểu thức"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "cần dấu ngoặc móc mở “{†sau dấu há»i “?†trong biểu thức"
+
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "cần dấu ngoặc móc đóng “}†trong biểu thức"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr "cần dấu hai chấm “:†theo sau biểu thức phụ dấu há»i “?â€"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "cần dấu ngoặc móc mở “{†sau dấu hai chấm “:†trong biểu thức"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "cần ký hiệu ống dẫn “|†ở kết thúc của biểu thức"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "đồ lặp lại mảng được sử dụng với các mảng có kích cỡ khác nhau"
+
+#: lib/poptALL.c:154
+#, c-format
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
+"%s: lá»—i: đã cho nhiá»u hÆ¡n má»™t --pipe (bí danh popt không tÆ°Æ¡ng thích?)\n"
+
+#: lib/poptALL.c:188
+msgid "predefine MACRO with value EXPR"
+msgstr "VĨ_LỆNH định nghĩa sẵn với giá trị B_THỨC"
+
+#: lib/poptALL.c:189 lib/poptALL.c:192
+msgid "'MACRO EXPR'"
+msgstr "“VĨ_LỆNH B_THỨCâ€"
+
+#: lib/poptALL.c:191
+msgid "define MACRO with value EXPR"
+msgstr "VĨ_LỆNH định nghĩa với giá trị B_THỨC"
+
+#: lib/poptALL.c:194
+msgid "undefine MACRO"
+msgstr "Hủy định nghĩa VĨ_LỆNH"
+
+#: lib/poptALL.c:195
+msgid "MACRO"
+msgstr "VĨ LỆNH"
+
+#: lib/poptALL.c:197
+msgid "print macro expansion of EXPR"
+msgstr "in phần mở rộng vĩ lệnh của B_THỨC"
+
+#: lib/poptALL.c:198
+msgid "'EXPR'"
+msgstr "“B_THỨCâ€"
+
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
+msgid "read <FILE:...> instead of default file(s)"
+msgstr "Ä‘á»c <TẬP TIN:…> thay cho (những) tập tin mặc định"
+
+#: lib/poptALL.c:203 lib/poptALL.c:222
+msgid "<FILE:...>"
+msgstr "<TẬP-TIN:…>"
+
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "không thể bật bất kỳ phần bổ xung nào"
+
+#: lib/poptALL.c:211
+msgid "don't verify package digest(s)"
+msgstr "không thẩm tra mã băm của gói"
+
+#: lib/poptALL.c:213
+msgid "don't verify database header(s) when retrieved"
+msgstr "không thẩm tra phần đầu cơ sở dữ liệu khi tìm được"
+
+#: lib/poptALL.c:215
+msgid "don't verify package signature(s)"
+msgstr "không xác minh chữ ký gói"
+
+#: lib/poptALL.c:218
+msgid "send stdout to CMD"
+msgstr "gửi đầu ra tiêu chuẩn tới câu LỆNH"
+
+#: lib/poptALL.c:219
+msgid "CMD"
+msgstr "LỆNH"
+
+#: lib/poptALL.c:224
+msgid "use ROOT as top level directory"
+msgstr "dùng Gá»C là thÆ° mục cấp cao nhất"
+
+#: lib/poptALL.c:225
+msgid "ROOT"
+msgstr "Gá»C"
+
+#: lib/poptALL.c:227
+msgid "use database in DIRECTORY"
+msgstr "dùng cơ sở dữ liệu trong THƯ-MỤC"
+
+#: lib/poptALL.c:228
+msgid "DIRECTORY"
+msgstr "THƯ-MỤC"
+
+#: lib/poptALL.c:231
+msgid "display known query tags"
+msgstr "hiển thị các thẻ truy vấn đã biết"
+
+#: lib/poptALL.c:233
+msgid "display final rpmrc and macro configuration"
+msgstr "hiển thị toàn thể rpmrc và cấu hình vĩ lệnh"
+
+#: lib/poptALL.c:235
+msgid "provide less detailed output"
+msgstr "cung cấp kết xuất ít chi tiết hơn"
+
+#: lib/poptALL.c:237
+msgid "provide more detailed output"
+msgstr "cung cấp kết xuất nhiá»u chi tiết hÆ¡n"
+
+#: lib/poptALL.c:239
+msgid "print the version of rpm being used"
+msgstr "hiển thị phiên bản rpm đang dùng"
+
+#: lib/poptALL.c:245
+msgid "debug payload file state machine"
+msgstr "cỡ lá»—i CÆ¡ chế Tình trạng Tập tin trá»ng tải"
+
+#: lib/poptALL.c:251
+msgid "debug rpmio I/O"
+msgstr "gỡ lỗi V/R rpmio"
+
+#: lib/poptALL.c:310
+#, c-format
+msgid "%s: option table misconfigured (%d)\n"
+msgstr "%s: sai cấu hình bảng tùy chá»n (%d)\n"
+
+#: lib/poptI.c:52
+msgid "exclude paths must begin with a /"
+msgstr "Ä‘Æ°á»ng dẫn loại trừ phải bắt đầu vá»›i dấu sổ chéo “/â€"
+
+#: lib/poptI.c:64
+msgid "relocations must begin with a /"
+msgstr "sá»± tái định vị phải bắt đầu vá»›i dấu sổ chéo “/â€"
+
+#: lib/poptI.c:67
+msgid "relocations must contain a ="
+msgstr "sá»± tái định vị phải chứa má»™t dấu bằng “=â€"
+
+#: lib/poptI.c:70
+msgid "relocations must have a / following the ="
+msgstr "sá»± tái định vị phải có má»™t dấu sổ chéo “/†theo sau dấu bằng “=â€"
+
+#: lib/poptI.c:118
+msgid "install all files, even configurations which might otherwise be skipped"
+msgstr ""
+"cài đặt tất cả các tập tin, ngay cả cấu hình mà có thể bị bỠqua bằng cách "
+"khác"
+
+#: lib/poptI.c:122
+msgid ""
+"remove all packages which match <package> (normally an error is generated if "
+"<package> specified multiple packages)"
+msgstr ""
+"gỡ bá» tất cả các gói tÆ°Æ¡ng ứng vá»›i <gói> (thÆ°á»ng thì má»™t lá»—i phát sinh nếu "
+"<gói> định rõ nhiá»u gói)"
+
+#: lib/poptI.c:127
+msgid "relocate files in non-relocatable package"
+msgstr "tái định vị các tập tin trong gói không thể tái định vị"
+
+#: lib/poptI.c:131
+msgid "print dependency loops as warning"
+msgstr "in dạng cảnh báo các vòng lặp của quan hệ phụ thuộc"
+
+#: lib/poptI.c:135
+msgid "erase (uninstall) package"
+msgstr "xóa (gỡ bá») gói"
+
+#: lib/poptI.c:135
+msgid "<package>+"
+msgstr "<gói>+"
+
+#: lib/poptI.c:138 lib/poptI.c:175
+msgid "do not install configuration files"
+msgstr "không cài đặt tập tin cấu hình"
+
+#: lib/poptI.c:141 lib/poptI.c:180
+msgid "do not install documentation"
+msgstr "không cài đặt tài liệu hướng dẫn"
+
+#: lib/poptI.c:143
+msgid "skip files with leading component <path> "
+msgstr "bá» qua các tập tin vá»›i bá»™ phận hÆ°á»›ng dẫn <Ä‘Æ°á»ng_dẫn>"
+
+#: lib/poptI.c:144
+msgid "<path>"
+msgstr "<Ä‘Æ°á»ng_dẫn>"
+
+#: lib/poptI.c:147
+msgid "short hand for --replacepkgs --replacefiles"
+msgstr "kiểu viết tắt cho --replacepkgs --replacefiles"
+
+#: lib/poptI.c:151
+msgid "upgrade package(s) if already installed"
+msgstr "nâng cấp gói đã cài đặt"
+
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
+msgid "<packagefile>+"
+msgstr "<tập_tin_gói>+"
+
+#: lib/poptI.c:154
+msgid "print hash marks as package installs (good with -v)"
+msgstr "in những ký hiệu lộn xộn khi cài đặt gói (rất tốt với -v)"
+
+#: lib/poptI.c:157
+msgid "don't verify package architecture"
+msgstr "không thẩm tra kiến trúc của gói"
+
+#: lib/poptI.c:160
+msgid "don't verify package operating system"
+msgstr "không thẩm tra hệ Ä‘iá»u hành của gói"
+
+#: lib/poptI.c:163
+msgid "don't check disk space before installing"
+msgstr "không kiểm tra khoảng trống trên đĩa trước khi cài đặt"
+
+#: lib/poptI.c:165
+msgid "install documentation"
+msgstr "cài đặt tài liệu hướng dẫn"
+
+#: lib/poptI.c:168
+msgid "install package(s)"
+msgstr "cài đặt gói"
+
+#: lib/poptI.c:171
+msgid "update the database, but do not modify the filesystem"
+msgstr "cập nhật cơ sở dữ liệu, mà không sửa đổi hệ thống tập tin"
+
+#: lib/poptI.c:177
+msgid "do not verify package dependencies"
+msgstr "không thẩm tra quan hệ phụ thuộc giữa các gói"
+
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
+msgid "don't verify digest of files"
+msgstr "không thẩm tra mã băm của tập tin"
+
+#: lib/poptI.c:185
+msgid "don't verify digest of files (obsolete)"
+msgstr "không thẩm tra mã băm của tập tin (không dùng nữa)"
+
+#: lib/poptI.c:187
+msgid "don't install file security contexts"
+msgstr "không cài đặt ngữ cảnh bảo mật tập tin"
+
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
+msgid "do not reorder package installation to satisfy dependencies"
+msgstr "không sắp xếp lại gói cần cài đặt để thá»a quan hệ phụ thuá»™c"
+
+#: lib/poptI.c:197
+msgid "do not execute package scriptlet(s)"
+msgstr "không thực hiện văn lệnh nhỠcủa gói"
+
+#: lib/poptI.c:201
+#, c-format
+msgid "do not execute %%pre scriptlet (if any)"
+msgstr "không thực hiện văn lệnh nhỠ%%pre (nếu có)"
+
+#: lib/poptI.c:204
+#, c-format
+msgid "do not execute %%post scriptlet (if any)"
+msgstr "không thực hiện văn lệnh nhỠ%%post (nếu có)"
+
+#: lib/poptI.c:207
+#, c-format
+msgid "do not execute %%preun scriptlet (if any)"
+msgstr "không thực hiện văn lệnh nhỠ%%preun (nếu có)"
+
+#: lib/poptI.c:210
+#, c-format
+msgid "do not execute %%postun scriptlet (if any)"
+msgstr "không thực hiện văn lệnh nhỠ%%postun (nếu có)"
+
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "không thực hiện văn lệnh nhỠ%%pretrans (nếu có)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "không thực hiện văn lệnh nhỠ%%postrans (nếu có)"
+
+#: lib/poptI.c:219
+msgid "do not execute any scriptlet(s) triggered by this package"
+msgstr "không chạy bất kỳ văn lệnh nhỠnào được gói này kích hoạt"
+
+#: lib/poptI.c:222
+#, c-format
+msgid "do not execute any %%triggerprein scriptlet(s)"
+msgstr ""
+"không chạy bất kỳ văn lệnh nhỠcài đặt sẵn đã kích hoạt (%%triggerprein)"
+
+#: lib/poptI.c:225
+#, c-format
+msgid "do not execute any %%triggerin scriptlet(s)"
+msgstr "không chạy bất kỳ văn lệnh nhỠcài đặt đã kích hoạt (%%triggerin)"
+
+#: lib/poptI.c:228
+#, c-format
+msgid "do not execute any %%triggerun scriptlet(s)"
+msgstr "không chạy bất kỳ văn lệnh nhỠxóa đã kích hoạt (%%triggerun)"
+
+#: lib/poptI.c:231
+#, c-format
+msgid "do not execute any %%triggerpostun scriptlet(s)"
+msgstr "không chạy bất kỳ vi văn lệnh xóa cuối đã kích hoạt (%%triggerpostun)"
+
+#: lib/poptI.c:235
+msgid ""
+"upgrade to an old version of the package (--force on upgrades does this "
+"automatically)"
+msgstr ""
+"hạ cấp xuống má»™t phiên bản cÅ© của gói (tùy chá»n “--force†khi nâng cấp thì "
+"tự động làm)"
+
+#: lib/poptI.c:239
+msgid "print percentages as package installs"
+msgstr "in ra phần trăm trong khi cài đặt gói"
+
+#: lib/poptI.c:241
+msgid "relocate the package to <dir>, if relocatable"
+msgstr "có thể tái định vị thì chuyển gói vào <thư_mục>"
+
+#: lib/poptI.c:242
+msgid "<dir>"
+msgstr "<th.mục>"
+
+#: lib/poptI.c:244
+msgid "relocate files from path <old> to <new>"
+msgstr "tái định vị các tập tin từ Ä‘Æ°á»ng dẫn <cÅ©> tá»›i <má»›i>"
+
+#: lib/poptI.c:245
+msgid "<old>=<new>"
+msgstr "<cũ>=<mới>"
+
+#: lib/poptI.c:248
+msgid "ignore file conflicts between packages"
+msgstr "bỠqua tập tin xung đột giữa các gói"
+
+#: lib/poptI.c:251
+msgid "reinstall if the package is already present"
+msgstr "gói đã có thì cài đặt lại "
+
+#: lib/poptI.c:253
+msgid "don't install, but tell if it would work or not"
+msgstr "không cài đặt, nhưng cho biết nó có thể hoạt động hay không"
+
+#: lib/poptI.c:256
+msgid "upgrade package(s)"
+msgstr "nâng cấp gói"
+
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "cài đặt lại (các) gói"
+
+#: lib/poptQV.c:75
+msgid "query/verify all packages"
+msgstr "truy vấn/thẩm tra má»i gói"
+
+#: lib/poptQV.c:77
+msgid "rpm checksig mode"
+msgstr "chế độ kiểm tra chữ ký RPM"
+
+#: lib/poptQV.c:79
+msgid "query/verify package(s) owning file"
+msgstr "truy vấn/thẩm tra (những) gói nào sở hữu tập tin"
+
+#: lib/poptQV.c:81
+msgid "query/verify package(s) in group"
+msgstr "truy vấn/thẩm tra (các) gói trong nhóm"
+
+#: lib/poptQV.c:83
+msgid "query/verify a package file"
+msgstr "truy vấn/thẩm tra một tập tin gói"
+
+#: lib/poptQV.c:86
+msgid "query/verify package(s) with package identifier"
+msgstr "truy vấn/thẩm tra (các) gói với định danh gói"
+
+#: lib/poptQV.c:88
+msgid "query/verify package(s) with header identifier"
+msgstr "truy vấn/thẩm tra (các) gói với định danh phần đầu"
+
+#: lib/poptQV.c:91
+msgid "rpm query mode"
+msgstr "chế độ truy vấn RPM"
+
+#: lib/poptQV.c:93
+msgid "query/verify a header instance"
+msgstr "truy vấn/thẩm tra một phần đầu cụ thể"
+
+#: lib/poptQV.c:95
+msgid "query/verify package(s) from install transaction"
+msgstr "truy vấn/thẩm tra (các) gói từ giao dịch cài đặt"
+
+#: lib/poptQV.c:97
+msgid "query the package(s) triggered by the package"
+msgstr "truy vấn (các) gói được gói kích hoạt"
+
+#: lib/poptQV.c:99
+msgid "rpm verify mode"
+msgstr "chế độ thẩm tra RPM"
+
+#: lib/poptQV.c:101
+msgid "query/verify the package(s) which require a dependency"
+msgstr "truy vấn/thẩm tra (các) gói mà cần thiết quan hệ phụ thuộc"
+
+#: lib/poptQV.c:103
+msgid "query/verify the package(s) which provide a dependency"
+msgstr "truy vấn/thẩm tra (các) gói mà thá»a má»™t quan hệ phụ thuá»™c"
+
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr "truy vấn hay thẩm tra (các) gói cái mà khuyến nghị một phần phụ thuộc"
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr "truy vấn hay thẩm tra (các) gói cái mà gợi một phần phụ thuộc"
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr "truy vấn hay thẩm tra (các) gói cái mà bổ xung một phần phụ thuộc"
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr "truy vấn hay thẩm tra (các) gói cái mà tăng cÆ°á»ng má»™t phần phụ thuá»™c"
+
+#: lib/poptQV.c:114
+msgid "do not glob arguments"
+msgstr "không glob đối số"
+
+#: lib/poptQV.c:116
+msgid "do not process non-package files as manifests"
+msgstr "không xử lý dạng bản kê tập tin không phải gói "
+
+#: lib/poptQV.c:193
+msgid "list all configuration files"
+msgstr "liệt kê má»i tập tin cấu hình"
+
+#: lib/poptQV.c:195
+msgid "list all documentation files"
+msgstr "liệt kê má»i tập tin tài liệu hÆ°á»›ng dẫn"
+
+#: lib/poptQV.c:197
+msgid "list all license files"
+msgstr "liệt kê má»i tập tin giấy phép"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "liệt kê má»i tập tin giấy phép"
+
+#: lib/poptQV.c:201
+msgid "dump basic file information"
+msgstr "đổ thông tin tập tin cơ bản"
+
+#: lib/poptQV.c:205
+msgid "list files in package"
+msgstr "liệt kê các tập tin trong gói"
+
+#: lib/poptQV.c:210
+#, c-format
+msgid "skip %%ghost files"
+msgstr "bỠqua các tập tin ma (%%ghost)"
+
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "bỠqua các tập tin ma (%%ghost)"
+
+#: lib/poptQV.c:223
+msgid "display the states of the listed files"
+msgstr "hiển thị các tình trạng của những tập tin đã liệt kê"
+
+#: lib/poptQV.c:241
+msgid "don't verify size of files"
+msgstr "không thẩm tra kích cỡ của tập tin"
+
+#: lib/poptQV.c:244
+msgid "don't verify symlink path of files"
+msgstr "không thẩm tra Ä‘Æ°á»ng dẫn liên kết má»m của tập tin"
+
+#: lib/poptQV.c:247
+msgid "don't verify owner of files"
+msgstr "không thẩm tra ngÆ°á»i sở hữu tập tin"
+
+#: lib/poptQV.c:250
+msgid "don't verify group of files"
+msgstr "không thẩm tra nhóm của tập tin"
+
+#: lib/poptQV.c:253
+msgid "don't verify modification time of files"
+msgstr "không thẩm tra thá»i gian sá»­a đổi của tập tin"
+
+#: lib/poptQV.c:256 lib/poptQV.c:259
+msgid "don't verify mode of files"
+msgstr "không thẩm tra chế độ của tập tin"
+
+#: lib/poptQV.c:262
+msgid "don't verify file security contexts"
+msgstr "không thẩm tra ngữ cảnh bảo mật của tập tin"
+
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "không thể thẩm tra kích cỡ của các tập tin"
+
+#: lib/poptQV.c:266
+msgid "don't verify files in package"
+msgstr "không thẩm tra các tập tin trong gói"
+
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
+msgid "don't verify package dependencies"
+msgstr "không thẩm tra các quan hệ phụ thuộc của gói"
+
+#: lib/poptQV.c:271 lib/poptQV.c:274
+msgid "don't execute verify script(s)"
+msgstr "không chạy văn lệnh thẩm tra"
+
+#: lib/psm.c:146
+#, c-format
+msgid "Missing rpmlib features for %s:\n"
+msgstr "Thiếu tính năng rpmlib cho %s:\n"
+
+#: lib/psm.c:183
+msgid "source package expected, binary found\n"
+msgstr "cần gói nguồn còn tìm thấy gói nhị phân\n"
+
+#: lib/psm.c:194
+msgid "source package contains no .spec file\n"
+msgstr "gói nguồn không chứa tập tin đặc tả\n"
+
+#: lib/psm.c:606
+#, c-format
+msgid "unpacking of archive failed%s%s: %s\n"
+msgstr "lỗi giải nén kho %s%s: %s\n"
+
+#: lib/psm.c:607
+msgid " on file "
+msgstr " ở tập tin"
+
+#: lib/query.c:108
+#, c-format
+msgid "incorrect format: %s\n"
+msgstr "định dạng không đúng: %s\n"
+
+#: lib/query.c:120
+msgid "(contains no files)\n"
+msgstr "(không chứa tập tin nào)\n"
+
+#: lib/query.c:161
+msgid "normal "
+msgstr "chuẩn "
+
+#: lib/query.c:164
+msgid "replaced "
+msgstr "bị thay thế "
+
+#: lib/query.c:167
+msgid "not installed "
+msgstr "chưa cài đặt "
+
+#: lib/query.c:170
+msgid "net shared "
+msgstr "chia sẻ qua mạng"
+
+#: lib/query.c:173
+msgid "wrong color "
+msgstr "màu không đúng "
+
+#: lib/query.c:176
+msgid "(no state) "
+msgstr "(không có tình trạng)"
+
+#: lib/query.c:179
+#, c-format
+msgid "(unknown %3d) "
+msgstr "(không rõ %3d) "
+
+#: lib/query.c:199
+msgid "package has not file owner/group lists\n"
+msgstr "gói không có danh sách nhóm/chủ tập tin\n"
+
+#: lib/query.c:233
+msgid "package has neither file owner or id lists\n"
+msgstr "gói không có ngÆ°á»i sở hữu tập tin cÅ©ng không có danh sách mã số\n"
+
+#: lib/query.c:321
+#, c-format
+msgid "group %s does not contain any packages\n"
+msgstr "nhóm %s không chứa gói\n"
+
+#: lib/query.c:328
+#, c-format
+msgid "no package triggers %s\n"
+msgstr "không có bộ gây nên gói %s\n"
+
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
+#, c-format
+msgid "malformed %s: %s\n"
+msgstr "dạng sai %s: %s\n"
+
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
+#, c-format
+msgid "no package matches %s: %s\n"
+msgstr "không có gói tương ứng với %s: %s\n"
+
+#: lib/query.c:387
+#, c-format
+msgid "no package requires %s\n"
+msgstr "không có gói cần thiết %s\n"
+
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "không có gói nào khuyến nghị %s\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "không gói nào gợi ý %s\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "không có gói nào cung %s\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "không có gói nào tăng cÆ°á»ng %s\n"
+
+#: lib/query.c:423
+#, c-format
+msgid "no package provides %s\n"
+msgstr "không có gói cung cấp %s\n"
+
+#: lib/query.c:455
+#, c-format
+msgid "file %s: %s\n"
+msgstr "tập tin %s: %s\n"
+
+#: lib/query.c:458
+#, c-format
+msgid "file %s is not owned by any package\n"
+msgstr "tập tin %s không được bất kỳ gói sở hưu\n"
+
+#: lib/query.c:469
+#, c-format
+msgid "invalid package number: %s\n"
+msgstr "số thứ tự gói không hợp lệ: %s\n"
+
+#: lib/query.c:476
+#, c-format
+msgid "record %u could not be read\n"
+msgstr "không thể Ä‘á»c mục ghi %u\n"
+
+#: lib/query.c:491 lib/rpminstall.c:690
+#, c-format
+msgid "package %s is not installed\n"
+msgstr "chưa cài đặt gói %s\n"
+
+#: lib/query.c:525
+#, c-format
+msgid "unknown tag: \"%s\"\n"
+msgstr "không hiểu thẻ: “%sâ€\n"
+
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
+#, c-format
+msgid "%s: key %d import failed.\n"
+msgstr "%s: gặp lỗi khi nhập khóa %d.\n"
+
+#: lib/rpmchecksig.c:66
+#, c-format
+msgid "%s: key %d not an armored public key.\n"
+msgstr "%s: khóa %d không phải là khóa công dạng văn bản.\n"
+
+#: lib/rpmchecksig.c:111
+#, c-format
+msgid "%s: import read failed(%d).\n"
+msgstr "%s: lá»—i Ä‘á»c khi nhập (%d).\n"
+
+#: lib/rpmchecksig.c:131
+#, c-format
+msgid "Fread failed: %s"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "KHÔNG_ÄƯỢC"
+
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "OK"
+
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
+#, c-format
+msgid "%s: open failed: %s\n"
+msgstr "%s: gặp lỗi khi mở: %s\n"
+
+#: lib/rpmchroot.c:43
+#, c-format
+msgid "Unable to open current directory: %m\n"
+msgstr "Không thể mở thÆ° mục làm việc hiện thá»i: %m\n"
+
+#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
+#, c-format
+msgid "%s: chroot directory not set\n"
+msgstr "%s: thư mục đổi gốc chưa đặt\n"
+
+#: lib/rpmchroot.c:70
+#, c-format
+msgid "Unable to change root directory: %m\n"
+msgstr "Không thể chuyển đổi thư mục gốc: %m\n"
+
+#: lib/rpmchroot.c:95
+#, c-format
+msgid "Unable to restore root directory: %m\n"
+msgstr "Không thể phục hồi thư mục gốc: %m\n"
+
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr "Äang tạo %d thiếu mục lục, vui lòng chá»â€¦\n"
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr "không thể mở bảng mục lục %s dùng %s - %s (%d)\n"
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "chÆ°a đặt Ä‘Æ°á»ng dẫn cÆ¡ sở dữ liệu (dbpath)\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader: bá» qua"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "gặp lỗi (%d) khi lưu bản ghi #%d vào %s\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec (thực hiện biểu thức chính quy) bị lỗi: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp bị lỗi: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator: bá» qua"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb: nhận được phần đầu bị há»ng #%u -- bá» qua.\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s: không thể Ä‘á»c phần đầu ở 0x%x\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "chÆ°a đặt Ä‘Æ°á»ng dẫn cÆ¡ sở dữ liệu (dbpath)"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "gặp lỗi khi tạo thư mục %s: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "phần đầu #%u trong cơ sở dữ liệu là sai -- bỠqua.\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "không thể thêm bản ghi nguyên gốc tại %u\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr ""
+"gặp lỗi khi xây dựng lại cơ sở dữ liệu: cơ sỠdữ liệu nguyên gốc được giữ "
+"lại để thay thế\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "gặp lỗi khi thay thế cơ sở dữ liệu cũ bằng cái mới!\n"
+
+#: lib/rpmds.c:744
+msgid "NO "
+msgstr "KHÔNG "
+
+#: lib/rpmds.c:744
+msgid "YES"
+msgstr "CÓ"
+
+#: lib/rpmds.c:1221
+msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
+msgstr ""
+"Cả kiểu quan hệ phụ thuá»™c PreReq: (Ä‘iá»u kiện tiên quyết), Provides: (cung "
+"cấp) và Obsoletes: (làm cÅ©) Ä‘á»u há»— trợ phiên bản."
+
+#: lib/rpmds.c:1224
+msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
+msgstr ""
+"tên tập tin được cất giữ dạng một đối tượng dữ liệu đa thành phần (dirName,"
+"baseName,dirIndex), không phải dạng Ä‘Æ°á»ng dẫn."
+
+#: lib/rpmds.c:1228
+msgid "package payload can be compressed using bzip2."
+msgstr "trá»ng tải của gói có thể được nén bằng bzip2."
+
+#: lib/rpmds.c:1233
+msgid "package payload can be compressed using xz."
+msgstr "trá»ng tải gói cÅ©ng có thể được nén bằng xz."
+
+#: lib/rpmds.c:1236
+msgid "package payload can be compressed using lzma."
+msgstr "trá»ng tải gói cÅ©ng có thể được nén bằng lzma."
+
+#: lib/rpmds.c:1240
+msgid "package payload file(s) have \"./\" prefix."
+msgstr "tập tin trá»ng tải gói có tiá»n tố “./â€."
+
+#: lib/rpmds.c:1243
+msgid "package name-version-release is not implicitly provided."
+msgstr "không cung cấp dứt khoát tên-phiên_bản-bản_phát_hành của gói."
+
+#: lib/rpmds.c:1246
+msgid "header tags are always sorted after being loaded."
+msgstr "các thẻ của phần đầu luôn được sắp xếp sau khi được nạp."
+
+#: lib/rpmds.c:1249
+msgid "the scriptlet interpreter can use arguments from header."
+msgstr "bộ phiên dịch vi văn lệnh có thể sử dụng các đối số từ phần đầu."
+
+#: lib/rpmds.c:1252
+msgid "a hardlink file set may be installed without being complete."
+msgstr ""
+"má»™t bá»™ tập tin Ä‘Æ°á»ng liên kết cứng chÆ°a hoàn toàn cÅ©ng có thể được cài đặt"
+
+#: lib/rpmds.c:1255
+msgid "package scriptlets may access the rpm database while installing."
+msgstr ""
+"vi văn lệnh của gói cũng có thể truy cập cơ sở dữ liệu RPM trong khi cài đặt."
+
+#: lib/rpmds.c:1259
+msgid "internal support for lua scripts."
+msgstr "bản thân có hỗ trợ văn lệnh lua."
+
+#: lib/rpmds.c:1263
+msgid "file digest algorithm is per package configurable"
+msgstr "thuật toán băm tập tin là có phụ thuộc vào cấu hình từng gói"
+
+#: lib/rpmds.c:1267
+msgid "support for POSIX.1e file capabilities"
+msgstr "hỗ trợ cho dung lượng tập tin POSIX.1e"
+
+#: lib/rpmds.c:1271
+msgid "package scriptlets can be expanded at install time."
+msgstr "scriptlets gói có thể được khai triển lúc cài đặt."
+
+#: lib/rpmds.c:1274
+msgid "dependency comparison supports versions with tilde."
+msgstr "hỗ trợ so sánh phiên bản phụ thuộc với dấu sóng ~."
+
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "Hỗ trợ các tập tin lớn hơn 4GB"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "hỗ trợ cho các phần phục thuộc dồi dào"
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "Không hiểu toán tử phụ thuộc dồi dào '%.*s'"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "Cần có tên"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "Phụ thuá»™c dồi dào không bắt đầu bằng “(â€"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "Thiếu tham số cho toán tử phụ thuộc dồi dào"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "Phần phụ thuộc dồi dào trống rỗng"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "Phần phụ thuộc dồi dào chưa chấm dứt: %s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr "Không thể móc xích các toán tử khác nhau"
+
+#: lib/rpmds.c:1564
+#, fuzzy
+msgid "Can only chain and/or/with ops"
+msgstr "Chỉ có thể móc xích toán tử AND và OR"
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr "Gặp rác ở cuối phần phụ thuộc dồi dào"
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Ma thuật sai"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "Phần đầu sai hoặc không Ä‘á»c được"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "Kích cỡ phần đầu quá lớn "
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "Tập tin quá lớn để nén"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "Không rõ kiểu tập tin"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "Thiếu các tập tin"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "Mã băm tập tin không khớp"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "Lá»—i ná»™i bá»™"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "Tập tin kho lưu không phải trong phần đầu"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " bị lỗi — "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s: (lá»—i 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
+#, c-format
+msgid "open of %s failed: %s\n"
+msgstr "lỗi mở %s: %s\n"
+
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr "Äã vượt quá mức đệ quy tối Ä‘a manifest: %s\n"
+
+#: lib/rpmgi.c:155
+#, c-format
+msgid "%s: not an rpm package (or package manifest)\n"
+msgstr "%s: không phải là gói rpm (hoặc manifest gói)\n"
+
+#: lib/rpminstall.c:142
+#, c-format
+msgid "Updating / installing...\n"
+msgstr "Äang cài đặt hay nâng cấp…\n"
+
+#: lib/rpminstall.c:144
+#, c-format
+msgid "Cleaning up / removing...\n"
+msgstr "Äang dá»n dẹp hoặc gỡ bá»â€¦\n"
+
+#: lib/rpminstall.c:193
+msgid "Preparing..."
+msgstr "Äang chuẩn bị…"
+
+#: lib/rpminstall.c:195
+msgid "Preparing packages..."
+msgstr "Äang chuẩn bị các gói…"
+
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
+msgid "Failed dependencies:\n"
+msgstr "Quan hệ phụ thuộc bị lỗi:\n"
+
+#: lib/rpminstall.c:323
+#, c-format
+msgid "%s: not an rpm package (or package manifest): %s\n"
+msgstr "%s: không phải là gói rpm (hoặc manifest gói): %s\n"
+
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
+#, c-format
+msgid "%s cannot be installed\n"
+msgstr "%s không thể được cài đặt\n"
+
+#: lib/rpminstall.c:490
+#, c-format
+msgid "Retrieving %s\n"
+msgstr "Äang lấy %s\n"
+
+#: lib/rpminstall.c:502
+#, c-format
+msgid "skipping %s - transfer failed\n"
+msgstr "bá» qua %s - bá»™ truyá»n gặp lá»—i\n"
+
+#: lib/rpminstall.c:572
+#, c-format
+msgid "package %s is not relocatable\n"
+msgstr "không thể tái định vị gói %s\n"
+
+#: lib/rpminstall.c:603
+#, c-format
+msgid "error reading from file %s\n"
+msgstr "gặp lá»—i khi Ä‘á»c từ tập tin %s\n"
+
+#: lib/rpminstall.c:697
+#, c-format
+msgid "\"%s\" specifies multiple packages:\n"
+msgstr "“%s†chỉ định nhiá»u gói:\n"
+
+#: lib/rpminstall.c:736
+#, c-format
+msgid "cannot open %s: %s\n"
+msgstr "không thể mở %s: %s\n"
+
+#: lib/rpminstall.c:742
+#, c-format
+msgid "Installing %s\n"
+msgstr "Äang cài đặt %s\n"
+
+#: lib/rpmlead.c:95
+msgid "not an rpm package"
+msgstr "không phải là một gói rpm"
+
+#: lib/rpmlead.c:99
+msgid "illegal signature type"
+msgstr "kiểu chữ kí không hợp lệ"
+
+#: lib/rpmlead.c:103
+msgid "unsupported RPM package version"
+msgstr "phiên bản gói RPM không được hỗ trợ"
+
+#: lib/rpmlead.c:118
+#, c-format
+msgid "read failed: %s (%d)\n"
+msgstr "gặp lá»—i khi Ä‘á»c: %s (%d)\n"
+
+#: lib/rpmlead.c:121
+msgid "not an rpm package\n"
+msgstr "không phải là gói rpm\n"
+
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
+#, c-format
+msgid "can't create %s lock on %s (%s)\n"
+msgstr "không thể tạo khóa %s trên %s (%s)\n"
+
+#: lib/rpmlock.c:133
+#, c-format
+msgid "waiting for %s lock on %s\n"
+msgstr "đang đợi %s khóa %s\n"
+
+#: lib/rpmplugins.c:65
+#, c-format
+msgid "Failed to dlopen %s %s\n"
+msgstr "Gặp lỗi khi dlopen %s %s\n"
+
+#: lib/rpmplugins.c:73
+#, c-format
+msgid "Failed to resolve symbol %s: %s\n"
+msgstr "Gặp lỗi khi phân giải ký hiệu %s: %s\n"
+
+#: lib/rpmplugins.c:154
+#, c-format
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "Chưa cấu hình phần bổ xung %%__%s_%s\n"
+
+#: lib/rpmplugins.c:199
+#, c-format
+msgid "Plugin %s not loaded\n"
+msgstr "Phần bổ xung %s chưa được tải\n"
+
+#: lib/rpmprob.c:109
+msgid "different"
+msgstr "khác"
+
+#: lib/rpmprob.c:114
+#, c-format
+msgid "package %s is intended for a %s architecture"
+msgstr "gói %s có mục đích là dành cho kiến trúc %s"
+
+#: lib/rpmprob.c:118
+#, c-format
+msgid "package %s is intended for a %s operating system"
+msgstr "gói %s có mục đích là dành cho hệ Ä‘iá»u hành %s"
+
+#: lib/rpmprob.c:122
+#, c-format
+msgid "package %s is already installed"
+msgstr "gói %s đã được cài đặt"
+
+#: lib/rpmprob.c:125
+#, c-format
+msgid "path %s in package %s is not relocatable"
+msgstr "không thể tái định vị Ä‘Æ°á»ng dẫn %s trong gói %s"
+
+#: lib/rpmprob.c:130
+#, c-format
+msgid "file %s conflicts between attempted installs of %s and %s"
+msgstr "tập tin %s xung đột giữa các sự cài đặt đã thử %s và %s"
+
+#: lib/rpmprob.c:135
+#, c-format
+msgid "file %s from install of %s conflicts with file from package %s"
+msgstr "tập tin %s của bản cài đặt %s có xung đột với tập tin của gói %s"
+
+#: lib/rpmprob.c:140
+#, c-format
+msgid "package %s (which is newer than %s) is already installed"
+msgstr "gói %s (mới hơn %s) đã được cài đặt"
+
+#: lib/rpmprob.c:145
+#, c-format
+msgid "installing package %s needs %<PRIu64>%cB on the %s filesystem"
+msgstr "việc cài đặt %s cần %<PRIu64>%cB trên hệ thống tập tin %s"
+
+#: lib/rpmprob.c:155
+#, c-format
+msgid "installing package %s needs %<PRIu64> inodes on the %s filesystem"
+msgstr "việc cài đặt %s cần %<PRIu64> nút trên hệ thống tập tin %s"
+
+#: lib/rpmprob.c:159
+#, c-format
+msgid "%s is needed by %s%s"
+msgstr "%s được %s%s yêu cầu"
+
+#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
+msgid "(installed) "
+msgstr "(đã cài đặt) "
+
+#: lib/rpmprob.c:163
+#, c-format
+msgid "%s conflicts with %s%s"
+msgstr "%s xung Ä‘á»™t vá»›i %s%s"
+
+#: lib/rpmprob.c:167
+#, c-format
+msgid "%s is obsoleted by %s%s"
+msgstr "%s đã lạc hậu do %s%s"
+
+#: lib/rpmprob.c:172
+#, c-format
+msgid "unknown error %d encountered while manipulating package %s"
+msgstr "gặp lỗi không rõ %d trong khi thao tác gói %s"
+
+#: lib/rpmrc.c:222
+#, c-format
+msgid "missing second ':' at %s:%d\n"
+msgstr "thiếu “:†thứ hai tại %s:%d\n"
+
+#: lib/rpmrc.c:225
+#, c-format
+msgid "missing architecture name at %s:%d\n"
+msgstr "thiếu tên kiến trúc tại %s:%d\n"
+
+#: lib/rpmrc.c:370
+#, c-format
+msgid "Incomplete data line at %s:%d\n"
+msgstr "Dòng dữ liệu chưa hoàn tất tại %s:%d\n"
+
+#: lib/rpmrc.c:375
+#, c-format
+msgid "Too many args in data line at %s:%d\n"
+msgstr "Quá nhiá»u đối số trong dòng dữ liệu tại %s:%d\n"
+
+#: lib/rpmrc.c:382
+#, c-format
+msgid "Bad arch/os number: %s (%s:%d)\n"
+msgstr "Sai số kiến_trúc/hệ_Ä‘iá»u_hành: %s (%s:%d)\n"
+
+#: lib/rpmrc.c:413
+#, c-format
+msgid "Incomplete default line at %s:%d\n"
+msgstr "Dòng mặc định chưa hoàn tất tại %s:%d\n"
+
+#: lib/rpmrc.c:418
+#, c-format
+msgid "Too many args in default line at %s:%d\n"
+msgstr "Quá nhiá»u đối số trong dòng mặc định tại %s:%d\n"
+
+#: lib/rpmrc.c:523
+#, c-format
+msgid "missing ':' (found 0x%02x) at %s:%d\n"
+msgstr "thiếu “:†(thấy 0x%02x) tại %s:%d\n"
+
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
+#, c-format
+msgid "missing argument for %s at %s:%d\n"
+msgstr "thiếu đối số cho %s tại %s:%d\n"
+
+#: lib/rpmrc.c:551
+#, c-format
+msgid "cannot open %s at %s:%d: %m\n"
+msgstr "không thể mở %s tại %s:%d: %m\n"
+
+#: lib/rpmrc.c:564
+#, c-format
+msgid "missing architecture for %s at %s:%d\n"
+msgstr "thiếu kiến trúc cho %s tại %s:%d\n"
+
+#: lib/rpmrc.c:632
+#, c-format
+msgid "bad option '%s' at %s:%d\n"
+msgstr "tùy chá»n sai “%s†tại %s:%d\n"
+
+#: lib/rpmrc.c:972
+msgid "Failed to read auxiliary vector, /proc not mounted?\n"
+msgstr "Gặp lá»—i khi Ä‘á»c véc tÆ¡ bổ trợ, /proc đã gắn chÆ°a?\n"
+
+#: lib/rpmrc.c:1469
+#, c-format
+msgid "Unknown system: %s\n"
+msgstr "Không hiểu hệ thống: %s\n"
+
+#: lib/rpmrc.c:1471
+#, c-format
+msgid "Please contact %s\n"
+msgstr "Hãy liên lạc %s\n"
+
+#: lib/rpmrc.c:1604
+#, c-format
+msgid "Unable to open %s for reading: %m.\n"
+msgstr "Không thể mở %s để Ä‘á»c: %m.\n"
+
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr "Không có lệnh gá»i exec() sau fork() trong lua scriptlet\n"
+
+#: lib/rpmscript.c:138
+#, c-format
+msgid "Unable to restore current directory: %m"
+msgstr "Không thể phục hồi thư mục hiện tại: %m"
+
+#: lib/rpmscript.c:149 rpmio/macro.c:855
+msgid "<lua> scriptlet support not built in\n"
+msgstr "chưa hỗ trợ <lua> scriptlet dựng sẵn\n"
+
+#: lib/rpmscript.c:278
+#, c-format
+msgid "Couldn't create temporary file for %s: %s\n"
+msgstr "Không thể tạo tập tin tạm cho %s: %s\n"
+
+#: lib/rpmscript.c:313
+#, c-format
+msgid "Couldn't duplicate file descriptor: %s: %s\n"
+msgstr "Không thể nhân bản bộ mô tả tập tin: %s: %s\n"
+
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "Fwrite gặp lỗi: %s"
+
+#: lib/rpmscript.c:371
+#, c-format
+msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
+msgstr "%s scriptlet gặp lỗi, waitpid(%d) rc %d: %s\n"
+
+#: lib/rpmscript.c:375
+#, c-format
+msgid "%s scriptlet failed, signal %d\n"
+msgstr "%s scriptlet gặp lỗi, tín hiệu %d\n"
+
+#: lib/rpmscript.c:378
+#, c-format
+msgid "%s scriptlet failed, exit status %d\n"
+msgstr "%s scriptlet gặp lỗi, trạng thái thoát %d\n"
+
+#: lib/rpmtd.c:248
+msgid "Unknown format"
+msgstr "Không hiểu định dạng"
+
+#: lib/rpmte.c:729
+msgid "install"
+msgstr "cài đặt"
+
+#: lib/rpmte.c:730
+msgid "erase"
+msgstr "tẩy"
+
+#: lib/rpmts.c:100
+#, c-format
+msgid "cannot open Packages database in %s\n"
+msgstr "không thể mở cơ sở dữ liệu Gói trong %s\n"
+
+#: lib/rpmts.c:199
+#, c-format
+msgid "extra '(' in package label: %s\n"
+msgstr "thừa “(†trong nhãn gói: %s\n"
+
+#: lib/rpmts.c:217
+#, c-format
+msgid "missing '(' in package label: %s\n"
+msgstr "thiếu “(†trong nhãn gói: %s\n"
+
+#: lib/rpmts.c:225
+#, c-format
+msgid "missing ')' in package label: %s\n"
+msgstr "thiếu “)†trong nhãn gói: %s\n"
+
+#: lib/rpmts.c:284
+#, c-format
+msgid "%s: reading of public key failed.\n"
+msgstr "%s: gặp lá»—i khi Ä‘á»c khóa công khai.\n"
+
+#: lib/rpmts.c:1142
+msgid "transaction"
+msgstr "giao dịch"
+
+#: lib/rpmvs.c:152
+#, c-format
+msgid "%s tag %u: invalid type %u"
+msgstr ""
+
+#: lib/rpmvs.c:158
+#, c-format
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
+
+#: lib/rpmvs.c:178
+#, c-format
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
+
+#: lib/rpmvs.c:188
+#, c-format
+msgid "%s tag %u: invalid size %u"
+msgstr ""
+
+#: lib/rpmvs.c:195
+#, c-format
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
+
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
+msgstr ""
+
+#: lib/rpmvs.c:261
+#, c-format
+msgid "%s%s %s"
+msgstr ""
+
+#: lib/rpmvs.c:264
+msgid "digest"
+msgstr ""
+
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
+msgstr ""
+
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
+
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
+
+#: lib/rpmvs.c:396
+msgid "Header "
+msgstr "Phần đầu"
+
+#: lib/rpmvs.c:397
+msgid "Payload "
+msgstr ""
+
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "Không thể nạp lại phần đầu chữ ký.\n"
+
+#: lib/transaction.c:1397
+msgid "skipped"
+msgstr "bị bỠqua"
+
+#: lib/transaction.c:1397
+msgid "failed"
+msgstr "gặp lỗi"
+
+#: lib/verify.c:263
+#, c-format
+msgid "Duplicate username or UID for user %s\n"
+msgstr "Trùng tài khoản hoặc mã số ngÆ°á»i dùng cho tài khoản %s\n"
+
+#: lib/verify.c:284
+#, c-format
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "Trùng tên nhóm hoặc mã số nhóm cho nhóm %s\n"
+
+#: lib/verify.c:395
+msgid "no state"
+msgstr "không có tình trạng"
+
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "trạng thái không rõ"
+
+#: lib/verify.c:448
+#, c-format
+msgid "missing %c %s"
+msgstr "thiếu %c %s"
+
+#: lib/verify.c:503
+#, c-format
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "Quan hệ phụ thuá»™c chÆ°a thá»a đối vá»›i %s:\n"
+
+#: plugins/prioreset.c:29
+#, c-format
+msgid "Unable to reset nice value: %s"
+msgstr "Không thể đặt lại giá trị nice: %s"
+
+#: plugins/prioreset.c:40
+#, c-format
+msgid "Unable to reset I/O priority: %s"
+msgstr "Không thể đặt lại mức ưu tiên I/O: %s"
+
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
+msgstr ""
+
+#: rpmio/digest_nss.c:79
+#, c-format
+msgid "Failed to register fork handler: %m\n"
+msgstr ""
+
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s (trống)"
+
+#: rpmio/macro.c:316
+#, c-format
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s (trống)\n"
+
+#: rpmio/macro.c:483
+#, c-format
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "VÄ© lệnh %%%s có tùy chá»n chÆ°a chấm dứt\n"
+
+#: rpmio/macro.c:495 rpmio/macro.c:533
+#, c-format
+msgid "Macro %%%s has unterminated body\n"
+msgstr "Vĩ lệnh %%%s có thân chưa chấm dứt\n"
+
+#: rpmio/macro.c:551
+#, c-format
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
+
+#: rpmio/macro.c:557
+#, c-format
+msgid "Macro %%%s has empty body\n"
+msgstr "Vĩ lệnh %%%s có thân rỗng\n"
+
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "Vĩ lệnh %%%s cần có dấu cách trước phần thân\n"
+
+#: rpmio/macro.c:566
+#, c-format
+msgid "Macro %%%s failed to expand\n"
+msgstr "Vĩ lệnh %%%s không mở rộng được\n"
+
+#: rpmio/macro.c:607
+#, c-format
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "Vĩ lệnh %%%s có tên không hợp lệ (%%undefine)\n"
+
+#: rpmio/macro.c:637
+#, c-format
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
+"Vĩ lệnh %%%s được định nghĩa nhưng lại không được dùng trong phạm vi của nó\n"
+
+#: rpmio/macro.c:761
+#, c-format
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "Không hiểu tùy chá»n %c trong %s(%s)\n"
+
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
+msgstr ""
+"Quá nhiá»u mức đệ quy trong khai triển vÄ© lệnh. Nó giống nhÆ° là có nguyên "
+"nhân bởi khai báo vĩ lệnh đệ quy.\n"
+
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
+#, c-format
+msgid "Unterminated %c: %s\n"
+msgstr "%c chưa chấm dứt: %s\n"
+
+#: rpmio/macro.c:1182
+#, c-format
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "Một dấu %% đi trước một vĩ lệnh không thể phân tích được\n"
+
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr "gặp lỗi khi tải tập tin vĩ lệnh %s"
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== hoạt động %d trống %d\n"
+
+#: rpmio/rpmfileutil.c:258
+#, c-format
+msgid "error creating temporary file %s: %m\n"
+msgstr "gặp lá»—i khi Ä‘ang tạo tập tin tạm thá»i %s: %m\n"
+
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
+#, c-format
+msgid "File %s: %s\n"
+msgstr "Tập tin %s: %s\n"
+
+#: rpmio/rpmfileutil.c:332
+#, c-format
+msgid "File %s is smaller than %u bytes\n"
+msgstr "Tập tin %s nhỠhơn %u byte\n"
+
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[không có]"
+
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(không có lỗi)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "lá»—i nghiêm trá»ng:"
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "lá»—i: "
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "cảnh báo: "
+
+#: rpmio/rpmlua.c:523
+#, c-format
+msgid "invalid syntax in lua scriptlet: %s\n"
+msgstr "có lỗi cú pháp trong lua scriptlet: %s\n"
+
+#: rpmio/rpmlua.c:541
+#, c-format
+msgid "invalid syntax in lua script: %s\n"
+msgstr "cú pháp không hợp lệ trong văn lệnh lua: %s\n"
+
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
+#, c-format
+msgid "lua script failed: %s\n"
+msgstr "gặp lỗi khi thực thi văn lệnh lua: %s\n"
+
+#: rpmio/rpmlua.c:560
+#, c-format
+msgid "invalid syntax in lua file: %s\n"
+msgstr "cú pháp không hợp lệ trong tập tin Lua: %s\n"
+
+#: rpmio/rpmlua.c:756
+#, c-format
+msgid "lua hook failed: %s\n"
+msgstr "Lỗi kích hoạt khả năng Lua: %s\n"
+
+#: rpmio/rpmmalloc.c:25
+#, c-format
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "cấp phát bộ nhớ (%u byte) trở vỠVÔ GIà TRỊ.\n"
+
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
+#, c-format
+msgid "V%d %s/%s %s, key ID %s"
+msgstr "V%d %s/%s %s, Mã số khóa %s"
+
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr "(không có)"
+
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr "gặp lá»—i khi Ä‘ang tạo tập tin tạm thá»i %s: %m\n"
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr "lỗi tạo fifo %s: %m\n"
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr "lỗi xóa fifo %s: %m\n"
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr "lỗi xóa thư %s: %m\n"
+
+#: sign/rpmgensig.c:167
+#, c-format
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s: Fwrite bị lỗi: %s\n"
+
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s: Fread bị lỗi: %s\n"
+
+#: sign/rpmgensig.c:177
+#, c-format
+msgid "%s: Fflush failed: %s\n"
+msgstr "%s: Fflush bị lỗi: %s\n"
+
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr "Không hỗ trợ ký bằng GPG\n"
+
+#: sign/rpmgensig.c:208
+#, c-format
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr "Không hỗ trợ thuật toán băm PGP %u\n"
+
+#: sign/rpmgensig.c:221
+#, c-format
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr "Không hỗ trợ thuật toán khóa công PGP %u\n"
+
+#: sign/rpmgensig.c:270
+#, c-format
+msgid "Could not exec %s: %s\n"
+msgstr "Không thể thực hiện %s: %s\n"
+
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+"Fopen gặp lỗi\n"
+"\n"
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "Không thể ghi ra Ä‘Æ°á»ng ống\n"
+
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr "Không thể Ä‘á»c từ tập tin %s: %s\n"
+
+#: sign/rpmgensig.c:312
+#, c-format
+msgid "gpg exec failed (%d)\n"
+msgstr "lỗi thực hiện gpg (%d)\n"
+
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "gpg không ghi được chữ ký\n"
+
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "không thể Ä‘á»c chữ ký\n"
+
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
+msgstr "gặp lỗi khi rpmMkTemp\n"
+
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
+#, c-format
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
+msgstr ""
+
+#: sign/rpmgensig.c:682
+#, c-format
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s: rpmReadSignature gặp lỗi: %s"
+
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s: gặp lỗi khi headerRead: %s\n"
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "Không thể ký gói RPM v3\n"
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s đã sẵn chứa chữ ký định danh nên bỠqua\n"
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
+#, c-format
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s: gặp lỗi khi rpmWriteSignature: %s\n"
+
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s: Gặp lỗi khi writeLead: %s\n"
+
+#: sign/rpmgensig.c:812
+#, c-format
+msgid "replacing %s failed: %s\n"
+msgstr "gặp lỗi khi thay thế %s: %s\n"
+
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
+#, c-format
+msgid "%s: read manifest failed: %s\n"
+msgstr "%s: gặp lá»—i khi Ä‘á»c manifest: %s\n"
+
+#: tools/rpmgraph.c:219
+msgid "don't verify header+payload signature"
+msgstr "không nên thẩm tra chữ ký phần_đầu+trá»ng_tải"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 0fdfb9537..41dd4587d 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -3,19 +3,32 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Christopher Meng <cickumqt@gmail.com>, 2012.
-# <dongfengweixiao@gmail.com>, 2012.
-# <lovenemesis@gmail.com>, 2012.
-# Mike Ma <zhtx10@gmail.com>, 2011.
-# <qinghao1@foxmail.com>, 2012.
+# Christopher Meng <i@cicku.me>, 2012-2013,2015
+# Christopher Meng <i@cicku.me>, 2015
+# dongfengweixia88616b04c28344fa <dongfengweixiao@gmail.com>, 2012
+# dongfengweixia88616b04c28344fa <dongfengweixiao@gmail.com>, 2012
+# dongfengweixiao <dongfengweixiao@gmail.com>, 2013-2014
+# dongfengweixiao <dongfengweixiao@gmail.com>, 2012
+# Tommy He <lovenemesis@gmail.com>, 2012
+# Ma Kai <crtmike@gmail.com>, 2011
+# Mike Manilone <zhtx10@gmail.com>, 2011
+# Ma Kai <crtmike@gmail.com>, 2011
+# Mingye Wang <arthur200126@gmail.com>, 2015
+# qingxianhao <qinghao1@foxmail.com>, 2012
+# qingxianhao <qinghao1@foxmail.com>, 2012
+# Tiansworld <tiansworld@fedoraproject.org>, 2013
+# Tommy He <lovenemesis@gmail.com>, 2012
+# zwpwjwtz <zwpwjwtz@126.com>, 2016
+# Mingcong Bai <jeffbai@aosc.xyz>, 2015
+# Mingcong Bai <jeffbai@aosc.xyz>, 2015
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2012-12-19 11:06+0000\n"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/rpm/"
+"Language-Team: Chinese (China) (http://www.transifex.com/rpm-team/rpm/"
"language/zh_CN/)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
@@ -49,487 +62,549 @@ msgstr "该程åºå¯ä»¥åœ¨ GNU GPL æ¡æ¬¾ä¸‹è‡ªç”±åˆ†å‘\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr "--pipe 创建一个管é“失败:%m\n"
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
-msgstr "exec 失败\n"
+msgstr "执行失败\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
-msgstr "å‚æ•°ä¸æ˜¯ä¸€ä¸ª RPM 包\n"
+msgstr "å‚æ•°ä¸æ˜¯ä¸€ä¸ª RPM 软件包\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
msgstr "读å–软件包头部错误\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "ä¸èƒ½é‡æ–°æ‰“å¼€è·è½½ï¼š%s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "查询/验è¯è½¯ä»¶åŒ…选项:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "查询选项(用 -q 或 --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "验è¯é€‰é¡¹ï¼ˆç”¨ -V 或 --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "安装/å‡çº§/擦除选项:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "所有 rpm 模å¼å’Œå¯æ‰§è¡Œæ–‡ä»¶çš„通用选项:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "å•æ¬¡ä»…能执行一ç§ç±»åž‹çš„查询/检验"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "æ„外查询标志"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "æ„外的查询格å¼"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "æ„外的查询æº"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "仅能指定一个主模å¼"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "åªæœ‰å®‰è£…å’Œå‡çº§å¯ä»¥å¼ºåˆ¶æ‰§è¡Œ"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "文件仅能在软件包安装过程中é‡æ–°åˆ†é…"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "--prefix ä¸èƒ½å’Œ --relocate 或 --excludepath å…±åŒä½¿ç”¨"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr "--relocate å’Œ --excludepath åªèƒ½åœ¨å®‰è£…软件包时使用"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix åªèƒ½åœ¨å®‰è£…新软件包时使用"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "--prefix å‚数必须用 / 开始"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr "--hash (-h) 选项åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr "--percent 选项åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "åªèƒ½æŒ‡å®š --excludedocs å’Œ --includedocs 两者之一"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches åªèƒ½åœ¨è½¯ä»¶åŒ…擦除时指定"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr "ç¦ç”¨è„šæœ¬é€‰é¡¹åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr "ç¦ç”¨è§¦å‘器选项åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr "--nodeps åªèƒ½åœ¨è½¯ä»¶åŒ…安装ã€æ“¦é™¤å’Œæ£€éªŒæ—¶æŒ‡å®š"
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr "--test åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "--root (-r) çš„å‚数必须以 / 开头"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "未给出è¦æ“¦é™¤çš„软件包"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "未给出è¦å®‰è£…的软件包"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "未给出è¦æŸ¥è¯¢çš„å‚æ•°"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "未给出è¦æ£€éªŒçš„å‚æ•°"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot å·²ç»æŒ‡å®šï¼Œå¿½ç•¥ %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "ä¾æ® <specfile> 从 %prep (解压缩æºä»£ç å¹¶åº”用补ä¸) 开始构建"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "ä¾æ® <specfile> 从 %build (%prep 之åŽç¼–译) 开始构建"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "ä¾æ® <specfile> 从 %install (%prepã€%build åŽå®‰è£…) 开始构建"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
-msgstr "ä¾æ® <specfile> 检验 %files 区域"
+msgstr "ä¾æ® <specfile> 校验 %files 部分"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
msgstr "ä¾æ® <specfile> 构建æºä»£ç å’ŒäºŒè¿›åˆ¶è½¯ä»¶åŒ…"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
msgstr "ä¾æ® <specfile> 构建二进制软件包"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
msgstr "ä¾æ® <specfile> 构建æºä»£ç è½¯ä»¶åŒ…"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr "仅执行 <source package> çš„ %prep 部分(解压缩æºä»£ç å¹¶åº”用补ä¸) "
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr "仅执行 <source package> çš„ ï¼…build 部分(先执行 %prepï¼Œç„¶åŽ ï¼…build)"
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr "ä¾æ® <source package> 从 %install (%prepã€%build 然åŽå®‰è£…)开始构建"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr "ä¾æ® <source package> 校验 %files 部分"
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr "从 <source package> 中构建二进制和æºä»£ç  RPM 包"
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr "仅从 <source package> 中构建二进制 RPM 包"
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr "仅从 <source package> 中构建æºä»£ç  RPM 包"
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "ä¾æ® <tarball> 从 %prep (解压æºä»£ç å¹¶åº”用补ä¸)开始构建"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "ä¾æ® <tarball> 从 %build (%prep,之åŽç¼–译)开始构建"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "ä¾æ® <tarball> 从 %install (%prepã€%build 然åŽå®‰è£…)开始构建"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
-msgstr "ä¾æ® <tarball> 检验 %files 区域"
+msgstr "ä¾æ® <tarball> 校验 %files 部分"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
msgstr "ä¾æ® <tarball> 构建æºä»£ç å’ŒäºŒè¿›åˆ¶è½¯ä»¶åŒ…"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
msgstr "ä¾æ® <tarball> 构建二进制软件包"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
msgstr "ä¾æ® <tarball> 构建æºä»£ç è½¯ä»¶åŒ…"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
msgstr "ä¾æ® <source package> 构建二进制软件包"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<source package>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr "ä¾æ® <source package> 从 %install (%prepã€%build 然åŽå®‰è£…)开始构建"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "é‡è½½æž„建根路径"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr "在当å‰ç›®å½•ä¸­æž„建"
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "完æˆåŽç§»é™¤æž„建树"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "忽略 spec 文件中的 ExcludeArch 规则"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "除错文件状æ€æœº"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "ä¸æ‰§è¡Œä»»ä½•æž„建步骤 "
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "ä¸æ£€éªŒæž„建ä¾èµ–"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr "生æˆå’Œ rpm v3 包管ç†(旧版本)兼容的软件包头"
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
-msgstr ""
+msgstr "构建过程中ä¸æ‰§è¡Œ %clean 步骤"
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr "ä¸æ‰§è¡Œæž„建的 %prep 阶段"
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
-msgstr ""
+msgstr "构建过程中ä¸æ‰§è¡Œ %check 步骤"
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "ä¸æŽ¥å—æ¥è‡ª specfile çš„ i18N 字符串信æ¯"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "完æˆæ—¶ç§»é™¤æºä»£ç "
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "完æˆæ—¶ç§»é™¤ specfile"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "直接跳转到指定步骤 (ä»…é™ c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "é‡è½½ç›®æ ‡å¹³å°"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "适用于 [ <specfile> | <tarball> | <source package> ] 的构建选项:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "所有 rpm 模å¼å’Œå¯æ‰§è¡Œæ–‡ä»¶çš„通用选项:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "构建ä¾èµ–失败:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
-msgstr "无法打开 spec 文件 %s: %s\n"
+msgstr "无法打开 spec 文件 %s:%s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
-msgstr "打开 tar 管é“失败: %m\n"
+msgstr "打开 tar 管é“失败:%m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr "在 %s 中å‘现多个 spec 规格文件\n"
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "从 %s è¯»å– spec 文件失败\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "é‡å‘½å %s 为 %s 时失败:%m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "stat %s 失败:%m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "文件 %s ä¸æ˜¯å¸¸è§„文件。\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "文件 %s ä¸åƒæ˜¯ spec 文件。\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "构建目标平å°ï¼š%s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "为目标%s构建\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "--root (-r) çš„å‚数必须以 / 开头"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "åˆå§‹åŒ–æ•°æ®åº“"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
msgstr "从已安装软件包包头é‡å»ºæ•°æ®åº“åå‘列表"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "校验数æ®åº“文件"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr "将数æ®åº“导出到标准输出头列表"
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr "从标准输入头列表导入数æ®åº“"
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "æ•°æ®åº“选项:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "仅能指定一个主模å¼"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
msgstr "校验软件包签å"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "导入带装甲的(armored)公钥"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr "ä¸å¯¼å…¥ï¼Œä½†åˆ¤æ–­ä¸‹æ˜¯å¦èƒ½ç”¨"
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "列出RPM密钥环中的密钥"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "密钥环选项:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "没有指定å‚æ•°"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "查询/验è¯è½¯ä»¶åŒ…选项:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "查询选项(用 -q 或 --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "验è¯é€‰é¡¹ï¼ˆç”¨ -V 或 --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "安装/å‡çº§/擦除选项:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "æ¯æ¬¡ä»…能执行一ç§ç±»åž‹çš„查询/检验"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "æ„外查询标志"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "æ„外的查询格å¼"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "æ„外的查询æº"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "åªæœ‰å®‰è£…å’Œå‡çº§å¯ä»¥å¼ºåˆ¶æ‰§è¡Œ"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "文件仅能在软件包安装过程中é‡æ–°åˆ†é…"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix ä¸èƒ½å’Œ --relocate 或 --excludepath å…±åŒä½¿ç”¨"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr "--relocate å’Œ --excludepath åªèƒ½åœ¨å®‰è£…软件包时使用"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix åªèƒ½åœ¨å®‰è£…新软件包时使用"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix å‚数必须用 / 开始"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr "--hash (-h) 选项åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr "--percent 选项åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "åªèƒ½æŒ‡å®š --excludedocs å’Œ --includedocs 两者之一"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches åªèƒ½åœ¨è½¯ä»¶åŒ…擦除时指定"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles åªèƒ½åœ¨è½¯ä»¶åŒ…安装时指定"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr "ç¦ç”¨è„šæœ¬é€‰é¡¹åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr "ç¦ç”¨è§¦å‘器选项åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr "--nodeps åªèƒ½åœ¨è½¯ä»¶åŒ…安装ã€æ“¦é™¤å’Œæ£€éªŒæ—¶æŒ‡å®š"
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr "--test åªèƒ½åœ¨è½¯ä»¶åŒ…安装和擦除时指定"
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "未给出è¦æ“¦é™¤çš„软件包"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "未给出è¦å®‰è£…的软件包"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "未给出è¦æŸ¥è¯¢çš„å‚æ•°"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "未给出è¦æ£€éªŒçš„å‚æ•°"
+
+#: rpmsign.c:30
msgid "sign package(s)"
msgstr "ç­¾å包"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
msgstr "ç­¾å包(åŒ--addsign)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
msgstr "删除软件包签å"
-#: rpmsign.c:35
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
+
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "ç­¾å选项:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "无法exec %s: %s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "你必须在你的å®æ–‡ä»¶ä¸­è®¾ç½® \"%%_gpg_name\" \n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "输入密ç ï¼š"
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "密ç æ­£ç¡®ã€‚\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
-msgstr "密ç æ£€æŸ¥å¤±è´¥æˆ–者 gpg 密钥过期\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
+msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr "è§£æž spec 文件到标准输出"
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "查询 spec 文件"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "æ“纵 spec 生æˆçš„二进制 rpm 包(缺çœå€¼)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "æ“纵 spec 生æˆçš„æº rpm 包"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "使用这ç§æ ¼å¼æ‰“å°ä¿¡æ¯"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "Spec 选项:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr "没有给出å‚数用于分æž"
@@ -538,32 +613,37 @@ msgstr "没有给出å‚数用于分æž"
msgid "Unable to open temp file: %s\n"
msgstr "无法打开临时文件:%s\n"
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr "无法打开æµï¼š%s\n"
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
-msgstr "执行(%s): %s\n"
+msgstr "正在执行(%s):%s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
-msgstr "执行 %s 失败(%s): %s\n"
+msgstr "执行 %s 失败(%s):%s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr "执行脚本 %s (%s)失败\n"
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "%s (%s) 退出状æ€ä¸å¥½\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -573,235 +653,315 @@ msgstr ""
"\n"
"RPM 构建错误:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "== 语法解æžé”™è¯¯\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "&& 语法解æžé”™è¯¯\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
-msgstr "|| 语法解æžé”™è¯¯\n"
+msgstr "è§£æž || 时有语法错误\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "表达å¼è§£æžé”™è¯¯\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "ä¸åŒ¹é…çš„ (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- åªç”¨äºŽæ•°å­—\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! åªç”¨äºŽæ•°å­—\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "类型必须匹é…\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "* / ä¸æ”¯æŒå­—符串\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "- ä¸æ”¯æŒå­—符串\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "&& å’Œ || ä¸æ”¯æŒå­—符串\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "表达å¼è¯­æ³•é”™è¯¯\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "%s %s 中丢失 '(' \n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "%s(%s 中丢失 ')'\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "无效的 %s 令牌:%s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "%2$s %3$s 中丢失 %1$s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "%s() åŽæœ‰éžç©ºç™½å­—符:%s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "语法错误:%s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "spec 文件æƒé™ä¸å¥½ï¼š%s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "spec 目录æƒé™ä¸å¥½ï¼š%s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr "异常的 locale 长度:\"%s\" 在%%lang(%s) 中\n"
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr "é‡å¤çš„ locale %s 在%%lang(%s) 中\n"
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "无效的 capability:%s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "无内建文件capability 支æŒ\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "文件必须以 \"/\" 开头: %s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr "未知的文件摘è¦ç®—法 %u, 回退到MD5\n"
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "被列出两次的文件:%s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr "读å–符å·è¿žæŽ¥ %s 失败:%s\n"
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "符å·é“¾æŽ¥æŒ‡å‘了 BuildRoot:%s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr "路径在 buildroot 之外:%s\n"
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr "没有找到目录:%s\n"
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "没有找到文件:%s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr "此路径ä¸æ˜¯ä¸€ä¸ªç›®å½•ï¼š%s\n"
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
-msgstr "%s: 无法加载未知标签(%d)。\n"
+msgstr "%s:无法加载未知标签(%d)。\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
-msgstr "%s: 公钥读å–失败。\n"
+msgstr "%s:公钥读å–失败。\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s: ä¸æ˜¯å¸¦è£…甲的(armored)公钥。\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s:编ç å¤±è´¥\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "创建目录失败"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "æ–‡ä»¶éœ€è¦ \"/\" 开头:%s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr "%%dev glob ä¸è¢«å…许:%s\n"
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
-msgstr "目录未找到,所用 glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "文件未找到,所用 glob: %s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
-msgstr "无法打开 %%files 文件 %s: %m\n"
+msgstr "无法打开 %%files 文件 %s:%m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "行:%s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr "空 %%file 文件 %s\n"
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr "è¯»å– %%files 文件 %s 失败:%m\n"
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
+msgstr "illegal _docdir_fmt %s: %s\n"
+
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "无法通过通é…符查找文件:%s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
-msgstr ""
+msgstr "特殊 %s 与其他形å¼ä¸èƒ½æ··åˆä½¿ç”¨: %s\n"
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
+msgstr "一行中有多个文件: %s\n"
+
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
-msgstr "å文件:%s: %s\n"
-
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "å的属主/群组:%s\n"
+msgstr "æŸå的文件:%s:%s\n"
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "检查未打包文件:%s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -810,585 +970,642 @@ msgstr ""
"å‘现已安装(但未打包的)文件:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "处ç†æ–‡ä»¶ï¼š%s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
-msgstr ""
+msgstr "二进制架构 (%d) 和软件包构架 (%d)ä¸åŒ¹é…。\n"
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
msgstr "noarch 软件包中有架构相关的二进制文件\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
-msgstr ""
+msgstr "对此文件创建归档失败 %s:%s\n"
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
-msgstr ""
+msgstr "创建归档失败: %s\n"
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
-msgstr ""
+msgstr "ä¸èƒ½æ‰“开文件 %s:%s\n"
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: 行: %s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "无法正规化主机å:%s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr ""
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "无法正规化主机å:%s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
-msgstr ""
-
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr ""
+msgstr "未知的净负è·åŽ‹ç¼©ï¼š%s\n"
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "无法打开临时文件。\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr "无法 seek 文件 %s:%s\n"
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "无法写入临时头\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "无法读å–策略文件:%s\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "ä¸åˆæ³•çš„CSAæ•°æ®\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "无法é‡è½½ç­¾å头。\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
-msgstr "无法打开%s: %s\n"
+msgstr "无法打开 %s:%s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
msgstr "无法写入软件包:%s\n"
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr ""
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr ""
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr ""
-
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
-msgstr "写é“:%s\n"
+msgstr "已写至:%s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "正在执行 \"%s\":\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr " \"%s\" 执行失败。\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
-msgstr ""
+msgstr "软件包检查 \"%s\" 失败。\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
-msgstr "无法为软件包 %s 生æˆè¾“出文件å: %s\n"
+msgstr "无法为软件包 %s 生æˆè¾“出文件å:%s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "无法创建 %s: %s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
-msgstr ""
+msgstr "行 %d:第二个 %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
-msgstr ""
+msgstr "%%changelog (更新日志)中存在虚å‡çš„日期:%s\n"
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
-msgstr ""
+msgstr "%%changelog å„æ¡å†…容需è¦ä»¥ * 符å·å¼€å¤´\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
-msgstr ""
+msgstr "ä¸å®Œæ•´çš„ %%changelog æ¡ç›®\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
-msgstr ""
+msgstr "%%changelog 中存在错误的日期:%s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
-msgstr ""
+msgstr "%%changelog 没有按照时间顺åºé™åºæŽ’列\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
-msgstr ""
+msgstr "%%changelog 中没有å称\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
-msgstr ""
+msgstr "%%changelog 中没有æè¿°\n"
+
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr "行 %d: 第二个 %%changelog\n"
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
-msgstr ""
+msgstr "è¡Œ %dï¼šè§£æž %%description æ—¶å‘生错误:%s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
-msgstr ""
+msgstr "行 %d:错误的选项 %s:%s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr ""
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr ""
+msgstr "列 %d:过多的å称:%s\n"
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
+msgstr "è¡Œ %dï¼šè§£æž %%files æ—¶å‘生错误:%s\n"
+
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
msgstr ""
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
-msgstr ""
+msgstr "列 %dï¼šè§£æž %%policies æ—¶å‘生错误:%s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
-msgstr ""
+msgstr "解æžæ ‡è®°å­—段错误: %s\n"
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
-msgstr ""
+msgstr "列 %d:错误的编å·ï¼š%s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
-msgstr ""
+msgstr "行 %d: Bad no%s number: %u\n"
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
-msgstr ""
+msgstr "行 %d:错误的 %s 数字:%s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
-msgstr ""
+msgstr "%s %d 定义了许多次\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
-msgstr ""
+msgstr "下载 %s 到 %s 中\n"
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
-msgstr ""
+msgstr "无法下载 %s\n"
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "系统结构被排除了: %s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "ä¸åŒ…å«ä½“系统结构:%s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
-msgstr ""
+msgstr "被排除的æ“作系統:%s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
-msgstr ""
+msgstr "æ“作系统未包å«ï¼š%s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
-msgstr ""
+msgstr "%s 字段必须在软件包中存在:%s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
-msgstr ""
+msgstr "%s æ¢ç›®åœ¨è½¯ä»¶åŒ…中é‡å¤ï¼š%s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "无法打开图标 %s:%s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
-msgstr "无法读å–图标 %s: %s\n"
+msgstr "无法读å–图标 %s:%s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "未知的图标格å¼ï¼š%s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
-msgstr ""
+msgstr "è¡Œ %d:标签åªéœ€è¦ä¸€ä¸ªä»¤ç‰Œï¼š %s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
-msgstr "è¡Œ %d:éžæ³•çš„字符 '%c' 在: %s 中\n"
+msgid "line %d: %s in: %s\n"
+msgstr "è¡Œ %d:%s ä½äºŽï¼š%s\n"
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
-msgstr "è¡Œ %d:éžæ³•çš„字符在: %s 中\n"
+msgid "%s in: %s\n"
+msgstr "%s ä½äºŽï¼š%s\n"
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr "无效字符 '%c' (0x%x)"
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
+msgstr "éžæ³•åºåˆ—“..â€"
+
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
-msgstr ""
+msgstr "行 %d:有缺陷的标签:%s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
-msgstr ""
+msgstr "行 %d:空的标签:%s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
-msgstr ""
+msgstr "è¡Œ %d:å‰ç¼€ä¸èƒ½ä»¥ “/†结尾:%s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
-msgstr ""
+msgstr "行 %d:Docdir 必须以 “/\" 開頭:%s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
-msgstr ""
+msgstr "è¡Œ %d:Epoch 标签必须是无符å·æ•°ï¼š%s\n"
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
-msgstr ""
+msgstr "è¡Œ %d:错误的 %s:é™å®šç¬¦ï¼š%s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
+msgstr "è¡Œ %d:错误的 BuildArchitecture æ ¼å¼ï¼š%s\n"
+
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
msgstr ""
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
-msgstr ""
+msgstr "è¡Œ %d:åªèƒ½æ”¯æŒnoarchçš„å­åŒ…:%s\n"
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
-msgstr ""
+msgstr "内部错误:虚å‡æ ‡ç­¾ %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
-msgstr ""
+msgstr "è¡Œ %d: %s ä¸å»ºè®®ä½¿ç”¨ï¼š%s\n"
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
-msgstr ""
+msgstr "有问题的软件包规范:%s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
-msgstr ""
+msgstr "行 %d:未知标签:%s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
-msgstr ""
+msgstr "%%{buildroot} ä¸èƒ½ä¸ºç©º\n"
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
-msgstr ""
+msgstr "%%{buildroot} ä¸èƒ½ä¸º \"/\"\n"
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
-msgstr ""
+msgstr "问题æ¥æºï¼š %s: %s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
-msgstr ""
+msgstr "没有 %u è¡¥ä¸\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
-msgstr ""
+msgstr "%%patch 没有对应的 \"Patch:\" 标签\n"
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
-msgstr ""
+msgstr "没有 %u æºç \n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
-msgstr ""
+msgstr "spec 文件内没有 \"Source:\" 标签\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
-msgstr ""
+msgstr "è§£æž %%setup æ—¶å‘生错误:%s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
-msgstr ""
+msgstr "è¡Œ %d:%%setup 中存在åçš„å‚数:%s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
-msgstr ""
+msgstr "行 %d:错误的 %%setup 选项 %s:%s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
-msgstr ""
+msgstr "%s:%s:%s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
-msgstr ""
+msgstr "无效的补ä¸ç¼–å· %s:%s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
-msgstr ""
+msgstr "行 %d:第二个 %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
-msgstr ""
+msgstr "ä¾èµ–项标记必须以字æ¯ã€æ•°å­—,_ 或 '/' 开头"
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
-msgstr ""
+msgstr "ä¸å…许的版本控制命å"
-#: build/parseReqs.c:154
-msgid "Version required"
-msgstr ""
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
+msgstr "此类型ä¸å…许富ä¾èµ–关系"
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
-msgstr ""
+msgstr "无效的ä¾èµ–"
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr "版本è¦æ±‚"
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr "文件触å‘器中仅å…许使用ç»å¯¹è·¯å¾„"
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr "åŒä¸€ä¸ªè½¯ä»¶åŒ…的触å‘器已在 spec 文件中定义"
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
-msgstr ""
+msgstr "行 %d:%s:%s\n"
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
+msgstr "列 %d:触å‘器必须包å«æœ‰ --:%s\n"
+
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
msgstr ""
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
-msgstr ""
+msgstr "列 %dï¼šè§£æž %s æ—¶å‘生错误:%s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
-msgstr ""
+msgstr "è¡Œ %d:内部脚本必須以 “>†çµå°¾ï¼š%s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
-msgstr ""
+msgstr "è¡Œ %d:脚本程åºå¿…须以 “/†开头:%s\n"
+
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr "è¡Œ %d:仅文件触å‘器中å…许使用优先级:%s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
-msgstr ""
+msgstr "列 %d:第二个 %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
+msgstr "è¡Œ %d:ä¸æ”¯æŒçš„内部脚本:%s\n"
+
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
msgstr ""
-#: build/parseScript.c:318
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
-msgstr ""
+msgstr "è¡Œ %d:触å‘器中ä¸å…许使用解释器å‚数:%s\n"
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
-msgstr ""
+msgstr "行 %d:%s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr "展开行 %d 注释中的å®ï¼š%s\n"
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
-msgstr ""
+msgstr "ä¸èƒ½æ‰“å¼€ %s:%s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
-msgstr ""
+msgstr "%s:%d:%s 需è¦å‚æ•°\n"
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
-msgstr ""
+msgstr "è¡Œ %d:未结æŸçš„ %%if\n"
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
-msgstr ""
+msgstr "è¡Œ %d:å®æœªé—­åˆï¼Œæˆ–æ¢è¡Œæ–‡æœ¬å‡ºé”™\n"
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
-msgstr ""
+msgstr "%s:%d:%%if æ¡ä»¶å¥æœ‰è¯¯\n"
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
-msgstr ""
+msgstr "%s:%d:有一个 %%else 没有对应的 %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
-msgstr ""
+msgstr "%s:%d:有一个 %%endif 没有对应的 %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
+msgstr "%s:%d:%%include 语å¥æ ¼å¼é”™è¯¯\n"
+
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr "系统ä¸æ”¯æŒç¼–ç  %s\n"
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr "软件包 %s:无效的 %s ç¼–ç äºŽ %s:%s - %s\n"
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
msgstr ""
-#: build/parseSpec.c:669
-msgid "No compatible architectures found for build\n"
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
msgstr ""
-#: build/parseSpec.c:703
+#: build/parseSpec.c:733
#, c-format
-msgid "Package has no %%description: %s\n"
+msgid "line %d doesn't belong to any section: %s\n"
msgstr ""
+#: build/parseSpec.c:878
+msgid "No compatible architectures found for build\n"
+msgstr "没有找到å¯ä¾›æž„建的兼容构架\n"
+
+#: build/parseSpec.c:912
+#, c-format
+msgid "Package has no %%description: %s\n"
+msgstr "软件包没有 %%description:%s\n"
+
#: build/policies.c:87
#, c-format
msgid "Policy module '%s' duplicated with overlapping types\n"
-msgstr ""
+msgstr "ç­–ç•¥æ¨¡å— '%s' é‡å¤ä¸Žé‡å çš„类型\n"
#: build/policies.c:93
#, c-format
msgid "Base modules '%s' and '%s' have overlapping types\n"
-msgstr ""
+msgstr "åŸºç¡€æ¨¡å— '%s' å’Œ '%s' 有é‡å çš„类型\n"
#: build/policies.c:101
msgid "Failed to get policies from header\n"
-msgstr ""
+msgstr "从头获å–策略失败\n"
#: build/policies.c:154
#, c-format
msgid "%%semodule requires a file path\n"
-msgstr ""
+msgstr "%%se 模å—需è¦æ–‡ä»¶è·¯å¾„\n"
#: build/policies.c:163
#, c-format
msgid "Failed to read policy file: %s\n"
-msgstr ""
+msgstr "无法读å–策略文件:%s\n"
#: build/policies.c:170
#, c-format
msgid "Failed to encode policy file: %s\n"
-msgstr ""
+msgstr "无法对策略文件编ç ï¼š %s\n"
#: build/policies.c:187
#, c-format
msgid "Failed to determine a policy name: %s\n"
-msgstr ""
+msgstr "确定策略å称失败:%s\n"
#: build/policies.c:199
#, c-format
@@ -1400,7 +1617,7 @@ msgstr ""
#: build/policies.c:246
#, c-format
msgid "Error parsing %s: %s\n"
-msgstr ""
+msgstr "è§£æž %s å‘生错误:%s\n"
#: build/policies.c:252
#, c-format
@@ -1410,1252 +1627,1645 @@ msgstr ""
#: build/policies.c:262
#, c-format
msgid "Missing module path in line: %s\n"
-msgstr ""
+msgstr "缺少的模å—路径存在于: %s \n"
#: build/policies.c:268
#, c-format
msgid "Too many arguments in line: %s\n"
-msgstr ""
+msgstr "此行存在过多å‚数:%s\n"
#: build/policies.c:307
#, c-format
msgid "Processing policies: %s\n"
-msgstr ""
+msgstr "处ç†ç­–略:%s\n"
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
-msgstr ""
+msgstr "å¿½ç•¥æ— æ•ˆçš„æ­£åˆ™è¡¨è¾¾å¼ %s\n"
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
-msgstr ""
+msgstr "无法为 %s建立管é“: %m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
-msgstr ""
+msgstr "无法执行%s:%s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
-msgstr ""
+msgstr "无法抽å–分支 %s:%s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
-msgstr ""
+msgstr "%s 失败:%x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
-msgstr ""
-
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr ""
+msgstr "无法写入所有的数æ®åˆ° %s:%s\n"
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
-msgstr ""
+msgstr "空文件分类\n"
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
-msgstr ""
+msgstr "没有é…置文件属性\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
-msgstr ""
+msgstr "magic_open(0x%x) 失败:%s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
-msgstr ""
+msgstr "magic_load 失败:%s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
-msgstr ""
+msgstr "文件 \"%s\" è¾¨è¯†å¤±è´¥ï¼šæ¨¡å¼ %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
-msgstr ""
+msgstr "正在查找 %s:%s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
+msgstr "查找 %s 失败:\n"
+
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
msgstr ""
-#: build/spec.c:404
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "查询 spec 文件 %s 失败,无法解æž\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(é”™è¯¯ä»£ç  0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr "%s 错误(%d) æºè‡ª %s:%s\n"
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr ""
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr "%s 错误(%d):%s\n"
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "错误/ä¸å¯è¯»çš„ 头部"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "无法识别的数æ®åº“选项:\"%s\" 已忽略。\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "头部太大"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s 有无效的数值,忽略\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s 有过大或者是过å°çš„ long 数值,忽略\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s 有过大或者是过å°çš„整数值,忽略\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "无法å–å¾— %s ä½äºŽ %s/%s çš„é”定\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "已共享"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "排他"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
+msgstr "无效的索引类型 %x 于 %s/%s\n"
+
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "未知文件类型"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
msgstr ""
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "摘è¦ä¸åŒ¹é…"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
+"添加表头 #%d 记录时出错 (%d)\n"
+"\n"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "内部错误"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr "移除表头 #%d 记录时出错 (%d)\n"
-#: lib/cpio.c:398
-msgid "Archive file not in header"
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "在分é…新软件包进程时出错 (%d)\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:81
#, c-format
-msgid "%s is a Delta RPM and cannot be directly installed\n"
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:93
+#, c-format
+msgid "%s is a Delta RPM and cannot be directly installed\n"
+msgstr "%s 是一个 Delta RPM 并且无法直接被安装。\n"
+
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
-msgstr ""
+msgstr "软件包 %s 已被加入,跳过 %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
-msgstr ""
+msgstr "软件包 %s 已被加入,以 %s 替æ¢\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(éžblob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(ä¸æ˜¯æ•°å­—)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(ä¸æ˜¯å­—符串)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(无效类型)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%a %b %d %Y"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(éžbase64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(无效类型)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(éžblob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(无效的xml 类型)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(ä¸æ˜¯OpenPGP ç­¾å)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr "无效日期%u"
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "正常"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "已被替æ¢"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "未安装"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "网络共享"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "错误颜色"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "丢失"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(未知)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(ä¸æ˜¯å­—符串)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "用户%s ä¸å­˜åœ¨ - 使用root\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "群组%s ä¸å­˜åœ¨ - 使用root\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
-msgstr ""
+msgstr "%s å·²å¦å­˜ä¸º %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
-msgstr ""
+msgstr "%s 已建立为 %s \n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
-msgstr ""
+msgstr "%s %s:移除失败:%s\n"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
-msgstr ""
+msgstr "目录"
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
-msgstr ""
+msgstr "文件"
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
-msgstr "跳过 %s %s,签å无法验è¯\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
+msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
-msgstr "跳过 %s,签å无法验è¯\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
+msgstr "头部载入:ä¸å½“"
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
-#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+#: lib/header.c:1775
+msgid "region: no tags"
msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1: 错误,éžå六进制\n"
+#: lib/header.c:1797
+#, c-format
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr "区域标签:ä¸å½“,标记 %d 类型 %d å移 %d 计数 %d"
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA: 错误,éžäºŒè¿›åˆ¶\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr "区域å移:ä¸å½“,标记 %d 类型 %d å移 %d 计数 %d"
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA: 错误,éžäºŒè¿›åˆ¶\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr "区域结尾:ä¸å½“,标记 %d 类型 %d å移 %d 计数 %d"
-#: lib/package.c:296
+#: lib/header.c:1833
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1841
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1876
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
+msgid "hdr size(%d): BAD, read returned %d"
+msgstr "头部大å°(%d):ä¸å½“,读å–返回 %d"
+
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr "头部幻数:ä¸å½“"
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1885
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr ""
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr "头部标记:ä¸å½“,标记(%d)çš„å·ç è¶…出范围"
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1890
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr ""
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr "头部数æ®ï¼šä¸å½“,字节(%d)çš„å·ç è¶…出范围"
-#: lib/package.c:427
+#: lib/header.c:1900
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr ""
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr "头部 blob(%zd):ä¸å½“,读å–返回 %d"
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
+#: lib/header.c:1909
+#, c-format
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr "sigh å¡«å……(%zd):ä¸å½“ï¼Œè¯»å– %zd 字节"
+
+#: lib/header.c:1922
+msgid "signature "
msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr ""
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr "blob 大å°(%d):ä¸å½“,8 + 16 * il(%d) + dl(%d)"
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr "无效的字段宽度"
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
+msgid "missing { after %%"
msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr ""
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "空白标签格å¼"
+
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "空白标签å称"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: rpmReadSignature failed: %s"
+msgid "unknown tag: \"%s\""
msgstr ""
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
-#, c-format
-msgid "%s: No signature available\n"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] 预期于数组结尾"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "未预期的 ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "未预期的 }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? 预期于表达å¼ä¸­"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} 预期在表达å¼ä¸­"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
msgstr ""
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
-#, c-format
-msgid "%s: Fread failed: %s\n"
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
msgstr ""
-#: lib/poptALL.c:164
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| 预期于表达å¼ç»“å°¾"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "使用ä¸åŒå¤§å°æ•°ç»„的数组的迭代器"
+
+#: lib/poptALL.c:154
+#, c-format
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr "%s:错误:指定了多次 --pipe (å¯èƒ½æ˜¯ä¸å…¼å®¹çš„ popt 别å?)\n"
+
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
-msgstr ""
+msgstr "预先以值 EXPR 定义 MACRO"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
-msgstr ""
+msgstr "“MACRO EXPRâ€"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "定义值为 EXPR 的 MACRO"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
-msgstr ""
+msgstr "未定义的 MACRO"
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
-msgstr ""
+msgstr "MACRO"
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "æ‰“å° EXPR çš„å®å±•å¼€"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
+msgstr "“EXPRâ€"
+
+#: lib/poptALL.c:200
+msgid "Specify target platform"
msgstr ""
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "从文件 <FILE:...> 读å–å®ï¼Œä¸ä½¿ç”¨é»˜è®¤æ–‡ä»¶"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
-msgstr ""
+msgstr "<FILE:…>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr "ä¸è¦å¯ç”¨ä»»ä½•æ’件"
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
-msgstr ""
+msgstr "ä¸æ ¡éªŒè½¯ä»¶åŒ…的摘è¦"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
-msgstr ""
+msgstr "检索时,ä¸éªŒè¯æ•°æ®åº“头"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
msgstr "ä¸éªŒè¯è½¯ä»¶åŒ…ç­¾å"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
-msgstr ""
+msgstr "å‘é€ stdout 到 CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
-msgstr ""
+msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "使用 ROOT 作为顶级目录"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "使用 DIRECTORY 目录中的数æ®åº“"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "DIRECTORY"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "显示已知的查询标签"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "显示最终的 rpmrc å’Œå®é…ç½®"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "æ供更少的详细信æ¯è¾“出"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "æ供更多的详细信æ¯è¾“出"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "打å°ä½¿ç”¨çš„ rpm 版本å·"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
-msgstr ""
+msgstr "调试净负è·æ–‡ä»¶çŠ¶æ€æœº"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
-msgstr ""
+msgstr "debug rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
-msgstr ""
+msgstr "%s:选项表é…ç½®ä¸æ­£ç¡® (%d)\n"
#: lib/poptI.c:52
msgid "exclude paths must begin with a /"
-msgstr ""
+msgstr "被排除的路径必须以 / 开头"
#: lib/poptI.c:64
msgid "relocations must begin with a /"
-msgstr ""
+msgstr "é‡å®šä½å¿…须以 / 开头"
#: lib/poptI.c:67
msgid "relocations must contain a ="
-msgstr ""
+msgstr "é‡å®šä½å¿…须包å«æœ‰ä¸€ä¸ª ="
#: lib/poptI.c:70
msgid "relocations must have a / following the ="
-msgstr ""
+msgstr "é‡å®šä½å¿…须有 / 跟在 = 之åŽ"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr "安装全部文件,包å«é…置文件,å¦åˆ™é…置文件会被跳过。"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
+"ç§»é™¤æ‰€æœ‰ç¬¦åˆ <package> 的软件包(如果 <package> 被指定未多个软件包,常常会导致"
+"错误出现)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
-msgstr ""
+msgstr "对ä¸å¯é‡å®šä½çš„软件包é‡æ–°åˆ†é…文件ä½ç½®"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
-msgstr ""
+msgstr "打å°ä¾èµ–循环作为警告"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
msgstr "清除 (å¸è½½) 软件包"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
-msgstr ""
+msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "ä¸å®‰è£…é…置文件"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "ä¸å®‰è£…程åºæ–‡æ¡£"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
-msgstr ""
+msgstr "略过以 <path> 开头的文件"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
-msgstr ""
+msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "--replacepkgs --replacefiles 的缩写"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
msgstr "如果软件包已ç»å®‰è£…,å‡çº§è½¯ä»¶åŒ…"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
-msgstr ""
+msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
-msgstr ""
+msgstr "软件包安装的时候列出哈希标记 (和 -v 一起使用效果更好)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
msgstr "ä¸éªŒè¯è½¯ä»¶åŒ…架构"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "ä¸éªŒè¯è½¯ä»¶åŒ…æ“作系统"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "在安装å‰ä¸æ£€æŸ¥ç£ç›˜ç©ºé—´"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "安装程åºæ–‡æ¡£"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
msgstr "安装软件包"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "æ›´æ–°æ•°æ®åº“,但ä¸ä¿®æ”¹æ–‡ä»¶ç³»ç»Ÿ"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
msgstr "ä¸éªŒè¯è½¯ä»¶åŒ…ä¾èµ–"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "ä¸éªŒè¯æ–‡ä»¶æ‘˜è¦"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "ä¸éªŒè¯æ–‡ä»¶æ‘˜è¦(已过时)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "ä¸å®‰è£…文件的安全上下文"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
msgstr "ä¸å¯¹è½¯ä»¶åŒ…安装é‡æ–°æŽ’åºä»¥æ»¡è¶³ä¾èµ–关系"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
-msgstr "ä¸æ‰§è¡Œè½¯ä»¶åŒ…脚本"
+msgstr "ä¸æ‰§è¡Œè½¯ä»¶åŒ…å°è„šæœ¬"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
-msgstr "ä¸æ‰§è¡Œ%%pre 脚本(如果有的è¯)"
+msgstr "ä¸æ‰§è¡Œ %%pre å°è„šæœ¬ï¼ˆè‹¥å­˜åœ¨ï¼‰"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
-msgstr "ä¸æ‰§è¡Œ%%post 脚本(如果有的è¯)"
+msgstr "ä¸æ‰§è¡Œ %%post å°è„šæœ¬ï¼ˆè‹¥å­˜åœ¨ï¼‰"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
-msgstr "ä¸æ‰§è¡Œ%%preun 脚本(如果有的è¯)"
+msgstr "ä¸æ‰§è¡Œ %%preun å°è„šæœ¬ï¼ˆè‹¥å­˜åœ¨ï¼‰"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
-msgstr "ä¸æ‰§è¡Œ%%postun 脚本(如果有的è¯)"
+msgstr "ä¸æ‰§è¡Œ %%postun å°è„šæœ¬ï¼ˆè‹¥å­˜åœ¨ï¼‰"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr "ä¸æ‰§è¡Œ %%pretrans 事务å‰çš„å°è„šæœ¬ (若存在)"
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr "ä¸æ‰§è¡Œ %%posttrans 短脚本 (若存在)"
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
-msgstr "ä¸æ‰§è¡Œæœ¬è½¯ä»¶åŒ…触å‘的任何脚本"
+msgstr "ä¸æ‰§è¡Œæœ¬è½¯ä»¶åŒ…触å‘的任何å°è„šæœ¬"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
-msgstr "ä¸æ‰§è¡Œä»»ä½•%%triggerprein 脚本"
+msgstr "ä¸æ‰§è¡Œä»»ä½• %%triggerprein 脚本"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
-msgstr "ä¸æ‰§è¡Œä»»ä½•%%triggerin 脚本"
+msgstr "ä¸æ‰§è¡Œä»»ä½• %%triggerin 脚本"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
-msgstr "ä¸æ‰§è¡Œä»»ä½•%%triggerun 脚本"
+msgstr "ä¸æ‰§è¡Œä»»ä½• %%triggerun 脚本"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
-msgstr "ä¸æ‰§è¡Œä»»ä½•%%triggerpostun 脚本"
-
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
+msgstr "ä¸æ‰§è¡Œä»»ä½• %%triggerpostun 脚本"
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
msgstr "更新到软件包的旧版本(带 --force 自动完æˆè¿™ä¸€åŠŸèƒ½)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
msgstr "安装软件包时打å°ç™¾åˆ†æ¯”"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
-msgstr ""
+msgstr "如果å¯é‡å®šä½ï¼Œä¾¿æŠŠè½¯ä»¶åŒ…é‡å®šä½åˆ° <dir>"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
-msgstr ""
+msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
-msgstr ""
+msgstr "将文件从 <old> é‡å®šä½åˆ° <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
-msgstr ""
+msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
msgstr "忽略软件包之间的冲çªçš„文件"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
msgstr "如果软件包已ç»æœ‰äº†ï¼Œé‡æ–°å®‰è£…软件包"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "ä¸çœŸæ­£å®‰è£…,åªæ˜¯åˆ¤æ–­ä¸‹æ˜¯å¦èƒ½å®‰è£…"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
msgstr "å‡çº§è½¯ä»¶åŒ…"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr "é‡æ–°å®‰è£…软件包"
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
msgstr "查询/验è¯æ‰€æœ‰è½¯ä»¶åŒ…"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
-msgstr ""
+msgstr "rpm 检查签å模å¼"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
msgstr "查询/验è¯æ–‡ä»¶å±žäºŽçš„软件包"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
msgstr "查询/验è¯ç»„中的软件包"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
msgstr "查询/验è¯ä¸€ä¸ªè½¯ä»¶åŒ…"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
-msgstr ""
+msgstr "æ ¹æ®è½¯ä»¶åŒ…标识符查找/校验软件包"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
-msgstr ""
+msgstr "æ ¹æ®å¤´éƒ¨æ ‡è¯†ç¬¦æŸ¥æ‰¾/校验软件包"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
-msgstr ""
+msgstr "rpm 查询模å¼"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
-msgstr ""
+msgstr "查询/验è¯å¤´çš„实例"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
-msgstr ""
+msgstr "从安装事务查找/验è¯è½¯ä»¶åŒ…"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
-msgstr ""
+msgstr "查找由软件包所触å‘的软件包"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
-msgstr ""
+msgstr "rpm 校验模å¼"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
-msgstr ""
+msgstr "查找/校验需è¦æŸä¸ªä¾èµ–对象的软件包"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
+msgstr "查询/验è¯æ供相关ä¾èµ–的软件包"
+
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
msgstr ""
-#: lib/poptQV.c:98
-msgid "do not glob arguments"
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
msgstr ""
-#: lib/poptQV.c:100
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
+
+#: lib/poptQV.c:114
+msgid "do not glob arguments"
+msgstr "ä¸ä½¿ç”¨ glob å‚æ•°"
+
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
msgstr "ä¸æŠŠéžè½¯ä»¶åŒ…文件作为清å•å¤„ç†"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "列出所有é…置文件"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "列出所有程åºæ–‡æ¡£"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "列出所有程åºæ–‡æ¡£"
+msgstr "列出所有许å¯è¯æ–‡ä»¶"
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "列出所有许å¯è¯æ–‡ä»¶"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "转储基本文件信æ¯"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
-msgstr "列出包中的文件"
+msgstr "列出软件包中的文件"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "跳过%%ghost 文件"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "跳过%%ghost 文件"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "显示列出文件的状æ€"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "ä¸éªŒè¯æ–‡ä»¶å¤§å°"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "ä¸éªŒè¯ç¬¦å·è¿žæŽ¥è·¯å¾„"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "ä¸éªŒè¯æ–‡ä»¶æ‰€æœ‰è€…"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "ä¸éªŒè¯æ–‡ä»¶ç»„ä¿¡æ¯"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "ä¸éªŒè¯æ–‡ä»¶ä¿®æ”¹æ—¶é—´"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "ä¸éªŒè¯æ–‡ä»¶æ¨¡å¼"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr "ä¸éªŒè¯æ–‡ä»¶å…¼å®¹æ€§"
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "ä¸éªŒè¯æ–‡ä»¶å®‰å…¨ä¸Šä¸‹æ–‡"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr "ä¸éªŒè¯æ–‡ä»¶å…¼å®¹æ€§"
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
msgstr "ä¸éªŒè¯è½¯ä»¶åŒ…中文件"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
msgstr "ä¸éªŒè¯åŒ…ä¾èµ–"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "ä¸æ‰§è¡ŒéªŒè¯è„šæœ¬"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
-msgstr ""
+msgstr " %s 缺失rpmlib的特性\n"
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
msgstr "期望æºä»£ç åŒ…,但找到二进制包\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
msgstr "æºä»£ç åŒ…中没有找到 .spec 文件\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
-msgstr ""
+msgstr "解压压缩文件 %s%s 失败:%s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
-msgstr ""
+msgstr " 在文件"
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr ""
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr ""
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "ä¸æ­£ç¡®çš„æ ¼å¼ï¼š%s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(没有包å«æ–‡ä»¶)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "正常"
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "替æ¢"
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "未安装"
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "网络共享"
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "ä¸å¯¹çš„颜色"
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(无状æ€) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(未知 %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
-msgstr ""
+msgstr "软件包中没有文件的所有者/群组列表\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
-msgstr ""
+msgstr "软件包中也ä¸æ²¡æœ‰æ–‡ä»¶çš„所有者或者是 id 列表\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
msgstr "没有找到属于 %s 组的软件包\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
-msgstr ""
+msgstr "没有软件包触å‘器 %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "æ ¼å¼ä¸å¯¹ %s:%s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
-msgstr ""
+msgstr "没有软件包和 %s 匹é…:%s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
-msgstr ""
+msgstr "æ²¡æœ‰è½¯ä»¶åŒ…éœ€è¦ %s\n"
+
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr "没有推è安装 %s 的软件包\n"
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr "没有建议安装 %s 的软件包\n"
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr "没有æä¾› %s 的软件包\n"
+
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr "没有用于增强 %s 的软件包\n"
-#: lib/query.c:392
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
-msgstr "没有包æä¾› %s\n"
+msgstr "没有软件包æä¾› %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "文件 %s:%s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
-msgstr "文件 %s ä¸å±žäºŽä»»ä½•åŒ…\n"
+msgstr "文件 %s ä¸å±žäºŽä»»ä½•è½¯ä»¶åŒ…\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
-msgstr ""
+msgstr "无效的软件包编å·ï¼š%s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
-msgstr ""
+msgstr "记录 %u ä¸èƒ½è¯»å–\n"
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
msgstr "未安装软件包 %s \n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
-msgstr ""
+msgstr "未知标签:\"%s\"\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
-msgstr ""
+msgstr "%s:导入密钥 %d 失败。\n"
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
-msgstr ""
+msgstr "%s:公钥 %d ä¸å—到ä¿æŠ¤ã€‚\n"
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
-msgstr ""
+msgstr "%s:导入读å–时失败(%d)。\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
msgstr ""
-#: lib/rpmchecksig.c:386
-msgid "NOT OK"
-msgstr ""
-
-#: lib/rpmchecksig.c:386
-msgid "OK"
+#: lib/rpmchecksig.c:262
+msgid "digests"
msgstr ""
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:390
-msgid ") "
+#: lib/rpmchecksig.c:266
+msgid "signatures"
msgstr ""
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr ""
+#: lib/rpmchecksig.c:268
+msgid "NOT OK"
+msgstr "ä¸æ­£ç¡®"
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ""
+#: lib/rpmchecksig.c:268
+msgid "OK"
+msgstr "确定"
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
-msgstr ""
+msgstr "%s:打开失败:%s\n"
#: lib/rpmchroot.c:43
#, c-format
msgid "Unable to open current directory: %m\n"
-msgstr ""
+msgstr "无法打开当å‰ç›®å½•ï¼š%m\n"
#: lib/rpmchroot.c:59 lib/rpmchroot.c:84
#, c-format
msgid "%s: chroot directory not set\n"
-msgstr ""
+msgstr "%s:没有设置 chroot 目录\n"
#: lib/rpmchroot.c:70
#, c-format
msgid "Unable to change root directory: %m\n"
-msgstr ""
+msgstr "无法更改根目录: %m\n"
#: lib/rpmchroot.c:95
#, c-format
msgid "Unable to restore root directory: %m\n"
+msgstr "无法æ¢å¤æ ¹ç›®å½•ï¼š%m\n"
+
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
msgstr ""
-#: lib/rpmds.c:489
-msgid "NO "
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
msgstr ""
-#: lib/rpmds.c:489
-msgid "YES"
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "没有设置 dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader:跳过"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr "%s: regexec 函数执行失败: %s\n"
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr "%s: regcomp 函数执行失败: %s\n"
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator:跳过"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb:获å–到æŸå表头 #%u -- 跳过此项。\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s:无法读å–ä½äºŽ 0x%x 的表头\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
msgstr ""
-#: lib/rpmds.c:933
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "没有设置 dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr "無法建立 %s 目录: %s\n"
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr ""
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "无法加入原本ä½äºŽ %u 的记录\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "é‡å»ºæ•°æ®åº“失败:原始数æ®åº“ä»ä¿æŒåŽŸçŠ¶\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "用新的数æ®åº“å–代旧的数æ®åº“失败ï¼\n"
+
+#: lib/rpmds.c:744
+msgid "NO "
+msgstr "å¦"
+
+#: lib/rpmds.c:744
+msgid "YES"
+msgstr "是"
+
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr ""
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr ""
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
-msgstr ""
+msgstr "软件包净负è·å¯ä»¥ä½¿ç”¨ bzip2 压缩。"
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
-msgstr ""
+msgstr "软件包净负è·å¯ä»¥ä½¿ç”¨ xz 压缩。"
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
-msgstr ""
+msgstr "软件包净负è·å¯ä»¥ä½¿ç”¨ lzma 压缩。"
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
-msgstr ""
+msgstr "软件包净负è·æœ‰\"./\" å‰ç¼€ã€‚"
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
-msgstr ""
+msgstr "软件包 name-version-release 没有éšå«åœ°æ供。"
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
-msgstr ""
+msgstr "头标签总是排åºåŽè¢«åŠ è½½ã€‚"
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr ""
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
-msgstr ""
+msgstr "硬链接文件集没有被完整的安装。"
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
-msgstr ""
+msgstr "软件包脚本在安装过程中å…许访问 rpm æ•°æ®åº“。"
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
-msgstr ""
+msgstr "lua 脚本的内部支æŒ"
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr "支æŒè¶…过 4G 的文件"
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr "富ä¾èµ–关系支æŒ"
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr "未知的富ä¾èµ–关系æ“作符“%.*sâ€"
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr "å称是必填项"
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr "富ä¾èµ–关系未以“(â€å¼€å¤´"
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr "富ä¾èµ–关系æ“作符缺少å‚æ•°"
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr "富ä¾èµ–关系为空"
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr "富ä¾èµ–关系缺少结尾:%s"
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr "富ä¾èµ–关系åŽæœ‰å¤šä½™å†…容"
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "Bad magic"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "错误/ä¸å¯è¯»çš„ 头部"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "头部太大"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr "对于压缩文件æ¥è¯´æ–‡ä»¶å¤ªå¤§äº†"
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "未知文件类型"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr "丢失文件"
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "摘è¦ä¸åŒ¹é…"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "内部错误"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "在头中ä¸å­˜åœ¨å½’æ¡£"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " 失败 - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr "%s:(错误 0x%x)"
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "打开 %s 失败: %s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
-msgstr "%s: ä¸æ˜¯ rpm 软件包 (或者没有 manifest 文件)\n"
+msgstr "%s:ä¸æ˜¯ rpm 软件包 (或者没有 manifest 文件)\n"
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr "正在å‡çº§/安装...\n"
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr "正在清ç†/删除...\n"
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "准备中..."
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr "软件包准备中..."
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
-msgstr ""
+msgstr "ä¾èµ–检测失败:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
-msgstr "%s: ä¸æ˜¯ rpm 软件包 (或者没有manifest):%s\n"
+msgstr "%s:ä¸æ˜¯ rpm 软件包 (或者没有 manifest):%s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "ä¸èƒ½å®‰è£… %s \n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "获å–%s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
-msgstr ""
+msgstr "跳过 %s - 传输失败\n"
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
-msgstr ""
+msgstr "软件包 %s ä¸èƒ½é‡å®šä½\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "文件 %s 读å–错误\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
-msgstr ""
+msgstr "\"%s\" 指定多个软件包:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "无法打开 %s:%s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "正在安装 %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
msgstr "ä¸æ˜¯ä¸€ä¸ª rpm 软件包"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "éžæ³•çš„ç­¾å类型"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
msgstr "ä¸æ”¯æŒçš„ RPM 软件包版本"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "读å–失败:%s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
-msgstr "是ä¸ä¸€ä¸ª rpm 包\n"
+msgstr "ä¸æ˜¯ä¸€ä¸ª rpm 软件包\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
-msgstr ""
+msgstr "无法创建 %s é”定于 %s (%s) \n"
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
-msgstr ""
+msgstr "正在等候 %s é”定 %s\n"
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
-msgstr ""
+msgstr "dlopen 失败 %s %s\n"
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
-msgstr ""
+msgstr "解æžç¬¦å· %s 失败:%s\n"
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
-msgstr ""
+msgid "Plugin %%__%s_%s not configured\n"
+msgstr "æ’件 %%__%s_%s 未é…ç½®\n"
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
-msgstr ""
-
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
+msgstr "%s æ’件未载入\n"
#: lib/rpmprob.c:109
msgid "different"
-msgstr ""
+msgstr "ä¸åŒ"
#: lib/rpmprob.c:114
#, c-format
msgid "package %s is intended for a %s architecture"
-msgstr ""
+msgstr "软件包 %s 是针对 %s 构架的"
#: lib/rpmprob.c:118
#, c-format
msgid "package %s is intended for a %s operating system"
-msgstr ""
+msgstr "软件包 %s 是针对 %s æ“作系统的"
#: lib/rpmprob.c:122
#, c-format
msgid "package %s is already installed"
-msgstr ""
+msgstr "软件包 %s å·²ç»å®‰è£…"
#: lib/rpmprob.c:125
#, c-format
@@ -2665,7 +3275,7 @@ msgstr ""
#: lib/rpmprob.c:130
#, c-format
msgid "file %s conflicts between attempted installs of %s and %s"
-msgstr ""
+msgstr "试图安装 %2$s å’Œ %3$s 会导致文件 %1$s 冲çª"
#: lib/rpmprob.c:135
#, c-format
@@ -2675,7 +3285,7 @@ msgstr ""
#: lib/rpmprob.c:140
#, c-format
msgid "package %s (which is newer than %s) is already installed"
-msgstr ""
+msgstr "软件包 %s (比 %s 还è¦æ–°) å·²ç»å®‰è£…"
#: lib/rpmprob.c:145
#, c-format
@@ -2690,817 +3300,654 @@ msgstr ""
#: lib/rpmprob.c:159
#, c-format
msgid "%s is needed by %s%s"
-msgstr ""
+msgstr "%s 被 %s%s 需è¦"
#: lib/rpmprob.c:160 lib/rpmprob.c:164 lib/rpmprob.c:168
msgid "(installed) "
-msgstr ""
+msgstr "(已安è£) "
#: lib/rpmprob.c:163
#, c-format
msgid "%s conflicts with %s%s"
-msgstr ""
+msgstr "%s 与 %s%s 冲çª"
#: lib/rpmprob.c:167
#, c-format
msgid "%s is obsoleted by %s%s"
-msgstr ""
+msgstr "%s 被 %s%s å–代"
#: lib/rpmprob.c:172
#, c-format
msgid "unknown error %d encountered while manipulating package %s"
-msgstr ""
+msgstr "é‡åˆ°æœªçŸ¥é”™è¯¯ %d 在处ç†åŒ… %s æ—¶"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
-msgstr ""
+msgstr "在 %s:%d 中é—æ¼ç¬¬äºŒä¸ª “:â€\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
-msgstr ""
+msgstr "在 %s:%d 处丢失构架å称\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
-msgstr ""
+msgstr "ä¸å®Œæ•´çš„资料行于 %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
-msgstr ""
+msgstr "在此数æ®è¡Œä¸­å­˜åœ¨è¿‡å¤šçš„的指定å‚æ•° %s:%d\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
-msgstr ""
+msgstr "å的构架/æ“作系统编å·ï¼š%s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
-msgstr ""
+msgstr "ä¸å®Œæ•´çš„预设行在 %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
-msgstr ""
+msgstr "预设行 %s:%d 中存在过多å‚æ•°\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
-msgstr ""
+msgstr "丢失 ':' (找到 0x%02x) 在 %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
-msgstr ""
+msgstr "ä¸èƒ½æ‰“å¼€ %s 在 %s:%d: %m\n"
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr ""
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
-msgstr ""
+msgstr "å的选项 “%s†ä½äºŽ %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
-msgstr ""
+msgstr "读å–辅助载体失败, 是 /proc 没有挂载么?\n"
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
-msgstr ""
+msgstr "未知系统:%s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
-msgstr ""
+msgstr "请è”ç³» %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
+msgstr "ä¸èƒ½æ‰“å¼€ %s 供读å–:%m。\n"
+
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
msgstr ""
-#: lib/rpmscript.c:75
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
-msgstr ""
+msgstr "无法æ¢å¤å½“å‰ç›®å½•ï¼š%m"
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
-msgstr ""
+msgstr "<lua> 脚本支æŒæœªå†…建\n"
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
-msgstr ""
+msgstr "无法建立临时文件赖存储%s:%s\n"
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
-msgstr ""
+msgstr "无法å¤åˆ¶æ–‡ä»¶æ述:%s:%s\n"
+
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr "fwrite 失败:%s"
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
-msgstr ""
+msgstr "%s 脚本执行失败,waitpid(%d) rc %d: %s\n"
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
-msgstr ""
+msgstr "%s 脚本执行失败,æ•æ‰åˆ°ä¿¡å·ï¼š %d\n"
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
-msgstr ""
+msgstr "%s 脚本执行失败,退出状æ€ç ä¸º %d\n"
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
-msgstr ""
+msgstr "未知格å¼"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
-msgstr ""
+msgstr "安è£"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
-msgstr ""
+msgstr "删除"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
-msgstr ""
+msgstr "无法从 %s 打开软件包数æ®åº“\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
-msgstr ""
+msgstr "é¡å¤–的“(â€å­˜åœ¨äºŽè½¯ä»¶åŒ…标签中:%s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
-msgstr ""
+msgstr "丢失“(â€åœ¨è½¯ä»¶åŒ…标签 %s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
-msgstr ""
+msgstr "丢失“)â€åœ¨è½¯ä»¶åŒ…标签 %s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
-msgstr ""
+msgstr "读出公钥失败:%s\n"
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
-msgstr ""
+msgstr "事务"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid type %u"
msgstr ""
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr ""
-
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
+msgid "%s: tag %u: invalid count %u"
msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
+msgid "%s tag %u: invalid data %p (%u)"
msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
+msgid "%s tag %u: invalid size %u"
msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
+msgid "%s tag %u: invalid OpenPGP signature"
msgstr ""
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
+#: lib/rpmvs.c:206
+#, c-format
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:235
-#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:269
+msgid "signature"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
+#: lib/rpmvs.c:295
+msgid "header"
msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
+#: lib/rpmvs.c:295
+msgid "package"
msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:396
msgid "Header "
-msgstr ""
+msgstr "头"
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "无法é‡è½½ç­¾å头。\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
-msgstr ""
+msgstr "已跳过"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
-msgstr ""
+msgstr "已失败"
-#: lib/verify.c:372
+#: lib/verify.c:263
#, c-format
-msgid "missing %c %s"
-msgstr ""
+msgid "Duplicate username or UID for user %s\n"
+msgstr "用户 %s 存在é‡å¤çš„用户å或 UID\n"
-#: lib/verify.c:422
+#: lib/verify.c:284
#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr ""
+msgid "Duplicate groupname or GID for group %s\n"
+msgstr "用户组 %s 存在é‡å¤çš„组å或 GID\n"
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr ""
+#: lib/verify.c:395
+msgid "no state"
+msgstr "没有状æ€"
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr ""
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr ""
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr ""
+#: lib/verify.c:397
+msgid "unknown state"
+msgstr "未知状æ€"
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr ""
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr ""
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr ""
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr ""
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr ""
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ""
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr ""
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr ""
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr ""
-
-#: lib/rpmdb.c:97
+#: lib/verify.c:448
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "é—æ¼ %c %s"
-#: lib/rpmdb.c:191
+#: lib/verify.c:503
#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr ""
+msgid "Unsatisfied dependencies for %s:\n"
+msgstr "未满足的ä¾èµ–关系 %s:\n"
-#: lib/rpmdb.c:516
+#: plugins/prioreset.c:29
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
-msgstr ""
-
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr ""
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:1318
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) storing record #%d into %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/rpmdb.c:1596
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "%s: regcomp failed: %s\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr ""
-
-#: lib/rpmdb.c:1897
-#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr ""
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
+msgstr "%3d>%*s(清空)"
-#: lib/rpmdb.c:2250
+#: rpmio/macro.c:316
#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
+msgid "%3d<%*s(empty)\n"
+msgstr "%3d<%*s(清空)\n"
-#: lib/rpmdb.c:2349
+#: rpmio/macro.c:483
#, c-format
-msgid "error(%d) adding header #%d record\n"
-msgstr ""
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "å® %%%s 具有未结æŸçš„选项\n"
-#: lib/rpmdb.c:2358
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "error(%d) removing header #%d record\n"
-msgstr ""
+msgid "Macro %%%s has unterminated body\n"
+msgstr "å® %%%s 主体未结æŸ\n"
-#: lib/rpmdb.c:2382
+#: rpmio/macro.c:551
#, c-format
-msgid "%s: cannot read header at 0x%x\n"
+msgid "Macro %%%s has illegal name (%s)\n"
msgstr ""
-#: lib/rpmdb.c:2448
+#: rpmio/macro.c:557
#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr ""
+msgid "Macro %%%s has empty body\n"
+msgstr "å® %%%s 中存在空内容\n"
-#: lib/rpmdb.c:2467
+#: rpmio/macro.c:562
#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr ""
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr "å® %%%s 在结构之å‰éœ€è¦ç©ºæ ¼\n"
-#: lib/rpmdb.c:2477
+#: rpmio/macro.c:566
#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr ""
+msgid "Macro %%%s failed to expand\n"
+msgstr "å® %%%s 展开失败\n"
-#: lib/rpmdb.c:2551
+#: rpmio/macro.c:607
#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr ""
+msgid "Macro %%%s has illegal name (%%undefine)\n"
+msgstr "å® %%%s 中存在无效的å称 (%%undefine)\n"
-#: lib/rpmdb.c:2644
+#: rpmio/macro.c:637
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr ""
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr "å® %%%s å·²ç»å®šä¹‰ä½†æ˜¯æ²¡æœ‰ä½¿ç”¨\n"
-#: lib/rpmdb.c:2660
+#: rpmio/macro.c:761
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr ""
+msgid "Unknown option %c in %s(%s)\n"
+msgstr "在 %2$s(%3$s) 中存在未知的选项 %1$c\n"
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr ""
+#: rpmio/macro.c:1055
+msgid ""
+"Too many levels of recursion in macro expansion. It is likely caused by "
+"recursive macro declaration.\n"
+msgstr "å®æ‰©å±•ä¸­å­˜åœ¨å¤ªå¤šå±‚的递归。这有å¯èƒ½æ˜¯ç”±å®çš„递归声明引起的。\n"
-#: lib/rpmdb.c:2875
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
-msgid "failed to create directory %s: %s\n"
-msgstr ""
+msgid "Unterminated %c: %s\n"
+msgstr "未结æŸçš„ %c:%s\n"
-#: lib/rpmdb.c:2910
+#: rpmio/macro.c:1182
#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr ""
+msgid "A %% is followed by an unparseable macro\n"
+msgstr "在一个ä¸å¯è§£æžçš„å®ä¹‹ä¹‹åŽè·Ÿç€ %%\n"
-#: lib/rpmdb.c:2924
+#: rpmio/macro.c:1197
#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr ""
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr ""
+msgid "failed to load macro file %s"
+msgstr "载入å®æ–‡ä»¶ %s 失败"
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr ""
-
-#: lib/rpmdb.c:2949
+#: rpmio/macro.c:1578
#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr ""
+msgid "======================== active %d empty %d\n"
+msgstr "======================== 作用中 %d 清空 %d\n"
-#: lib/rpmdb.c:2960
+#: rpmio/rpmfileutil.c:258
#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr ""
+msgid "error creating temporary file %s: %m\n"
+msgstr "临时文件创建失败 %s:%m\n"
-#: lib/backend/db3.c:33
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr ""
+msgid "File %s: %s\n"
+msgstr "文件 %s:%s\n"
-#: lib/backend/db3.c:36
+#: rpmio/rpmfileutil.c:332
#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr ""
+msgid "File %s is smaller than %u bytes\n"
+msgstr "文件 %s å°äºŽ %u 字节\n"
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr ""
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr "[æ— ]"
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr ""
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(没有错误)"
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr ""
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "致命错误:"
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
-msgstr ""
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "错误:"
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr ""
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "警告:"
-#: lib/backend/dbconfig.c:181
+#: rpmio/rpmlua.c:523
#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr ""
+msgid "invalid syntax in lua scriptlet: %s\n"
+msgstr "lua 脚本中存在无效的语法:%s\n"
-#: lib/backend/dbconfig.c:190
+#: rpmio/rpmlua.c:541
#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr ""
+msgid "invalid syntax in lua script: %s\n"
+msgstr "Lua 脚本中存在无效的语法:%s\n"
-#: lib/backend/dbconfig.c:199
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr ""
+msgid "lua script failed: %s\n"
+msgstr "lua 脚本执行失败:%s\n"
-#: plugins/sepolicy.c:218
+#: rpmio/rpmlua.c:560
#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr ""
+msgid "invalid syntax in lua file: %s\n"
+msgstr "lua文件中存在无效的语法 %s\n"
-#: plugins/sepolicy.c:225
+#: rpmio/rpmlua.c:756
#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr ""
+msgid "lua hook failed: %s\n"
+msgstr "lua hook 执行失败:%s\n"
-#: plugins/sepolicy.c:231
+#: rpmio/rpmmalloc.c:25
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr ""
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
-msgstr ""
-
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr ""
+msgid "memory alloc (%u bytes) returned NULL.\n"
+msgstr "å†…åœ¨åˆ†é… (%u 字节) 返回 NULL。\n"
-#: plugins/sepolicy.c:306
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
#, c-format
-msgid "Failed to begin policy transaction: %s\n"
+msgid "Unsupported version of key: V%d\n"
msgstr ""
-#: plugins/sepolicy.c:337
+#: rpmio/rpmpgp.c:1127
#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr ""
+msgid "V%d %s/%s %s, key ID %s"
+msgstr "V%d %s/%s %s, 密钥 ID %s"
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr ""
+#: rpmio/rpmpgp.c:1135
+msgid "(none)"
+msgstr "(æ— )"
-#: plugins/sepolicy.c:416
+#: rpmio/rpmsq.c:37
#, c-format
-msgid "Failed to remove policy module: %s\n"
+msgid "exiting on signal %d from pid %d\n"
msgstr ""
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
+#: sign/rpmgensig.c:54
#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr ""
+msgid "error creating temp directory %s: %m\n"
+msgstr "创建临时目录 %s 时出错:%m\n"
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
+#: sign/rpmgensig.c:62
#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr ""
+msgid "error creating fifo %s: %m\n"
+msgstr "创建队列 %s 时出错:%m\n"
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
+#: sign/rpmgensig.c:83
#, c-format
-msgid "%s terminated abnormally\n"
-msgstr ""
+msgid "error delete fifo %s: %m\n"
+msgstr "删除队列 %s 时出错:%m\n"
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
+#: sign/rpmgensig.c:91
#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr ""
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr ""
+msgid "error delete directory %s: %m\n"
+msgstr "删除目录 %s æ—¶å‘生错误:%m\n"
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr ""
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr ""
-
-#: plugins/sepolicy.c:594
+#: sign/rpmgensig.c:167
#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr ""
+msgid "%s: Fwrite failed: %s\n"
+msgstr "%s:Fwrite 失败:%s\n"
-#: rpmio/macro.c:185
+#: sign/rpmgensig.c:173
#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr ""
+msgid "%s: Fread failed: %s\n"
+msgstr "%s:Fread 函数执行失败:%s\n"
-#: rpmio/macro.c:323
+#: sign/rpmgensig.c:177
#, c-format
-msgid "%3d>%*s(empty)"
-msgstr ""
+msgid "%s: Fflush failed: %s\n"
+msgstr "%s: Fflush 失败:%s\n"
-#: rpmio/macro.c:364
-#, c-format
-msgid "%3d<%*s(empty)\n"
-msgstr ""
+#: sign/rpmgensig.c:202
+msgid "Unsupported PGP signature\n"
+msgstr "ä¸æ”¯æŒçš„ PGP ç­¾å\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: sign/rpmgensig.c:208
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr ""
+msgid "Unsupported PGP hash algorithm %u\n"
+msgstr "ä¸æ”¯æŒçš„ PGP hash 算法 %u\n"
-#: rpmio/macro.c:594
+#: sign/rpmgensig.c:221
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr ""
+msgid "Unsupported PGP pubkey algorithm %u\n"
+msgstr "ä¸æ”¯æŒçš„ PGP 公钥算法 %u\n"
-#: rpmio/macro.c:600
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr ""
+msgid "Could not exec %s: %s\n"
+msgstr "无法exec %s:%s\n"
-#: rpmio/macro.c:605
-#, c-format
-msgid "Macro %%%s has empty body\n"
-msgstr ""
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr "fopen 失败\n"
-#: rpmio/macro.c:611
-#, c-format
-msgid "Macro %%%s failed to expand\n"
-msgstr ""
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr "无法写入到管é“\n"
-#: rpmio/macro.c:649
+#: sign/rpmgensig.c:302
#, c-format
-msgid "Macro %%%s has illegal name (%%undefine)\n"
-msgstr ""
+msgid "Could not read from file %s: %s\n"
+msgstr "无法从文件 %s 读å–:%s\n"
-#: rpmio/macro.c:743
+#: sign/rpmgensig.c:312
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr ""
+msgid "gpg exec failed (%d)\n"
+msgstr "gpg 执行失败 (%d)\n"
-#: rpmio/macro.c:825
-#, c-format
-msgid "Unknown option %c in %s(%s)\n"
-msgstr ""
+#: sign/rpmgensig.c:354
+msgid "gpg failed to write signature\n"
+msgstr "写入签åæ—¶ gpg 验è¯å¤±è´¥\n"
-#: rpmio/macro.c:1048
-msgid ""
-"Too many levels of recursion in macro expansion. It is likely caused by "
-"recursive macro declaration.\n"
-msgstr ""
+#: sign/rpmgensig.c:371
+msgid "unable to read the signature\n"
+msgstr "无法读å–ç­¾å\n"
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
-#, c-format
-msgid "Unterminated %c: %s\n"
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
msgstr ""
-#: rpmio/macro.c:1175
-#, c-format
-msgid "A %% is followed by an unparseable macro\n"
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
msgstr ""
-#: rpmio/rpmfileutil.c:245
-#, c-format
-msgid "error creating temporary file %s: %m\n"
-msgstr "临时文件创建失败 %s:%m\n"
-
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
-#, c-format
-msgid "File %s: %s\n"
-msgstr "文件 %s:%s\n"
-
-#: rpmio/rpmfileutil.c:319
-#, c-format
-msgid "File %s is smaller than %u bytes\n"
-msgstr "文件 %s å°äºŽ %u 字节\n"
-
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "创建目录失败"
-
-#: rpmio/rpmlua.c:506
-#, c-format
-msgid "invalid syntax in lua scriptlet: %s\n"
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
msgstr ""
-#: rpmio/rpmlua.c:522
-#, c-format
-msgid "invalid syntax in lua script: %s\n"
-msgstr ""
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
+msgid "rpmMkTemp failed\n"
+msgstr "rpmMkTemp 失败\n"
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
-#, c-format
-msgid "lua script failed: %s\n"
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
msgstr ""
-#: rpmio/rpmlua.c:541
-#, c-format
-msgid "invalid syntax in lua file: %s\n"
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
msgstr ""
-#: rpmio/rpmlua.c:709
+#: sign/rpmgensig.c:622
#, c-format
-msgid "lua hook failed: %s\n"
+msgid "%s already contains identical file signatures\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr "[æ— ]"
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(没有错误)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "致命错误:"
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "错误:"
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "警告:"
-
-#: rpmio/rpmmalloc.c:25
-#, c-format
-msgid "memory alloc (%u bytes) returned NULL.\n"
-msgstr "å†…åœ¨åˆ†é… (%u 字节) 返回 NULL。\n"
-
-#: rpmio/rpmpgp.c:1008
-#, c-format
-msgid "V%d %s/%s %s, key ID %s"
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: rpmio/rpmpgp.c:1016
-msgid "(none)"
-msgstr "(æ— )"
-
-#: sign/rpmgensig.c:87
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: Fwrite failed: %s\n"
-msgstr "%s: Fwrite 失败: %s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s:rpmReadSignature 函数执行失败:%s"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:689
#, c-format
-msgid "%s: Fflush failed: %s\n"
-msgstr "%s: Fflush 失败:%s\n"
+msgid "%s: headerRead failed: %s\n"
+msgstr "%s:headerRead 函数执行失败:%s\n"
-#: sign/rpmgensig.c:125
-msgid "Unsupported PGP signature\n"
-msgstr "ä¸æ”¯æŒçš„ PGP ç­¾å\n"
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr "无法对 RPM v3 版本的软件包签å\n"
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:722
#, c-format
-msgid "Unsupported PGP hash algorithm %u\n"
-msgstr "ä¸æ”¯æŒçš„ PGP hash 算法 %u\n"
+msgid "%s already contains identical signature, skipping\n"
+msgstr "%s å·²ç»åŒ…å«äº†ç›¸åŒçš„ç­¾å,跳过\n"
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
-msgid "Unsupported PGP pubkey algorithm %u\n"
-msgstr "ä¸æ”¯æŒçš„ PGP 公钥算法 %u\n"
+msgid "%s: rpmWriteSignature failed: %s\n"
+msgstr "%s:rpmWriteSignature 失败:%s\n"
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:787
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr ""
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s:writeLead 失败:%s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:812
#, c-format
-msgid "gpg exec failed (%d)\n"
-msgstr ""
+msgid "replacing %s failed: %s\n"
+msgstr "æ›¿æ¢ %s 失败:%s\n"
-#: sign/rpmgensig.c:246
-msgid "gpg failed to write signature\n"
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
msgstr ""
-#: sign/rpmgensig.c:263
-msgid "unable to read the signature\n"
-msgstr "无法读å–ç­¾å\n"
-
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
-msgid "rpmMkTemp failed\n"
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
msgstr ""
-#: sign/rpmgensig.c:501
-#, c-format
-msgid "%s already contains identical signature, skipping\n"
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
msgstr ""
-#: sign/rpmgensig.c:525
-#, c-format
-msgid "%s: writeLead failed: %s\n"
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
msgstr ""
-#: sign/rpmgensig.c:531
-#, c-format
-msgid "%s: rpmWriteSignature failed: %s\n"
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
msgstr ""
-#: sign/rpmgensig.c:545
-#, c-format
-msgid "replacing %s failed: %s\n"
-msgstr "æ›¿æ¢ %s 失败:%s\n"
-
-#: tools/rpmgraph.c:142
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%sï¼šè¯»å– manifest 文件失败:%s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
-msgstr ""
+msgstr "ä¸éªŒè¯æŠ¥å¤´+净负è·ç­¾å"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index c04973d60..caac85cc4 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Cheng-Chia Tseng <pswo10680@gmail.com>, 2011-2012.
-# You-Cheng Hsieh <yochenhsieh@gmail.com>, 2012-2013.
+# Cheng-Chia Tseng <pswo10680@gmail.com>, 2011-2012
+# You-Cheng Hsieh <yochenhsieh@gmail.com>, 2012-2013
msgid ""
msgstr ""
"Project-Id-Version: RPM\n"
"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n"
-"POT-Creation-Date: 2013-01-31 08:28+0200\n"
-"PO-Revision-Date: 2013-01-24 07:09+0000\n"
-"Last-Translator: You-Cheng Hsieh <yochenhsieh@gmail.com>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/rpm/"
+"POT-Creation-Date: 2018-01-16 11:32+0200\n"
+"PO-Revision-Date: 2017-08-10 07:39+0000\n"
+"Last-Translator: pmatilai <pmatilai@laiskiainen.org>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/rpm-team/rpm/"
"language/zh_TW/)\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
@@ -46,487 +46,549 @@ msgstr "此程å¼å…許在éµå®ˆ GNU GPL æ¢æ¬¾çš„å‰æ下自由散布\n"
msgid "creating a pipe for --pipe failed: %m\n"
msgstr ""
-#: cliutils.c:63
+#: cliutils.c:62
#, c-format
msgid "exec failed\n"
msgstr "執行失敗\n"
-#: rpm2cpio.c:63
+#: rpm2archive.c:91 rpm2cpio.c:68
#, c-format
msgid "argument is not an RPM package\n"
-msgstr "引數ä¸æ˜¯ RPM 套件\n"
+msgstr "引數ä¸æ˜¯ RPM 軟體包\n"
-#: rpm2cpio.c:68
+#: rpm2archive.c:96 rpm2cpio.c:73
#, c-format
msgid "error reading header from package\n"
-msgstr "讀å–套件的表頭資訊時發生錯誤\n"
+msgstr "讀å–軟體包的表頭資訊時發生錯誤\n"
-#: rpm2cpio.c:83
+#: rpm2archive.c:111 rpm2cpio.c:88
#, c-format
msgid "cannot re-open payload: %s\n"
msgstr "無法é‡æ–°é–‹å•Ÿé…¬è¼‰ï¼š%s\n"
-#: rpmqv.c:41
-msgid "Query/Verify package selection options:"
-msgstr "查詢/驗證所é¸å¥—件的é¸é …:"
-
-#: rpmqv.c:46
-msgid "Query options (with -q or --query):"
-msgstr "查詢é¸é … (使用 -q 或 --query):"
-
-#: rpmqv.c:51
-msgid "Verify options (with -V or --verify):"
-msgstr "æ ¡é©—é¸é … (使用 -V 或 --verify):"
-
-#: rpmqv.c:57
-msgid "Install/Upgrade/Erase options:"
-msgstr "安è£/å‡ç´š/抹除é¸é …:"
-
-#: rpmqv.c:64 rpmbuild.c:223 rpmdb.c:35 rpmkeys.c:42 rpmsign.c:37 rpmspec.c:48
-#: tools/rpmdeps.c:32 tools/rpmgraph.c:222
-msgid "Common options for all rpm modes and executables:"
-msgstr "用於所有 rpm 模å¼å’Œå¯åŸ·è¡Œæª”案的共åŒé¸é …:"
-
-#: rpmqv.c:121
-msgid "one type of query/verify may be performed at a time"
-msgstr "åªæœ‰æŸ¥è©¢/校驗兩種工作模å¼èƒ½è¢«åŒæ™‚é¸ç”¨"
-
-#: rpmqv.c:125
-msgid "unexpected query flags"
-msgstr "未é æœŸçš„查詢旗標"
-
-#: rpmqv.c:128
-msgid "unexpected query format"
-msgstr "ä¸å¯é æ–™çš„查詢格å¼"
-
-#: rpmqv.c:131
-msgid "unexpected query source"
-msgstr "ä¸å¯é æ–™çš„查詢來æº"
-
-#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:82 rpmsign.c:159
-msgid "only one major mode may be specified"
-msgstr "åªèƒ½æŒ‡å®šä¸€å€‹ä¸»è¦å·¥ä½œæ¨¡å¼"
-
-#: rpmqv.c:153
-msgid "only installation and upgrading may be forced"
-msgstr "åªæœ‰å®‰è£èˆ‡å‡ç´šå¯ä»¥å¼·è¿«åŸ·è¡Œ"
-
-#: rpmqv.c:155
-msgid "files may only be relocated during package installation"
-msgstr "檔案åªèƒ½åœ¨å¥—件安è£æ™‚é‡æ–°åˆ†é…ä½ç½®"
-
-#: rpmqv.c:158
-msgid "cannot use --prefix with --relocate or --excludepath"
-msgstr "--prefix ä¸èƒ½å’Œ --relocate 或 --excludepath åŒæ™‚使用"
-
-#: rpmqv.c:161
-msgid ""
-"--relocate and --excludepath may only be used when installing new packages"
-msgstr "--relocate å’Œ --excludepath åªèƒ½åœ¨å®‰è£æ–°è»Ÿé«”時使用"
-
-#: rpmqv.c:164
-msgid "--prefix may only be used when installing new packages"
-msgstr "--prefix åªèƒ½åœ¨å®‰è£æ–°è»Ÿé«”時使用"
-
-#: rpmqv.c:167
-msgid "arguments to --prefix must begin with a /"
-msgstr "--prefix 的引數必須以「/ã€é–‹é ­"
-
-#: rpmqv.c:170
-msgid ""
-"--hash (-h) may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:174
-msgid "--percent may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:178
-msgid "--replacepkgs may only be specified during package installation"
-msgstr "--replacepkgs 或許åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:182
-msgid "--excludedocs may only be specified during package installation"
-msgstr "--excludedocs åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:186
-msgid "--includedocs may only be specified during package installation"
-msgstr "--includedocs åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:190
-msgid "only one of --excludedocs and --includedocs may be specified"
-msgstr "--excludedocs å’Œ --includedocs 兩個é¸é …中åªèƒ½æŒ‡å®šä¸€å€‹"
-
-#: rpmqv.c:194
-msgid "--ignorearch may only be specified during package installation"
-msgstr "--ignorearch åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:198
-msgid "--ignoreos may only be specified during package installation"
-msgstr "--ignoreos åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:203
-msgid "--ignoresize may only be specified during package installation"
-msgstr "--ignoresize åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:207
-msgid "--allmatches may only be specified during package erasure"
-msgstr "--allmatches åªèƒ½åœ¨å¥—件抹除時指定"
-
-#: rpmqv.c:211
-msgid "--allfiles may only be specified during package installation"
-msgstr "--allfiles åªèƒ½åœ¨å¥—件安è£æ™‚指定"
-
-#: rpmqv.c:216
-msgid "--justdb may only be specified during package installation and erasure"
-msgstr "--justdb åªèƒ½åœ¨å¥—件安è£å’ŒæŠ¹é™¤æ™‚指定"
-
-#: rpmqv.c:221
-msgid ""
-"script disabling options may only be specified during package installation "
-"and erasure"
-msgstr "與指令稿åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨å¥—件安è£å’ŒæŠ¹é™¤æ™‚指定"
-
-#: rpmqv.c:226
-msgid ""
-"trigger disabling options may only be specified during package installation "
-"and erasure"
-msgstr "與觸發åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨å¥—件安è£å’ŒæŠ¹é™¤æ™‚指定"
-
-#: rpmqv.c:230
-msgid ""
-"--nodeps may only be specified during package installation, erasure, and "
-"verification"
-msgstr ""
-
-#: rpmqv.c:234
-msgid "--test may only be specified during package installation and erasure"
-msgstr ""
-
-#: rpmqv.c:239 rpmbuild.c:549
-msgid "arguments to --root (-r) must begin with a /"
-msgstr "--root (-r) 的引數必須以「/ã€é–‹é ­"
-
-#: rpmqv.c:256
-msgid "no packages given for erase"
-msgstr "沒有指定è¦æŠ¹é™¤çš„套件å稱"
-
-#: rpmqv.c:290
-msgid "no packages given for install"
-msgstr "沒有指定è¦å®‰è£çš„套件å稱"
-
-#: rpmqv.c:302 rpmspec.c:79
-msgid "no arguments given for query"
-msgstr "沒有給定查詢引數"
-
-#: rpmqv.c:314
-msgid "no arguments given for verify"
-msgstr "沒有給定校驗引數"
-
-#: rpmbuild.c:99
+#: rpmbuild.c:114
#, c-format
msgid "buildroot already specified, ignoring %s\n"
msgstr "buildroot 已被指定,忽略 %s\n"
-#: rpmbuild.c:120
+#: rpmbuild.c:139
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <specfile>"
msgstr "從 <specfile> é€éŽ %prep (解包æºç¢¼ä¸¦å¥—用修補程å¼) 來建置"
-#: rpmbuild.c:121 rpmbuild.c:124 rpmbuild.c:127 rpmbuild.c:130 rpmbuild.c:133
-#: rpmbuild.c:136 rpmbuild.c:139
+#: rpmbuild.c:140 rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152
+#: rpmbuild.c:155 rpmbuild.c:158
msgid "<specfile>"
msgstr "<specfile>"
-#: rpmbuild.c:123
+#: rpmbuild.c:142
msgid "build through %build (%prep, then compile) from <specfile>"
msgstr "從 <specfile> é€éŽ %build (%prep,然後編譯) 來建置"
-#: rpmbuild.c:126
+#: rpmbuild.c:145
msgid "build through %install (%prep, %build, then install) from <specfile>"
msgstr "從 <specfile> é€éŽ %install (%prep,%build,然後安è£) 來建置"
-#: rpmbuild.c:129
+#: rpmbuild.c:148
#, c-format
msgid "verify %files section from <specfile>"
msgstr "從 <specfile> é©—è­‰ %files å€æ®µ"
-#: rpmbuild.c:132
+#: rpmbuild.c:151
msgid "build source and binary packages from <specfile>"
-msgstr "根據 <specfile> 建置æºç¢¼å¥—件與二進ä½å¥—件"
+msgstr "根據 <specfile> 建置æºç¢¼è»Ÿé«”包與二進ä½è»Ÿé«”包"
-#: rpmbuild.c:135
+#: rpmbuild.c:154
msgid "build binary package only from <specfile>"
-msgstr "根據 <specfile> åªå»ºç½®äºŒé€²ä½å¥—件"
+msgstr "根據 <specfile> åªå»ºç½®äºŒé€²ä½è»Ÿé«”包"
-#: rpmbuild.c:138
+#: rpmbuild.c:157
msgid "build source package only from <specfile>"
-msgstr "根據 <specfile> åªå»ºç½®æºç¢¼å¥—件"
+msgstr "根據 <specfile> åªå»ºç½®æºç¢¼è»Ÿé«”包"
-#: rpmbuild.c:142
+#: rpmbuild.c:161
+#, c-format
+msgid ""
+"build through %prep (unpack sources and apply patches) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:162 rpmbuild.c:165 rpmbuild.c:168 rpmbuild.c:171 rpmbuild.c:174
+#: rpmbuild.c:177 rpmbuild.c:180 rpmbuild.c:206 rpmbuild.c:209
+msgid "<source package>"
+msgstr "<source package>"
+
+#: rpmbuild.c:164
+msgid "build through %build (%prep, then compile) from <source package>"
+msgstr ""
+
+#: rpmbuild.c:167 rpmbuild.c:208
+msgid ""
+"build through %install (%prep, %build, then install) from <source package>"
+msgstr "從 <source package> é€éŽ %install (%prep,%build,然後安è£) 來建置"
+
+#: rpmbuild.c:170
+#, c-format
+msgid "verify %files section from <source package>"
+msgstr ""
+
+#: rpmbuild.c:173
+msgid "build source and binary packages from <source package>"
+msgstr ""
+
+#: rpmbuild.c:176
+msgid "build binary package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:179
+msgid "build source package only from <source package>"
+msgstr ""
+
+#: rpmbuild.c:183
#, c-format
msgid "build through %prep (unpack sources and apply patches) from <tarball>"
msgstr "從 <tarball> é€éŽ %prep (解包æºç¢¼å’Œå¥—用修補檔) 來建置"
-#: rpmbuild.c:143 rpmbuild.c:146 rpmbuild.c:149 rpmbuild.c:152 rpmbuild.c:155
-#: rpmbuild.c:158 rpmbuild.c:161
+#: rpmbuild.c:184 rpmbuild.c:187 rpmbuild.c:190 rpmbuild.c:193 rpmbuild.c:196
+#: rpmbuild.c:199 rpmbuild.c:202
msgid "<tarball>"
msgstr "<tarball>"
-#: rpmbuild.c:145
+#: rpmbuild.c:186
msgid "build through %build (%prep, then compile) from <tarball>"
msgstr "從 <tarball> é€éŽ %build (%prep,然後編譯) 來建置"
-#: rpmbuild.c:148
+#: rpmbuild.c:189
msgid "build through %install (%prep, %build, then install) from <tarball>"
msgstr "從 <tarball> é€éŽ %install (%prep,%build,然後安è£) 來建置"
-#: rpmbuild.c:151
+#: rpmbuild.c:192
#, c-format
msgid "verify %files section from <tarball>"
msgstr "從 <tarball> é©—è­‰ %files å€æ®µ"
-#: rpmbuild.c:154
+#: rpmbuild.c:195
msgid "build source and binary packages from <tarball>"
-msgstr "從 <tarball> 中建置æºç¢¼å¥—件與二進ä½å¥—件"
+msgstr "從 <tarball> 中建置æºç¢¼è»Ÿé«”包與二進ä½è»Ÿé«”包"
-#: rpmbuild.c:157
+#: rpmbuild.c:198
msgid "build binary package only from <tarball>"
-msgstr "從 <tarball> 中åªå»ºç½®äºŒé€²ä½å¥—件"
+msgstr "從 <tarball> 中åªå»ºç½®äºŒé€²ä½è»Ÿé«”包"
-#: rpmbuild.c:160
+#: rpmbuild.c:201
msgid "build source package only from <tarball>"
-msgstr "從 <tarball> 中åªå»ºç½®æºç¢¼å¥—件"
+msgstr "從 <tarball> 中åªå»ºç½®æºç¢¼è»Ÿé«”包"
-#: rpmbuild.c:164
+#: rpmbuild.c:205
msgid "build binary package from <source package>"
-msgstr "從 <source package> 中建置二進ä½å¥—件"
+msgstr "從 <source package> 中建置二進ä½è»Ÿé«”包"
-#: rpmbuild.c:165 rpmbuild.c:168
-msgid "<source package>"
-msgstr "<source package>"
-
-#: rpmbuild.c:167
-msgid ""
-"build through %install (%prep, %build, then install) from <source package>"
-msgstr "從 <source package> é€éŽ %install (%prep,%build,然後安è£) 來建置"
-
-#: rpmbuild.c:171
+#: rpmbuild.c:212
msgid "override build root"
msgstr "強制覆寫建置根目錄"
-#: rpmbuild.c:173
+#: rpmbuild.c:214
+msgid "run build in current directory"
+msgstr ""
+
+#: rpmbuild.c:216
msgid "remove build tree when done"
msgstr "完æˆå¾Œç§»é™¤å»ºç½®æ¨¹"
-#: rpmbuild.c:175
+#: rpmbuild.c:218
msgid "ignore ExcludeArch: directives from spec file"
msgstr "忽略 ExcludeArch:根據è¦æ ¼æª”的指示"
-#: rpmbuild.c:177
+#: rpmbuild.c:220
msgid "debug file state machine"
msgstr "除錯檔案狀態機器"
-#: rpmbuild.c:179
+#: rpmbuild.c:222
msgid "do not execute any stages of the build"
msgstr "ä¸åŸ·è¡Œå»ºç½®ç¨‹åºè£¡çš„任何步驟"
-#: rpmbuild.c:181
+#: rpmbuild.c:224
msgid "do not verify build dependencies"
msgstr "ä¸æ ¡é©—建置相ä¾é—œä¿‚"
-#: rpmbuild.c:183
+#: rpmbuild.c:226
msgid "generate package header(s) compatible with (legacy) rpm v3 packaging"
msgstr ""
-#: rpmbuild.c:187
+#: rpmbuild.c:230
#, c-format
msgid "do not execute %clean stage of the build"
msgstr ""
-#: rpmbuild.c:189
+#: rpmbuild.c:232
+#, c-format
+msgid "do not execute %prep stage of the build"
+msgstr ""
+
+#: rpmbuild.c:234
#, c-format
msgid "do not execute %check stage of the build"
msgstr ""
-#: rpmbuild.c:192
+#: rpmbuild.c:237
msgid "do not accept i18N msgstr's from specfile"
msgstr "ä¸æŽ¥å—來自è¦æ ¼æª”çš„ i18N msgstr"
-#: rpmbuild.c:194
+#: rpmbuild.c:239
msgid "remove sources when done"
msgstr "完æˆå¾Œç§»é™¤æºç¢¼æª”案"
-#: rpmbuild.c:196
+#: rpmbuild.c:241
msgid "remove specfile when done"
msgstr "完æˆå¾Œç§»é™¤è¦æ ¼æª”"
-#: rpmbuild.c:198
+#: rpmbuild.c:243
msgid "skip straight to specified stage (only for c,i)"
msgstr "直接跳到指定的階段 (åªæœ‰ç”¨æ–¼ c,i)"
-#: rpmbuild.c:200 rpmspec.c:34
+#: rpmbuild.c:245
msgid "override target platform"
msgstr "無視目標平臺"
-#: rpmbuild.c:217
+#: rpmbuild.c:262
msgid "Build options with [ <specfile> | <tarball> | <source package> ]:"
msgstr "組建é¸é …中使用 [ <specfile> | <tarball> | <source package> ]:"
-#: rpmbuild.c:237
+#: rpmbuild.c:268 rpmdb.c:40 rpmkeys.c:38 rpmqv.c:63 rpmsign.c:51 rpmspec.c:47
+#: tools/rpmdeps.c:43 tools/rpmgraph.c:221
+msgid "Common options for all rpm modes and executables:"
+msgstr "用於所有 rpm 模å¼å’Œå¯åŸ·è¡Œæª”案的共åŒé¸é …:"
+
+#: rpmbuild.c:282
msgid "Failed build dependencies:\n"
msgstr "相ä¾æ€§å»ºç½®å¤±æ•—:\n"
-#: rpmbuild.c:255
+#: rpmbuild.c:300
#, c-format
msgid "Unable to open spec file %s: %s\n"
msgstr "無法開啟 %s è¦æ ¼æª”:%s\n"
-#: rpmbuild.c:317
+#: rpmbuild.c:363
#, c-format
msgid "Failed to open tar pipe: %m\n"
msgstr "無法開啟 tar 導管:%m\n"
-#: rpmbuild.c:336
+#: rpmbuild.c:378
+#, c-format
+msgid "Found more than one spec file in %s\n"
+msgstr ""
+
+#: rpmbuild.c:389
#, c-format
msgid "Failed to read spec file from %s\n"
msgstr "無法從 %s 讀å–è¦æ ¼æª”\n"
-#: rpmbuild.c:348
+#: rpmbuild.c:401
#, c-format
msgid "Failed to rename %s to %s: %m\n"
msgstr "無法將 %s é‡æ–°å‘½å為 %s:%m\n"
-#: rpmbuild.c:419
+#: rpmbuild.c:479
#, c-format
msgid "failed to stat %s: %m\n"
msgstr "無法檢視 %s 的狀態:%m\n"
-#: rpmbuild.c:423
+#: rpmbuild.c:483
#, c-format
msgid "File %s is not a regular file.\n"
msgstr "%s ä¸æ˜¯é€šå¸¸çš„檔案。\n"
-#: rpmbuild.c:430
+#: rpmbuild.c:490
#, c-format
msgid "File %s does not appear to be a specfile.\n"
msgstr "%s 似乎ä¸æ˜¯è¦æ ¼æª”。\n"
-#: rpmbuild.c:496
+#: rpmbuild.c:556
#, c-format
msgid "Building target platforms: %s\n"
msgstr "建置目標平å°ï¼š%s\n"
-#: rpmbuild.c:504
+#: rpmbuild.c:564
#, c-format
msgid "Building for target %s\n"
msgstr "建置目標 %s\n"
-#: rpmdb.c:22
+#: rpmbuild.c:619 rpmqv.c:241
+msgid "arguments to --root (-r) must begin with a /"
+msgstr "--root (-r) 的引數必須以「/ã€é–‹é ­"
+
+#: rpmdb.c:21
msgid "initialize database"
msgstr "åˆå§‹åŒ–資料庫"
-#: rpmdb.c:24
+#: rpmdb.c:23
msgid "rebuild database inverted lists from installed package headers"
-msgstr "從安è£çš„套件表頭é‡å»ºè³‡æ–™åº«çš„å相清單"
+msgstr "從安è£çš„軟體包表頭é‡å»ºè³‡æ–™åº«çš„å相清單"
-#: rpmdb.c:27
+#: rpmdb.c:26
msgid "verify database files"
msgstr "驗證資料庫檔案"
-#: rpmdb.c:33
+#: rpmdb.c:28
+msgid "export database to stdout header list"
+msgstr ""
+
+#: rpmdb.c:31
+msgid "import database from stdin header list"
+msgstr ""
+
+#: rpmdb.c:38
msgid "Database options:"
msgstr "資料庫é¸é …:"
-#: rpmkeys.c:24
+#: rpmdb.c:126 rpmkeys.c:82 rpmqv.c:144 rpmsign.c:185
+msgid "only one major mode may be specified"
+msgstr "åªèƒ½æŒ‡å®šä¸€å€‹ä¸»è¦å·¥ä½œæ¨¡å¼"
+
+#: rpmkeys.c:20
msgid "verify package signature(s)"
-msgstr "校驗套件簽署"
+msgstr "校驗軟體包簽署"
-#: rpmkeys.c:26
+#: rpmkeys.c:22
msgid "import an armored public key"
msgstr "匯入一個å—ä¿è­·çš„公鑰"
-#: rpmkeys.c:28
+#: rpmkeys.c:24
msgid "don't import, but tell if it would work or not"
msgstr ""
-#: rpmkeys.c:31 rpmkeys.c:33
+#: rpmkeys.c:27 rpmkeys.c:29
msgid "list keys from RPM keyring"
msgstr "列出 RPM 鑰匙圈的金鑰"
-#: rpmkeys.c:40
+#: rpmkeys.c:36
msgid "Keyring options:"
msgstr "鑰匙圈é¸é …:"
-#: rpmkeys.c:64 rpmsign.c:144
+#: rpmkeys.c:64 rpmsign.c:161
msgid "no arguments given"
msgstr "沒有指定引數"
-#: rpmsign.c:25
+#: rpmqv.c:40
+msgid "Query/Verify package selection options:"
+msgstr "查詢/驗證所é¸è»Ÿé«”包的é¸é …:"
+
+#: rpmqv.c:45
+msgid "Query options (with -q or --query):"
+msgstr "查詢é¸é … (使用 -q 或 --query):"
+
+#: rpmqv.c:50
+msgid "Verify options (with -V or --verify):"
+msgstr "æ ¡é©—é¸é … (使用 -V 或 --verify):"
+
+#: rpmqv.c:56
+msgid "Install/Upgrade/Erase options:"
+msgstr "安è£/å‡ç´š/抹除é¸é …:"
+
+#: rpmqv.c:122
+msgid "one type of query/verify may be performed at a time"
+msgstr "åªæœ‰æŸ¥è©¢/校驗兩種工作模å¼èƒ½è¢«åŒæ™‚é¸ç”¨"
+
+#: rpmqv.c:126
+msgid "unexpected query flags"
+msgstr "未é æœŸçš„查詢旗標"
+
+#: rpmqv.c:129
+msgid "unexpected query format"
+msgstr "ä¸å¯é æ–™çš„查詢格å¼"
+
+#: rpmqv.c:132
+msgid "unexpected query source"
+msgstr "ä¸å¯é æ–™çš„查詢來æº"
+
+#: rpmqv.c:155
+msgid "only installation and upgrading may be forced"
+msgstr "åªæœ‰å®‰è£èˆ‡å‡ç´šå¯ä»¥å¼·è¿«åŸ·è¡Œ"
+
+#: rpmqv.c:157
+msgid "files may only be relocated during package installation"
+msgstr "檔案åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚é‡æ–°åˆ†é…ä½ç½®"
+
+#: rpmqv.c:160
+msgid "cannot use --prefix with --relocate or --excludepath"
+msgstr "--prefix ä¸èƒ½å’Œ --relocate 或 --excludepath åŒæ™‚使用"
+
+#: rpmqv.c:163
+msgid ""
+"--relocate and --excludepath may only be used when installing new packages"
+msgstr "--relocate å’Œ --excludepath åªèƒ½åœ¨å®‰è£æ–°è»Ÿé«”時使用"
+
+#: rpmqv.c:166
+msgid "--prefix may only be used when installing new packages"
+msgstr "--prefix åªèƒ½åœ¨å®‰è£æ–°è»Ÿé«”時使用"
+
+#: rpmqv.c:169
+msgid "arguments to --prefix must begin with a /"
+msgstr "--prefix 的引數必須以「/ã€é–‹é ­"
+
+#: rpmqv.c:172
+msgid ""
+"--hash (-h) may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:176
+msgid "--percent may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:180
+msgid "--replacepkgs may only be specified during package installation"
+msgstr "--replacepkgs 或許åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:184
+msgid "--excludedocs may only be specified during package installation"
+msgstr "--excludedocs åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:188
+msgid "--includedocs may only be specified during package installation"
+msgstr "--includedocs åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:192
+msgid "only one of --excludedocs and --includedocs may be specified"
+msgstr "--excludedocs å’Œ --includedocs 兩個é¸é …中åªèƒ½æŒ‡å®šä¸€å€‹"
+
+#: rpmqv.c:196
+msgid "--ignorearch may only be specified during package installation"
+msgstr "--ignorearch åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:200
+msgid "--ignoreos may only be specified during package installation"
+msgstr "--ignoreos åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:205
+msgid "--ignoresize may only be specified during package installation"
+msgstr "--ignoresize åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:209
+msgid "--allmatches may only be specified during package erasure"
+msgstr "--allmatches åªèƒ½åœ¨è»Ÿé«”包抹除時指定"
+
+#: rpmqv.c:213
+msgid "--allfiles may only be specified during package installation"
+msgstr "--allfiles åªèƒ½åœ¨è»Ÿé«”包安è£æ™‚指定"
+
+#: rpmqv.c:218
+msgid "--justdb may only be specified during package installation and erasure"
+msgstr "--justdb åªèƒ½åœ¨è»Ÿé«”包安è£å’ŒæŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:223
+msgid ""
+"script disabling options may only be specified during package installation "
+"and erasure"
+msgstr "與指令稿åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨è»Ÿé«”包安è£å’ŒæŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:228
+msgid ""
+"trigger disabling options may only be specified during package installation "
+"and erasure"
+msgstr "與觸發åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨è»Ÿé«”包安è£å’ŒæŠ¹é™¤æ™‚指定"
+
+#: rpmqv.c:232
+msgid ""
+"--nodeps may only be specified during package installation, erasure, and "
+"verification"
+msgstr ""
+
+#: rpmqv.c:236
+msgid "--test may only be specified during package installation and erasure"
+msgstr ""
+
+#: rpmqv.c:258
+msgid "no packages given for erase"
+msgstr "沒有指定è¦æŠ¹é™¤çš„軟體包å稱"
+
+#: rpmqv.c:292
+msgid "no packages given for install"
+msgstr "沒有指定è¦å®‰è£çš„軟體包å稱"
+
+#: rpmqv.c:304 rpmspec.c:80
+msgid "no arguments given for query"
+msgstr "沒有給定查詢引數"
+
+#: rpmqv.c:318
+msgid "no arguments given for verify"
+msgstr "沒有給定校驗引數"
+
+#: rpmsign.c:30
msgid "sign package(s)"
-msgstr "簽署套件"
+msgstr "簽署軟體包"
-#: rpmsign.c:27
+#: rpmsign.c:32
msgid "sign package(s) (identical to --addsign)"
-msgstr "簽署套件 (與 --addsign å«ç¾©ç›¸åŒ)"
+msgstr "簽署軟體包 (與 --addsign å«ç¾©ç›¸åŒ)"
-#: rpmsign.c:29
+#: rpmsign.c:34
msgid "delete package signatures"
-msgstr "刪除套件簽署"
+msgstr "刪除軟體包簽署"
+
+#: rpmsign.c:37
+msgid "sign package(s) files"
+msgstr ""
+
+#: rpmsign.c:39
+msgid "use file signing key <key>"
+msgstr ""
+
+#: rpmsign.c:40
+msgid "<key>"
+msgstr ""
+
+#: rpmsign.c:42
+msgid "prompt for file signing key password"
+msgstr ""
-#: rpmsign.c:35
+#: rpmsign.c:49
msgid "Signature options:"
msgstr "簽署é¸é …:"
-#: rpmsign.c:85 sign/rpmgensig.c:199
-#, c-format
-msgid "Could not exec %s: %s\n"
-msgstr "無法執行 %s:%s\n"
-
-#: rpmsign.c:108
+#: rpmsign.c:101
#, c-format
msgid "You must set \"%%_gpg_name\" in your macro file\n"
msgstr "您必須在您的巨集檔案中設定「%%_gpg_nameã€\n"
-#: rpmsign.c:113
-msgid "Enter pass phrase: "
-msgstr "輸入通關密語: "
-
-#: rpmsign.c:117
+#: rpmsign.c:114
#, c-format
-msgid "Pass phrase is good.\n"
-msgstr "通關密語良好。\n"
+msgid ""
+"You must set \"%%_file_signing_key\" in your macro file or on the command "
+"line with --fskpath\n"
+msgstr ""
-#: rpmsign.c:123
-#, c-format
-msgid "Pass phrase check failed or gpg key expired\n"
+#: rpmsign.c:166
+msgid "--fskpath may only be specified when signing files"
msgstr ""
-#: rpmspec.c:26
+#: rpmspec.c:25
msgid "parse spec file(s) to stdout"
msgstr ""
-#: rpmspec.c:28
+#: rpmspec.c:27
msgid "query spec file(s)"
msgstr "查詢è¦æ ¼æª”"
-#: rpmspec.c:30
+#: rpmspec.c:29
msgid "operate on binary rpms generated by spec (default)"
msgstr "æ“作é€éŽè¦æ ¼æ‰€å»ºç«‹çš„äºŒé€²ä½ rpm (é è¨­)"
-#: rpmspec.c:32
+#: rpmspec.c:31
+msgid "operate on binary rpms that would be built from spec"
+msgstr ""
+
+#: rpmspec.c:33
msgid "operate on source rpm generated by spec"
msgstr "æ“作é€éŽè¦æ ¼æ‰€å»ºç«‹çš„æºç¢¼ rpm"
-#: rpmspec.c:36 lib/poptQV.c:192
+#: rpmspec.c:35 lib/poptQV.c:221
msgid "use the following query format"
msgstr "使用以下的查詢格å¼"
-#: rpmspec.c:45
+#: rpmspec.c:44
msgid "Spec options:"
msgstr "è¦æ ¼é¸é …:"
-#: rpmspec.c:90
+#: rpmspec.c:91
msgid "no arguments given for parse"
msgstr ""
@@ -535,32 +597,37 @@ msgstr ""
msgid "Unable to open temp file: %s\n"
msgstr ""
-#: build/build.c:126
+#: build/build.c:125
#, c-format
msgid "Unable to open stream: %s\n"
msgstr ""
-#: build/build.c:161
+#: build/build.c:158
#, c-format
msgid "Executing(%s): %s\n"
msgstr "正在執行(%s):%s\n"
-#: build/build.c:168
+#: build/build.c:163
#, c-format
msgid "Exec of %s failed (%s): %s\n"
msgstr "執行 %s 失敗 (%s):%s\n"
-#: build/build.c:177
+#: build/build.c:172
#, c-format
msgid "Error executing scriptlet %s (%s)\n"
msgstr ""
-#: build/build.c:184
+#: build/build.c:178
#, c-format
msgid "Bad exit status from %s (%s)\n"
msgstr "來自 %s ä¸è‰¯çš„離開狀態 (%s)\n"
-#: build/build.c:291
+#: build/build.c:214
+#, c-format
+msgid "setting %s=%s\n"
+msgstr ""
+
+#: build/build.c:299
msgid ""
"\n"
"\n"
@@ -570,235 +637,315 @@ msgstr ""
"\n"
"RPM 建置錯誤:\n"
-#: build/expression.c:216
+#: build/expression.c:215
msgid "syntax error while parsing ==\n"
msgstr "è§£æž == 時有語法錯誤\n"
-#: build/expression.c:246
+#: build/expression.c:245
msgid "syntax error while parsing &&\n"
msgstr "è§£æž && 時有語法錯誤\n"
-#: build/expression.c:255
+#: build/expression.c:254
msgid "syntax error while parsing ||\n"
msgstr "è§£æž || 時有語法錯誤\n"
-#: build/expression.c:305
+#: build/expression.c:304
msgid "parse error in expression\n"
msgstr "表述å¼è§£æžéŒ¯èª¤\n"
-#: build/expression.c:337
+#: build/expression.c:336
msgid "unmatched (\n"
msgstr "ä¸ç¬¦åˆçš„ (\n"
-#: build/expression.c:369
+#: build/expression.c:368
msgid "- only on numbers\n"
msgstr "- åªèƒ½ç”¨æ–¼æ•¸å­—\n"
-#: build/expression.c:385
+#: build/expression.c:384
msgid "! only on numbers\n"
msgstr "! åªèƒ½ç”¨æ–¼æ•¸å­—\n"
-#: build/expression.c:427 build/expression.c:475 build/expression.c:533
-#: build/expression.c:625
+#: build/expression.c:426 build/expression.c:474 build/expression.c:532
+#: build/expression.c:624
msgid "types must match\n"
msgstr "類型必須符åˆ\n"
-#: build/expression.c:440
+#: build/expression.c:439
msgid "* / not suported for strings\n"
msgstr "字串ä¸æ”¯æ´ *ã€/\n"
-#: build/expression.c:491
+#: build/expression.c:490
msgid "- not suported for strings\n"
msgstr "字串ä¸æ”¯æ´ -\n"
-#: build/expression.c:638
+#: build/expression.c:637
msgid "&& and || not suported for strings\n"
msgstr "字串ä¸æ”¯æ´ && å’Œ ||\n"
-#: build/expression.c:671
+#: build/expression.c:669
msgid "syntax error in expression\n"
msgstr "表述å¼ä¸­æœ‰èªžæ³•éŒ¯èª¤\n"
-#: build/files.c:326 build/files.c:495 build/files.c:709
+#: build/files.c:343 build/files.c:524 build/files.c:743
#, c-format
msgid "Missing '(' in %s %s\n"
msgstr "在 %s %s 中有éºæ¼çš„「(ã€\n"
-#: build/files.c:336 build/files.c:631 build/files.c:719 build/files.c:778
+#: build/files.c:353 build/files.c:665 build/files.c:753 build/files.c:812
#, c-format
msgid "Missing ')' in %s(%s\n"
msgstr "在 %s(%s 中有éºæ¼çš„「)ã€\n"
-#: build/files.c:361 build/files.c:650
+#: build/files.c:378 build/files.c:684
#, c-format
msgid "Invalid %s token: %s\n"
msgstr "無效的 %s 符記:%s\n"
-#: build/files.c:464
+#: build/files.c:490
#, c-format
-msgid "Missing %s in %s %s\n"
-msgstr "在 %2$s %3$s 中有缺失的 %1$s\n"
+msgid "Missing %s in %s(%s)\n"
+msgstr ""
-#: build/files.c:510
+#: build/files.c:539
#, c-format
msgid "Non-white space follows %s(): %s\n"
msgstr "%s() 之後有éžç©ºç™½ç©ºæ ¼ï¼š%s\n"
-#: build/files.c:546
+#: build/files.c:579
#, c-format
msgid "Bad syntax: %s(%s)\n"
msgstr "ä¸è‰¯èªžæ³•ï¼š%s(%s)\n"
-#: build/files.c:555
+#: build/files.c:588
#, c-format
msgid "Bad mode spec: %s(%s)\n"
msgstr "ä¸è‰¯æ¨¡å¼è¦æ ¼ï¼š%s(%s)\n"
-#: build/files.c:567
+#: build/files.c:600
#, c-format
msgid "Bad dirmode spec: %s(%s)\n"
msgstr "ä¸è‰¯ dirmode è¦æ ¼ï¼š%s(%s)\n"
-#: build/files.c:671
+#: build/files.c:705
#, c-format
msgid "Unusual locale length: \"%s\" in %%lang(%s)\n"
msgstr ""
-#: build/files.c:678
+#: build/files.c:712
#, c-format
msgid "Duplicate locale %s in %%lang(%s)\n"
msgstr ""
-#: build/files.c:793
+#: build/files.c:827
#, c-format
msgid "Invalid capability: %s\n"
msgstr "無效的功能:%s\n"
-#: build/files.c:803
+#: build/files.c:837
msgid "File capability support not built in\n"
msgstr "檔案功能支æ´æœªå…§å»ºæ–¼\n"
-#: build/files.c:852
+#: build/files.c:888
#, c-format
msgid "File must begin with \"/\": %s\n"
msgstr "檔案必須以「/ã€é–‹é ­ï¼š%s\n"
-#: build/files.c:973
+#: build/files.c:1004
+#, c-format
+msgid "unable to parse %s=%s\n"
+msgstr ""
+
+#: build/files.c:1022
#, c-format
msgid "Unknown file digest algorithm %u, falling back to MD5\n"
msgstr ""
-#: build/files.c:1001
+#: build/files.c:1074
#, c-format
msgid "File listed twice: %s\n"
msgstr "曾列出兩次的檔案:%s\n"
-#: build/files.c:1123
+#: build/files.c:1196
#, c-format
msgid "reading symlink %s failed: %s\n"
msgstr ""
-#: build/files.c:1131
+#: build/files.c:1204
#, c-format
msgid "Symlink points to BuildRoot: %s -> %s\n"
msgstr "æŒ‡å‘ BuildRoot 的符號連çµï¼š%s -> %s\n"
-#: build/files.c:1345
+#: build/files.c:1346
+#, c-format
+msgid "Path is outside buildroot: %s\n"
+msgstr ""
+
+#: build/files.c:1386
#, c-format
msgid "Directory not found: %s\n"
msgstr ""
-#: build/files.c:1346
+#: build/files.c:1387 lib/rpminstall.c:449
#, c-format
msgid "File not found: %s\n"
msgstr "找ä¸åˆ°æª”案:%s\n"
-#: build/files.c:1537
+#: build/files.c:1399
+#, c-format
+msgid "Not a directory: %s\n"
+msgstr ""
+
+#: build/files.c:1592
#, c-format
msgid "%s: can't load unknown tag (%d).\n"
msgstr "%s:無法呼å«ä¸æ˜Žçš„標籤 (%d)。\n"
-#: build/files.c:1543
+#: build/files.c:1598
#, c-format
msgid "%s: public key read failed.\n"
msgstr "%s:公鑰讀入失敗。\n"
-#: build/files.c:1547
+#: build/files.c:1602
#, c-format
msgid "%s: not an armored public key.\n"
msgstr "%s:ä¸æ˜¯ä¸€å€‹å—ä¿è­·çš„公鑰。\n"
-#: build/files.c:1556
+#: build/files.c:1611
#, c-format
msgid "%s: failed to encode\n"
msgstr "%s:編碼失敗\n"
-#: build/files.c:1601
+#: build/files.c:1657
+msgid "failed symlink"
+msgstr ""
+
+#: build/files.c:1713 build/files.c:1716
+#, c-format
+msgid "Duplicate build-id, stat %s: %m\n"
+msgstr ""
+
+#: build/files.c:1723
+#, c-format
+msgid "Duplicate build-ids %s and %s\n"
+msgstr ""
+
+#: build/files.c:1755
+msgid "_build_id_links macro not set, assuming 'compat'\n"
+msgstr ""
+
+#: build/files.c:1768
+#, c-format
+msgid "_build_id_links macro set to unknown value '%s'\n"
+msgstr ""
+
+#: build/files.c:1854
+#, c-format
+msgid "error reading build-id in %s: %s\n"
+msgstr ""
+
+#: build/files.c:1858
+#, c-format
+msgid "Missing build-id in %s\n"
+msgstr ""
+
+#: build/files.c:1863
+#, c-format
+msgid "build-id found in %s too small\n"
+msgstr ""
+
+#: build/files.c:1864
+#, c-format
+msgid "build-id found in %s too large\n"
+msgstr ""
+
+#: build/files.c:1879 rpmio/rpmfileutil.c:606
+msgid "failed to create directory"
+msgstr "無法建立目錄"
+
+#: build/files.c:1897
+msgid "Mixing main ELF and debug files in package"
+msgstr ""
+
+#: build/files.c:2098
#, c-format
msgid "File needs leading \"/\": %s\n"
msgstr "檔案需è¦ä»¥ã€Œ/ã€é–‹é ­ï¼š%s\n"
-#: build/files.c:1625
+#: build/files.c:2122
#, c-format
msgid "%%dev glob not permitted: %s\n"
msgstr ""
-#: build/files.c:1638
+#: build/files.c:2134
#, c-format
-msgid "Directory not found by glob: %s\n"
+msgid "Directory not found by glob: %s. Trying without globbing.\n"
msgstr ""
-#: build/files.c:1639 lib/rpminstall.c:426
+#: build/files.c:2136
#, c-format
-msgid "File not found by glob: %s\n"
-msgstr "é€éŽ glob 解æžæ‰¾ä¸åˆ°æª”案:%s\n"
+msgid "File not found by glob: %s. Trying without globbing.\n"
+msgstr ""
-#: build/files.c:1675
+#: build/files.c:2171
#, c-format
msgid "Could not open %%files file %s: %m\n"
msgstr "無法開啟 %%files 檔案 %s:%m\n"
-#: build/files.c:1682
+#: build/files.c:2182
#, c-format
msgid "line: %s\n"
msgstr "列:%s\n"
-#: build/files.c:1689
+#: build/files.c:2194
+#, c-format
+msgid "Empty %%files file %s\n"
+msgstr ""
+
+#: build/files.c:2200
#, c-format
msgid "Error reading %%files file %s: %m\n"
msgstr ""
-#: build/files.c:1711
+#: build/files.c:2223
#, c-format
msgid "illegal _docdir_fmt %s: %s\n"
msgstr ""
-#: build/files.c:1869
+#: build/files.c:2345 lib/rpminstall.c:451
+#, c-format
+msgid "File not found by glob: %s\n"
+msgstr "é€éŽ glob 解æžæ‰¾ä¸åˆ°æª”案:%s\n"
+
+#: build/files.c:2431
+#, c-format
+msgid "Special file in generated file list: %s\n"
+msgstr ""
+
+#: build/files.c:2455
#, c-format
msgid "Can't mix special %s with other forms: %s\n"
msgstr ""
-#: build/files.c:1886
+#: build/files.c:2471
#, c-format
msgid "More than one file on a line: %s\n"
msgstr ""
-#: build/files.c:2014
+#: build/files.c:2540
+msgid "Generating build-id links failed\n"
+msgstr ""
+
+#: build/files.c:2657
#, c-format
msgid "Bad file: %s: %s\n"
msgstr "ä¸è‰¯æª”案:%s:%s\n"
-#: build/files.c:2039 build/parsePrep.c:33
-#, c-format
-msgid "Bad owner/group: %s\n"
-msgstr "ä¸è‰¯æ“有者/群組:%s\n"
-
-#: build/files.c:2073
+#: build/files.c:2725
#, c-format
msgid "Checking for unpackaged file(s): %s\n"
msgstr "正在檢查未打包的檔案:%s\n"
-#: build/files.c:2086
+#: build/files.c:2738
#, c-format
msgid ""
"Installed (but unpackaged) file(s) found:\n"
@@ -807,551 +954,608 @@ msgstr ""
"æ‰¾åˆ°å·²å®‰è£ (但未打包) 的檔案:\n"
"%s"
-#: build/files.c:2117
+#: build/files.c:2853
+#, c-format
+msgid "%s was mapped to multiple filenames"
+msgstr ""
+
+#: build/files.c:3102
#, c-format
msgid "Processing files: %s\n"
msgstr "正在處ç†æª”案:%s\n"
-#: build/files.c:2131
+#: build/files.c:3124
#, c-format
msgid "Binaries arch (%d) not matching the package arch (%d).\n"
msgstr ""
-#: build/files.c:2137
+#: build/files.c:3130
msgid "Arch dependent binaries in noarch package\n"
-msgstr "noarch 套件中有架構ä¾è³´äºŒé€²ä½æª”\n"
+msgstr "noarch 軟體包中有架構ä¾è³´äºŒé€²ä½æª”\n"
-#: build/pack.c:50
+#: build/pack.c:91
#, c-format
msgid "create archive failed on file %s: %s\n"
msgstr ""
-#: build/pack.c:53
+#: build/pack.c:94
#, c-format
msgid "create archive failed: %s\n"
msgstr ""
-#: build/pack.c:80
+#: build/pack.c:121
#, c-format
msgid "Could not open %s file: %s\n"
msgstr ""
-#: build/pack.c:96
+#: build/pack.c:138
#, c-format
msgid "%s: line: %s\n"
msgstr "%s: 列:%s\n"
-#: build/pack.c:134
-#, c-format
-msgid "Could not canonicalize hostname: %s\n"
-msgstr "無法標準化主機å稱:%s\n"
+#: build/pack.c:168
+msgid "unable to parse SOURCE_DATE_EPOCH\n"
+msgstr ""
-#: build/pack.c:198
-#, c-format
-msgid "Unable to write payload to %s: %s\n"
-msgstr "無法寫入酬載到 %s:%s\n"
+#: build/pack.c:191
+msgid "The _buildhost macro is too long\n"
+msgstr ""
-#: build/pack.c:206
+#: build/pack.c:198
#, c-format
-msgid "Unable to read payload from %s: %s\n"
-msgstr "無法從 %s 讀å–酬載:%s\n"
+msgid "Could not canonicalize hostname: %s\n"
+msgstr "無法標準化主機å稱:%s\n"
-#: build/pack.c:310
+#: build/pack.c:358
#, c-format
msgid "Unknown payload compression: %s\n"
msgstr ""
-#: build/pack.c:338
-msgid "Unable to create immutable header region.\n"
-msgstr "無法建立ä¸å¯è®Šçš„表頭å€åŸŸã€‚\n"
-
-#: build/pack.c:351
-msgid "Unable to open temp file.\n"
-msgstr "無法開啟暫時檔案。\n"
+#: build/pack.c:408 sign/rpmgensig.c:285 sign/rpmgensig.c:482
+#: sign/rpmgensig.c:505 sign/rpmgensig.c:577 sign/rpmgensig.c:601
+#: sign/rpmgensig.c:764 sign/rpmgensig.c:799
+#, c-format
+msgid "Could not seek in file %s: %s\n"
+msgstr ""
-#: build/pack.c:358
-msgid "Unable to write temp header\n"
-msgstr "無法寫入臨時表頭\n"
+#: build/pack.c:434
+#, fuzzy, c-format
+msgid "Failed to read %jd bytes in file %s: %s\n"
+msgstr "無法從 %s 讀å–è¦æ ¼æª”\n"
-#: build/pack.c:366
-msgid "Bad CSA data\n"
-msgstr "ä¸è‰¯ CSA 資料\n"
+#: build/pack.c:448
+msgid "Unable to create immutable header region\n"
+msgstr ""
-#: build/pack.c:432
-msgid "Unable to reload signature header.\n"
-msgstr "無法é‡æ–°è¼‰å…¥ç°½ç½²è¡¨é ­ã€‚\n"
+#: build/pack.c:453
+#, c-format
+msgid "Unable to write header to %s: %s\n"
+msgstr ""
-#: build/pack.c:440
+#: build/pack.c:520
#, c-format
msgid "Could not open %s: %s\n"
msgstr "無法開啟 %s:%s\n"
-#: build/pack.c:452
+#: build/pack.c:527
#, c-format
msgid "Unable to write package: %s\n"
-msgstr "無法寫入套件:%s\n"
-
-#: build/pack.c:468
-#, c-format
-msgid "Unable to open sigtarget %s: %s\n"
-msgstr "無法開啟簽署目標 %s:%s\n"
-
-#: build/pack.c:479
-#, c-format
-msgid "Unable to read header from %s: %s\n"
-msgstr "ç„¡æ³•è®€å– %s 的表頭:%s\n"
-
-#: build/pack.c:489
-#, c-format
-msgid "Unable to write header to %s: %s\n"
-msgstr "無法寫入 %s 的表頭:%s\n"
+msgstr "無法寫入軟體包:%s\n"
-#: build/pack.c:523
+#: build/pack.c:611
#, c-format
msgid "Wrote: %s\n"
msgstr "已寫入:%s\n"
-#: build/pack.c:542
+#: build/pack.c:630
#, c-format
msgid "Executing \"%s\":\n"
msgstr "正在執行「%sã€ï¼š\n"
-#: build/pack.c:545
+#: build/pack.c:633
#, c-format
msgid "Execution of \"%s\" failed.\n"
msgstr "「%sã€åŸ·è¡Œå¤±æ•—。\n"
-#: build/pack.c:549
+#: build/pack.c:637
#, c-format
msgid "Package check \"%s\" failed.\n"
-msgstr "套件檢查「%sã€å¤±æ•—。\n"
+msgstr "軟體包檢查「%sã€å¤±æ•—。\n"
-#: build/pack.c:598
+#: build/pack.c:684
#, c-format
msgid "Could not generate output filename for package %s: %s\n"
-msgstr "無法產生套件 %s 的檔案å稱輸出:%s\n"
+msgstr "無法產生軟體包 %s 的檔案å稱輸出:%s\n"
-#: build/pack.c:615
+#: build/pack.c:701
#, c-format
msgid "cannot create %s: %s\n"
msgstr "無法建立 %s:%s\n"
-#: build/parseBuildInstallClean.c:35
+#: build/parseBuildInstallClean.c:35 build/parsePreamble.c:705
#, c-format
msgid "line %d: second %s\n"
msgstr "列 %d:第二個 %s\n"
-#: build/parseChangelog.c:114
+#: build/parseChangelog.c:185
#, c-format
msgid "bogus date in %%changelog: %s\n"
msgstr ""
-#: build/parseChangelog.c:146
+#: build/parseChangelog.c:218
#, c-format
msgid "%%changelog entries must start with *\n"
msgstr "%%changelog æ¢ç›®å¿…須以 * 符號開頭\n"
-#: build/parseChangelog.c:154
+#: build/parseChangelog.c:226
#, c-format
msgid "incomplete %%changelog entry\n"
msgstr "ä¸å®Œæ•´çš„ %%changelog æ¢ç›®\n"
-#: build/parseChangelog.c:169
+#: build/parseChangelog.c:237
#, c-format
msgid "bad date in %%changelog: %s\n"
msgstr "%%changelog 中å«æœ‰ä¸è‰¯æ—¥æœŸï¼š%s\n"
-#: build/parseChangelog.c:174
+#: build/parseChangelog.c:242
#, c-format
msgid "%%changelog not in descending chronological order\n"
msgstr "%%changelog 並éžéžæ¸›ç·¨å¹´é †åº\n"
-#: build/parseChangelog.c:182 build/parseChangelog.c:193
+#: build/parseChangelog.c:254 build/parseChangelog.c:265
#, c-format
msgid "missing name in %%changelog\n"
msgstr "%%changelog 中éºæ¼å稱\n"
-#: build/parseChangelog.c:200
+#: build/parseChangelog.c:272
#, c-format
msgid "no description in %%changelog\n"
msgstr "%%changelog 中沒有æè¿°\n"
+#: build/parseChangelog.c:309
+#, c-format
+msgid "line %d: second %%changelog\n"
+msgstr ""
+
#: build/parseDescription.c:32
#, c-format
msgid "line %d: Error parsing %%description: %s\n"
msgstr "列 %dï¼šè§£æž %%description 時發生錯誤:%s\n"
#: build/parseDescription.c:45 build/parseFiles.c:46 build/parsePolicies.c:45
-#: build/parseScript.c:232
+#: build/parseScript.c:321
#, c-format
msgid "line %d: Bad option %s: %s\n"
msgstr "列 %d:ä¸è‰¯é¸é … %s:%s\n"
#: build/parseDescription.c:56 build/parseFiles.c:57 build/parsePolicies.c:55
-#: build/parseScript.c:243
+#: build/parseScript.c:332
#, c-format
msgid "line %d: Too many names: %s\n"
msgstr "列 %d:éŽå¤šå稱:%s\n"
-#: build/parseDescription.c:64 build/parseFiles.c:65 build/parsePolicies.c:62
-#: build/parseScript.c:251
-#, c-format
-msgid "line %d: Package does not exist: %s\n"
-msgstr "列 %d:套件ä¸å­˜åœ¨ï¼š%s\n"
-
-#: build/parseDescription.c:74
-#, c-format
-msgid "line %d: Second description\n"
-msgstr "列 %d:第二個æè¿°\n"
-
#: build/parseFiles.c:33
#, c-format
msgid "line %d: Error parsing %%files: %s\n"
msgstr "列 %dï¼šè§£æž %%files 時發生錯誤:%s\n"
+#: build/parseFiles.c:73
+#, c-format
+msgid "line %d: multiple %%files for package '%s'\n"
+msgstr ""
+
#: build/parsePolicies.c:32
#, c-format
msgid "line %d: Error parsing %%policies: %s\n"
msgstr "列 %dï¼šè§£æž %%policies 發生錯誤:%s\n"
-#: build/parsePreamble.c:69
+#: build/parsePreamble.c:71
#, c-format
msgid "Error parsing tag field: %s\n"
msgstr ""
-#: build/parsePreamble.c:162
+#: build/parsePreamble.c:164
#, c-format
msgid "line %d: Bad number: %s\n"
msgstr "列 %d:錯誤的編號:%s\n"
-#: build/parsePreamble.c:168
+#: build/parsePreamble.c:170
#, c-format
msgid "line %d: Bad no%s number: %u\n"
msgstr ""
-#: build/parsePreamble.c:231
+#: build/parsePreamble.c:233
#, c-format
msgid "line %d: Bad %s number: %s\n"
msgstr "列 %d:ä¸è‰¯çš„ %s 數字:%s\n"
-#: build/parsePreamble.c:245
+#: build/parsePreamble.c:247
#, c-format
msgid "%s %d defined multiple times\n"
msgstr "%s %d 被定義許多次\n"
-#: build/parsePreamble.c:290
+#: build/parsePreamble.c:292
#, c-format
msgid "Downloading %s to %s\n"
msgstr ""
-#: build/parsePreamble.c:293
+#: build/parsePreamble.c:295
#, c-format
msgid "Couldn't download %s\n"
msgstr ""
-#: build/parsePreamble.c:432
+#: build/parsePreamble.c:439
#, c-format
msgid "Architecture is excluded: %s\n"
msgstr "被排除的架構:%s\n"
-#: build/parsePreamble.c:437
+#: build/parsePreamble.c:444
#, c-format
msgid "Architecture is not included: %s\n"
msgstr "未包å«çš„架構:%s\n"
-#: build/parsePreamble.c:442
+#: build/parsePreamble.c:449
#, c-format
msgid "OS is excluded: %s\n"
msgstr "被排除的作業系統:%s\n"
-#: build/parsePreamble.c:447
+#: build/parsePreamble.c:454
#, c-format
msgid "OS is not included: %s\n"
msgstr "未包å«çš„作業系統:%s\n"
-#: build/parsePreamble.c:473
+#: build/parsePreamble.c:480
#, c-format
msgid "%s field must be present in package: %s\n"
-msgstr "%s 欄ä½å¿…須出ç¾æ–¼å¥—件中:%s\n"
+msgstr "%s 欄ä½å¿…須出ç¾æ–¼è»Ÿé«”包中:%s\n"
-#: build/parsePreamble.c:496
+#: build/parsePreamble.c:503
#, c-format
msgid "Duplicate %s entries in package: %s\n"
-msgstr "套件中有é‡è¤‡çš„ %s æ¢ç›®ï¼š%s\n"
+msgstr "軟體包中有é‡è¤‡çš„ %s æ¢ç›®ï¼š%s\n"
-#: build/parsePreamble.c:554
+#: build/parsePreamble.c:568
#, c-format
msgid "Unable to open icon %s: %s\n"
msgstr "無法開啟圖示 %s:%s\n"
-#: build/parsePreamble.c:570
+#: build/parsePreamble.c:584
#, c-format
msgid "Unable to read icon %s: %s\n"
msgstr "無法讀å–圖示 %s:%s\n"
-#: build/parsePreamble.c:580
+#: build/parsePreamble.c:594
#, c-format
msgid "Unknown icon type: %s\n"
msgstr "ä¸æ˜Žçš„圖示類型:%s\n"
-#: build/parsePreamble.c:594
+#: build/parsePreamble.c:608
#, c-format
msgid "line %d: Tag takes single token only: %s\n"
msgstr "列 %d:標籤åªéœ€å–®ä¸€ç¬¦è¨˜ï¼š%s\n"
-#: build/parsePreamble.c:614
+#: build/parsePreamble.c:616
#, c-format
-msgid "line %d: Illegal char '%c' in: %s\n"
+msgid "line %d: %s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:617
+#: build/parsePreamble.c:618
#, c-format
-msgid "line %d: Illegal char in: %s\n"
+msgid "%s in: %s\n"
msgstr ""
-#: build/parsePreamble.c:623
+#: build/parsePreamble.c:637
#, c-format
-msgid "line %d: Illegal sequence \"..\" in: %s\n"
+msgid "Illegal char '%c' (0x%x)"
+msgstr ""
+
+#: build/parsePreamble.c:643
+msgid "Possible unexpanded macro"
+msgstr ""
+
+#: build/parsePreamble.c:649
+msgid "Illegal sequence \"..\""
msgstr ""
-#: build/parsePreamble.c:646
+#: build/parsePreamble.c:737
#, c-format
msgid "line %d: Malformed tag: %s\n"
msgstr "列 %d:格å¼ä¸è‰¯çš„標籤:%s\n"
-#: build/parsePreamble.c:654
+#: build/parsePreamble.c:745
#, c-format
msgid "line %d: Empty tag: %s\n"
msgstr "列 %d:空的標籤:%s\n"
-#: build/parsePreamble.c:715
+#: build/parsePreamble.c:806
#, c-format
msgid "line %d: Prefixes must not end with \"/\": %s\n"
msgstr "列 %d:å‰ç¶´ä¸èƒ½ä»¥ã€Œ/ã€çµå°¾ï¼š%s\n"
-#: build/parsePreamble.c:727
+#: build/parsePreamble.c:818
#, c-format
msgid "line %d: Docdir must begin with '/': %s\n"
msgstr "列 %d:Docdir 必須以「/ã€é–‹é ­ï¼š%s\n"
-#: build/parsePreamble.c:740
+#: build/parsePreamble.c:831
#, c-format
msgid "line %d: Epoch field must be an unsigned number: %s\n"
msgstr ""
-#: build/parsePreamble.c:777
+#: build/parsePreamble.c:868
#, c-format
msgid "line %d: Bad %s: qualifiers: %s\n"
msgstr "列 %d:ä¸è‰¯ %s:修飾詞:%s\n"
-#: build/parsePreamble.c:804
+#: build/parsePreamble.c:902
#, c-format
msgid "line %d: Bad BuildArchitecture format: %s\n"
msgstr "列 %d:ä¸è‰¯ BuildArchitecture æ ¼å¼ï¼š%s\n"
-#: build/parsePreamble.c:814
+#: build/parsePreamble.c:909
+#, c-format
+msgid "line %d: Duplicate BuildArch entry: %s\n"
+msgstr ""
+
+#: build/parsePreamble.c:919
#, c-format
msgid "line %d: Only noarch subpackages are supported: %s\n"
msgstr ""
-#: build/parsePreamble.c:830
+#: build/parsePreamble.c:934
#, c-format
msgid "Internal error: Bogus tag %d\n"
msgstr "內部錯誤:å‡é€ çš„標籤 %d\n"
-#: build/parsePreamble.c:915
+#: build/parsePreamble.c:1032
#, c-format
msgid "line %d: %s is deprecated: %s\n"
msgstr ""
-#: build/parsePreamble.c:978
+#: build/parsePreamble.c:1093
#, c-format
msgid "Bad package specification: %s\n"
-msgstr "ä¸è‰¯å¥—件è¦æ ¼ï¼š%s\n"
+msgstr "ä¸è‰¯è»Ÿé«”包è¦æ ¼ï¼š%s\n"
-#: build/parsePreamble.c:984
-#, c-format
-msgid "Package already exists: %s\n"
-msgstr "套件已經存在:%s\n"
+#: build/parsePreamble.c:1141
+msgid "Binary rpm package found. Expected spec file!\n"
+msgstr ""
-#: build/parsePreamble.c:1015
+#: build/parsePreamble.c:1144
#, c-format
msgid "line %d: Unknown tag: %s\n"
msgstr "列 %d:未知標籤:%s\n"
-#: build/parsePreamble.c:1047
+#: build/parsePreamble.c:1176
#, c-format
msgid "%%{buildroot} couldn't be empty\n"
msgstr ""
-#: build/parsePreamble.c:1051
+#: build/parsePreamble.c:1180
#, c-format
msgid "%%{buildroot} can not be \"/\"\n"
msgstr ""
-#: build/parsePrep.c:28
+#: build/parsePrep.c:29
#, c-format
msgid "Bad source: %s: %s\n"
msgstr "ä¸è‰¯æºç¢¼ï¼š%s:%s\n"
-#: build/parsePrep.c:73
+#: build/parsePrep.c:74
#, c-format
msgid "No patch number %u\n"
msgstr "沒有修補編號 %u\n"
-#: build/parsePrep.c:75
+#: build/parsePrep.c:76
#, c-format
msgid "%%patch without corresponding \"Patch:\" tag\n"
msgstr ""
-#: build/parsePrep.c:152
+#: build/parsePrep.c:164
#, c-format
msgid "No source number %u\n"
msgstr "沒有æºç¢¼ç·¨è™Ÿ %u\n"
-#: build/parsePrep.c:154
+#: build/parsePrep.c:166
msgid "No \"Source:\" tag in the spec file\n"
msgstr "è¦æ ¼æª”內無「Source:ã€æ¨™ç±¤\n"
-#: build/parsePrep.c:261
+#: build/parsePrep.c:300
#, c-format
msgid "Error parsing %%setup: %s\n"
msgstr "è§£æž %%setup 時發生錯誤:%s\n"
-#: build/parsePrep.c:272
+#: build/parsePrep.c:311
#, c-format
msgid "line %d: Bad arg to %%setup: %s\n"
msgstr "列 %d:%%setup 中出ç¾ä¸è‰¯å¼•æ•¸ï¼š%s\n"
-#: build/parsePrep.c:287
+#: build/parsePrep.c:326
#, c-format
msgid "line %d: Bad %%setup option %s: %s\n"
msgstr "列 %d:ä¸è‰¯ %%setup é¸é … %s:%s\n"
-#: build/parsePrep.c:446
+#: build/parsePrep.c:495
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
-#: build/parsePrep.c:459
+#: build/parsePrep.c:508
#, c-format
msgid "Invalid patch number %s: %s\n"
msgstr "無效的修補編號 %s:%s\n"
-#: build/parsePrep.c:486
+#: build/parsePrep.c:535
#, c-format
msgid "line %d: second %%prep\n"
msgstr "列 %d:第二個 %%prep\n"
-#: build/parseReqs.c:112
+#: build/parseReqs.c:52
msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'"
msgstr ""
-#: build/parseReqs.c:137
+#: build/parseReqs.c:57
msgid "Versioned file name not permitted"
msgstr ""
-#: build/parseReqs.c:154
-msgid "Version required"
+#: build/parseReqs.c:222
+msgid "No rich dependencies allowed for this type"
msgstr ""
-#: build/parseReqs.c:165
+#: build/parseReqs.c:232 build/parseReqs.c:307
msgid "invalid dependency"
msgstr ""
-#: build/parseReqs.c:181
+#: build/parseReqs.c:267 lib/rpmds.c:1470
+msgid "Version required"
+msgstr ""
+
+#: build/parseReqs.c:283
+msgid "Only absolute paths are allowed in file triggers"
+msgstr ""
+
+#: build/parseReqs.c:296
+msgid "Trigger fired by the same package is already defined in spec file"
+msgstr ""
+
+#: build/parseReqs.c:324
#, c-format
msgid "line %d: %s: %s\n"
msgstr ""
-#: build/parseScript.c:192
+#: build/parseScript.c:263
#, c-format
msgid "line %d: triggers must have --: %s\n"
msgstr "列 %dï¼šè§¸ç™¼å™¨å¿…é ˆåŒ…å« --:%s\n"
-#: build/parseScript.c:202 build/parseScript.c:265
+#: build/parseScript.c:271
+#, c-format
+msgid "line %d: missing trigger condition: %s\n"
+msgstr ""
+
+#: build/parseScript.c:281 build/parseScript.c:351
#, c-format
msgid "line %d: Error parsing %s: %s\n"
msgstr "列 %dï¼šè§£æž %s 時發生錯誤:%s\n"
-#: build/parseScript.c:214
+#: build/parseScript.c:293
#, c-format
msgid "line %d: internal script must end with '>': %s\n"
msgstr "列 %d:內部指令稿必須以「>ã€çµå°¾ï¼š%s\n"
-#: build/parseScript.c:220
+#: build/parseScript.c:299
#, c-format
msgid "line %d: script program must begin with '/': %s\n"
msgstr "列 %d:指令稿程å¼å¿…須以「/ã€é–‹é ­ï¼š%s\n"
-#: build/parseScript.c:258
+#: build/parseScript.c:313
+#, c-format
+msgid "line %d: Priorities are allowed only for file triggers : %s\n"
+msgstr ""
+
+#: build/parseScript.c:344
#, c-format
msgid "line %d: Second %s\n"
msgstr "列 %d:第二個 %s\n"
-#: build/parseScript.c:301
+#: build/parseScript.c:386
#, c-format
msgid "line %d: unsupported internal script: %s\n"
msgstr "列 %d:ä¸æ”¯æ´çš„內部指令稿:%s\n"
-#: build/parseScript.c:318
+#: build/parseScript.c:404
+#, c-format
+msgid "line %d: file trigger condition must begin with '/': %s"
+msgstr ""
+
+#: build/parseScript.c:410
#, c-format
msgid "line %d: interpreter arguments not allowed in triggers: %s\n"
msgstr ""
-#: build/parseSpec.c:209
+#: build/parseSpec.c:190
#, c-format
msgid "line %d: %s\n"
msgstr "列 %d:%s\n"
-#: build/parseSpec.c:252
+#: build/parseSpec.c:212
+#, c-format
+msgid "Macro expanded in comment on line %d: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:317
#, c-format
msgid "Unable to open %s: %s\n"
msgstr "無法開啟 %s:%s\n"
-#: build/parseSpec.c:286
+#: build/parseSpec.c:351
#, c-format
msgid "%s:%d: Argument expected for %s\n"
msgstr ""
-#: build/parseSpec.c:308
+#: build/parseSpec.c:373
#, c-format
msgid "line %d: Unclosed %%if\n"
msgstr ""
-#: build/parseSpec.c:313
+#: build/parseSpec.c:378
#, c-format
msgid "line %d: unclosed macro or bad line continuation\n"
msgstr ""
-#: build/parseSpec.c:355
+#: build/parseSpec.c:420
#, c-format
msgid "%s:%d: bad %%if condition\n"
msgstr ""
-#: build/parseSpec.c:363
+#: build/parseSpec.c:428
#, c-format
msgid "%s:%d: Got a %%else with no %%if\n"
msgstr "%s:%d:有個 %%else 沒有å°æ‡‰ %%if\n"
-#: build/parseSpec.c:374
+#: build/parseSpec.c:439
#, c-format
msgid "%s:%d: Got a %%endif with no %%if\n"
msgstr "%s:%d:有個 %%endif 沒有å°æ‡‰ %%if\n"
-#: build/parseSpec.c:392
+#: build/parseSpec.c:460
#, c-format
msgid "%s:%d: malformed %%include statement\n"
msgstr ""
-#: build/parseSpec.c:669
+#: build/parseSpec.c:645
+#, c-format
+msgid "encoding %s not supported by system\n"
+msgstr ""
+
+#: build/parseSpec.c:674
+#, c-format
+msgid "Package %s: invalid %s encoding in %s: %s - %s\n"
+msgstr ""
+
+#: build/parseSpec.c:710
+#, c-format
+msgid "line %d: %%end doesn't take any arguments: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:717
+#, c-format
+msgid "line %d: %%end not expected here, no section to close: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:733
+#, c-format
+msgid "line %d doesn't belong to any section: %s\n"
+msgstr ""
+
+#: build/parseSpec.c:878
msgid "No compatible architectures found for build\n"
msgstr "找ä¸åˆ°å¯ä¾›å»ºç½®çš„相容架構\n"
-#: build/parseSpec.c:703
+#: build/parseSpec.c:912
#, c-format
msgid "Package has no %%description: %s\n"
-msgstr "套件沒有 %%description:%s\n"
+msgstr "軟體包沒有 %%description:%s\n"
#: build/policies.c:87
#, c-format
@@ -1419,450 +1623,561 @@ msgstr ""
msgid "Processing policies: %s\n"
msgstr ""
-#: build/rpmfc.c:108
+#: build/rpmfc.c:160
#, c-format
msgid "Ignoring invalid regex %s\n"
msgstr ""
-#: build/rpmfc.c:204
+#: build/rpmfc.c:266
#, c-format
msgid "Couldn't create pipe for %s: %m\n"
msgstr "無法為 %s 建立導管:%m\n"
-#: build/rpmfc.c:229
+#: build/rpmfc.c:289
#, c-format
msgid "Couldn't exec %s: %s\n"
msgstr "無法執行 %s:%s\n"
-#: build/rpmfc.c:234 lib/rpmscript.c:255
+#: build/rpmfc.c:294 lib/rpmscript.c:320
#, c-format
msgid "Couldn't fork %s: %s\n"
msgstr "無法分支 %s:%s\n"
-#: build/rpmfc.c:317
+#: build/rpmfc.c:377
#, c-format
msgid "%s failed: %x\n"
msgstr "%s 失敗:%x\n"
-#: build/rpmfc.c:321
+#: build/rpmfc.c:381
#, c-format
msgid "failed to write all data to %s: %s\n"
msgstr "無法寫入所有資料至 %s:%s\n"
-#: build/rpmfc.c:831
-#, c-format
-msgid "Conversion of %s to long integer failed.\n"
-msgstr "%s 轉æ›è‡³ long integer 失敗。\n"
-
-#: build/rpmfc.c:909
+#: build/rpmfc.c:1032
msgid "Empty file classifier\n"
msgstr ""
-#: build/rpmfc.c:918
+#: build/rpmfc.c:1041
msgid "No file attributes configured\n"
msgstr "無設定檔案特性\n"
-#: build/rpmfc.c:938
+#: build/rpmfc.c:1060
#, c-format
msgid "magic_open(0x%x) failed: %s\n"
msgstr "magic_open(0x%x) 失敗:%s\n"
-#: build/rpmfc.c:944
+#: build/rpmfc.c:1066
#, c-format
msgid "magic_load failed: %s\n"
msgstr "magic_load 失敗:%s\n"
-#: build/rpmfc.c:986
+#: build/rpmfc.c:1108
#, c-format
msgid "Recognition of file \"%s\" failed: mode %06o %s\n"
msgstr "檔案「%sã€è¾¨è­˜å¤±æ•—ï¼šæ¨¡å¼ %06o %s\n"
-#: build/rpmfc.c:1166
+#: build/rpmfc.c:1309
#, c-format
msgid "Finding %s: %s\n"
msgstr "正在尋找 %s:%s\n"
-#: build/rpmfc.c:1175 build/rpmfc.c:1184
+#: build/rpmfc.c:1318 build/rpmfc.c:1327
#, c-format
msgid "Failed to find %s:\n"
msgstr "找ä¸åˆ° %s:\n"
-#: build/spec.c:404
+#: build/rpmfc.c:1344
+msgid "Deprecated external dependency generator is used!\n"
+msgstr ""
+
+#: build/spec.c:92
+#, c-format
+msgid "line %d: %s: package %s does not exist\n"
+msgstr ""
+
+#: build/spec.c:95
+#, c-format
+msgid "line %d: %s: package %s already exists\n"
+msgstr ""
+
+#: build/spec.c:466
#, c-format
msgid "query of specfile %s failed, can't parse\n"
msgstr "%s è¦æ ¼æª”查詢失敗,無法剖æž\n"
-#: lib/cpio.c:364
+#: lib/backend/db3.c:97
#, c-format
-msgid "(error 0x%x)"
-msgstr "(error 0x%x)"
+msgid "%s error(%d) from %s: %s\n"
+msgstr ""
-#: lib/cpio.c:368
-msgid "Bad magic"
-msgstr "ä¸è‰¯é­”法數字"
+#: lib/backend/db3.c:100
+#, c-format
+msgid "%s error(%d): %s\n"
+msgstr ""
-#: lib/cpio.c:369
-msgid "Bad/unreadable header"
-msgstr "ä¸è‰¯æˆ–無法讀å–的表頭"
+#: lib/backend/db3.c:288
+#, c-format
+msgid "unrecognized db option: \"%s\" ignored.\n"
+msgstr "無法辨識的資料庫é¸é …:「%s〠已忽略。\n"
-#: lib/cpio.c:392
-msgid "Header size too big"
-msgstr "表頭大å°éŽå¤§"
+#: lib/backend/db3.c:325
+#, c-format
+msgid "%s has invalid numeric value, skipped\n"
+msgstr "%s 有無效的數值,略éŽ\n"
-#: lib/cpio.c:393
-msgid "File too large for archive"
+#: lib/backend/db3.c:334
+#, c-format
+msgid "%s has too large or too small long value, skipped\n"
+msgstr "%s 有éŽå¤§æˆ–éŽå°çš„ long 數值,略éŽ\n"
+
+#: lib/backend/db3.c:343
+#, c-format
+msgid "%s has too large or too small integer value, skipped\n"
+msgstr "%s 有éŽå¤§æˆ–éŽå°çš„整數值,略éŽ\n"
+
+#: lib/backend/db3.c:808
+#, c-format
+msgid "cannot get %s lock on %s/%s\n"
+msgstr "無法å–å¾— %s æ–¼ %s/%s 的鎖定\n"
+
+#: lib/backend/db3.c:810
+msgid "shared"
+msgstr "已共享"
+
+#: lib/backend/db3.c:810
+msgid "exclusive"
+msgstr "排他"
+
+#: lib/backend/db3.c:892
+#, c-format
+msgid "invalid index type %x on %s/%s\n"
msgstr ""
-#: lib/cpio.c:394
-msgid "Unknown file type"
-msgstr "未知檔案類型"
+#: lib/backend/db3.c:1068
+#, c-format
+msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgstr ""
-#: lib/cpio.c:395
-msgid "Missing hard link(s)"
-msgstr "éºå¤±ç¡¬éˆçµ"
+#: lib/backend/db3.c:1098
+#, c-format
+msgid "error(%d) storing record \"%s\" into %s\n"
+msgstr "儲存記錄「%2$sã€åˆ° %3$s 時發生錯誤(%1$d)\n"
-#: lib/cpio.c:396
-msgid "Digest mismatch"
-msgstr "摘è¦ä¸ç¬¦"
+#: lib/backend/db3.c:1106
+#, c-format
+msgid "error(%d) removing record \"%s\" from %s\n"
+msgstr "從 %3$s 移除記錄「%2$sã€æ™‚發生錯誤(%1$d)\n"
-#: lib/cpio.c:397
-msgid "Internal error"
-msgstr "內部錯誤"
+#: lib/backend/db3.c:1208
+#, c-format
+msgid "error(%d) adding header #%d record\n"
+msgstr ""
-#: lib/cpio.c:398
-msgid "Archive file not in header"
-msgstr "在表頭中沒有å°å­˜æª”"
+#: lib/backend/db3.c:1217
+#, c-format
+msgid "error(%d) removing header #%d record\n"
+msgstr ""
-#: lib/cpio.c:409
-msgid " failed - "
-msgstr " 失敗 - "
+#: lib/backend/db3.c:1272
+#, c-format
+msgid "error(%d) allocating new package instance\n"
+msgstr "分é…新軟體包實體時發生錯誤(%d)\n"
+
+#: lib/backend/dbi.c:64
+#, c-format
+msgid ""
+"Found LMDB data.mdb database while attempting %s backend: using lmdb "
+"backend.\n"
+msgstr ""
-#: lib/depends.c:68
+#: lib/backend/dbi.c:73
+#, c-format
+msgid ""
+"Found NDB Packages.db database while attempting %s backend: using ndb "
+"backend.\n"
+msgstr ""
+
+#: lib/backend/dbi.c:81
+#, c-format
+msgid ""
+"Found BDB Packages database while attempting %s backend: using bdb backend.\n"
+msgstr ""
+
+#: lib/depends.c:93
#, c-format
msgid "%s is a Delta RPM and cannot be directly installed\n"
msgstr ""
-#: lib/depends.c:72
+#: lib/depends.c:97
#, c-format
msgid "Unsupported payload (%s) in package %s\n"
msgstr ""
-#: lib/depends.c:344
+#: lib/depends.c:377
#, c-format
msgid "package %s was already added, skipping %s\n"
-msgstr "套件 %s å·²è¢«åŠ å…¥ï¼Œè·³éŽ %s\n"
+msgstr "軟體包 %s å·²è¢«åŠ å…¥ï¼Œè·³éŽ %s\n"
-#: lib/depends.c:345
+#: lib/depends.c:378
#, c-format
msgid "package %s was already added, replacing with %s\n"
-msgstr "套件 %s 已被加入,以 %s 替æ›\n"
+msgstr "軟體包 %s 已被加入,以 %s 替æ›\n"
-#: lib/formats.c:65 lib/formats.c:101 lib/formats.c:183 lib/formats.c:209
-#: lib/formats.c:262 lib/formats.c:280 lib/formats.c:473 lib/formats.c:506
-#: lib/formats.c:544
+#: lib/formats.c:42
+msgid "(not a blob)"
+msgstr "(ä¸æ˜¯ blob)"
+
+#: lib/formats.c:43
msgid "(not a number)"
msgstr "(ä¸æ˜¯æ•¸å­—)"
-#: lib/formats.c:125
+#: lib/formats.c:44
+msgid "(not a string)"
+msgstr "(ä¸æ˜¯å­—串)"
+
+#: lib/formats.c:47 lib/formats.c:151 lib/formats.c:267
+msgid "(invalid type)"
+msgstr "(無效型態)"
+
+#: lib/formats.c:116
#, c-format
msgid "%c"
msgstr "%c"
-#: lib/formats.c:135
+#: lib/formats.c:122
msgid "%a %b %d %Y"
msgstr "%Y %b %d %a"
-#: lib/formats.c:314
+#: lib/formats.c:253
msgid "(not base64)"
msgstr "(ä¸æ˜¯ base64)"
-#: lib/formats.c:326
-msgid "(invalid type)"
-msgstr "(無效型態)"
-
-#: lib/formats.c:349 lib/formats.c:429
-msgid "(not a blob)"
-msgstr "(ä¸æ˜¯ blob)"
-
-#: lib/formats.c:384
+#: lib/formats.c:313
msgid "(invalid xml type)"
msgstr "(無效 xml 類型)"
-#: lib/formats.c:434
+#: lib/formats.c:358
msgid "(not an OpenPGP signature)"
msgstr "(ä¸æ˜¯å€‹ OpenPGP 簽署)"
-#: lib/formats.c:446
+#: lib/formats.c:369
#, c-format
msgid "Invalid date %u"
msgstr ""
-#: lib/formats.c:512
+#: lib/formats.c:417
msgid "normal"
msgstr "一般"
-#: lib/formats.c:515
+#: lib/formats.c:420 lib/verify.c:393
msgid "replaced"
msgstr "已替æ›"
-#: lib/formats.c:518
+#: lib/formats.c:423 lib/verify.c:387
msgid "not installed"
msgstr "未安è£"
-#: lib/formats.c:521
+#: lib/formats.c:426 lib/verify.c:389
msgid "net shared"
msgstr "已網路分享"
-#: lib/formats.c:524
+#: lib/formats.c:429 lib/verify.c:391
msgid "wrong color"
msgstr "錯誤色彩"
-#: lib/formats.c:527
+#: lib/formats.c:432
msgid "missing"
msgstr "éºå¤±"
-#: lib/formats.c:530
+#: lib/formats.c:435
msgid "(unknown)"
msgstr "(未知)"
-#: lib/formats.c:565
-msgid "(not a string)"
-msgstr "(ä¸æ˜¯å­—串)"
-
-#: lib/fsm.c:689
-#, c-format
-msgid "user %s does not exist - using root\n"
-msgstr "使用者 %s ä¸å­˜åœ¨ - ç¾ä½¿ç”¨ root 代替\n"
-
-#: lib/fsm.c:696
-#, c-format
-msgid "group %s does not exist - using root\n"
-msgstr "群組 %s ä¸å­˜åœ¨ - ç¾ä½¿ç”¨ root 代替\n"
-
-#: lib/fsm.c:1518
+#: lib/fsm.c:745
#, c-format
msgid "%s saved as %s\n"
msgstr "%s 已被å¦å­˜ç‚º %s\n"
-#: lib/fsm.c:1543
+#: lib/fsm.c:798
#, c-format
msgid "%s created as %s\n"
msgstr "%s 已建立為 %s \n"
-#: lib/fsm.c:1845
+#: lib/fsm.c:1082
#, c-format
msgid "%s %s: remove failed: %s\n"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "directory"
msgstr ""
-#: lib/fsm.c:1846
+#: lib/fsm.c:1083
msgid "file"
msgstr ""
-#: lib/package.c:146
+#: lib/header.c:285
#, c-format
-msgid "skipping %s %s with unverifiable signature\n"
+msgid "tag[%d]: BAD, tag %d type %d offset %d count %d len %d"
msgstr ""
-#: lib/package.c:149
-#, c-format
-msgid "skipping %s with unverifiable signature\n"
+#: lib/header.c:952
+msgid "hdr load: BAD"
msgstr ""
-#: lib/package.c:179 lib/package.c:306 lib/package.c:373 lib/signature.c:130
+#: lib/header.c:1775
+msgid "region: no tags"
+msgstr ""
+
+#: lib/header.c:1797
#, c-format
-msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "標籤[%d]:ä¸è‰¯ï¼Œæ¨™ç±¤ %d é¡žåž‹ %d å移 %d 計數 %d\n"
+msgid "region tag: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:198
-msgid "hdr SHA1: BAD, not hex\n"
-msgstr "hdr SHA1:ä¸è‰¯ï¼Œä¸æ˜¯å六進ä½\n"
+#: lib/header.c:1805
+#, c-format
+msgid "region offset: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:210
-msgid "hdr RSA: BAD, not binary\n"
-msgstr "hdr RSA:ä¸è‰¯ï¼Œä¸æ˜¯äºŒé€²ä½\n"
+#: lib/header.c:1824
+#, c-format
+msgid "region trailer: BAD, tag %d type %d offset %d count %d"
+msgstr ""
-#: lib/package.c:220
-msgid "hdr DSA: BAD, not binary\n"
-msgstr "hdr DSA:ä¸è‰¯ï¼Œä¸æ˜¯äºŒé€²ä½\n"
+#: lib/header.c:1833
+#, c-format
+msgid "region %d size: BAD, ril %d il %d rdl %d dl %d"
+msgstr ""
-#: lib/package.c:296
+#: lib/header.c:1841
#, c-format
-msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"
-msgstr "blob 大å°(%d):ä¸è‰¯ï¼Œ8 + 16 * il(%d) + dl(%d)\n"
+msgid "region %d: tag number mismatch il %d ril %d dl %d rdl %d\n"
+msgstr ""
-#: lib/package.c:322 lib/signature.c:142
+#: lib/header.c:1876
#, c-format
-msgid "region tag: BAD, tag %d type %d offset %d count %d\n"
+msgid "hdr size(%d): BAD, read returned %d"
msgstr ""
-#: lib/package.c:331 lib/signature.c:151
+#: lib/header.c:1880
+msgid "hdr magic: BAD"
+msgstr ""
+
+#: lib/header.c:1885
#, c-format
-msgid "region offset: BAD, tag %d type %d offset %d count %d\n"
-msgstr "å€åŸŸå移:ä¸è‰¯ï¼Œæ¨™ç±¤ %d é¡žåž‹ %d å移 %d 計數 %d\n"
+msgid "hdr tags: BAD, no. of tags(%d) out of range"
+msgstr ""
-#: lib/package.c:348 lib/signature.c:175
+#: lib/header.c:1890
#, c-format
-msgid "region trailer: BAD, tag %d type %d offset %d count %d\n"
-msgstr "å€åŸŸçµå°¾ï¼šä¸è‰¯ï¼Œæ¨™ç±¤ %d é¡žåž‹ %d å移 %d 計數 %d\n"
+msgid "hdr data: BAD, no. of bytes(%d) out of range"
+msgstr ""
-#: lib/package.c:358 lib/signature.c:185
+#: lib/header.c:1900
#, c-format
-msgid "region size: BAD, ril(%d) > il(%d)\n"
-msgstr "å€åŸŸå¤§å°ï¼šä¸è‰¯ï¼Œ ril(%d)> il(%d)\n"
+msgid "hdr blob(%zd): BAD, read returned %d"
+msgstr ""
-#: lib/package.c:427
+#: lib/header.c:1909
#, c-format
-msgid "hdr size(%d): BAD, read returned %d\n"
-msgstr "hdr 大å°(%d):ä¸è‰¯ï¼Œè®€å–回傳的 %d\n"
+msgid "sigh pad(%zd): BAD, read %zd bytes"
+msgstr ""
-#: lib/package.c:431
-msgid "hdr magic: BAD\n"
-msgstr "hdr magic:ä¸è‰¯\n"
+#: lib/header.c:1922
+msgid "signature "
+msgstr ""
-#: lib/package.c:436
+#: lib/header.c:1949
#, c-format
-msgid "hdr tags: BAD, no. of tags(%d) out of range\n"
-msgstr "hdr 標籤:ä¸è‰¯ï¼Œæ¨™ç±¤(%d) 的號碼超出範åœ\n"
+msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)"
+msgstr ""
-#: lib/package.c:442
+#: lib/headerfmt.c:356
+msgid "invalid field width"
+msgstr ""
+
+#: lib/headerfmt.c:362
#, c-format
-msgid "hdr data: BAD, no. of bytes(%d) out of range\n"
-msgstr "hdr 資料:ä¸è‰¯ï¼Œä½å…ƒçµ„(%d) 的號碼超出範åœ\n"
+msgid "missing { after %%"
+msgstr ""
-#: lib/package.c:452
+#: lib/headerfmt.c:384
#, c-format
-msgid "hdr blob(%zd): BAD, read returned %d\n"
+msgid "missing } after %%{"
msgstr ""
-#: lib/package.c:465
-msgid "hdr load: BAD\n"
-msgstr "hdr 載入:ä¸è‰¯\n"
+#: lib/headerfmt.c:395
+msgid "empty tag format"
+msgstr "空白標籤格å¼"
-#: lib/package.c:532 lib/rpmchecksig.c:275 sign/rpmgensig.c:433
-#, c-format
-msgid "%s: rpmReadSignature failed: %s"
-msgstr "%s:rpmReadSignature 失敗:%s"
+#: lib/headerfmt.c:406
+msgid "empty tag name"
+msgstr "空白標籤å稱"
-#: lib/package.c:539 lib/rpmchecksig.c:282 sign/rpmgensig.c:440
+#: lib/headerfmt.c:413
#, c-format
-msgid "%s: No signature available\n"
-msgstr "%s:未發ç¾ç°½ç½²\n"
+msgid "unknown tag: \"%s\""
+msgstr ""
-#: lib/package.c:581
-#, c-format
-msgid "%s: headerRead failed: %s"
-msgstr "%s:headerRead 失敗:%s"
+#: lib/headerfmt.c:433
+msgid "] expected at end of array"
+msgstr "] é æœŸåœ¨é™£åˆ—çš„çµå°¾"
+
+#: lib/headerfmt.c:445
+msgid "unexpected ]"
+msgstr "未é æœŸçš„ ]"
+
+#: lib/headerfmt.c:455
+msgid "unexpected }"
+msgstr "未é æœŸçš„ }"
+
+#: lib/headerfmt.c:511
+msgid "? expected in expression"
+msgstr "? é æœŸæ–¼è¡¨è¿°å¼ä¸­"
+
+#: lib/headerfmt.c:518
+msgid "{ expected after ? in expression"
+msgstr "{ é æœŸæ–¼è¡¨è¿°å¼ä¸­çš„ ? 之後"
-#: lib/package.c:633 lib/rpmchecksig.c:140 sign/rpmgensig.c:93
+#: lib/headerfmt.c:530 lib/headerfmt.c:570
+msgid "} expected in expression"
+msgstr "} é æœŸæ–¼è¡¨è¿°å¼ä¸­"
+
+#: lib/headerfmt.c:538
+msgid ": expected following ? subexpression"
+msgstr ": é æœŸè·Ÿè‘— ? å­è¡¨è¿°å¼"
+
+#: lib/headerfmt.c:556
+msgid "{ expected after : in expression"
+msgstr "{ é æœŸæ–¼è¡¨è¿°å¼ä¸­ : 之後"
+
+#: lib/headerfmt.c:578
+msgid "| expected at end of expression"
+msgstr "| é æœŸæ–¼è¡¨è¿°å¼çš„çµå°¾"
+
+#: lib/headerfmt.c:753
+msgid "array iterator used with different sized arrays"
+msgstr "用於ä¸åŒå¤§å°é™£åˆ—的陣列迭代器"
+
+#: lib/poptALL.c:154
#, c-format
-msgid "%s: Fread failed: %s\n"
-msgstr "%s:Fread 失敗:%s\n"
+msgid ""
+"%s: error: more than one --pipe specified (incompatible popt aliases?)\n"
+msgstr ""
-#: lib/poptALL.c:164
+#: lib/poptALL.c:188
msgid "predefine MACRO with value EXPR"
msgstr "é å…ˆä»¥å€¼ EXPR 定義 MACRO"
-#: lib/poptALL.c:165 lib/poptALL.c:168
+#: lib/poptALL.c:189 lib/poptALL.c:192
msgid "'MACRO EXPR'"
msgstr "「MACRO EXPRã€"
-#: lib/poptALL.c:167
+#: lib/poptALL.c:191
msgid "define MACRO with value EXPR"
msgstr "定義 MACRO 值為 EXPR"
-#: lib/poptALL.c:170
+#: lib/poptALL.c:194
msgid "undefine MACRO"
msgstr ""
-#: lib/poptALL.c:171
+#: lib/poptALL.c:195
msgid "MACRO"
msgstr ""
-#: lib/poptALL.c:173
+#: lib/poptALL.c:197
msgid "print macro expansion of EXPR"
msgstr "åˆ—å° EXPR 的巨集展開"
-#: lib/poptALL.c:174
+#: lib/poptALL.c:198
msgid "'EXPR'"
msgstr "「EXPRã€"
-#: lib/poptALL.c:176 lib/poptALL.c:190
+#: lib/poptALL.c:200
+msgid "Specify target platform"
+msgstr ""
+
+#: lib/poptALL.c:200
+msgid "CPU-VENDOR-OS"
+msgstr ""
+
+#: lib/poptALL.c:202 lib/poptALL.c:221
msgid "read <FILE:...> instead of default file(s)"
msgstr "è®€å– <FILE:…> 以代替é è¨­æª”案"
-#: lib/poptALL.c:177 lib/poptALL.c:191
+#: lib/poptALL.c:203 lib/poptALL.c:222
msgid "<FILE:...>"
msgstr "<FILE:…>"
-#: lib/poptALL.c:180
+#: lib/poptALL.c:208
+msgid "don't enable any plugins"
+msgstr ""
+
+#: lib/poptALL.c:211
msgid "don't verify package digest(s)"
-msgstr "ä¸æ ¡é©—套件摘è¦"
+msgstr "ä¸æ ¡é©—軟體包摘è¦"
-#: lib/poptALL.c:182
+#: lib/poptALL.c:213
msgid "don't verify database header(s) when retrieved"
msgstr "æ“·å–時ä¸æ ¡é©—資料庫表頭"
-#: lib/poptALL.c:184
+#: lib/poptALL.c:215
msgid "don't verify package signature(s)"
-msgstr "ä¸æ ¡é©—套件簽署"
+msgstr "ä¸æ ¡é©—軟體包簽署"
-#: lib/poptALL.c:187
+#: lib/poptALL.c:218
msgid "send stdout to CMD"
msgstr "ç™¼é€ stdout 至 CMD"
-#: lib/poptALL.c:188
+#: lib/poptALL.c:219
msgid "CMD"
msgstr "CMD"
-#: lib/poptALL.c:193
+#: lib/poptALL.c:224
msgid "use ROOT as top level directory"
msgstr "使用 ROOT åšç‚ºæœ€é ‚層目錄"
-#: lib/poptALL.c:194
+#: lib/poptALL.c:225
msgid "ROOT"
msgstr "ROOT"
-#: lib/poptALL.c:196
+#: lib/poptALL.c:227
msgid "use database in DIRECTORY"
msgstr "使用「DIRECTORYã€å…§çš„資料庫"
-#: lib/poptALL.c:197
+#: lib/poptALL.c:228
msgid "DIRECTORY"
msgstr "DIRECTORY"
-#: lib/poptALL.c:200
+#: lib/poptALL.c:231
msgid "display known query tags"
msgstr "顯示已知的查詢標籤"
-#: lib/poptALL.c:202
+#: lib/poptALL.c:233
msgid "display final rpmrc and macro configuration"
msgstr "顯示完整的 rpmrc 與巨集組態"
-#: lib/poptALL.c:204
+#: lib/poptALL.c:235
msgid "provide less detailed output"
msgstr "æ供較少細節的輸出"
-#: lib/poptALL.c:206
+#: lib/poptALL.c:237
msgid "provide more detailed output"
msgstr "æ供較多細節的輸出"
-#: lib/poptALL.c:208
+#: lib/poptALL.c:239
msgid "print the version of rpm being used"
msgstr "列å°æ­£ä½¿ç”¨çš„ rpm 版本資訊"
-#: lib/poptALL.c:214
+#: lib/poptALL.c:245
msgid "debug payload file state machine"
msgstr "å°é…¬è¼‰æª”案狀態機器除錯"
-#: lib/poptALL.c:220
+#: lib/poptALL.c:251
msgid "debug rpmio I/O"
msgstr "除錯 rpmio I/O"
-#: lib/poptALL.c:287
+#: lib/poptALL.c:310
#, c-format
msgid "%s: option table misconfigured (%d)\n"
msgstr "%s:é¸é …表格設定ä¸è‰¯ (%d)\n"
@@ -1883,530 +2198,579 @@ msgstr "é‡æ–°åˆ†é…ä½ç½®å¿…須包å«ä¸€å€‹ ="
msgid "relocations must have a / following the ="
msgstr "é‡æ–°åˆ†é…ä½ç½®å¿…須有個 / 跟在 = 之後"
-#: lib/poptI.c:114
+#: lib/poptI.c:118
msgid "install all files, even configurations which might otherwise be skipped"
msgstr "安è£æ‰€æœ‰æª”案,å³ä½¿çµ„æ…‹å¯èƒ½è¢«ç•¥éŽ"
-#: lib/poptI.c:118
+#: lib/poptI.c:122
msgid ""
"remove all packages which match <package> (normally an error is generated if "
"<package> specified multiple packages)"
msgstr ""
-"ç§»é™¤æ‰€æœ‰ç¬¦åˆ <package> 的套件 (如果 <package> 被指定為多個套件,常會導致錯誤"
-"出ç¾)"
+"ç§»é™¤æ‰€æœ‰ç¬¦åˆ <package> 的軟體包 (如果 <package> 被指定為多個軟體包,常會導致"
+"錯誤出ç¾)"
-#: lib/poptI.c:123
+#: lib/poptI.c:127
msgid "relocate files in non-relocatable package"
-msgstr "å°ä¸å¯é‡æ–°åˆ†é…ä½ç½®çš„套件é‡æ–°åˆ†é…檔案ä½ç½®"
+msgstr "å°ä¸å¯é‡æ–°åˆ†é…ä½ç½®çš„軟體包é‡æ–°åˆ†é…檔案ä½ç½®"
-#: lib/poptI.c:127
+#: lib/poptI.c:131
msgid "print dependency loops as warning"
msgstr "列å°ç›¸ä¾é—œä¿‚迴圈åšç‚ºè­¦å‘Š"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "erase (uninstall) package"
-msgstr "抹除 (解除安è£) 套件"
+msgstr "抹除 (解除安è£) 軟體包"
-#: lib/poptI.c:131
+#: lib/poptI.c:135
msgid "<package>+"
msgstr "<package>+"
-#: lib/poptI.c:134 lib/poptI.c:171
+#: lib/poptI.c:138 lib/poptI.c:175
msgid "do not install configuration files"
msgstr "ä¸å®‰è£çµ„態檔案"
-#: lib/poptI.c:137 lib/poptI.c:176
+#: lib/poptI.c:141 lib/poptI.c:180
msgid "do not install documentation"
msgstr "ä¸å®‰è£æ–‡ä»¶"
-#: lib/poptI.c:139
+#: lib/poptI.c:143
msgid "skip files with leading component <path> "
msgstr "ç•¥éŽä»¥ <path> 部件開頭的檔案"
-#: lib/poptI.c:140
+#: lib/poptI.c:144
msgid "<path>"
msgstr "<path>"
-#: lib/poptI.c:143
+#: lib/poptI.c:147
msgid "short hand for --replacepkgs --replacefiles"
msgstr "--replacepkgs 與 --replacefiles 的速寫"
-#: lib/poptI.c:147
+#: lib/poptI.c:151
msgid "upgrade package(s) if already installed"
-msgstr "如果套件已安è£ï¼Œä¾¿å‡ç´šå¥—件"
+msgstr "如果軟體包已安è£ï¼Œä¾¿å‡ç´šè»Ÿé«”包"
-#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249
+#: lib/poptI.c:152 lib/poptI.c:168 lib/poptI.c:257 lib/poptI.c:261
msgid "<packagefile>+"
msgstr "<packagefile>+"
-#: lib/poptI.c:150
+#: lib/poptI.c:154
msgid "print hash marks as package installs (good with -v)"
-msgstr "套件安è£æ™‚åˆ—å° Hash 標記 (å’Œ -v 一起用會更好)"
+msgstr "軟體包安è£æ™‚åˆ—å° Hash 標記 (å’Œ -v 一起用會更好)"
-#: lib/poptI.c:153
+#: lib/poptI.c:157
msgid "don't verify package architecture"
-msgstr "ä¸è¦æ ¡é©—套件架構"
+msgstr "ä¸è¦æ ¡é©—軟體包架構"
-#: lib/poptI.c:156
+#: lib/poptI.c:160
msgid "don't verify package operating system"
msgstr "ä¸è¦æ ¡é©—套間作葉系統"
-#: lib/poptI.c:159
+#: lib/poptI.c:163
msgid "don't check disk space before installing"
msgstr "安è£å‰ä¸æª¢æŸ¥ç£ç¢Ÿç©ºé–“"
-#: lib/poptI.c:161
+#: lib/poptI.c:165
msgid "install documentation"
msgstr "安è£æ–‡ä»¶"
-#: lib/poptI.c:164
+#: lib/poptI.c:168
msgid "install package(s)"
-msgstr "安è£å¥—件"
+msgstr "安è£è»Ÿé«”包"
-#: lib/poptI.c:167
+#: lib/poptI.c:171
msgid "update the database, but do not modify the filesystem"
msgstr "更新資料庫,但ä¸ä¿®æ”¹æª”案系統"
-#: lib/poptI.c:173
+#: lib/poptI.c:177
msgid "do not verify package dependencies"
-msgstr "ä¸æ ¡é©—套件相ä¾æ€§"
+msgstr "ä¸æ ¡é©—軟體包相ä¾æ€§"
-#: lib/poptI.c:179 lib/poptQV.c:207 lib/poptQV.c:209
+#: lib/poptI.c:183 lib/poptQV.c:236 lib/poptQV.c:238
msgid "don't verify digest of files"
msgstr "ä¸è¦æ ¡é©—檔案的摘è¦"
-#: lib/poptI.c:181
+#: lib/poptI.c:185
msgid "don't verify digest of files (obsolete)"
msgstr "ä¸è¦é©—è­‰æª”æ¡ˆçš„æ‘˜è¦ (棄用)"
-#: lib/poptI.c:183
+#: lib/poptI.c:187
msgid "don't install file security contexts"
msgstr "ä¸å®‰è£æª”案安全情境資料"
-#: lib/poptI.c:187
+#: lib/poptI.c:189
+msgid "don't install file capabilities"
+msgstr ""
+
+#: lib/poptI.c:193
msgid "do not reorder package installation to satisfy dependencies"
-msgstr "ä¸é‡æ–°æŽ’列套件安è£é †åºä»¥æ»¿è¶³ç›¸ä¾é—œä¿‚"
+msgstr "ä¸é‡æ–°æŽ’列軟體包安è£é †åºä»¥æ»¿è¶³ç›¸ä¾é—œä¿‚"
-#: lib/poptI.c:191
+#: lib/poptI.c:197
msgid "do not execute package scriptlet(s)"
-msgstr "ä¸åŸ·è¡Œå¥—件指令稿片段"
+msgstr "ä¸åŸ·è¡Œè»Ÿé«”包指令稿片段"
-#: lib/poptI.c:195
+#: lib/poptI.c:201
#, c-format
msgid "do not execute %%pre scriptlet (if any)"
msgstr "ä¸åŸ·è¡Œ %%pre 指令稿稿片段 (如果有)"
-#: lib/poptI.c:198
+#: lib/poptI.c:204
#, c-format
msgid "do not execute %%post scriptlet (if any)"
msgstr "ä¸åŸ·è¡Œ %%post 指令稿片段 (如果有)"
-#: lib/poptI.c:201
+#: lib/poptI.c:207
#, c-format
msgid "do not execute %%preun scriptlet (if any)"
msgstr "ä¸åŸ·è¡Œ %%preun 指令稿片段 (如果有)"
-#: lib/poptI.c:204
+#: lib/poptI.c:210
#, c-format
msgid "do not execute %%postun scriptlet (if any)"
msgstr "ä¸åŸ·è¡Œ%%postun 指令稿片段 (如果有)"
-#: lib/poptI.c:207
+#: lib/poptI.c:213
+#, c-format
+msgid "do not execute %%pretrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:216
+#, c-format
+msgid "do not execute %%posttrans scriptlet (if any)"
+msgstr ""
+
+#: lib/poptI.c:219
msgid "do not execute any scriptlet(s) triggered by this package"
-msgstr "ä¸åŸ·è¡Œä»»ä½•æ­¤å¥—件觸發的指令稿片段"
+msgstr "ä¸åŸ·è¡Œä»»ä½•æ­¤è»Ÿé«”包觸發的指令稿片段"
-#: lib/poptI.c:210
+#: lib/poptI.c:222
#, c-format
msgid "do not execute any %%triggerprein scriptlet(s)"
msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerprein 指令稿片段"
-#: lib/poptI.c:213
+#: lib/poptI.c:225
#, c-format
msgid "do not execute any %%triggerin scriptlet(s)"
msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerin 指令稿片段"
-#: lib/poptI.c:216
+#: lib/poptI.c:228
#, c-format
msgid "do not execute any %%triggerun scriptlet(s)"
msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerun 指令稿片段"
-#: lib/poptI.c:219
+#: lib/poptI.c:231
#, c-format
msgid "do not execute any %%triggerpostun scriptlet(s)"
msgstr "ä¸åŸ·è¡Œä»»ä½• %%triggerpostun 指令稿片段"
-#: lib/poptI.c:223
-msgid "do not perform any collection actions"
-msgstr ""
-
-#: lib/poptI.c:227
+#: lib/poptI.c:235
msgid ""
"upgrade to an old version of the package (--force on upgrades does this "
"automatically)"
-msgstr "å‡ç´šåˆ°å¥—件的舊版本 (在å‡ç´šä½œæ¥­ä¸­åŠ å…¥ --force 會自動進行)"
+msgstr "å‡ç´šåˆ°è»Ÿé«”包的舊版本 (在å‡ç´šä½œæ¥­ä¸­åŠ å…¥ --force 會自動進行)"
-#: lib/poptI.c:231
+#: lib/poptI.c:239
msgid "print percentages as package installs"
-msgstr "當套件安è£æ™‚列å°é€²åº¦ç™¾åˆ†æ¯”"
+msgstr "當軟體包安è£æ™‚列å°é€²åº¦ç™¾åˆ†æ¯”"
-#: lib/poptI.c:233
+#: lib/poptI.c:241
msgid "relocate the package to <dir>, if relocatable"
-msgstr "如果å¯ä»¥é‡æ–°åˆ†é…ä½ç½®ï¼Œä¾¿æŠŠå¥—件é‡æ–°åˆ†é…至 <dir>"
+msgstr "如果å¯ä»¥é‡æ–°åˆ†é…ä½ç½®ï¼Œä¾¿æŠŠè»Ÿé«”包é‡æ–°åˆ†é…至 <dir>"
-#: lib/poptI.c:234
+#: lib/poptI.c:242
msgid "<dir>"
msgstr "<dir>"
-#: lib/poptI.c:236
+#: lib/poptI.c:244
msgid "relocate files from path <old> to <new>"
msgstr "將檔案從路徑 <old> é‡æ–°é…置到 <new>"
-#: lib/poptI.c:237
+#: lib/poptI.c:245
msgid "<old>=<new>"
msgstr "<old>=<new>"
-#: lib/poptI.c:240
+#: lib/poptI.c:248
msgid "ignore file conflicts between packages"
-msgstr "忽略套件之間的檔案è¡çª"
+msgstr "忽略軟體包之間的檔案è¡çª"
-#: lib/poptI.c:243
+#: lib/poptI.c:251
msgid "reinstall if the package is already present"
-msgstr "如果套件已經存在則é‡æ–°å®‰è£"
+msgstr "如果軟體包已經存在則é‡æ–°å®‰è£"
-#: lib/poptI.c:245
+#: lib/poptI.c:253
msgid "don't install, but tell if it would work or not"
msgstr "ä¸å®‰è£ï¼Œåªå›žå ±ä½œæ¥­æ˜¯å¦èƒ½é‹ä½œ"
-#: lib/poptI.c:248
+#: lib/poptI.c:256
msgid "upgrade package(s)"
-msgstr "å‡ç´šå¥—件"
+msgstr "å‡ç´šè»Ÿé«”包"
-#: lib/poptQV.c:67
+#: lib/poptI.c:260
+msgid "reinstall package(s)"
+msgstr ""
+
+#: lib/poptQV.c:75
msgid "query/verify all packages"
-msgstr "查詢/校驗所有套件"
+msgstr "查詢/校驗所有軟體包"
-#: lib/poptQV.c:69
+#: lib/poptQV.c:77
msgid "rpm checksig mode"
msgstr "rpm 檢查簽署模å¼"
-#: lib/poptQV.c:71
+#: lib/poptQV.c:79
msgid "query/verify package(s) owning file"
-msgstr "查詢/校驗套件æ“有的檔案"
+msgstr "查詢/校驗軟體包æ“有的檔案"
-#: lib/poptQV.c:73
+#: lib/poptQV.c:81
msgid "query/verify package(s) in group"
-msgstr "查詢/校驗套件所屬的群組"
+msgstr "查詢/校驗軟體包所屬的群組"
-#: lib/poptQV.c:75
+#: lib/poptQV.c:83
msgid "query/verify a package file"
-msgstr "查詢/校驗一個套件檔案"
+msgstr "查詢/校驗一個軟體包檔案"
-#: lib/poptQV.c:78
+#: lib/poptQV.c:86
msgid "query/verify package(s) with package identifier"
-msgstr "以套件的識別符查詢/校驗套件"
+msgstr "以軟體包的識別符查詢/校驗軟體包"
-#: lib/poptQV.c:80
+#: lib/poptQV.c:88
msgid "query/verify package(s) with header identifier"
-msgstr "以表頭識別符查詢/校驗套件"
+msgstr "以表頭識別符查詢/校驗軟體包"
-#: lib/poptQV.c:83
+#: lib/poptQV.c:91
msgid "rpm query mode"
msgstr "rpm 查詢模å¼"
-#: lib/poptQV.c:85
+#: lib/poptQV.c:93
msgid "query/verify a header instance"
msgstr "查詢/驗證表頭實體"
-#: lib/poptQV.c:87
+#: lib/poptQV.c:95
msgid "query/verify package(s) from install transaction"
-msgstr "從安è£è™•ç†äº‹é …查詢/驗證套件"
+msgstr "從安è£è™•ç†äº‹é …查詢/驗證軟體包"
-#: lib/poptQV.c:89
+#: lib/poptQV.c:97
msgid "query the package(s) triggered by the package"
-msgstr "查詢套件所觸發的套件"
+msgstr "查詢軟體包所觸發的軟體包"
-#: lib/poptQV.c:91
+#: lib/poptQV.c:99
msgid "rpm verify mode"
msgstr "rpm 校驗模å¼"
-#: lib/poptQV.c:93
+#: lib/poptQV.c:101
msgid "query/verify the package(s) which require a dependency"
-msgstr "查詢/校驗需è¦æŸäº›ç›¸ä¾å¥—件的套件"
+msgstr "查詢/校驗需è¦æŸäº›ç›¸ä¾è»Ÿé«”包的軟體包"
-#: lib/poptQV.c:95
+#: lib/poptQV.c:103
msgid "query/verify the package(s) which provide a dependency"
-msgstr "查詢/æ ¡é©—æä¾›æŸäº›ç›¸ä¾å¥—件的套件"
+msgstr "查詢/æ ¡é©—æä¾›æŸäº›ç›¸ä¾è»Ÿé«”包的軟體包"
+
+#: lib/poptQV.c:105
+msgid "query/verify the package(s) which recommends a dependency"
+msgstr ""
+
+#: lib/poptQV.c:107
+msgid "query/verify the package(s) which suggests a dependency"
+msgstr ""
+
+#: lib/poptQV.c:109
+msgid "query/verify the package(s) which supplements a dependency"
+msgstr ""
+
+#: lib/poptQV.c:111
+msgid "query/verify the package(s) which enhances a dependency"
+msgstr ""
-#: lib/poptQV.c:98
+#: lib/poptQV.c:114
msgid "do not glob arguments"
msgstr "ä¸ä»¥ glob 解æžå¼•æ•¸"
-#: lib/poptQV.c:100
+#: lib/poptQV.c:116
msgid "do not process non-package files as manifests"
-msgstr "ä¸ä»¥ manifest 處ç†éžå¥—件檔案"
+msgstr "ä¸ä»¥ manifest 處ç†éžè»Ÿé«”包檔案"
-#: lib/poptQV.c:172
+#: lib/poptQV.c:193
msgid "list all configuration files"
msgstr "列出所有組態檔案"
-#: lib/poptQV.c:174
+#: lib/poptQV.c:195
msgid "list all documentation files"
msgstr "列出所有文件檔案"
-#: lib/poptQV.c:176
-#, fuzzy
+#: lib/poptQV.c:197
msgid "list all license files"
-msgstr "列出所有文件檔案"
+msgstr ""
+
+#: lib/poptQV.c:199
+#, fuzzy
+msgid "list all artifact files"
+msgstr "列出所有組態檔案"
-#: lib/poptQV.c:178
+#: lib/poptQV.c:201
msgid "dump basic file information"
msgstr "傾å°åŸºæœ¬æª”案資訊"
-#: lib/poptQV.c:182
+#: lib/poptQV.c:205
msgid "list files in package"
-msgstr "列出套件內的檔案"
+msgstr "列出軟體包內的檔案"
-#: lib/poptQV.c:187
+#: lib/poptQV.c:210
#, c-format
msgid "skip %%ghost files"
msgstr "ç•¥éŽ %%ghost 檔案"
-#: lib/poptQV.c:194
+#: lib/poptQV.c:213
+#, c-format
+msgid "skip %%config files"
+msgstr ""
+
+#: lib/poptQV.c:216
+#, fuzzy, c-format
+msgid "skip %%artifact files"
+msgstr "ç•¥éŽ %%ghost 檔案"
+
+#: lib/poptQV.c:223
msgid "display the states of the listed files"
msgstr "顯示列出的檔案的狀態"
-#: lib/poptQV.c:212
+#: lib/poptQV.c:241
msgid "don't verify size of files"
msgstr "ä¸æ ¡é©—檔案大å°"
-#: lib/poptQV.c:215
+#: lib/poptQV.c:244
msgid "don't verify symlink path of files"
msgstr "ä¸æ ¡é©—檔案的符號連çµè·¯å¾‘"
-#: lib/poptQV.c:218
+#: lib/poptQV.c:247
msgid "don't verify owner of files"
msgstr "ä¸æ ¡é©—檔案的æ“有者"
-#: lib/poptQV.c:221
+#: lib/poptQV.c:250
msgid "don't verify group of files"
msgstr "ä¸æ ¡é©—檔案的群組"
-#: lib/poptQV.c:224
+#: lib/poptQV.c:253
msgid "don't verify modification time of files"
msgstr "ä¸æ ¡é©—檔案的修改時間"
-#: lib/poptQV.c:227 lib/poptQV.c:230
+#: lib/poptQV.c:256 lib/poptQV.c:259
msgid "don't verify mode of files"
msgstr "ä¸æ ¡é©—檔案的模å¼"
-#: lib/poptQV.c:233
-msgid "don't verify capabilities of files"
-msgstr ""
-
-#: lib/poptQV.c:236
+#: lib/poptQV.c:262
msgid "don't verify file security contexts"
msgstr "ä¸æ ¡é©—檔案的安全情境"
-#: lib/poptQV.c:238
+#: lib/poptQV.c:264
+msgid "don't verify capabilities of files"
+msgstr ""
+
+#: lib/poptQV.c:266
msgid "don't verify files in package"
-msgstr "ä¸æ ¡é©—套件內的檔案"
+msgstr "ä¸æ ¡é©—軟體包內的檔案"
-#: lib/poptQV.c:240 tools/rpmgraph.c:218
+#: lib/poptQV.c:268 tools/rpmgraph.c:217
msgid "don't verify package dependencies"
-msgstr "ä¸æ ¡é©—套件的相ä¾é—œä¿‚"
+msgstr "ä¸æ ¡é©—軟體包的相ä¾é—œä¿‚"
-#: lib/poptQV.c:243 lib/poptQV.c:246
+#: lib/poptQV.c:271 lib/poptQV.c:274
msgid "don't execute verify script(s)"
msgstr "ä¸åŸ·è¡Œæ ¡é©—指令稿"
-#: lib/psm.c:212
+#: lib/psm.c:146
#, c-format
msgid "Missing rpmlib features for %s:\n"
msgstr ""
-#: lib/psm.c:254
+#: lib/psm.c:183
msgid "source package expected, binary found\n"
-msgstr "é æœŸæ˜¯æºç¢¼å¥—件,但å»æ‰¾åˆ°äºŒé€²ä½å¥—件\n"
+msgstr "é æœŸæ˜¯æºç¢¼è»Ÿé«”包,但å»æ‰¾åˆ°äºŒé€²ä½è»Ÿé«”包\n"
-#: lib/psm.c:307
+#: lib/psm.c:194
msgid "source package contains no .spec file\n"
-msgstr "æºç¢¼å¥—ä»¶å…§æœªåŒ…å« .spec 檔案\n"
+msgstr "æºç¢¼è»Ÿé«”åŒ…å…§æœªåŒ…å« .spec 檔案\n"
-#: lib/psm.c:836
+#: lib/psm.c:606
#, c-format
msgid "unpacking of archive failed%s%s: %s\n"
msgstr "解包å°å­˜æª”失敗 %s%s:%s\n"
-#: lib/psm.c:837
+#: lib/psm.c:607
msgid " on file "
msgstr " 於檔案 "
-#: lib/psm.c:941
-#, c-format
-msgid "%s failed on file %s: %s\n"
-msgstr "%2$s 檔案 %1$s 失敗:%3$s\n"
-
-#: lib/psm.c:944
-#, c-format
-msgid "%s failed: %s\n"
-msgstr "%s 失敗:%s\n"
-
-#: lib/query.c:111
+#: lib/query.c:108
#, c-format
msgid "incorrect format: %s\n"
msgstr "æ ¼å¼ä¸æ­£ç¢ºï¼š%s\n"
-#: lib/query.c:123
+#: lib/query.c:120
msgid "(contains no files)\n"
msgstr "(未包å«æª”案)\n"
-#: lib/query.c:160
+#: lib/query.c:161
msgid "normal "
msgstr "正常 "
-#: lib/query.c:163
+#: lib/query.c:164
msgid "replaced "
msgstr "è¢«æ›¿æ› "
-#: lib/query.c:166
+#: lib/query.c:167
msgid "not installed "
msgstr "æœªå®‰è£ "
-#: lib/query.c:169
+#: lib/query.c:170
msgid "net shared "
msgstr "已網路共享 "
-#: lib/query.c:172
+#: lib/query.c:173
msgid "wrong color "
msgstr "錯誤色彩 "
-#: lib/query.c:175
+#: lib/query.c:176
msgid "(no state) "
msgstr "(無狀態) "
-#: lib/query.c:178
+#: lib/query.c:179
#, c-format
msgid "(unknown %3d) "
msgstr "(未知的 %3d) "
-#: lib/query.c:198
+#: lib/query.c:199
msgid "package has not file owner/group lists\n"
-msgstr "套件內沒有檔案æ“有者/群組記錄\n"
+msgstr "軟體包內沒有檔案æ“有者/群組記錄\n"
-#: lib/query.c:229
+#: lib/query.c:233
msgid "package has neither file owner or id lists\n"
-msgstr "套件內沒有檔案æ“æœ‰è€…åŠ ID 清單\n"
+msgstr "軟體包內沒有檔案æ“æœ‰è€…åŠ ID 清單\n"
-#: lib/query.c:318
+#: lib/query.c:321
#, c-format
msgid "group %s does not contain any packages\n"
-msgstr "群組 %s å…§ä¸åŒ…å«ä»»ä½•å¥—件\n"
+msgstr "群組 %s å…§ä¸åŒ…å«ä»»ä½•è»Ÿé«”包\n"
-#: lib/query.c:325
+#: lib/query.c:328
#, c-format
msgid "no package triggers %s\n"
-msgstr "沒有套件會觸發 %s\n"
+msgstr "沒有軟體包會觸發 %s\n"
-#: lib/query.c:336 lib/query.c:355 lib/query.c:371
+#: lib/query.c:339 lib/query.c:358 lib/query.c:374
#, c-format
msgid "malformed %s: %s\n"
msgstr "æ ¼å¼ä¸è‰¯çš„ %s:%s\n"
-#: lib/query.c:346 lib/query.c:361 lib/query.c:376
+#: lib/query.c:349 lib/query.c:364 lib/query.c:379
#, c-format
msgid "no package matches %s: %s\n"
-msgstr "æ²’æœ‰å¥—ä»¶ç¬¦åˆ %s:%s\n"
+msgstr "æ²’æœ‰è»Ÿé«”åŒ…ç¬¦åˆ %s:%s\n"
-#: lib/query.c:384
+#: lib/query.c:387
#, c-format
msgid "no package requires %s\n"
-msgstr "æ²’æœ‰å¥—ä»¶éœ€è¦ %s\n"
+msgstr "æ²’æœ‰è»Ÿé«”åŒ…éœ€è¦ %s\n"
+
+#: lib/query.c:394
+#, c-format
+msgid "no package recommends %s\n"
+msgstr ""
+
+#: lib/query.c:401
+#, c-format
+msgid "no package suggests %s\n"
+msgstr ""
+
+#: lib/query.c:408
+#, c-format
+msgid "no package supplements %s\n"
+msgstr ""
-#: lib/query.c:392
+#: lib/query.c:415
+#, c-format
+msgid "no package enhances %s\n"
+msgstr ""
+
+#: lib/query.c:423
#, c-format
msgid "no package provides %s\n"
-msgstr "沒有套件æä¾› %s\n"
+msgstr "沒有軟體包æä¾› %s\n"
-#: lib/query.c:424
+#: lib/query.c:455
#, c-format
msgid "file %s: %s\n"
msgstr "檔案 %s:%s\n"
-#: lib/query.c:427
+#: lib/query.c:458
#, c-format
msgid "file %s is not owned by any package\n"
-msgstr "檔案 %s ä¸è¢«ä»»ä½•å¥—件æ“有\n"
+msgstr "檔案 %s ä¸è¢«ä»»ä½•è»Ÿé«”包æ“有\n"
-#: lib/query.c:438
+#: lib/query.c:469
#, c-format
msgid "invalid package number: %s\n"
-msgstr "無效的套件編號:%s\n"
+msgstr "無效的軟體包編號:%s\n"
-#: lib/query.c:445
+#: lib/query.c:476
#, c-format
msgid "record %u could not be read\n"
msgstr ""
-#: lib/query.c:458 lib/rpminstall.c:654
+#: lib/query.c:491 lib/rpminstall.c:690
#, c-format
msgid "package %s is not installed\n"
-msgstr "套件 %s 尚未安è£\n"
+msgstr "軟體包 %s 尚未安è£\n"
-#: lib/query.c:492
+#: lib/query.c:525
#, c-format
msgid "unknown tag: \"%s\"\n"
msgstr "未知的標籤:「%sã€\n"
-#: lib/rpmchecksig.c:44
+#: lib/rpmchecksig.c:50 lib/rpmchecksig.c:58
#, c-format
msgid "%s: key %d import failed.\n"
msgstr ""
-#: lib/rpmchecksig.c:48
+#: lib/rpmchecksig.c:66
#, c-format
msgid "%s: key %d not an armored public key.\n"
msgstr ""
-#: lib/rpmchecksig.c:93
+#: lib/rpmchecksig.c:111
#, c-format
msgid "%s: import read failed(%d).\n"
msgstr "%s:匯入時讀å–失敗(%d)。\n"
-#: lib/rpmchecksig.c:119
+#: lib/rpmchecksig.c:131
#, c-format
-msgid "%s: headerRead failed: %s\n"
+msgid "Fread failed: %s"
msgstr ""
-#: lib/rpmchecksig.c:128
-#, c-format
-msgid "%s: Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmchecksig.c:262
+msgid "DIGESTS"
+msgstr ""
+
+#: lib/rpmchecksig.c:262
+msgid "digests"
+msgstr ""
+
+#: lib/rpmchecksig.c:266
+msgid "SIGNATURES"
msgstr ""
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:266
+msgid "signatures"
+msgstr ""
+
+#: lib/rpmchecksig.c:268
msgid "NOT OK"
msgstr "ä¸æ­£ç¢º"
-#: lib/rpmchecksig.c:386
+#: lib/rpmchecksig.c:268
msgid "OK"
msgstr "正確"
-#: lib/rpmchecksig.c:388
-msgid " (MISSING KEYS:"
-msgstr " (éºå¤±çš„金鑰:"
-
-#: lib/rpmchecksig.c:390
-msgid ") "
-msgstr ") "
-
-#: lib/rpmchecksig.c:391
-msgid " (UNTRUSTED KEYS:"
-msgstr " (未å—信任的金鑰:"
-
-#: lib/rpmchecksig.c:393
-msgid ")"
-msgstr ")"
-
-#: lib/rpmchecksig.c:433 sign/rpmgensig.c:53
+#: lib/rpmchecksig.c:300 sign/rpmgensig.c:134
#, c-format
msgid "%s: open failed: %s\n"
msgstr "%s:開啟失敗:%s\n"
@@ -2431,212 +2795,441 @@ msgstr ""
msgid "Unable to restore root directory: %m\n"
msgstr ""
-#: lib/rpmds.c:489
+#: lib/rpmdb.c:72
+#, c-format
+msgid "Generating %d missing index(es), please wait...\n"
+msgstr ""
+
+#: lib/rpmdb.c:167 lib/rpmdb.c:213
+#, c-format
+msgid "cannot open %s index using %s - %s (%d)\n"
+msgstr ""
+
+#: lib/rpmdb.c:462
+msgid "no dbpath has been set\n"
+msgstr "尚未設定 dbpath\n"
+
+#: lib/rpmdb.c:972
+msgid "miFreeHeader: skipping"
+msgstr "miFreeHeader:跳éŽ"
+
+#: lib/rpmdb.c:988
+#, c-format
+msgid "error(%d) storing record #%d into %s\n"
+msgstr "儲存記錄 #%2$d 到 %3$s 時發生錯誤(%1$d)\n"
+
+#: lib/rpmdb.c:1100
+#, c-format
+msgid "%s: regexec failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1281
+#, c-format
+msgid "%s: regcomp failed: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:1444
+msgid "rpmdbNextIterator: skipping"
+msgstr "rpmdbNextIterator:跳éŽ"
+
+#: lib/rpmdb.c:1531
+#, c-format
+msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
+msgstr "rpmdb:已擷å–æ壞的表頭 #%u -- è·³éŽã€‚\n"
+
+#: lib/rpmdb.c:2061
+#, c-format
+msgid "%s: cannot read header at 0x%x\n"
+msgstr "%s:無法讀å–ä½æ–¼ 0x%x 的表頭\n"
+
+#: lib/rpmdb.c:2412
+msgid "could not move new database in place\n"
+msgstr ""
+
+#: lib/rpmdb.c:2415
+#, c-format
+msgid "could also not restore old database from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2417 lib/rpmdb.c:2603
+#, c-format
+msgid "replace files in %s with files from %s to recover\n"
+msgstr ""
+
+#: lib/rpmdb.c:2426
+#, c-format
+msgid "Could not get public keys from %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2433
+#, c-format
+msgid "could not delete old database at %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2502
+msgid "no dbpath has been set"
+msgstr "尚未設定 dbpath"
+
+#: lib/rpmdb.c:2520
+#, c-format
+msgid "failed to create directory %s: %s\n"
+msgstr ""
+
+#: lib/rpmdb.c:2557
+#, c-format
+msgid "header #%u in the database is bad -- skipping.\n"
+msgstr "在資料庫中有ä¸è‰¯çš„表頭 #%u -- è·³éŽã€‚\n"
+
+#: lib/rpmdb.c:2572
+#, c-format
+msgid "cannot add record originally at %u\n"
+msgstr "無法加入原本ä½æ–¼ %u 的記錄\n"
+
+#: lib/rpmdb.c:2588
+msgid "failed to rebuild database: original database remains in place\n"
+msgstr "é‡å»ºè³‡æ–™åº«æ™‚失敗:原來的資料庫ä¿æŒåŽŸç‹€\n"
+
+#: lib/rpmdb.c:2601
+msgid "failed to replace old database with new database!\n"
+msgstr "以新的資料庫å–代舊的資料庫時失敗ï¼\n"
+
+#: lib/rpmds.c:744
msgid "NO "
msgstr "å¦ "
-#: lib/rpmds.c:489
+#: lib/rpmds.c:744
msgid "YES"
msgstr "是"
-#: lib/rpmds.c:933
+#: lib/rpmds.c:1221
msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions."
msgstr "PreReq:ã€Provides:ã€ä»¥åŠ Obsoletes: 相ä¾æ€§æ”¯æ´ç‰ˆæœ¬ã€‚"
-#: lib/rpmds.c:936
+#: lib/rpmds.c:1224
msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path."
msgstr "檔案å稱儲存為 (dirNameã€baseNameã€dirIndex) 字組,而éžè·¯å¾‘。"
-#: lib/rpmds.c:940
+#: lib/rpmds.c:1228
msgid "package payload can be compressed using bzip2."
-msgstr "套件酬載å¯ä»¥ä½¿ç”¨ bzip2 壓縮。"
+msgstr "軟體包酬載å¯ä»¥ä½¿ç”¨ bzip2 壓縮。"
-#: lib/rpmds.c:945
+#: lib/rpmds.c:1233
msgid "package payload can be compressed using xz."
msgstr ""
-#: lib/rpmds.c:948
+#: lib/rpmds.c:1236
msgid "package payload can be compressed using lzma."
msgstr ""
-#: lib/rpmds.c:952
+#: lib/rpmds.c:1240
msgid "package payload file(s) have \"./\" prefix."
-msgstr "套件酬載檔案有「./ã€å‰ç¶´ã€‚"
+msgstr "軟體包酬載檔案有「./ã€å‰ç¶´ã€‚"
-#: lib/rpmds.c:955
+#: lib/rpmds.c:1243
msgid "package name-version-release is not implicitly provided."
-msgstr "套件的「å稱-版本-發行編號ã€æ²’有隱å«æ€§åœ°æ供。"
+msgstr "軟體包的「å稱-版本-發行編號ã€æ²’有隱å«æ€§åœ°æ供。"
-#: lib/rpmds.c:958
+#: lib/rpmds.c:1246
msgid "header tags are always sorted after being loaded."
msgstr "表頭標籤總在載入之後排åºã€‚"
-#: lib/rpmds.c:961
+#: lib/rpmds.c:1249
msgid "the scriptlet interpreter can use arguments from header."
msgstr "指令稿片段解譯器å¯ä»¥ä½¿ç”¨ä¾†è‡ªè¡¨é ­çš„引數。"
-#: lib/rpmds.c:964
+#: lib/rpmds.c:1252
msgid "a hardlink file set may be installed without being complete."
msgstr "硬éˆçµæª”案組也許沒有被完整安è£ã€‚"
-#: lib/rpmds.c:967
+#: lib/rpmds.c:1255
msgid "package scriptlets may access the rpm database while installing."
-msgstr "套件指令稿片段在安è£éŽç¨‹ä¸­å¯ä»¥å­˜å– rpm 資料庫。"
+msgstr "軟體包指令稿片段在安è£éŽç¨‹ä¸­å¯ä»¥å­˜å– rpm 資料庫。"
-#: lib/rpmds.c:971
+#: lib/rpmds.c:1259
msgid "internal support for lua scripts."
msgstr "lua 指令稿的內部支æ´ã€‚"
-#: lib/rpmds.c:975
+#: lib/rpmds.c:1263
msgid "file digest algorithm is per package configurable"
msgstr ""
-#: lib/rpmds.c:979
+#: lib/rpmds.c:1267
msgid "support for POSIX.1e file capabilities"
msgstr ""
-#: lib/rpmds.c:983
+#: lib/rpmds.c:1271
msgid "package scriptlets can be expanded at install time."
msgstr ""
-#: lib/rpmds.c:986
+#: lib/rpmds.c:1274
msgid "dependency comparison supports versions with tilde."
msgstr ""
-#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:308
-#: lib/rpminstall.c:337 tools/rpmgraph.c:92 tools/rpmgraph.c:129
+#: lib/rpmds.c:1277
+msgid "support files larger than 4GB"
+msgstr ""
+
+#: lib/rpmds.c:1280
+msgid "support for rich dependencies."
+msgstr ""
+
+#: lib/rpmds.c:1284
+msgid "package payload can be compressed using zstd."
+msgstr ""
+
+#: lib/rpmds.c:1410
+#, c-format
+msgid "Unknown rich dependency op '%.*s'"
+msgstr ""
+
+#: lib/rpmds.c:1451
+msgid "Name required"
+msgstr ""
+
+#: lib/rpmds.c:1488
+msgid "Illegal ops in with/without"
+msgstr ""
+
+#: lib/rpmds.c:1495
+msgid "Illegal context for 'unless', please use 'or' instead"
+msgstr ""
+
+#: lib/rpmds.c:1500
+msgid "Illegal context for 'if', please use 'and' instead"
+msgstr ""
+
+#: lib/rpmds.c:1516
+msgid "Rich dependency does not start with '('"
+msgstr ""
+
+#: lib/rpmds.c:1524
+msgid "Missing argument to rich dependency op"
+msgstr ""
+
+#: lib/rpmds.c:1526
+msgid "Empty rich dependency"
+msgstr ""
+
+#: lib/rpmds.c:1544
+#, c-format
+msgid "Unterminated rich dependency: %s"
+msgstr ""
+
+#: lib/rpmds.c:1559
+msgid "Cannot chain different ops"
+msgstr ""
+
+#: lib/rpmds.c:1564
+msgid "Can only chain and/or/with ops"
+msgstr ""
+
+#: lib/rpmds.c:1695
+msgid "Junk after rich dependency"
+msgstr ""
+
+#: lib/rpmfi.c:810
+#, c-format
+msgid "user %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:817
+#, c-format
+msgid "group %s does not exist - using %s\n"
+msgstr ""
+
+#: lib/rpmfi.c:1374
+#, c-format
+msgid "Wrong number of entries for tag %s: %u found but %u expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:1379
+#, c-format
+msgid "Malformed data for tag %s: %u bytes found but %lu expected.\n"
+msgstr ""
+
+#: lib/rpmfi.c:2348
+msgid "Bad magic"
+msgstr "ä¸è‰¯é­”法數字"
+
+#: lib/rpmfi.c:2349
+msgid "Bad/unreadable header"
+msgstr "ä¸è‰¯æˆ–無法讀å–的表頭"
+
+#: lib/rpmfi.c:2372
+msgid "Header size too big"
+msgstr "表頭大å°éŽå¤§"
+
+#: lib/rpmfi.c:2373
+msgid "File too large for archive"
+msgstr ""
+
+#: lib/rpmfi.c:2374
+msgid "Unknown file type"
+msgstr "未知檔案類型"
+
+#: lib/rpmfi.c:2375
+msgid "Missing file(s)"
+msgstr ""
+
+#: lib/rpmfi.c:2376
+msgid "Digest mismatch"
+msgstr "摘è¦ä¸ç¬¦"
+
+#: lib/rpmfi.c:2377
+msgid "Internal error"
+msgstr "內部錯誤"
+
+#: lib/rpmfi.c:2378
+msgid "Archive file not in header"
+msgstr "在表頭中沒有å°å­˜æª”"
+
+#: lib/rpmfi.c:2382
+msgid "File from package already exists as a directory in system"
+msgstr ""
+
+#: lib/rpmfi.c:2389
+msgid " failed - "
+msgstr " 失敗 - "
+
+#: lib/rpmfi.c:2392
+#, c-format
+msgid "%s: (error 0x%x)"
+msgstr ""
+
+#: lib/rpmgi.c:55 lib/rpminstall.c:116 lib/rpminstall.c:309
+#: lib/rpminstall.c:341 tools/rpmgraph.c:91 tools/rpmgraph.c:128
#, c-format
msgid "open of %s failed: %s\n"
msgstr "開啟 %s 失敗:%s\n"
-#: lib/rpmgi.c:136
+#: lib/rpmgi.c:144
+#, c-format
+msgid "Max level of manifest recursion exceeded: %s\n"
+msgstr ""
+
+#: lib/rpmgi.c:155
#, c-format
msgid "%s: not an rpm package (or package manifest)\n"
msgstr ""
-#: lib/rpminstall.c:141
+#: lib/rpminstall.c:142
#, c-format
msgid "Updating / installing...\n"
msgstr ""
-#: lib/rpminstall.c:143
+#: lib/rpminstall.c:144
#, c-format
msgid "Cleaning up / removing...\n"
msgstr ""
-#: lib/rpminstall.c:192
+#: lib/rpminstall.c:193
msgid "Preparing..."
msgstr "正在準備…"
-#: lib/rpminstall.c:194
+#: lib/rpminstall.c:195
msgid "Preparing packages..."
msgstr ""
-#: lib/rpminstall.c:270 tools/rpmgraph.c:168
+#: lib/rpminstall.c:271 tools/rpmgraph.c:167
msgid "Failed dependencies:\n"
msgstr "相ä¾é—œä¿‚失敗:\n"
-#: lib/rpminstall.c:321
+#: lib/rpminstall.c:323
#, c-format
msgid "%s: not an rpm package (or package manifest): %s\n"
-msgstr "%s:ä¸æ˜¯ rpm 套件 (或套件 manifest):%s\n"
+msgstr "%s:ä¸æ˜¯ rpm 軟體包 (或軟體包 manifest):%s\n"
-#: lib/rpminstall.c:357 lib/rpminstall.c:716 tools/rpmgraph.c:112
+#: lib/rpminstall.c:362 lib/rpminstall.c:752 tools/rpmgraph.c:111
#, c-format
msgid "%s cannot be installed\n"
msgstr "%s 無法安è£\n"
-#: lib/rpminstall.c:464
+#: lib/rpminstall.c:490
#, c-format
msgid "Retrieving %s\n"
msgstr "æ­£åœ¨æ“·å– %s\n"
-#: lib/rpminstall.c:476
+#: lib/rpminstall.c:502
#, c-format
msgid "skipping %s - transfer failed\n"
msgstr ""
-#: lib/rpminstall.c:542
+#: lib/rpminstall.c:572
#, c-format
msgid "package %s is not relocatable\n"
-msgstr "套件 %s ä¸èƒ½é‡æ–°åˆ†é…ä½ç½®\n"
+msgstr "軟體包 %s ä¸èƒ½é‡æ–°åˆ†é…ä½ç½®\n"
-#: lib/rpminstall.c:570
+#: lib/rpminstall.c:603
#, c-format
msgid "error reading from file %s\n"
msgstr "讀å–檔案 %s 時發生錯誤\n"
-#: lib/rpminstall.c:661
+#: lib/rpminstall.c:697
#, c-format
msgid "\"%s\" specifies multiple packages:\n"
-msgstr "「%sã€æŒ‡å®šå¤šå€‹å¥—件:\n"
+msgstr "「%sã€æŒ‡å®šå¤šå€‹è»Ÿé«”包:\n"
-#: lib/rpminstall.c:700
+#: lib/rpminstall.c:736
#, c-format
msgid "cannot open %s: %s\n"
msgstr "無法開啟 %s:%s\n"
-#: lib/rpminstall.c:706
+#: lib/rpminstall.c:742
#, c-format
msgid "Installing %s\n"
msgstr "æ­£åœ¨å®‰è£ %s\n"
-#: lib/rpmlead.c:100
+#: lib/rpmlead.c:95
msgid "not an rpm package"
-msgstr "ä¸¦éž rpm 套件"
+msgstr "ä¸¦éž rpm 軟體包"
-#: lib/rpmlead.c:104
+#: lib/rpmlead.c:99
msgid "illegal signature type"
msgstr "無效的簽署類型"
-#: lib/rpmlead.c:108
+#: lib/rpmlead.c:103
msgid "unsupported RPM package version"
-msgstr "未支æ´çš„ RPM 套件版本"
+msgstr "未支æ´çš„ RPM 軟體包版本"
-#: lib/rpmlead.c:123
+#: lib/rpmlead.c:118
#, c-format
msgid "read failed: %s (%d)\n"
msgstr "讀å–失敗:%s (%d)\n"
-#: lib/rpmlead.c:126
+#: lib/rpmlead.c:121
msgid "not an rpm package\n"
-msgstr "ä¸¦éž rpm 套件\n"
+msgstr "ä¸¦éž rpm 軟體包\n"
-#: lib/rpmlock.c:102 lib/rpmlock.c:109
+#: lib/rpmlock.c:119 lib/rpmlock.c:138
#, c-format
msgid "can't create %s lock on %s (%s)\n"
msgstr ""
-#: lib/rpmlock.c:106
+#: lib/rpmlock.c:133
#, c-format
msgid "waiting for %s lock on %s\n"
msgstr ""
-#: lib/rpmplugins.c:59
+#: lib/rpmplugins.c:65
#, c-format
msgid "Failed to dlopen %s %s\n"
msgstr ""
-#: lib/rpmplugins.c:66
+#: lib/rpmplugins.c:73
#, c-format
msgid "Failed to resolve symbol %s: %s\n"
msgstr ""
-#: lib/rpmplugins.c:87
+#: lib/rpmplugins.c:154
#, c-format
-msgid "Failed to expand %%__collection_%s macro\n"
+msgid "Plugin %%__%s_%s not configured\n"
msgstr ""
-#: lib/rpmplugins.c:136 lib/rpmplugins.c:141
+#: lib/rpmplugins.c:199
#, c-format
msgid "Plugin %s not loaded\n"
msgstr "%s æ’件未載入\n"
-#: lib/rpmplugins.c:149
-#, c-format
-msgid "Failed to resolve %s plugin symbol %s: %s\n"
-msgstr ""
-
#: lib/rpmprob.c:109
msgid "different"
msgstr "ä¸åŒ"
@@ -2644,22 +3237,22 @@ msgstr "ä¸åŒ"
#: lib/rpmprob.c:114
#, c-format
msgid "package %s is intended for a %s architecture"
-msgstr "套件 %s 是é‡å° %s 架構"
+msgstr "軟體包 %s 是é‡å° %s 架構"
#: lib/rpmprob.c:118
#, c-format
msgid "package %s is intended for a %s operating system"
-msgstr "套件 %s 是é‡å° %s 作業系統"
+msgstr "軟體包 %s 是é‡å° %s 作業系統"
#: lib/rpmprob.c:122
#, c-format
msgid "package %s is already installed"
-msgstr "套件 %s 已經安è£"
+msgstr "軟體包 %s 已經安è£"
#: lib/rpmprob.c:125
#, c-format
msgid "path %s in package %s is not relocatable"
-msgstr "在套件 %2$s 中的路徑 %1$s 無法é‡æ–°åˆ†é…ä½ç½®"
+msgstr "在軟體包 %2$s 中的路徑 %1$s 無法é‡æ–°åˆ†é…ä½ç½®"
#: lib/rpmprob.c:130
#, c-format
@@ -2669,12 +3262,12 @@ msgstr "åœ¨è©¦åœ–å®‰è£ %2$s å’Œ %3$s 之間產生檔案 %1$s è¡çª"
#: lib/rpmprob.c:135
#, c-format
msgid "file %s from install of %s conflicts with file from package %s"
-msgstr "從 %2$s 安è£çš„檔案 %1$s 與來自套件 %3$s 的檔案產生è¡çª"
+msgstr "從 %2$s 安è£çš„檔案 %1$s 與來自軟體包 %3$s 的檔案產生è¡çª"
#: lib/rpmprob.c:140
#, c-format
msgid "package %s (which is newer than %s) is already installed"
-msgstr "套件 %s (比 %s é‚„æ–°) 已經安è£"
+msgstr "軟體包 %s (比 %s é‚„æ–°) 已經安è£"
#: lib/rpmprob.c:145
#, c-format
@@ -2708,798 +3301,635 @@ msgstr ""
#: lib/rpmprob.c:172
#, c-format
msgid "unknown error %d encountered while manipulating package %s"
-msgstr "é­é‡æœªçŸ¥éŒ¯èª¤ %d 於處ç†å¥—件 %s 之時"
+msgstr "é­é‡æœªçŸ¥éŒ¯èª¤ %d 於處ç†è»Ÿé«”包 %s 之時"
-#: lib/rpmrc.c:194
+#: lib/rpmrc.c:222
#, c-format
msgid "missing second ':' at %s:%d\n"
msgstr "在 %s:%d 處éºæ¼ç¬¬äºŒå€‹ã€Œ:ã€\n"
-#: lib/rpmrc.c:197
+#: lib/rpmrc.c:225
#, c-format
msgid "missing architecture name at %s:%d\n"
msgstr "在 %s:%d 處éºæ¼æž¶æ§‹å稱\n"
-#: lib/rpmrc.c:342
+#: lib/rpmrc.c:370
#, c-format
msgid "Incomplete data line at %s:%d\n"
msgstr "ä¸å®Œæ•´è³‡æ–™åˆ—ä½æ–¼ %s:%d\n"
-#: lib/rpmrc.c:347
+#: lib/rpmrc.c:375
#, c-format
msgid "Too many args in data line at %s:%d\n"
msgstr "在資料列的 %s:%d 中有éŽå¤šå¼•æ•¸\n"
-#: lib/rpmrc.c:354
+#: lib/rpmrc.c:382
#, c-format
msgid "Bad arch/os number: %s (%s:%d)\n"
msgstr "ä¸è‰¯æž¶æ§‹/作業系統編號:%s (%s:%d)\n"
-#: lib/rpmrc.c:385
+#: lib/rpmrc.c:413
#, c-format
msgid "Incomplete default line at %s:%d\n"
msgstr "ä¸å®Œæ•´é è¨­åˆ—ä½æ–¼ %s:%d\n"
-#: lib/rpmrc.c:390
+#: lib/rpmrc.c:418
#, c-format
msgid "Too many args in default line at %s:%d\n"
msgstr "在é è¨­åˆ—çš„ %s:%d 中有éŽå¤šå¼•æ•¸\n"
-#: lib/rpmrc.c:495
+#: lib/rpmrc.c:523
#, c-format
msgid "missing ':' (found 0x%02x) at %s:%d\n"
msgstr "éºæ¼ã€Œ:ã€(找到 0x%02x) ä½æ–¼ %s:%d\n"
-#: lib/rpmrc.c:512 lib/rpmrc.c:544
+#: lib/rpmrc.c:540 lib/rpmrc.c:572
#, c-format
msgid "missing argument for %s at %s:%d\n"
msgstr "%s éºæ¼å¼•æ•¸ä½æ–¼ %s:%d\n"
-#: lib/rpmrc.c:523
+#: lib/rpmrc.c:551
#, c-format
msgid "cannot open %s at %s:%d: %m\n"
msgstr ""
-#: lib/rpmrc.c:536
+#: lib/rpmrc.c:564
#, c-format
msgid "missing architecture for %s at %s:%d\n"
msgstr "%s éºæ¼æž¶æ§‹ä½æ–¼ %s:%d\n"
-#: lib/rpmrc.c:603
+#: lib/rpmrc.c:632
#, c-format
msgid "bad option '%s' at %s:%d\n"
msgstr "ä¸è‰¯é¸é …「%sã€ä½æ–¼ %s:%d\n"
-#: lib/rpmrc.c:927
+#: lib/rpmrc.c:972
msgid "Failed to read auxiliary vector, /proc not mounted?\n"
msgstr ""
-#: lib/rpmrc.c:1349
+#: lib/rpmrc.c:1469
#, c-format
msgid "Unknown system: %s\n"
msgstr "未知系統:%s\n"
-#: lib/rpmrc.c:1350
+#: lib/rpmrc.c:1471
#, c-format
msgid "Please contact %s\n"
msgstr "è«‹è¯çµ¡ %s\n"
-#: lib/rpmrc.c:1591
+#: lib/rpmrc.c:1604
#, c-format
msgid "Unable to open %s for reading: %m.\n"
msgstr "無法開啟 %s 以供讀å–:%m。\n"
-#: lib/rpmscript.c:75
+#: lib/rpmrc.c:1622
+msgid "failed to register exit handler"
+msgstr ""
+
+#: lib/rpmscript.c:133
+msgid "No exec() called after fork() in lua scriptlet\n"
+msgstr ""
+
+#: lib/rpmscript.c:138
#, c-format
msgid "Unable to restore current directory: %m"
msgstr ""
-#: lib/rpmscript.c:86
+#: lib/rpmscript.c:149 rpmio/macro.c:855
msgid "<lua> scriptlet support not built in\n"
msgstr ""
-#: lib/rpmscript.c:221
+#: lib/rpmscript.c:278
#, c-format
msgid "Couldn't create temporary file for %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:248
+#: lib/rpmscript.c:313
#, c-format
msgid "Couldn't duplicate file descriptor: %s: %s\n"
msgstr ""
-#: lib/rpmscript.c:272
+#: lib/rpmscript.c:353
+#, c-format
+msgid "Fwrite failed: %s"
+msgstr ""
+
+#: lib/rpmscript.c:371
#, c-format
msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n"
msgstr ""
-#: lib/rpmscript.c:276
+#: lib/rpmscript.c:375
#, c-format
msgid "%s scriptlet failed, signal %d\n"
msgstr ""
-#: lib/rpmscript.c:279
+#: lib/rpmscript.c:378
#, c-format
msgid "%s scriptlet failed, exit status %d\n"
msgstr ""
-#: lib/rpmtd.c:258
+#: lib/rpmtd.c:248
msgid "Unknown format"
msgstr "未知格å¼"
-#: lib/rpmte.c:868
+#: lib/rpmte.c:729
msgid "install"
msgstr "安è£"
-#: lib/rpmte.c:869
+#: lib/rpmte.c:730
msgid "erase"
msgstr "抹除"
-#: lib/rpmts.c:92
+#: lib/rpmts.c:100
#, c-format
msgid "cannot open Packages database in %s\n"
-msgstr "無法開啟套件資料庫 %s\n"
+msgstr "無法開啟軟體包資料庫 %s\n"
-#: lib/rpmts.c:191
+#: lib/rpmts.c:199
#, c-format
msgid "extra '(' in package label: %s\n"
-msgstr "é¡å¤–的「(ã€å­˜åœ¨æ–¼å¥—件標籤中:%s\n"
+msgstr "é¡å¤–的「(ã€å­˜åœ¨æ–¼è»Ÿé«”包標籤中:%s\n"
-#: lib/rpmts.c:209
+#: lib/rpmts.c:217
#, c-format
msgid "missing '(' in package label: %s\n"
-msgstr "套件標籤éºæ¼ã€Œ(ã€ï¼š%s\n"
+msgstr "軟體包標籤éºæ¼ã€Œ(ã€ï¼š%s\n"
-#: lib/rpmts.c:217
+#: lib/rpmts.c:225
#, c-format
msgid "missing ')' in package label: %s\n"
-msgstr "套件標籤éºæ¼ã€Œ)ã€ï¼š%s\n"
+msgstr "軟體包標籤éºæ¼ã€Œ)ã€ï¼š%s\n"
-#: lib/rpmts.c:273
+#: lib/rpmts.c:284
#, c-format
msgid "%s: reading of public key failed.\n"
msgstr ""
-#: lib/rpmts.c:1087
+#: lib/rpmts.c:1142
msgid "transaction"
msgstr "處ç†äº‹é …"
-#: lib/signature.c:90
+#: lib/rpmvs.c:152
#, c-format
-msgid "sigh size(%d): BAD, read returned %d\n"
-msgstr "sigh 大å°(%d):ä¸è‰¯ï¼Œè®€å–回傳的 %d\n"
-
-#: lib/signature.c:95
-msgid "sigh magic: BAD\n"
-msgstr "sigh magic:ä¸è‰¯\n"
+msgid "%s tag %u: invalid type %u"
+msgstr ""
-#: lib/signature.c:101
+#: lib/rpmvs.c:158
#, c-format
-msgid "sigh tags: BAD, no. of tags(%d) out of range\n"
-msgstr "sigh 標籤:ä¸è‰¯ï¼Œæ¨™ç±¤(%d) 的編號超出範åœ\n"
+msgid "%s: tag %u: invalid count %u"
+msgstr ""
-#: lib/signature.c:107
+#: lib/rpmvs.c:178
#, c-format
-msgid "sigh data: BAD, no. of bytes(%d) out of range\n"
-msgstr "sigh 資料:ä¸è‰¯ï¼Œä½å…ƒçµ„(%d) 的編號超出範åœ\n"
+msgid "%s tag %u: invalid data %p (%u)"
+msgstr ""
-#: lib/signature.c:123
+#: lib/rpmvs.c:188
#, c-format
-msgid "sigh blob(%d): BAD, read returned %d\n"
-msgstr "sigh blob(%d):ä¸è‰¯ï¼Œè®€å–回傳的 %d\n"
+msgid "%s tag %u: invalid size %u"
+msgstr ""
-#: lib/signature.c:196
+#: lib/rpmvs.c:195
#, c-format
-msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"
-msgstr "sigh 標籤[%d]:ä¸è‰¯ï¼Œæ¨™ç±¤ %d é¡žåž‹ %d å移 %d 計數 %d\n"
-
-#: lib/signature.c:206
-msgid "sigh load: BAD\n"
-msgstr "sigh 載入:ä¸è‰¯\n"
+msgid "%s tag %u: invalid OpenPGP signature"
+msgstr ""
-#: lib/signature.c:219
+#: lib/rpmvs.c:206
#, c-format
-msgid "sigh pad(%zd): BAD, read %zd bytes\n"
+msgid "%s: tag %u: invalid hex"
msgstr ""
-#: lib/signature.c:235
+#: lib/rpmvs.c:261
#, c-format
-msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n"
+msgid "%s%s %s"
msgstr ""
-#: lib/signature.c:311
-msgid "Immutable header region could not be read. Corrupted package?\n"
+#: lib/rpmvs.c:264
+msgid "digest"
msgstr ""
-#: lib/signature.c:321
-msgid "Cannot sign RPM v3 packages\n"
+#: lib/rpmvs.c:268
+#, c-format
+msgid "%s%s"
msgstr ""
-#: lib/signature.c:408
-msgid "MD5 digest:"
-msgstr "MD5 摘è¦ï¼š"
+#: lib/rpmvs.c:269
+msgid "signature"
+msgstr ""
-#: lib/signature.c:447
-msgid "Header SHA1 digest:"
-msgstr "表頭 SHA1 摘è¦ï¼š"
+#: lib/rpmvs.c:295
+msgid "header"
+msgstr ""
-#: lib/signature.c:489
+#: lib/rpmvs.c:295
+msgid "package"
+msgstr ""
+
+#: lib/rpmvs.c:396
msgid "Header "
msgstr "表頭 "
-#: lib/signature.c:530
-#, c-format
-msgid "Verify signature: BAD PARAMETERS (%d %p %d %p %p)\n"
+#: lib/rpmvs.c:397
+msgid "Payload "
msgstr ""
-#: lib/transaction.c:1426
+#: lib/signature.c:213
+msgid "Unable to reload signature header.\n"
+msgstr "無法é‡æ–°è¼‰å…¥ç°½ç½²è¡¨é ­ã€‚\n"
+
+#: lib/transaction.c:1397
msgid "skipped"
msgstr "已跳éŽ"
-#: lib/transaction.c:1426
+#: lib/transaction.c:1397
msgid "failed"
msgstr "已失敗"
-#: lib/verify.c:372
-#, c-format
-msgid "missing %c %s"
-msgstr "éºæ¼ %c %s"
-
-#: lib/verify.c:422
-#, c-format
-msgid "Unsatisfied dependencies for %s:\n"
-msgstr ""
-
-#: lib/headerfmt.c:336
-msgid "invalid field width"
-msgstr ""
-
-#: lib/headerfmt.c:342
-msgid "missing { after %"
-msgstr "% 之後éºæ¼ {"
-
-#: lib/headerfmt.c:364
-msgid "missing } after %{"
-msgstr "%{ 之後éºæ¼ }"
-
-#: lib/headerfmt.c:375
-msgid "empty tag format"
-msgstr "空白標籤格å¼"
-
-#: lib/headerfmt.c:386
-msgid "empty tag name"
-msgstr "空白標籤å稱"
-
-#: lib/headerfmt.c:393
-msgid "unknown tag"
-msgstr "未知標籤"
-
-#: lib/headerfmt.c:413
-msgid "] expected at end of array"
-msgstr "] é æœŸåœ¨é™£åˆ—çš„çµå°¾"
-
-#: lib/headerfmt.c:425
-msgid "unexpected ]"
-msgstr "未é æœŸçš„ ]"
-
-#: lib/headerfmt.c:435
-msgid "unexpected }"
-msgstr "未é æœŸçš„ }"
-
-#: lib/headerfmt.c:491
-msgid "? expected in expression"
-msgstr "? é æœŸæ–¼è¡¨è¿°å¼ä¸­"
-
-#: lib/headerfmt.c:498
-msgid "{ expected after ? in expression"
-msgstr "{ é æœŸæ–¼è¡¨è¿°å¼ä¸­çš„ ? 之後"
-
-#: lib/headerfmt.c:510 lib/headerfmt.c:550
-msgid "} expected in expression"
-msgstr "} é æœŸæ–¼è¡¨è¿°å¼ä¸­"
-
-#: lib/headerfmt.c:518
-msgid ": expected following ? subexpression"
-msgstr ": é æœŸè·Ÿè‘— ? å­è¡¨è¿°å¼"
-
-#: lib/headerfmt.c:536
-msgid "{ expected after : in expression"
-msgstr "{ é æœŸæ–¼è¡¨è¿°å¼ä¸­ : 之後"
-
-#: lib/headerfmt.c:558
-msgid "| expected at end of expression"
-msgstr "| é æœŸæ–¼è¡¨è¿°å¼çš„çµå°¾"
-
-#: lib/headerfmt.c:735
-msgid "array iterator used with different sized arrays"
-msgstr "用於ä¸åŒå¤§å°é™£åˆ—的陣列迭代器"
-
-#: lib/rpmdb.c:97
+#: lib/verify.c:263
#, c-format
-msgid "Generating %d missing index(es), please wait...\n"
+msgid "Duplicate username or UID for user %s\n"
msgstr ""
-#: lib/rpmdb.c:191
-#, c-format
-msgid "cannot open %s index using db%d - %s (%d)\n"
-msgstr "無法使用 db%2$d 開啟 %1$s 索引 - %3$s (%4$d)\n"
-
-#: lib/rpmdb.c:516
+#: lib/verify.c:284
#, c-format
-msgid "error(%d) getting \"%s\" records from %s index: %s\n"
+msgid "Duplicate groupname or GID for group %s\n"
msgstr ""
-#: lib/rpmdb.c:789
-msgid "no dbpath has been set\n"
-msgstr "尚未設定 dbpath\n"
-
-#: lib/rpmdb.c:1308
-msgid "miFreeHeader: skipping"
-msgstr "miFreeHeader:跳éŽ"
-
-#: lib/rpmdb.c:1318
-#, c-format
-msgid "error(%d) storing record #%d into %s\n"
-msgstr "儲存記錄 #%2$d 到 %3$s 時發生錯誤(%1$d)\n"
-
-#: lib/rpmdb.c:1415
-#, c-format
-msgid "%s: regexec failed: %s\n"
+#: lib/verify.c:395
+msgid "no state"
msgstr ""
-#: lib/rpmdb.c:1596
-#, c-format
-msgid "%s: regcomp failed: %s\n"
+#: lib/verify.c:397
+msgid "unknown state"
msgstr ""
-#: lib/rpmdb.c:1759
-msgid "rpmdbNextIterator: skipping"
-msgstr "rpmdbNextIterator:跳éŽ"
-
-#: lib/rpmdb.c:1897
+#: lib/verify.c:448
#, c-format
-msgid "rpmdb: damaged header #%u retrieved -- skipping.\n"
-msgstr "rpmdb:已擷å–æ壞的表頭 #%u -- è·³éŽã€‚\n"
-
-#: lib/rpmdb.c:2250
-#, c-format
-msgid "error(%d:%s) getting next key from %s index\n"
-msgstr ""
+msgid "missing %c %s"
+msgstr "éºæ¼ %c %s"
-#: lib/rpmdb.c:2349
+#: lib/verify.c:503
#, c-format
-msgid "error(%d) adding header #%d record\n"
+msgid "Unsatisfied dependencies for %s:\n"
msgstr ""
-#: lib/rpmdb.c:2358
+#: plugins/prioreset.c:29
#, c-format
-msgid "error(%d) removing header #%d record\n"
+msgid "Unable to reset nice value: %s"
msgstr ""
-#: lib/rpmdb.c:2382
-#, c-format
-msgid "%s: cannot read header at 0x%x\n"
-msgstr "%s:無法讀å–ä½æ–¼ 0x%x 的表頭\n"
-
-#: lib/rpmdb.c:2448
-#, c-format
-msgid "error(%d) setting \"%s\" records from %s index\n"
-msgstr "從 %3$s 索引設定「%2$sã€è¨˜éŒ„時產生錯誤(%1$d)\n"
-
-#: lib/rpmdb.c:2467
-#, c-format
-msgid "error(%d) storing record \"%s\" into %s\n"
-msgstr "儲存記錄「%2$sã€åˆ° %3$s 時發生錯誤(%1$d)\n"
-
-#: lib/rpmdb.c:2477
-#, c-format
-msgid "error(%d) removing record \"%s\" from %s\n"
-msgstr "從 %3$s 移除記錄「%2$sã€æ™‚發生錯誤(%1$d)\n"
-
-#: lib/rpmdb.c:2551
-#, c-format
-msgid "error(%d) allocating new package instance\n"
-msgstr "分é…新套件實體時發生錯誤(%d)\n"
-
-#: lib/rpmdb.c:2644
-#, c-format
-msgid "error(%d) getting \"%s\" records from %s index\n"
-msgstr "從 %3$s 索引å–得「%2$sã€è¨˜éŒ„時發生錯誤(%1$d)\n"
-
-#: lib/rpmdb.c:2660
+#: plugins/prioreset.c:40
#, c-format
-msgid "error(%d) storing record %s into %s\n"
-msgstr "儲存記錄 %2$s 於 %3$s 時發生錯誤(%1$d)\n"
-
-#: lib/rpmdb.c:2857
-msgid "no dbpath has been set"
-msgstr "尚未設定 dbpath"
-
-#: lib/rpmdb.c:2875
-#, c-format
-msgid "failed to create directory %s: %s\n"
+msgid "Unable to reset I/O priority: %s"
msgstr ""
-#: lib/rpmdb.c:2910
-#, c-format
-msgid "header #%u in the database is bad -- skipping.\n"
-msgstr "在資料庫中有ä¸è‰¯çš„表頭 #%u -- è·³éŽã€‚\n"
-
-#: lib/rpmdb.c:2924
-#, c-format
-msgid "cannot add record originally at %u\n"
-msgstr "無法加入原本ä½æ–¼ %u 的記錄\n"
-
-#: lib/rpmdb.c:2939
-msgid "failed to rebuild database: original database remains in place\n"
-msgstr "é‡å»ºè³‡æ–™åº«æ™‚失敗:原來的資料庫ä¿æŒåŽŸç‹€\n"
-
-#: lib/rpmdb.c:2947
-msgid "failed to replace old database with new database!\n"
-msgstr "以新的資料庫å–代舊的資料庫時失敗ï¼\n"
-
-#: lib/rpmdb.c:2949
-#, c-format
-msgid "replace files in %s with files from %s to recover"
-msgstr "以 %2$s 的檔案å–代 %1$s 的檔案來復原"
-
-#: lib/rpmdb.c:2960
-#, c-format
-msgid "failed to remove directory %s: %s\n"
-msgstr "移除目錄時失敗 %s:%s\n"
-
-#: lib/backend/db3.c:33
-#, c-format
-msgid "db%d error(%d) from %s: %s\n"
-msgstr "db%d 錯誤(%d) 來自 %s:%s\n"
-
-#: lib/backend/db3.c:36
-#, c-format
-msgid "db%d error(%d): %s\n"
-msgstr "db%d 錯誤(%d):%s\n"
-
-#: lib/backend/db3.c:500
-#, c-format
-msgid "cannot get %s lock on %s/%s\n"
-msgstr "無法å–å¾— %s æ–¼ %s/%s 的鎖定\n"
-
-#: lib/backend/db3.c:502
-msgid "shared"
-msgstr "已共享"
-
-#: lib/backend/db3.c:502
-msgid "exclusive"
-msgstr "排他"
-
-#: lib/backend/db3.c:582
-#, c-format
-msgid "invalid index type %x on %s/%s\n"
+#: rpmio/digest_nss.c:68
+msgid "Failed to initialize NSS library\n"
msgstr ""
-#: lib/backend/dbconfig.c:144
-#, c-format
-msgid "unrecognized db option: \"%s\" ignored.\n"
-msgstr "無法辨識的資料庫é¸é …:「%s〠已忽略。\n"
-
-#: lib/backend/dbconfig.c:181
-#, c-format
-msgid "%s has invalid numeric value, skipped\n"
-msgstr "%s 有無效的數值,略éŽ\n"
-
-#: lib/backend/dbconfig.c:190
-#, c-format
-msgid "%s has too large or too small long value, skipped\n"
-msgstr "%s 有éŽå¤§æˆ–éŽå°çš„ long 數值,略éŽ\n"
-
-#: lib/backend/dbconfig.c:199
-#, c-format
-msgid "%s has too large or too small integer value, skipped\n"
-msgstr "%s 有éŽå¤§æˆ–éŽå°çš„整數值,略éŽ\n"
-
-#: plugins/sepolicy.c:218
-#, c-format
-msgid "Failed to decode policy for %s\n"
-msgstr "無法解碼 %s çš„æ–¹é‡\n"
-
-#: plugins/sepolicy.c:225
-#, c-format
-msgid "Failed to create temporary file for %s: %s\n"
-msgstr "無法為 %s 建立暫存檔:%s\n"
-
-#: plugins/sepolicy.c:231
+#: rpmio/digest_nss.c:79
#, c-format
-msgid "Failed to write %s policy to file %s\n"
-msgstr "無法寫入 %s æ–¹é‡è‡³æª”案 %s\n"
-
-#: plugins/sepolicy.c:296
-msgid "Failed to create semanage handle\n"
+msgid "Failed to register fork handler: %m\n"
msgstr ""
-#: plugins/sepolicy.c:302
-msgid "Failed to connect to policy handler\n"
-msgstr "無法連接至方é‡è™•ç†å™¨\n"
-
-#: plugins/sepolicy.c:306
-#, c-format
-msgid "Failed to begin policy transaction: %s\n"
-msgstr "無法開始方é‡è™•ç†äº‹é …:%s\n"
-
-#: plugins/sepolicy.c:337
-#, c-format
-msgid "Failed to remove temporary policy file %s: %s\n"
-msgstr "無法移除暫存方é‡æª” %s:%s\n"
-
-#: plugins/sepolicy.c:386
-#, c-format
-msgid "Failed to install policy module: %s (%s)\n"
-msgstr "無法安è£æ–¹é‡æ¨¡çµ„:%s (%s)\n"
-
-#: plugins/sepolicy.c:416
-#, c-format
-msgid "Failed to remove policy module: %s\n"
-msgstr "無法移除方é‡æ¨¡çµ„:%s\n"
-
-#: plugins/sepolicy.c:440 plugins/sepolicy.c:492
-#, c-format
-msgid "Failed to fork process: %s\n"
-msgstr "無法分支程åºï¼š%s\n"
-
-#: plugins/sepolicy.c:450 plugins/sepolicy.c:502
-#, c-format
-msgid "Failed to execute %s: %s\n"
-msgstr "無法執行 %s:%s\n"
-
-#: plugins/sepolicy.c:456 plugins/sepolicy.c:508
-#, c-format
-msgid "%s terminated abnormally\n"
-msgstr "%s 已異常終止\n"
-
-#: plugins/sepolicy.c:460 plugins/sepolicy.c:512
-#, c-format
-msgid "%s failed with exit code %i\n"
-msgstr "%s 已失敗並伴隨代碼 %i\n"
-
-#: plugins/sepolicy.c:467
-msgid "Failed to commit policy changes\n"
-msgstr "無法æ交方é‡è®Šæ›´\n"
-
-#: plugins/sepolicy.c:484
-msgid "Failed to expand restorecon path"
-msgstr "無法擴展 restorecon 路徑"
-
-#: plugins/sepolicy.c:563
-msgid "Failed to relabel filesystem. Files may be mislabeled\n"
-msgstr "無法將檔案系統é‡æ–°æ¨™ç±¤ã€‚檔案å¯èƒ½æ¨™ç±¤æœ‰èª¤\n"
-
-#: plugins/sepolicy.c:567
-msgid "Failed to reload file contexts. Files may be mislabeled\n"
-msgstr "無法é‡æ–°è¼‰å…¥æª”案情境。檔案å¯èƒ½æ¨™ç±¤æœ‰èª¤\n"
-
-#: plugins/sepolicy.c:594
-#, c-format
-msgid "Failed to extract policy from %s\n"
-msgstr "無法從 %s 抽出方é‡\n"
-
-#: rpmio/macro.c:185
-#, c-format
-msgid "======================== active %d empty %d\n"
-msgstr "======================== 作用中 %d 清空 %d\n"
-
-#: rpmio/macro.c:323
-#, c-format
-msgid "%3d>%*s(empty)"
+#: rpmio/macro.c:286
+#, fuzzy, c-format
+msgid "%3d>%*s(empty)\n"
msgstr "%3d>%*s(清空)"
-#: rpmio/macro.c:364
+#: rpmio/macro.c:316
#, c-format
msgid "%3d<%*s(empty)\n"
msgstr "%3d<%*s(清空)\n"
-#: rpmio/macro.c:537 rpmio/macro.c:575
+#: rpmio/macro.c:483
#, c-format
-msgid "Macro %%%s has unterminated body\n"
-msgstr "巨集 %%%s 具有未終çµçš„主體\n"
+msgid "Macro %%%s has unterminated opts\n"
+msgstr "巨集 %%%s 具有未終çµçš„é¸é …\n"
-#: rpmio/macro.c:594
+#: rpmio/macro.c:495 rpmio/macro.c:533
#, c-format
-msgid "Macro %%%s has illegal name (%%define)\n"
-msgstr "巨集 %%%s 具有無效的å稱 (%%define)\n"
+msgid "Macro %%%s has unterminated body\n"
+msgstr "巨集 %%%s 具有未終çµçš„主體\n"
-#: rpmio/macro.c:600
+#: rpmio/macro.c:551
#, c-format
-msgid "Macro %%%s has unterminated opts\n"
-msgstr "巨集 %%%s 具有未終çµçš„é¸é …\n"
+msgid "Macro %%%s has illegal name (%s)\n"
+msgstr ""
-#: rpmio/macro.c:605
+#: rpmio/macro.c:557
#, c-format
msgid "Macro %%%s has empty body\n"
msgstr "巨集 %%%s 具有空的主體\n"
-#: rpmio/macro.c:611
+#: rpmio/macro.c:562
+#, c-format
+msgid "Macro %%%s needs whitespace before body\n"
+msgstr ""
+
+#: rpmio/macro.c:566
#, c-format
msgid "Macro %%%s failed to expand\n"
msgstr "巨集 %%%s 展開時失敗\n"
-#: rpmio/macro.c:649
+#: rpmio/macro.c:607
#, c-format
msgid "Macro %%%s has illegal name (%%undefine)\n"
msgstr "巨集 %%%s 具有無效的å稱 (%%undefine)\n"
-#: rpmio/macro.c:743
+#: rpmio/macro.c:637
#, c-format
-msgid "Macro %%%s (%s) was not used below level %d\n"
-msgstr "巨集 %%%s (%s) 在層級 %d 之下未被使用\n"
+msgid "Macro %%%s defined but not used within scope\n"
+msgstr ""
-#: rpmio/macro.c:825
+#: rpmio/macro.c:761
#, c-format
msgid "Unknown option %c in %s(%s)\n"
msgstr "在 %2$s(%3$s) 中有未知的é¸é … %1$c\n"
-#: rpmio/macro.c:1048
+#: rpmio/macro.c:1055
msgid ""
"Too many levels of recursion in macro expansion. It is likely caused by "
"recursive macro declaration.\n"
msgstr ""
-#: rpmio/macro.c:1117 rpmio/macro.c:1134
+#: rpmio/macro.c:1125 rpmio/macro.c:1141
#, c-format
msgid "Unterminated %c: %s\n"
msgstr "未終çµçš„ %c:%s\n"
-#: rpmio/macro.c:1175
+#: rpmio/macro.c:1182
#, c-format
msgid "A %% is followed by an unparseable macro\n"
msgstr "在無法解æžçš„巨集之後跟著一個 %%\n"
-#: rpmio/rpmfileutil.c:245
+#: rpmio/macro.c:1197
+#, c-format
+msgid "failed to load macro file %s"
+msgstr ""
+
+#: rpmio/macro.c:1578
+#, c-format
+msgid "======================== active %d empty %d\n"
+msgstr "======================== 作用中 %d 清空 %d\n"
+
+#: rpmio/rpmfileutil.c:258
#, c-format
msgid "error creating temporary file %s: %m\n"
msgstr ""
-#: rpmio/rpmfileutil.c:310 rpmio/rpmfileutil.c:316
+#: rpmio/rpmfileutil.c:323 rpmio/rpmfileutil.c:329
#, c-format
msgid "File %s: %s\n"
msgstr "檔案 %s:%s\n"
-#: rpmio/rpmfileutil.c:319
+#: rpmio/rpmfileutil.c:332
#, c-format
msgid "File %s is smaller than %u bytes\n"
msgstr "檔案 %s å°æ–¼ %u ä½å…ƒçµ„\n"
-#: rpmio/rpmfileutil.c:587
-msgid "failed to create directory"
-msgstr "無法建立目錄"
+#: rpmio/rpmio.c:298
+msgid "[none]"
+msgstr ""
-#: rpmio/rpmlua.c:506
+#: rpmio/rpmlog.c:81
+msgid "(no error)"
+msgstr "(無錯誤)"
+
+#: rpmio/rpmlog.c:191 rpmio/rpmlog.c:192 rpmio/rpmlog.c:193
+msgid "fatal error: "
+msgstr "åš´é‡éŒ¯èª¤ï¼š"
+
+#: rpmio/rpmlog.c:194
+msgid "error: "
+msgstr "錯誤:"
+
+#: rpmio/rpmlog.c:195
+msgid "warning: "
+msgstr "警告:"
+
+#: rpmio/rpmlua.c:523
#, c-format
msgid "invalid syntax in lua scriptlet: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:522
+#: rpmio/rpmlua.c:541
#, c-format
msgid "invalid syntax in lua script: %s\n"
msgstr ""
-#: rpmio/rpmlua.c:527 rpmio/rpmlua.c:546
+#: rpmio/rpmlua.c:546 rpmio/rpmlua.c:565
#, c-format
msgid "lua script failed: %s\n"
msgstr "lua 指令稿失敗:%s\n"
-#: rpmio/rpmlua.c:541
+#: rpmio/rpmlua.c:560
#, c-format
msgid "invalid syntax in lua file: %s\n"
msgstr "lua 檔案內有無效語法:%s\n"
-#: rpmio/rpmlua.c:709
+#: rpmio/rpmlua.c:756
#, c-format
msgid "lua hook failed: %s\n"
msgstr ""
-#: rpmio/rpmio.c:314
-msgid "[none]"
-msgstr ""
-
-#: rpmio/rpmlog.c:37
-msgid "(no error)"
-msgstr "(無錯誤)"
-
-#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150
-msgid "fatal error: "
-msgstr "åš´é‡éŒ¯èª¤ï¼š"
-
-#: rpmio/rpmlog.c:151
-msgid "error: "
-msgstr "錯誤:"
-
-#: rpmio/rpmlog.c:152
-msgid "warning: "
-msgstr "警告:"
-
#: rpmio/rpmmalloc.c:25
#, c-format
msgid "memory alloc (%u bytes) returned NULL.\n"
msgstr "記憶體é…ç½® (%u ä½å…ƒçµ„) 回傳 NULL。\n"
-#: rpmio/rpmpgp.c:1008
+#: rpmio/rpmpgp.c:664 rpmio/rpmpgp.c:752 rpmio/rpmpgp.c:826
+#, c-format
+msgid "Unsupported version of key: V%d\n"
+msgstr ""
+
+#: rpmio/rpmpgp.c:1127
#, c-format
msgid "V%d %s/%s %s, key ID %s"
msgstr ""
-#: rpmio/rpmpgp.c:1016
+#: rpmio/rpmpgp.c:1135
msgid "(none)"
msgstr "(ç„¡)"
-#: sign/rpmgensig.c:87
+#: rpmio/rpmsq.c:37
+#, c-format
+msgid "exiting on signal %d from pid %d\n"
+msgstr ""
+
+#: sign/rpmgensig.c:54
+#, c-format
+msgid "error creating temp directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:62
+#, c-format
+msgid "error creating fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:83
+#, c-format
+msgid "error delete fifo %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:91
+#, c-format
+msgid "error delete directory %s: %m\n"
+msgstr ""
+
+#: sign/rpmgensig.c:167
#, c-format
msgid "%s: Fwrite failed: %s\n"
msgstr "%s: Fwrite 失敗:%s\n"
-#: sign/rpmgensig.c:97
+#: sign/rpmgensig.c:173
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr "%s:Fread 失敗:%s\n"
+
+#: sign/rpmgensig.c:177
#, c-format
msgid "%s: Fflush failed: %s\n"
msgstr ""
-#: sign/rpmgensig.c:125
+#: sign/rpmgensig.c:202
msgid "Unsupported PGP signature\n"
msgstr ""
-#: sign/rpmgensig.c:131
+#: sign/rpmgensig.c:208
#, c-format
msgid "Unsupported PGP hash algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:144
+#: sign/rpmgensig.c:221
#, c-format
msgid "Unsupported PGP pubkey algorithm %u\n"
msgstr ""
-#: sign/rpmgensig.c:174
+#: sign/rpmgensig.c:270
#, c-format
-msgid "Couldn't create pipe for signing: %m"
-msgstr "無法建立簽署用的導管:%m"
+msgid "Could not exec %s: %s\n"
+msgstr "無法執行 %s:%s\n"
-#: sign/rpmgensig.c:216
+#: sign/rpmgensig.c:280
+msgid "Fopen failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:295
+msgid "Could not write to pipe\n"
+msgstr ""
+
+#: sign/rpmgensig.c:302
+#, c-format
+msgid "Could not read from file %s: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:312
#, c-format
msgid "gpg exec failed (%d)\n"
msgstr "gpg 執行失敗 (%d)\n"
-#: sign/rpmgensig.c:246
+#: sign/rpmgensig.c:354
msgid "gpg failed to write signature\n"
msgstr "寫入簽署時 gpg 失敗\n"
-#: sign/rpmgensig.c:263
+#: sign/rpmgensig.c:371
msgid "unable to read the signature\n"
msgstr "無法讀å–ç°½å\n"
-#: sign/rpmgensig.c:449 sign/rpmgensig.c:518
+#: sign/rpmgensig.c:499
+msgid "generateSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:513
+msgid "rpmReadSignature failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:557
+msgid "headerReload failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:564 sign/rpmgensig.c:780
msgid "rpmMkTemp failed\n"
msgstr "rpmMkTemp 失敗\n"
-#: sign/rpmgensig.c:501
+#: sign/rpmgensig.c:571 sign/rpmgensig.c:607
+msgid "copyFile failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:590
+msgid "headerWrite failed\n"
+msgstr ""
+
+#: sign/rpmgensig.c:622
#, c-format
-msgid "%s already contains identical signature, skipping\n"
+msgid "%s already contains identical file signatures\n"
+msgstr ""
+
+#: sign/rpmgensig.c:639
+msgid "file signing support not built in\n"
msgstr ""
-#: sign/rpmgensig.c:525
+#: sign/rpmgensig.c:682
#, c-format
-msgid "%s: writeLead failed: %s\n"
-msgstr "%s:writeLead 失敗:%s\n"
+msgid "%s: rpmReadSignature failed: %s"
+msgstr "%s:rpmReadSignature 失敗:%s"
-#: sign/rpmgensig.c:531
+#: sign/rpmgensig.c:689
+#, c-format
+msgid "%s: headerRead failed: %s\n"
+msgstr ""
+
+#: sign/rpmgensig.c:694
+msgid "Cannot sign RPM v3 packages\n"
+msgstr ""
+
+#: sign/rpmgensig.c:722
+#, c-format
+msgid "%s already contains identical signature, skipping\n"
+msgstr ""
+
+#: sign/rpmgensig.c:770 sign/rpmgensig.c:793
#, c-format
msgid "%s: rpmWriteSignature failed: %s\n"
msgstr "%s:rpmWriteSignature 失敗:%s\n"
-#: sign/rpmgensig.c:545
+#: sign/rpmgensig.c:787
+#, c-format
+msgid "%s: writeLead failed: %s\n"
+msgstr "%s:writeLead 失敗:%s\n"
+
+#: sign/rpmgensig.c:812
#, c-format
msgid "replacing %s failed: %s\n"
msgstr ""
-#: tools/rpmgraph.c:142
+#: sign/rpmsignfiles.c:59
+msgid "sign_hash failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:99
+msgid "File digest algorithm id is invalid"
+msgstr ""
+
+#: sign/rpmsignfiles.c:106
+msgid "hash_algo_name failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:119
+msgid "signFile failed\n"
+msgstr ""
+
+#: sign/rpmsignfiles.c:125
+msgid "headerPutString failed\n"
+msgstr ""
+
+#: tools/rpmgraph.c:141
#, c-format
msgid "%s: read manifest failed: %s\n"
msgstr "%s:讀å–清單失敗:%s\n"
-#: tools/rpmgraph.c:220
+#: tools/rpmgraph.c:219
msgid "don't verify header+payload signature"
msgstr "ä¸é©—證表頭+酬載簽署"
diff --git a/preinstall.am b/preinstall.am
index d21d043cc..ea188e168 100644
--- a/preinstall.am
+++ b/preinstall.am
@@ -82,10 +82,10 @@ include/rpm/rpmfi.h: lib/rpmfi.h include/rpm/$(dirstamp)
$(INSTALL_DATA) $(top_srcdir)/lib/rpmfi.h include/rpm/rpmfi.h
BUILT_SOURCES += include/rpm/rpmfi.h
CLEANFILES += include/rpm/rpmfi.h
-include/rpm/rpmlegacy.h: lib/rpmlegacy.h include/rpm/$(dirstamp)
- $(INSTALL_DATA) $(top_srcdir)/lib/rpmlegacy.h include/rpm/rpmlegacy.h
-BUILT_SOURCES += include/rpm/rpmlegacy.h
-CLEANFILES += include/rpm/rpmlegacy.h
+include/rpm/rpmfiles.h: lib/rpmfiles.h include/rpm/$(dirstamp)
+ $(INSTALL_DATA) $(top_srcdir)/lib/rpmfiles.h include/rpm/rpmfiles.h
+BUILT_SOURCES += include/rpm/rpmfiles.h
+CLEANFILES += include/rpm/rpmfiles.h
include/rpm/rpmpol.h: lib/rpmpol.h include/rpm/$(dirstamp)
$(INSTALL_DATA) $(top_srcdir)/lib/rpmpol.h include/rpm/rpmpol.h
BUILT_SOURCES += include/rpm/rpmpol.h
@@ -122,6 +122,10 @@ include/rpm/rpmvf.h: lib/rpmvf.h include/rpm/$(dirstamp)
$(INSTALL_DATA) $(top_srcdir)/lib/rpmvf.h include/rpm/rpmvf.h
BUILT_SOURCES += include/rpm/rpmvf.h
CLEANFILES += include/rpm/rpmvf.h
+include/rpm/rpmarchive.h: lib/rpmarchive.h include/rpm/$(dirstamp)
+ $(INSTALL_DATA) $(top_srcdir)/lib/rpmarchive.h include/rpm/rpmarchive.h
+BUILT_SOURCES += include/rpm/rpmarchive.h
+CLEANFILES += include/rpm/rpmarchive.h
include/rpm/rpmsign.h: sign/rpmsign.h include/rpm/$(dirstamp)
$(INSTALL_DATA) $(top_srcdir)/sign/rpmsign.h include/rpm/rpmsign.h
BUILT_SOURCES += include/rpm/rpmsign.h
diff --git a/python/.gitignore b/python/.gitignore
deleted file mode 100644
index ca7802a2b..000000000
--- a/python/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/setup.py
diff --git a/python/MANIFEST.in b/python/MANIFEST.in
deleted file mode 100644
index a4306366e..000000000
--- a/python/MANIFEST.in
+++ /dev/null
@@ -1 +0,0 @@
-include MANIFEST.in *.h
diff --git a/python/Makefile.am b/python/Makefile.am
index fff51ae04..a9bd34729 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -1,10 +1,13 @@
# Makefile for rpm library.
+include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
+
EXTRA_DIST = rpm/__init__.py rpm/transaction.py
AM_CPPFLAGS = -I$(top_builddir)/include/
AM_CPPFLAGS += -I$(top_srcdir)/python
-AM_CPPFLAGS += -I@WITH_PYTHON_INCLUDE@
+AM_CPPFLAGS += @PYTHON_CFLAGS@
pkgpyexec_LTLIBRARIES = _rpmmodule.la _rpmbmodule.la _rpmsmodule.la
pkgpyexec_DATA = rpm/__init__.py rpm/transaction.py
@@ -13,18 +16,21 @@ _rpmmodule_la_LDFLAGS = -module -avoid-version -shared
_rpmmodule_la_LIBADD = \
$(top_builddir)/lib/librpm.la \
$(top_builddir)/rpmio/librpmio.la \
- @WITH_PYTHON_LIB@
+ @PYTHON_LIBS@
_rpmmodule_la_SOURCES = rpmmodule.c rpmsystem-py.h \
header-py.c header-py.h \
+ rpmarchive-py.c rpmarchive-py.h \
rpmds-py.c rpmds-py.h \
rpmfd-py.c rpmfd-py.h \
rpmfi-py.c rpmfi-py.h \
+ rpmfiles-py.c rpmfiles-py.h \
rpmkeyring-py.c rpmkeyring-py.h \
rpmmi-py.c rpmmi-py.h \
rpmii-py.c rpmii-py.h \
rpmps-py.c rpmps-py.h \
rpmmacro-py.c rpmmacro-py.h \
+ rpmstrpool-py.c rpmstrpool-py.h \
rpmtd-py.c rpmtd-py.h \
rpmte-py.c rpmte-py.h \
rpmts-py.c rpmts-py.h
@@ -34,7 +40,7 @@ _rpmbmodule_la_LIBADD = \
$(top_builddir)/build/librpmbuild.la \
$(top_builddir)/lib/librpm.la \
$(top_builddir)/rpmio/librpmio.la \
- @WITH_PYTHON_LIB@
+ @PYTHON_LIBS@
_rpmbmodule_la_SOURCES = rpmbmodule.c rpmsystem-py.h \
spec-py.c spec-py.h
@@ -44,7 +50,7 @@ _rpmsmodule_la_LIBADD = \
$(top_builddir)/sign/librpmsign.la \
$(top_builddir)/lib/librpm.la \
$(top_builddir)/rpmio/librpmio.la \
- @WITH_PYTHON_LIB@
+ @PYTHON_LIBS@
_rpmsmodule_la_SOURCES = rpmsmodule.c rpmsystem-py.h
diff --git a/python/header-py.c b/python/header-py.c
index d194fdcf7..45af51637 100644
--- a/python/header-py.c
+++ b/python/header-py.c
@@ -157,20 +157,11 @@ static PyObject * hdrKeyList(hdrObject * s)
return keys;
}
-static PyObject * hdrAsBytes(hdrObject * s, int legacy)
+static PyObject * hdrAsBytes(hdrObject * s)
{
PyObject *res = NULL;
- char *buf = NULL;
- unsigned int len;
- Header h = headerLink(s->h);
-
- /* XXX this legacy switch is a hack, needs to be removed. */
- if (legacy) {
- h = headerCopy(s->h); /* XXX strip region tags, etc */
- headerFree(s->h);
- }
- buf = headerExport(h, &len);
- h = headerFree(h);
+ unsigned int len = 0;
+ char *buf = headerExport(s->h, &len);
if (buf == NULL || len == 0) {
PyErr_SetString(pyrpmError, "can't unload bad header\n");
@@ -181,15 +172,9 @@ static PyObject * hdrAsBytes(hdrObject * s, int legacy)
return res;
}
-static PyObject * hdrUnload(hdrObject * s, PyObject * args, PyObject *keywords)
+static PyObject * hdrUnload(hdrObject * s)
{
- int legacy = 0;
- static char *kwlist[] = { "legacyHeader", NULL};
-
- if (!PyArg_ParseTupleAndKeywords(args, keywords, "|i", kwlist, &legacy))
- return NULL;
-
- return hdrAsBytes(s, legacy);
+ return hdrAsBytes(s);
}
static PyObject * hdrExpandFilelist(hdrObject * s)
@@ -223,7 +208,6 @@ static PyObject * hdrFullFilelist(hdrObject * s)
if (headerGet(h, RPMTAG_FILENAMES, fileNames, HEADERGET_EXT)) {
rpmtdSetTag(fileNames, RPMTAG_OLDFILENAMES);
headerPut(h, fileNames, HEADERPUT_DEFAULT);
- rpmtdFreeData(fileNames);
}
rpmtdFree(fileNames);
@@ -337,7 +321,7 @@ static long hdr_hash(PyObject * h)
static PyObject * hdr_reduce(hdrObject *s)
{
PyObject *res = NULL;
- PyObject *blob = hdrAsBytes(s, 0);
+ PyObject *blob = hdrAsBytes(s);
if (blob) {
res = Py_BuildValue("O(O)", Py_TYPE(s), blob);
Py_DECREF(blob);
@@ -347,31 +331,31 @@ static PyObject * hdr_reduce(hdrObject *s)
static struct PyMethodDef hdr_methods[] = {
{"keys", (PyCFunction) hdrKeyList, METH_NOARGS,
- NULL },
- {"unload", (PyCFunction) hdrUnload, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "hdr.keys() -- Return a list of the header's rpm tags (int RPMTAG_*)." },
+ {"unload", (PyCFunction) hdrUnload, METH_NOARGS,
+ "hdr.unload() -- Return binary representation\nof the header." },
{"expandFilelist", (PyCFunction) hdrExpandFilelist,METH_NOARGS,
- NULL },
+ "DEPRECATED -- Use hdr.convert() instead." },
{"compressFilelist",(PyCFunction) hdrCompressFilelist,METH_NOARGS,
- NULL },
+ "DEPRECATED -- Use hdr.convert() instead." },
{"fullFilelist", (PyCFunction) hdrFullFilelist, METH_NOARGS,
- NULL },
+ "DEPRECATED -- Obsolete method."},
{"convert", (PyCFunction) hdrConvert, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "hdr.convert(op=-1) -- Convert header - See HEADERCONV_*\nfor possible values of op."},
{"format", (PyCFunction) hdrFormat, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "hdr.format(format) -- Expand a query string with the header data.\n\nSee rpm -q for syntax." },
{"sprintf", (PyCFunction) hdrFormat, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "Alias for .format()." },
{"isSource", (PyCFunction)hdrIsSource, METH_NOARGS,
- NULL },
+ "hdr.isSource() -- Return if header describes a source package." },
{"write", (PyCFunction)hdrWrite, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "hdr.write(file, magic=True) -- Write header to file." },
{"dsOfHeader", (PyCFunction)hdr_dsOfHeader, METH_NOARGS,
- NULL},
+ "hdr.dsOfHeader() -- Return dependency set with the header's NEVR."},
{"dsFromHeader", (PyCFunction)hdr_dsFromHeader, METH_VARARGS|METH_KEYWORDS,
- NULL},
+ "hdr.dsFromHeader(to=RPMTAG_REQUIRENAME, flags=None)\nGet dependency set from header. to must be one of the NAME tags\nbelonging to a dependency:\n'Providename', 'Requirename', 'Obsoletename', 'Conflictname',\n'Triggername', 'Recommendname', 'Suggestname', 'Supplementname',\n'Enhancename' or one of the corresponding RPMTAG_*NAME constants." },
{"fiFromHeader", (PyCFunction)hdr_fiFromHeader, METH_VARARGS|METH_KEYWORDS,
- NULL},
+ "hdr.fiFromHeader() -- Return rpm.fi object containing the file\nmeta data from the header.\n\nDEPRECATED - Use rpm.files(hdr) instead."},
{"__reduce__", (PyCFunction)hdr_reduce, METH_NOARGS,
NULL},
@@ -394,6 +378,7 @@ static PyObject *hdr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
h = headerNew();
} else if (CAPSULE_CHECK(obj)) {
h = CAPSULE_EXTRACT(obj, "rpm._C_Header");
+ headerLink(h);
} else if (hdrObject_Check(obj)) {
h = headerCopy(((hdrObject*) obj)->h);
} else if (PyBytes_Check(obj)) {
@@ -606,7 +591,7 @@ static int hdrPutTag(Header h, rpmTagVal tag, PyObject *value)
rc = hdrAppendItem(h, tag, type, item);
}
} else {
- PyErr_SetString(PyExc_RuntimeError, "cant happen, right?");
+ PyErr_SetString(PyExc_RuntimeError, "can't happen, right?");
}
return rc;
@@ -680,7 +665,56 @@ static PySequenceMethods hdr_as_sequence = {
};
static char hdr_doc[] =
-"";
+ "A header object represents an RPM package header.\n"
+ "\n"
+ "All RPM packages have headers that provide metadata for the package.\n"
+ "Header objects can be returned by database queries or loaded from a\n"
+ "binary package on disk.\n"
+ "\n"
+ "The ts.hdrFromFdno() function returns the package header from a\n"
+ "package on disk, verifying package signatures and digests of the\n"
+ "package while reading.\n"
+ "\n"
+ "Note: The older method rpm.headerFromPackage() which has been replaced\n"
+ "by ts.hdrFromFdno() used to return a (hdr, isSource) tuple.\n"
+ "\n"
+ "If you need to distinguish source/binary headers, do:\n"
+ "\n"
+ " import os, rpm\n"
+ "\n"
+ " ts = rpm.TransactionSet()\n"
+ " fdno = os.open('/tmp/foo-1.0-1.i386.rpm', os.O_RDONLY)\n"
+ " hdr = ts.hdrFromFdno(fdno)\n"
+ " os.close(fdno)\n"
+ " if hdr[rpm.RPMTAG_SOURCEPACKAGE]:\n"
+ " print 'header is from a source package'\n"
+ " else:\n"
+ " print 'header is from a binary package'\n"
+ "\n"
+ "The Python interface to the header data is quite elegant. It\n"
+ "presents the data in a dictionary form. We'll take the header we\n"
+ "just loaded and access the data within it:\n"
+ "\n"
+ " print hdr[rpm.RPMTAG_NAME]\n"
+ " print hdr[rpm.RPMTAG_VERSION]\n"
+ " print hdr[rpm.RPMTAG_RELEASE]\n"
+ "\n"
+ "in the case of our 'foo-1.0-1.i386.rpm' package, this code would\n"
+ "output:\n"
+ " foo\n"
+ " 1.0\n"
+ " 1\n"
+ "\n"
+ "You make also access the header data by string name:\n"
+ "\n"
+ " print hdr['name']\n"
+ " print hdr['version']\n"
+ " print hdr['release']\n"
+ "\n"
+ "This method of access is a teensy bit slower because the name must be\n"
+ "translated into the tag number dynamically. You also must make sure\n"
+ "the strings in header lookups don't get translated, or the lookups\n"
+ "will fail.\n";
PyTypeObject hdr_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
@@ -729,8 +763,7 @@ PyObject * hdr_Wrap(PyTypeObject *subtype, Header h)
{
hdrObject * hdr = (hdrObject *)subtype->tp_alloc(subtype, 0);
if (hdr == NULL) return NULL;
-
- hdr->h = headerLink(h);
+ hdr->h = h;
return (PyObject *) hdr;
}
diff --git a/python/rpm/__init__.py b/python/rpm/__init__.py
index d868d19fa..54728bbd4 100644
--- a/python/rpm/__init__.py
+++ b/python/rpm/__init__.py
@@ -2,10 +2,39 @@ r"""RPM Module
This module enables you to manipulate rpms and the rpm database.
+The rpm base module provides the main starting point for
+accessing RPM from Python. For most usage, call
+the TransactionSet method to get a transaction set (rpmts).
+
+For example:
+ import rpm
+ ts = rpm.TransactionSet()
+
+The transaction set will open the RPM database as needed, so
+in most cases, you do not need to explicitly open the
+database. The transaction set is the workhorse of RPM.
+
+You can open another RPM database, such as one that holds
+all packages for a given Linux distribution, to provide
+packages used to solve dependencies. To do this, use
+the following code:
+
+rpm.addMacro('_dbpath', '/path/to/alternate/database')
+solvets = rpm.TransactionSet()
+solvets.openDB()
+rpm.delMacro('_dbpath')
+
+# Open default database
+ts = rpm.TransactionSet()
+
+This code gives you access to two RPM databases through
+two transaction sets (rpmts): ts is a transaction set
+associated with the default RPM database and solvets
+is a transaction set tied to an alternate database, which
+is very useful for resolving dependencies.
"""
import warnings
-import os
from rpm._rpm import *
from rpm.transaction import *
import rpm._rpm as _rpm
@@ -32,10 +61,13 @@ except ImportError:
# backwards compatibility + give the same class both ways
ts = TransactionSet
+
def headerLoad(*args, **kwds):
+ """DEPRECATED! Use rpm.hdr() instead."""
warnings.warn("Use rpm.hdr() instead.", DeprecationWarning, stacklevel=2)
return hdr(*args, **kwds)
+
def _doHeaderListFromFD(rpm_fd, retrofit):
hlist = []
while 1:
@@ -49,18 +81,22 @@ def _doHeaderListFromFD(rpm_fd, retrofit):
return hlist
-def readHeaderListFromFD(file_desc, retrofit = True):
+
+def readHeaderListFromFD(file_desc, retrofit=True):
if not isinstance(file_desc, fd):
file_desc = fd(file_desc)
return _doHeaderListFromFD(file_desc, retrofit)
-
-def readHeaderListFromFile(path, retrofit = True):
+
+
+def readHeaderListFromFile(path, retrofit=True):
f = fd(path)
hlist = _doHeaderListFromFD(f, retrofit)
f.close()
return hlist
-
+
+
def readHeaderFromFD(file_desc):
+ """Return (header, pos_before_hdr)"""
if not isinstance(file_desc, fd):
file_desc = fd(file_desc)
try:
@@ -72,7 +108,9 @@ def readHeaderFromFD(file_desc):
return (h, offset)
+
def signalsCaught(siglist):
+ """Returns list of signals that were caught."""
caught = []
for sig in siglist:
if signalCaught(sig):
@@ -80,5 +118,11 @@ def signalsCaught(siglist):
return caught
-def dsSingle(TagN, N, EVR = "", Flags = RPMSENSE_ANY):
- return ds((N, EVR, Flags), TagN)
+
+def dsSingle(TagN, N, EVR="", Flags=RPMSENSE_ANY):
+ """
+ Creates a single entry dependency set (ds)
+
+ dsSingle(RPMTAG_CONFLICTNAME, "rpm") corresponds to "Conflicts: rpm"
+ """
+ return ds((N, Flags, EVR), TagN)
diff --git a/python/rpm/transaction.py b/python/rpm/transaction.py
index 73e4b3c15..675ecaf8e 100644
--- a/python/rpm/transaction.py
+++ b/python/rpm/transaction.py
@@ -1,8 +1,15 @@
-#!/usr/bin/python
+from __future__ import with_statement
+import sys
import rpm
from rpm._rpm import ts as TransactionSetCore
+if sys.version_info[0] == 3:
+ _string_types = str,
+else:
+ _string_types = basestring,
+
+
# TODO: migrate relevant documentation from C-side
class TransactionSet(TransactionSetCore):
_probFilter = 0
@@ -11,7 +18,7 @@ class TransactionSet(TransactionSetCore):
oval = getattr(self, attr)
setattr(self, attr, val)
return oval
-
+
def setVSFlags(self, flags):
return self._wrapSetGet('_vsflags', flags)
@@ -31,8 +38,8 @@ class TransactionSet(TransactionSetCore):
return self._wrapSetGet('_probFilter', ignoreSet)
def parseSpec(self, specfile):
- import _rpmb
- return _rpmb.spec(specfile)
+ import rpm._rpmb
+ return rpm._rpmb.spec(specfile)
def getKeys(self):
keys = []
@@ -44,23 +51,32 @@ class TransactionSet(TransactionSetCore):
else:
return tuple(keys)
- def addInstall(self, item, key, how="u"):
- if isinstance(item, basestring):
- f = file(item)
- header = self.hdrFromFdno(f)
- f.close()
- elif isinstance(item, file):
- header = self.hdrFromFdno(item)
- else:
+ def _f2hdr(self, item):
+ if isinstance(item, _string_types):
+ with open(item) as f:
+ header = self.hdrFromFdno(f)
+ elif isinstance(item, rpm.hdr):
header = item
+ else:
+ header = self.hdrFromFdno(item)
+ return header
+
+ def addInstall(self, item, key, how="u"):
+ header = self._f2hdr(item)
- if not how in ['u', 'i']:
+ if how not in ['u', 'i']:
raise ValueError('how argument must be "u" or "i"')
upgrade = (how == "u")
if not TransactionSetCore.addInstall(self, header, key, upgrade):
raise rpm.error("adding package to transaction failed")
+ def addReinstall(self, item, key):
+ header = self._f2hdr(item)
+
+ if not TransactionSetCore.addReinstall(self, header, key):
+ raise rpm.error("adding package to transaction failed")
+
def addErase(self, item):
hdrs = []
if isinstance(item, rpm.hdr):
@@ -69,7 +85,7 @@ class TransactionSet(TransactionSetCore):
hdrs = item
elif isinstance(item, int):
hdrs = self.dbMatch(rpm.RPMDBI_PACKAGES, item)
- elif isinstance(item, basestring):
+ elif isinstance(item, _string_types):
hdrs = self.dbMatch(rpm.RPMDBI_LABEL, item)
else:
raise TypeError("invalid type %s" % type(item))
@@ -86,7 +102,7 @@ class TransactionSet(TransactionSetCore):
rc = TransactionSetCore.run(self, callback, data, self._probFilter)
# crazy backwards compatibility goo: None for ok, list of problems
- # if transaction didnt complete and empty list if it completed
+ # if transaction didn't complete and empty list if it completed
# with errors
if rc == 0:
return None
@@ -122,14 +138,18 @@ class TransactionSet(TransactionSetCore):
needflags = rpm.RPMSENSE_ANY
if len(needs) == 3:
needop = needs[1]
- if needop.find('<') >= 0: needflags |= rpm.RPMSENSE_LESS
- if needop.find('=') >= 0: needflags |= rpm.RPMSENSE_EQUAL
- if needop.find('>') >= 0: needflags |= rpm.RPMSENSE_GREATER
+ if '<' in needop:
+ needflags |= rpm.RPMSENSE_LESS
+ if '=' in needop:
+ needflags |= rpm.RPMSENSE_EQUAL
+ if '>' in needop:
+ needflags |= rpm.RPMSENSE_GREATER
needver = needs[2]
else:
needver = ""
- res.append(((n, v, r),(needname,needver),needflags,sense,p.key))
+ res.append(((n, v, r),
+ (needname, needver), needflags, sense, p.key))
return res
diff --git a/python/rpmarchive-py.c b/python/rpmarchive-py.c
new file mode 100644
index 000000000..53a078a4e
--- /dev/null
+++ b/python/rpmarchive-py.c
@@ -0,0 +1,275 @@
+#include "rpmsystem-py.h"
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmpgp.h>
+
+#include "header-py.h"
+#include "rpmfi-py.h"
+#include "rpmfd-py.h"
+#include "rpmfiles-py.h"
+#include "rpmarchive-py.h"
+#include "rpmstrpool-py.h"
+
+struct rpmarchiveObject_s {
+ PyObject_HEAD
+ PyObject *md_dict;
+ rpmfi archive;
+ rpmfiles files;
+};
+
+static void rpmarchive_dealloc(rpmarchiveObject * s)
+{
+ rpmfilesFree(s->files);
+ rpmfiArchiveClose(s->archive);
+ rpmfiFree(s->archive);
+ Py_TYPE(s)->tp_free((PyObject *)s);
+}
+
+static PyObject *rpmarchive_error(int rc)
+{
+ PyErr_SetObject(PyExc_IOError,
+ Py_BuildValue("(is)", rc, rpmfileStrerror(rc)));
+ return NULL;
+}
+
+static PyObject *rpmarchive_closed(void)
+{
+ PyErr_SetString(PyExc_IOError, "I/O operation on closed archive");
+ return NULL;
+}
+
+static PyObject *rpmarchive_tell(rpmarchiveObject *s)
+{
+ return PyLong_FromLongLong(rpmfiArchiveTell(s->archive));
+}
+
+static PyObject *rpmarchive_close(rpmarchiveObject *s)
+{
+ if (s->archive) {
+ int rc = rpmfiArchiveClose(s->archive);
+ s->archive = rpmfiFree(s->archive);
+ if (rc)
+ return rpmarchive_error(rc);
+ }
+ Py_RETURN_NONE;
+}
+
+static PyObject *rpmarchive_has_content(rpmarchiveObject *s)
+{
+ return PyLong_FromLong(rpmfiArchiveHasContent(s->archive));
+}
+
+static PyObject *rpmarchive_read(rpmarchiveObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ char *kwlist[] = { "size", NULL };
+ char buf[BUFSIZ];
+ ssize_t chunksize = sizeof(buf);
+ ssize_t left = -1;
+ ssize_t nb = 0;
+ PyObject *res = NULL;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|l", kwlist, &left))
+ return NULL;
+
+ if (s->archive == NULL)
+ return rpmarchive_closed();
+
+ /* ConcatAndDel() doesn't work on NULL string, meh */
+ res = PyBytes_FromStringAndSize(NULL, 0);
+ do {
+ if (left >= 0 && left < chunksize)
+ chunksize = left;
+
+ Py_BEGIN_ALLOW_THREADS
+ nb = rpmfiArchiveRead(s->archive, buf, chunksize);
+ Py_END_ALLOW_THREADS
+
+ if (nb > 0) {
+ PyObject *tmp = PyBytes_FromStringAndSize(buf, nb);
+ PyBytes_ConcatAndDel(&res, tmp);
+ left -= nb;
+ }
+ } while (nb > 0);
+
+ if (nb < 0) {
+ Py_XDECREF(res);
+ return rpmarchive_error(nb);
+ } else {
+ return res;
+ }
+}
+
+static PyObject *rpmarchive_write(rpmarchiveObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ const char *buf = NULL;
+ ssize_t size = 0;
+ char *kwlist[] = { "buffer", NULL };
+ ssize_t rc = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", kwlist, &buf, &size)) {
+ return NULL;
+ }
+
+ if (s->archive == NULL)
+ return rpmarchive_closed();
+
+ Py_BEGIN_ALLOW_THREADS
+ rc = rpmfiArchiveWrite(s->archive, buf, size);
+ Py_END_ALLOW_THREADS
+
+ if (rc < 0)
+ return rpmarchive_error(rc);
+ else
+ return Py_BuildValue("n", rc);
+}
+
+static PyObject *rpmarchive_readto(rpmarchiveObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ rpmfdObject *fdo = NULL;
+ int nodigest = 0;
+ int rc;
+ char *kwlist[] = { "fd", "nodigest", NULL };
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|i", kwlist,
+ rpmfdFromPyObject, &fdo, &nodigest)) {
+ return NULL;
+ }
+
+ if (s->archive == NULL)
+ return rpmarchive_closed();
+
+ Py_BEGIN_ALLOW_THREADS
+ rc = rpmfiArchiveReadToFile(s->archive, rpmfdGetFd(fdo), nodigest);
+ Py_END_ALLOW_THREADS
+
+ if (rc)
+ return rpmarchive_error(rc);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *rpmarchive_writeto(rpmarchiveObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ rpmfdObject *fdo = NULL;
+ int rc;
+ char *kwlist[] = { "fd", NULL };
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|i", kwlist,
+ rpmfdFromPyObject, &fdo)) {
+ return NULL;
+ }
+
+ if (s->archive == NULL)
+ return rpmarchive_closed();
+
+ Py_BEGIN_ALLOW_THREADS
+ rc = rpmfiArchiveWriteFile(s->archive, rpmfdGetFd(fdo));
+ Py_END_ALLOW_THREADS
+
+ if (rc)
+ return rpmarchive_error(rc);
+
+ Py_RETURN_NONE;
+}
+
+static struct PyMethodDef rpmarchive_methods[] = {
+ { "tell", (PyCFunction)rpmarchive_tell, METH_NOARGS,
+ "archive.tell() -- Return current position in archive." },
+ { "close", (PyCFunction)rpmarchive_close, METH_NOARGS,
+ "archive.close() -- Close archive and do final consistency checks."},
+ { "read", (PyCFunction)rpmarchive_read, METH_VARARGS|METH_KEYWORDS,
+ "archive.read(size=None) -- Read next size bytes from current file.\n\n"
+ "Returns bytes\n"},
+ { "write", (PyCFunction)rpmarchive_write, METH_VARARGS|METH_KEYWORDS,
+ "archive.write(buffer) -- Write buffer to current file." },
+ { "readto", (PyCFunction)rpmarchive_readto, METH_VARARGS|METH_KEYWORDS,
+ "archive.readto(fd, nodigest=None) -- Read content of fd\n"
+ "and write as content of the current file to archive." },
+ { "writeto", (PyCFunction)rpmarchive_writeto,METH_VARARGS|METH_KEYWORDS,
+ "archive.writeto(fd) -- Write content of current file in archive\n to fd." },
+ { "hascontent", (PyCFunction)rpmarchive_has_content, METH_NOARGS,
+ "archive.hascontent() -- Return if current file has a content.\n\n"
+ "Returns false for non regular and all but one of hardlinked files."},
+ { NULL, NULL, 0, NULL }
+};
+
+static char rpmarchive_doc[] =
+"Gives access to the payload of an rpm package.\n\n"
+"Is returned by .archive() method of an rpm.files instance.\n"
+"All methods can raise an IOError exception.";
+
+static PyObject *rpmarchive_iternext(rpmarchiveObject *s)
+{
+ PyObject *next = NULL;
+ int fx = rpmfiNext(s->archive);
+
+ if (fx >= 0) {
+ next = rpmfile_Wrap(s->files, fx);
+ } else if (fx < -1) {
+ next = rpmarchive_error(fx);
+ } else {
+ /* end of iteration, nothing to do */
+ }
+
+ return next;
+}
+
+PyTypeObject rpmarchive_Type = {
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
+ "rpm.archive", /* tp_name */
+ sizeof(rpmarchiveObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor) rpmarchive_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+ rpmarchive_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ PyObject_SelfIter, /* tp_iter */
+ (iternextfunc) rpmarchive_iternext, /* tp_iternext */
+ rpmarchive_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+};
+
+PyObject * rpmarchive_Wrap(PyTypeObject *subtype,
+ rpmfiles files, rpmfi archive)
+{
+ rpmarchiveObject *s = (rpmarchiveObject *)subtype->tp_alloc(subtype, 0);
+ if (s == NULL) return NULL;
+
+ s->files = rpmfilesLink(files);
+ s->archive = archive;
+
+ return (PyObject *) s;
+}
+
diff --git a/python/rpmarchive-py.h b/python/rpmarchive-py.h
new file mode 100644
index 000000000..96f09fd29
--- /dev/null
+++ b/python/rpmarchive-py.h
@@ -0,0 +1,15 @@
+#ifndef H_RPMARCHIVE_PY
+#define H_RPMARCHIVE_PY
+
+#include <rpm/rpmarchive.h>
+
+typedef struct rpmarchiveObject_s rpmarchiveObject;
+
+extern PyTypeObject rpmarchive_Type;
+
+#define rpmarchiveObject_Check(v) ((v)->ob_type == &rpmarchive_Type)
+
+PyObject * rpmarchive_Wrap(PyTypeObject *subtype,
+ rpmfiles files, rpmfi archive);
+
+#endif
diff --git a/python/rpmbmodule.c b/python/rpmbmodule.c
index f6e149118..ad30570e4 100644
--- a/python/rpmbmodule.c
+++ b/python/rpmbmodule.c
@@ -66,8 +66,8 @@ static struct PyModuleDef moduledef = {
NULL /* m_free */
};
-PyObject * PyInit__rpm(void); /* XXX eliminate gcc warning */
-PyObject * PyInit__rpm(void)
+PyObject * PyInit__rpmb(void); /* XXX eliminate gcc warning */
+PyObject * PyInit__rpmb(void)
{
PyObject *m;
diff --git a/python/rpmds-py.c b/python/rpmds-py.c
index 30fb908fb..9eae9a228 100644
--- a/python/rpmds-py.c
+++ b/python/rpmds-py.c
@@ -6,6 +6,7 @@
#include "header-py.h"
#include "rpmds-py.h"
+#include "rpmstrpool-py.h"
struct rpmdsObject_s {
PyObject_HEAD
@@ -96,21 +97,6 @@ rpmds_SetNoPromote(rpmdsObject * s, PyObject * args, PyObject * kwds)
return Py_BuildValue("i", rpmdsSetNoPromote(s->ds, nopromote));
}
-static PyObject *
-rpmds_Notify(rpmdsObject * s, PyObject * args, PyObject * kwds)
-{
- const char * where;
- int rc;
- char * kwlist[] = {"location", "returnCode", NULL};
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "si:Notify", kwlist,
- &where, &rc))
- return NULL;
-
- rpmdsNotify(s->ds, where, rc);
- Py_RETURN_NONE;
-}
-
/* XXX rpmdsFind uses bsearch on s->ds, so a sort is needed. */
static PyObject *
rpmds_Sort(rpmdsObject * s)
@@ -169,12 +155,18 @@ static PyObject *rpmds_Instance(rpmdsObject * s)
return Py_BuildValue("i", rpmdsInstance(s->ds));
}
-static PyObject * rpmds_Rpmlib(rpmdsObject * s)
+static PyObject * rpmds_Rpmlib(rpmdsObject * s, PyObject *args, PyObject *kwds)
{
+ rpmstrPool pool = NULL;
rpmds ds = NULL;
+ char * kwlist[] = {"pool", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O&:rpmds_Rpmlib", kwlist,
+ &poolFromPyObject, &pool))
+ return NULL;
/* XXX check return code, permit arg (NULL uses system default). */
- rpmdsRpmlib(&ds, NULL);
+ rpmdsRpmlibPool(pool, &ds, NULL);
return rpmds_Wrap(&rpmds_Type, ds);
}
@@ -183,39 +175,39 @@ static struct PyMethodDef rpmds_methods[] = {
{"Count", (PyCFunction)rpmds_Count, METH_NOARGS,
"Deprecated, use len(ds) instead.\n" },
{"Ix", (PyCFunction)rpmds_Ix, METH_NOARGS,
- "ds.Ix -> Ix - Return current element index.\n" },
+ "ds.Ix -> Ix -- Return current element index.\n" },
{"DNEVR", (PyCFunction)rpmds_DNEVR, METH_NOARGS,
- "ds.DNEVR -> DNEVR - Return current DNEVR.\n" },
+ "ds.DNEVR -> DNEVR -- Return current DNEVR.\n" },
{"N", (PyCFunction)rpmds_N, METH_NOARGS,
- "ds.N -> N - Return current N.\n" },
+ "ds.N -> N -- Return current N.\n" },
{"EVR", (PyCFunction)rpmds_EVR, METH_NOARGS,
- "ds.EVR -> EVR - Return current EVR.\n" },
+ "ds.EVR -> EVR -- Return current EVR.\n" },
{"Flags", (PyCFunction)rpmds_Flags, METH_NOARGS,
- "ds.Flags -> Flags - Return current Flags.\n" },
+ "ds.Flags -> Flags -- Return current Flags.\n" },
{"TagN", (PyCFunction)rpmds_TagN, METH_NOARGS,
- "ds.TagN -> TagN - Return current TagN.\n" },
+ "ds.TagN -> TagN -- Return TagN (RPMTAG_*NAME)\n\n"
+ "the type of all dependencies in this set.\n" },
{"Color", (PyCFunction)rpmds_Color, METH_NOARGS,
- "ds.Color -> Color - Return current Color.\n" },
+ "ds.Color -> Color -- Return current Color.\n" },
{"SetNoPromote",(PyCFunction)rpmds_SetNoPromote, METH_VARARGS|METH_KEYWORDS,
- NULL},
- {"Notify", (PyCFunction)rpmds_Notify, METH_VARARGS|METH_KEYWORDS,
- NULL},
+ "ds.SetNoPromote(noPromote) -- Set noPromote for this instance.\n\n"
+ "If True non existing epochs are no longer equal to an epoch of 0."},
{"Sort", (PyCFunction)rpmds_Sort, METH_NOARGS,
NULL},
{"Find", (PyCFunction)rpmds_Find, METH_O,
- NULL},
+ "ds.find(other_ds) -- Return index of other_ds in ds"},
{"Merge", (PyCFunction)rpmds_Merge, METH_O,
NULL},
{"Search", (PyCFunction)rpmds_Search, METH_O,
"ds.Search(element) -> matching ds index (-1 on failure)\n\
-- Check that element dependency range overlaps some member of ds.\n\
-The current index in ds is positioned at overlapping member upon success.\n" },
- {"Rpmlib", (PyCFunction)rpmds_Rpmlib, METH_NOARGS|METH_STATIC,
- "ds.Rpmlib -> nds - Return internal rpmlib dependency set.\n"},
+Check that element dependency range overlaps some member of ds.\n\
+The current index in ds is positioned at overlapping member." },
+ {"Rpmlib", (PyCFunction)rpmds_Rpmlib, METH_VARARGS|METH_KEYWORDS|METH_STATIC,
+ "ds.Rpmlib -> nds -- Return internal rpmlib dependency set.\n"},
{"Compare", (PyCFunction)rpmds_Compare, METH_O,
- NULL},
+ "ds.compare(other) -- Compare current entries of self and other.\n\nReturns True if the entries match each other, False otherwise"},
{"Instance", (PyCFunction)rpmds_Instance, METH_NOARGS,
- NULL},
+ "ds.Instance() -- Return rpmdb key of corresponding package or 0."},
{NULL, NULL} /* sentinel */
};
@@ -305,10 +297,12 @@ static PyObject * rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kw
rpmTagVal tagN = RPMTAG_REQUIRENAME;
rpmds ds = NULL;
Header h = NULL;
- char * kwlist[] = {"obj", "tag", NULL};
+ rpmstrPool pool = NULL;
+ char * kwlist[] = {"obj", "tag", "pool", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&:rpmds_new", kwlist,
- &obj, tagNumFromPyObject, &tagN))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&|O&:rpmds_new", kwlist,
+ &obj, tagNumFromPyObject, &tagN,
+ &poolFromPyObject, &pool))
return NULL;
if (PyTuple_Check(obj)) {
@@ -317,16 +311,16 @@ static PyObject * rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kw
rpmsenseFlags flags = RPMSENSE_ANY;
/* TODO: if flags are specified, evr should be required too */
if (PyArg_ParseTuple(obj, "s|O&s", &name, depflags, &flags, &evr)) {
- ds = rpmdsSingle(tagN, name, evr, flags);
+ ds = rpmdsSinglePool(pool, tagN, name, evr, flags);
} else {
PyErr_SetString(PyExc_ValueError, "invalid dependency tuple");
return NULL;
}
} else if (hdrFromPyObject(obj, &h)) {
if (tagN == RPMTAG_NEVR) {
- ds = rpmdsThis(h, RPMTAG_PROVIDENAME, RPMSENSE_EQUAL);
+ ds = rpmdsThisPool(pool, h, RPMTAG_PROVIDENAME, RPMSENSE_EQUAL);
} else {
- ds = rpmdsNew(h, tagN, 0);
+ ds = rpmdsNewPool(pool, h, tagN, 0);
}
} else {
PyErr_SetString(PyExc_TypeError, "header or tuple expected");
@@ -337,7 +331,11 @@ static PyObject * rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kw
}
static char rpmds_doc[] =
-"";
+ "rpm.ds (dependendcy set) gives a more convenient access to dependencies\n\n"
+ "It can hold multiple entries of Name Flags and EVR.\n"
+ "It typically represents all dependencies of one kind of a package\n"
+ "e.g. all Requires or all Conflicts.\n"
+ ;
PyTypeObject rpmds_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
diff --git a/python/rpmfd-py.c b/python/rpmfd-py.c
index a266ad686..85fb0cd24 100644
--- a/python/rpmfd-py.c
+++ b/python/rpmfd-py.c
@@ -8,6 +8,8 @@ struct rpmfdObject_s {
PyObject_HEAD
PyObject *md_dict;
FD_t fd;
+ char *mode;
+ char *flags;
};
FD_t rpmfdGetFd(rpmfdObject *fdo)
@@ -43,14 +45,21 @@ static PyObject *err_closed(void)
return NULL;
}
-static FD_t openPath(const char *path, const char *mode, const char *flags)
+static FD_t openPath(const char *path, const char *mode)
{
FD_t fd;
- char *m = rstrscat(NULL, mode, ".", flags, NULL);
Py_BEGIN_ALLOW_THREADS
- fd = Fopen(path, m);
+ fd = Fopen(path, mode);
+ Py_END_ALLOW_THREADS;
+ return fd;
+}
+
+static FD_t openFd(FD_t ofd, const char *mode)
+{
+ FD_t fd;
+ Py_BEGIN_ALLOW_THREADS
+ fd = Fdopen(ofd, mode);
Py_END_ALLOW_THREADS;
- free(m);
return fd;
}
@@ -59,6 +68,7 @@ static int rpmfd_init(rpmfdObject *s, PyObject *args, PyObject *kwds)
char *kwlist[] = { "obj", "mode", "flags", NULL };
const char *mode = "r";
const char *flags = "ufdio";
+ char *rpmio_mode = NULL;
PyObject *fo = NULL;
FD_t fd = NULL;
int fdno;
@@ -67,8 +77,10 @@ static int rpmfd_init(rpmfdObject *s, PyObject *args, PyObject *kwds)
&fo, &mode, &flags))
return -1;
+ rpmio_mode = rstrscat(NULL, mode, ".", flags, NULL);
+
if (PyBytes_Check(fo)) {
- fd = openPath(PyBytes_AsString(fo), mode, flags);
+ fd = openPath(PyBytes_AsString(fo), rpmio_mode);
} else if (PyUnicode_Check(fo)) {
PyObject *enc = NULL;
int rc;
@@ -78,26 +90,38 @@ static int rpmfd_init(rpmfdObject *s, PyObject *args, PyObject *kwds)
rc = utf8FromPyObject(fo, &enc);
#endif
if (rc) {
- fd = openPath(PyBytes_AsString(enc), mode, flags);
+ fd = openPath(PyBytes_AsString(enc), rpmio_mode);
Py_DECREF(enc);
}
+ } else if (rpmfdObject_Check(fo)) {
+ rpmfdObject *fdo = (rpmfdObject *)fo;
+ fd = openFd(fdDup(Fileno(fdo->fd)), rpmio_mode);
} else if ((fdno = PyObject_AsFileDescriptor(fo)) >= 0) {
- fd = fdDup(fdno);
+ fd = openFd(fdDup(fdno), rpmio_mode);
} else {
PyErr_SetString(PyExc_TypeError, "path or file object expected");
}
if (fd != NULL) {
- /* TODO: remember our filename, mode & flags */
Fclose(s->fd); /* in case __init__ was called again */
+ free(s->mode);
+ free(s->flags);
s->fd = fd;
+ s->mode = rstrdup(mode);
+ s->flags = rstrdup(flags);
} else {
PyErr_SetString(PyExc_IOError, Fstrerror(fd));
}
+ free(rpmio_mode);
return (fd == NULL) ? -1 : 0;
}
+static PyObject *rpmfd_open(PyObject *cls, PyObject *args, PyObject *kwds)
+{
+ return PyObject_Call(cls, args, kwds);
+}
+
static PyObject *do_close(rpmfdObject *s)
{
/* mimic python fileobject: close on closed file is not an error */
@@ -119,6 +143,8 @@ static void rpmfd_dealloc(rpmfdObject *s)
{
PyObject *res = do_close(s);
Py_XDECREF(res);
+ free(s->mode);
+ free(s->flags);
Py_TYPE(s)->tp_free((PyObject *)s);
}
@@ -230,7 +256,7 @@ static PyObject *rpmfd_read(rpmfdObject *s, PyObject *args, PyObject *kwds)
if (nb > 0) {
PyObject *tmp = PyBytes_FromStringAndSize(buf, nb);
- PyString_ConcatAndDel(&res, tmp);
+ PyBytes_ConcatAndDel(&res, tmp);
left -= nb;
}
} while (nb > 0);
@@ -272,6 +298,8 @@ static PyObject *rpmfd_write(rpmfdObject *s, PyObject *args, PyObject *kwds)
static char rpmfd_doc[] = "";
static struct PyMethodDef rpmfd_methods[] = {
+ { "open", (PyCFunction) rpmfd_open, METH_VARARGS|METH_KEYWORDS|METH_CLASS,
+ NULL },
{ "close", (PyCFunction) rpmfd_close, METH_NOARGS,
NULL },
{ "fileno", (PyCFunction) rpmfd_fileno, METH_NOARGS,
@@ -302,9 +330,21 @@ static PyObject *rpmfd_get_name(rpmfdObject *s)
return Py_BuildValue("s", Fdescr(s->fd));
}
+static PyObject *rpmfd_get_mode(rpmfdObject *s)
+{
+ return Py_BuildValue("s", s->mode);
+}
+
+static PyObject *rpmfd_get_flags(rpmfdObject *s)
+{
+ return Py_BuildValue("s", s->flags);
+}
+
static PyGetSetDef rpmfd_getseters[] = {
{ "closed", (getter)rpmfd_get_closed, NULL, NULL },
{ "name", (getter)rpmfd_get_name, NULL, NULL },
+ { "mode", (getter)rpmfd_get_mode, NULL, NULL },
+ { "flags", (getter)rpmfd_get_flags, NULL, NULL },
{ NULL },
};
diff --git a/python/rpmfi-py.c b/python/rpmfi-py.c
index 458e721b7..a1a743a1d 100644
--- a/python/rpmfi-py.c
+++ b/python/rpmfi-py.c
@@ -5,6 +5,7 @@
#include "header-py.h"
#include "rpmfi-py.h"
+#include "rpmstrpool-py.h"
struct rpmfiObject_s {
PyObject_HEAD
@@ -56,6 +57,18 @@ rpmfi_FN(rpmfiObject * s, PyObject * unused)
}
static PyObject *
+rpmfi_FindFN(rpmfiObject * s, PyObject * args, PyObject * kwds)
+{
+ char * kwlist[] = {"filename", NULL};
+ PyObject * filename = NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "S:FindFN", kwlist,
+ &filename))
+ return NULL;
+ return Py_BuildValue("i", rpmfiFindFN(s->fi, PyBytes_AsString(filename)));
+}
+
+
+static PyObject *
rpmfi_FFlags(rpmfiObject * s, PyObject * unused)
{
return Py_BuildValue("i", rpmfiFFlags(s->fi));
@@ -146,6 +159,25 @@ rpmfi_FClass(rpmfiObject * s, PyObject * unused)
}
static PyObject *
+rpmfi_FLinks(rpmfiObject * s, PyObject * unused)
+{
+ uint32_t nlinks;
+ const int * files;
+ PyObject * result;
+
+ nlinks = rpmfiFLinks(s->fi, &files);
+ if (nlinks==1) {
+ return Py_BuildValue("(i)", rpmfiFX(s->fi));
+ }
+
+ result = PyTuple_New(nlinks);
+ for (uint32_t i=0; i<nlinks; i++) {
+ PyTuple_SET_ITEM(result, i, PyInt_FromLong(files[i]));
+ }
+ return result;
+}
+
+static PyObject *
rpmfi_iternext(rpmfiObject * s)
{
PyObject * result = NULL;
@@ -206,47 +238,51 @@ rpmfi_iternext(rpmfiObject * s)
static struct PyMethodDef rpmfi_methods[] = {
{"FC", (PyCFunction)rpmfi_FC, METH_NOARGS,
- NULL},
+ "fi.FC() -- Return number of files entries."},
{"FX", (PyCFunction)rpmfi_FX, METH_NOARGS,
- NULL},
+ "fi.FX() -- Return current position of the iterator."},
{"DC", (PyCFunction)rpmfi_DC, METH_NOARGS,
- NULL},
+ "fi.DC() --Return number of directory entries."},
{"DX", (PyCFunction)rpmfi_DX, METH_NOARGS,
- NULL},
+ "fi.DX() -- Return number of directory entry matching current file."},
{"BN", (PyCFunction)rpmfi_BN, METH_NOARGS,
- NULL},
+ "fi.BN() -- Return base name of current file."},
{"DN", (PyCFunction)rpmfi_DN, METH_NOARGS,
- NULL},
+ "fi.DN() -- Return directory name of the current file."},
{"FN", (PyCFunction)rpmfi_FN, METH_NOARGS,
- NULL},
+ "fi.FN() -- Return the name/path of the current file."},
+ {"FindFN", (PyCFunction)rpmfi_FindFN, METH_VARARGS|METH_KEYWORDS,
+ "fi.FindFN(pathname) -- Return entry number of given pathname.\n\nReturn -1 if file is not found.\nLeading '.' in the given name is stripped before the search."},
{"FFlags", (PyCFunction)rpmfi_FFlags, METH_NOARGS,
- NULL},
+ "fi.FFlags() -- Return the flags of the current file."},
{"VFlags", (PyCFunction)rpmfi_VFlags, METH_NOARGS,
- NULL},
+ "fi.VFlags() -- Return the verify flags of the current file.\n\nSee RPMVERIFY_* (in rpmvf.h)"},
{"FMode", (PyCFunction)rpmfi_FMode, METH_NOARGS,
- NULL},
+ "fi.FMode() -- Return the mode flags of the current file."},
{"FState", (PyCFunction)rpmfi_FState, METH_NOARGS,
- NULL},
+ "fi.FState() -- Return the file state of the current file."},
{"MD5", (PyCFunction)rpmfi_Digest, METH_NOARGS,
- NULL},
+ "fi.() -- Return the checksum of the current file.\n\nDEPRECATED! Use fi.Digest instead!"},
{"Digest", (PyCFunction)rpmfi_Digest, METH_NOARGS,
- NULL},
+ "fi.() -- Return the checksum of the current file."},
{"FLink", (PyCFunction)rpmfi_FLink, METH_NOARGS,
- NULL},
+ "fi.() -- Return the link target of the current file.\n\nFor soft links only."},
{"FSize", (PyCFunction)rpmfi_FSize, METH_NOARGS,
- NULL},
+ "fi.() -- Return the size of the current file."},
{"FRdev", (PyCFunction)rpmfi_FRdev, METH_NOARGS,
- NULL},
+ "fi.() -- Return the device number of the current file.\n\nFor device files only."},
{"FMtime", (PyCFunction)rpmfi_FMtime, METH_NOARGS,
- NULL},
+ "fi.() -- Return the modification time of the current file."},
{"FUser", (PyCFunction)rpmfi_FUser, METH_NOARGS,
- NULL},
+ "fi.() -- Return the user name owning the current file."},
{"FGroup", (PyCFunction)rpmfi_FGroup, METH_NOARGS,
- NULL},
+ "fi.() -- Return the group name of the current file."},
{"FColor", (PyCFunction)rpmfi_FColor, METH_NOARGS,
- NULL},
+ "fi.() -- Return the color of the current file.\n\n2 for 64 bit binaries\n1 for 32 bit binaries\n0 for everything else"},
{"FClass", (PyCFunction)rpmfi_FClass, METH_NOARGS,
- NULL},
+ "fi.() -- Return the classification of the current file."},
+ {"FLinks", (PyCFunction)rpmfi_FLinks, METH_NOARGS,
+ "fi.() -- Return the number of hardlinks pointing to of the\ncurrent file."},
{NULL, NULL} /* sentinel */
};
@@ -299,13 +335,15 @@ static PyObject * rpmfi_new(PyTypeObject * subtype, PyObject *args, PyObject *kw
rpmfi fi = NULL;
rpmTagVal tagN = RPMTAG_BASENAMES;
int flags = 0;
- char * kwlist[] = {"header", "tag", "flags", NULL};
+ rpmstrPool pool = NULL;
+ char * kwlist[] = {"header", "tag", "flags", "pool", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|Oi:rpmfi_init", kwlist,
- hdrFromPyObject, &h, &to, &flags))
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|OiO&:rpmfi_init", kwlist,
+ hdrFromPyObject, &h, &to, &flags,
+ poolFromPyObject, &pool))
return NULL;
- fi = rpmfiNew(NULL, h, tagN, flags);
+ fi = rpmfiNewPool(pool, h, tagN, flags);
if (fi == NULL) {
PyErr_SetString(PyExc_ValueError, "invalid file data in header");
@@ -316,7 +354,11 @@ static PyObject * rpmfi_new(PyTypeObject * subtype, PyObject *args, PyObject *kw
}
static char rpmfi_doc[] =
-"";
+"File iterator\n\n"
+"DEPRECATED! This old API mixes storing and iterating over the meta data\n"
+"of the files of a package. Use rpm.files and rpm.file data types as a\n"
+"much cleaner API.\n\n"
+"Iteration returns a tuple of\n(FN, FSize, FMode, FMtime, FFlags, FRdev, FInode, FNlink, FState,\n VFlags, FUser, FGroup, Digest)";
PyTypeObject rpmfi_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
diff --git a/python/rpmfiles-py.c b/python/rpmfiles-py.c
new file mode 100644
index 000000000..d69d1f2ee
--- /dev/null
+++ b/python/rpmfiles-py.c
@@ -0,0 +1,598 @@
+#include "rpmsystem-py.h"
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmpgp.h>
+
+#include "header-py.h"
+#include "rpmfi-py.h"
+#include "rpmfiles-py.h"
+#include "rpmfd-py.h"
+#include "rpmarchive-py.h"
+#include "rpmstrpool-py.h"
+
+/* A single file from rpmfiles set, can't be independently instanciated */
+struct rpmfileObject_s {
+ PyObject_HEAD
+ PyObject *md_dict;
+ rpmfiles files; /* reference to rpmfiles */
+ int ix; /* index to rpmfiles */
+};
+
+static void rpmfile_dealloc(rpmfileObject * s)
+{
+ s->files = rpmfilesFree(s->files);
+ Py_TYPE(s)->tp_free((PyObject *)s);
+}
+
+static char rpmfile_doc[] =
+ "Gives access to the meta data of a single file.\n\n"
+ "Instances of this class are only available through an rpm.files object.";
+
+static PyObject *rpmfile_fx(rpmfileObject *s)
+{
+ return Py_BuildValue("i", s->ix);
+}
+
+static PyObject *rpmfile_dx(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesDI(s->files, s->ix));
+}
+
+static PyObject *rpmfile_name(rpmfileObject *s)
+{
+ char * fn = rpmfilesFN(s->files, s->ix);
+ PyObject *o = Py_BuildValue("s", fn);
+ free(fn);
+ return o;
+}
+
+static PyObject *rpmfile_basename(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesBN(s->files, s->ix));
+}
+
+static PyObject *rpmfile_dirname(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesDN(s->files, rpmfilesDI(s->files, s->ix)));
+}
+
+static PyObject *rpmfile_orig_name(rpmfileObject *s)
+{
+ char * fn = rpmfilesOFN(s->files, s->ix);
+ PyObject *o = Py_BuildValue("s", fn);
+ free(fn);
+ return o;
+}
+
+static PyObject *rpmfile_orig_basename(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesOBN(s->files, s->ix));
+}
+
+static PyObject *rpmfile_orig_dirname(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesODN(s->files, rpmfilesODI(s->files, s->ix)));
+}
+static PyObject *rpmfile_mode(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFMode(s->files, s->ix));
+}
+
+static PyObject *rpmfile_size(rpmfileObject *s)
+{
+ return Py_BuildValue("L", rpmfilesFSize(s->files, s->ix));
+}
+
+static PyObject *rpmfile_mtime(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFMtime(s->files, s->ix));
+}
+
+static PyObject *rpmfile_rdev(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFRdev(s->files, s->ix));
+}
+
+static PyObject *rpmfile_inode(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFInode(s->files, s->ix));
+}
+
+static PyObject *rpmfile_nlink(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFNlink(s->files, s->ix));
+}
+
+static PyObject *rpmfile_linkto(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesFLink(s->files, s->ix));
+}
+
+static PyObject *rpmfile_user(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesFUser(s->files, s->ix));
+}
+
+static PyObject *rpmfile_group(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesFGroup(s->files, s->ix));
+}
+
+static PyObject *rpmfile_fflags(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFFlags(s->files, s->ix));
+}
+
+static PyObject *rpmfile_vflags(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesVFlags(s->files, s->ix));
+}
+
+static PyObject *rpmfile_color(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFColor(s->files, s->ix));
+}
+
+static PyObject *rpmfile_state(rpmfileObject *s)
+{
+ return Py_BuildValue("i", rpmfilesFState(s->files, s->ix));
+}
+
+static PyObject *rpmfile_digest(rpmfileObject *s)
+{
+ size_t diglen = 0;
+ const unsigned char *digest = rpmfilesFDigest(s->files, s->ix,
+ NULL, &diglen);
+ if (digest) {
+ char * hex = pgpHexStr(digest, diglen);
+ PyObject *o = Py_BuildValue("s", hex);
+ free(hex);
+ return o;
+ }
+ Py_RETURN_NONE;
+}
+
+static PyObject *rpmfile_class(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesFClass(s->files, s->ix));
+}
+
+static PyObject *rpmfile_caps(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesFCaps(s->files, s->ix));
+}
+
+static PyObject *rpmfile_langs(rpmfileObject *s)
+{
+ return Py_BuildValue("s", rpmfilesFLangs(s->files, s->ix));
+}
+
+static PyObject *rpmfile_links(rpmfileObject *s)
+{
+ PyObject *result = NULL;
+ const int * links = NULL;
+ uint32_t nlinks = rpmfilesFLinks(s->files, s->ix, &links);
+
+ if (nlinks == 0)
+ Py_RETURN_NONE;
+ else if (nlinks == 1)
+ links = &s->ix; /* file itself */
+
+ result = PyTuple_New(nlinks);
+ if (result) {
+ for (uint32_t i = 0; i < nlinks; i++) {
+ int lix = links[i];
+ PyObject * o;
+
+ if (lix == s->ix) {
+ /* file itself, return a reference instead of new object */
+ Py_INCREF(s);
+ o = (PyObject *) s;
+ } else {
+ o = rpmfile_Wrap(s->files, lix);
+ }
+
+ PyTuple_SET_ITEM(result, i, o);
+ }
+ }
+ return result;
+}
+
+/*
+ * Exported as "matches" instead of a rich comparison operator or such
+ * as this cannot be used for comparing file *object* equality,
+ * rpmfilesCompare() determines whether the file *contents* match.
+ */
+static PyObject *rpmfile_matches(rpmfileObject *s, PyObject *o)
+{
+ PyObject *result = NULL;
+ if (rpmfileObject_Check(o)) {
+ rpmfileObject *of = (rpmfileObject *)o;
+ int rc = rpmfilesCompare(s->files, s->ix, of->files, of->ix);
+ result = PyBool_FromLong(rc == 0);
+ } else {
+ PyErr_SetObject(PyExc_TypeError, o);
+ }
+ return result;
+}
+
+static PyObject *rpmfile_verify(rpmfileObject *s, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = { "omitMask", NULL };
+ rpmVerifyAttrs omitMask = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i", kwlist, &omitMask))
+ return NULL;
+
+ return Py_BuildValue("i", rpmfilesVerify(s->files, s->ix, omitMask));
+}
+
+static PyGetSetDef rpmfile_getseters[] = {
+ { "fx", (getter) rpmfile_fx, NULL,
+ "index in header and rpm.files object" },
+ { "dx", (getter) rpmfile_dx, NULL,
+ "index of dirname entry" },
+ { "name", (getter) rpmfile_name, NULL,
+ "file name (path)" },
+ { "basename", (getter) rpmfile_basename, NULL, NULL },
+ { "dirname", (getter) rpmfile_dirname, NULL, NULL },
+ { "orig_name", (getter) rpmfile_orig_name, NULL,
+ "original file name (may differ due to relocation)" },
+ { "orig_basename", (getter) rpmfile_orig_basename, NULL,
+ "original base name (may differ due to relocation)" },
+ { "orig_dirname", (getter) rpmfile_orig_dirname, NULL,
+ "original dir name (may differ due to relocation)" },
+ { "mode", (getter) rpmfile_mode, NULL,
+ "mode flags / unix permissions" },
+ { "mtime", (getter) rpmfile_mtime, NULL,
+ "modification time (in unix time)" },
+ { "size", (getter) rpmfile_size, NULL,
+ "file size" },
+ { "rdev", (getter) rpmfile_rdev, NULL,
+ "device number - for device files only" },
+ { "inode", (getter) rpmfile_inode, NULL,
+ "inode number - contains fake, data used to identify hard liked files" },
+ { "fflags", (getter) rpmfile_fflags, NULL,
+ "file flags - see RPMFILE_* constants" },
+ { "vflags", (getter) rpmfile_vflags, NULL,
+ "verification flags - see RPMVERIFY_* (in rpmvf.h)" },
+ { "linkto", (getter) rpmfile_linkto, NULL,
+ "link target - symlinks only" },
+ { "color", (getter) rpmfile_color, NULL,
+ "file color - 2 for 64 bit binaries, 1 for 32 bit binaries, 0 else" },
+ { "nlink", (getter) rpmfile_nlink, NULL,
+ "number of hardlinks pointing to the same content as this file" },
+ { "links", (getter) rpmfile_links, NULL,
+ "list of file indexes that are hardlinked with this file" },
+ { "user", (getter) rpmfile_user, NULL,
+ "user name owning this file" },
+ { "group", (getter) rpmfile_group, NULL,
+ "group name owning this file" },
+ { "digest", (getter) rpmfile_digest, NULL,
+ "check sum of file content" },
+ { "class", (getter) rpmfile_class, NULL,
+ "classfication of file content based on libmagic/file(1)" },
+ { "state", (getter) rpmfile_state, NULL,
+ "file state - see RPMFILE_STATE_* constants" },
+ { "langs", (getter) rpmfile_langs, NULL,
+ "language the file provides (typically for doc files)" },
+ { "caps", (getter) rpmfile_caps, NULL,
+ "file capabilities" },
+ { NULL, NULL, NULL, NULL }
+};
+
+static struct PyMethodDef rpmfile_methods[] = {
+ { "matches", (PyCFunction) rpmfile_matches, METH_O,
+ NULL },
+ { "verify", (PyCFunction) rpmfile_verify, METH_VARARGS|METH_KEYWORDS,
+ NULL },
+ { NULL, NULL, 0, NULL }
+};
+
+PyTypeObject rpmfile_Type = {
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
+ "rpm.file", /* tp_name */
+ sizeof(rpmfileObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ (destructor) rpmfile_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ (reprfunc)rpmfile_name, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+ rpmfile_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ rpmfile_methods, /* tp_methods */
+ 0, /* tp_members */
+ rpmfile_getseters, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+};
+
+PyObject * rpmfile_Wrap(rpmfiles files, int ix)
+{
+ rpmfileObject *s = PyObject_New(rpmfileObject, &rpmfile_Type);
+ if (s == NULL) return NULL;
+
+ s->files = rpmfilesLink(files);
+ s->ix = ix;
+ return (PyObject *) s;
+}
+
+/* The actual rpmfiles info set */
+struct rpmfilesObject_s {
+ PyObject_HEAD
+ PyObject *md_dict; /*!< to look like PyModuleObject */
+ rpmfiles files;
+};
+
+static void rpmfiles_dealloc(rpmfilesObject * s)
+{
+ s->files = rpmfilesFree(s->files);
+ Py_TYPE(s)->tp_free((PyObject *)s);
+}
+
+static PyObject * rpmfiles_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
+{
+ PyObject * to = NULL;
+ Header h = NULL;
+ rpmfiles files = NULL;
+ rpmTagVal tagN = RPMTAG_BASENAMES;
+ int flags = 0;
+ rpmstrPool pool = NULL;
+ char * kwlist[] = {"header", "tag", "flags", "pool", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|OiO&:rpmfiles_new", kwlist,
+ hdrFromPyObject, &h, &to, &flags,
+ poolFromPyObject, &pool))
+ return NULL;
+
+ files = rpmfilesNew(pool, h, tagN, flags);
+
+ if (files == NULL) {
+ PyErr_SetString(PyExc_ValueError, "invalid file data in header");
+ return NULL;
+ }
+
+ return rpmfiles_Wrap(subtype, files);
+}
+
+static Py_ssize_t rpmfiles_length(rpmfilesObject *s)
+{
+ return rpmfilesFC(s->files);
+}
+
+static PyObject * rpmfiles_getitem(rpmfilesObject *s, Py_ssize_t ix)
+{
+ if (ix >= 0 && ix < rpmfilesFC(s->files))
+ return rpmfile_Wrap(s->files, ix);
+
+ PyErr_SetObject(PyExc_IndexError, Py_BuildValue("i", ix));
+ return NULL;
+}
+
+static int rpmfiles_contains(rpmfilesObject *s, PyObject *value)
+{
+ const char *fn = NULL;
+
+ if (!PyArg_Parse(value, "s", &fn))
+ return -1;
+
+ return (rpmfilesFindFN(s->files, fn) >= 0) ? 1 : 0;
+}
+
+static PySequenceMethods rpmfiles_as_sequence = {
+ (lenfunc)rpmfiles_length, /* sq_length */
+ 0, /* sq_concat */
+ 0, /* sq_repeat */
+ (ssizeargfunc) rpmfiles_getitem, /* sq_item */
+ 0, /* sq_slice */
+ 0, /* sq_ass_item */
+ 0, /* sq_ass_slice */
+ (objobjproc)rpmfiles_contains, /* sq_contains */
+ 0, /* sq_inplace_concat */
+ 0, /* sq_inplace_repeat */
+};
+
+static PyObject * rpmfiles_find(rpmfileObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ const char *fn = NULL;
+ int fx, orig = 0;
+ char * kwlist[] = {"filename", "orig", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, &fn, &orig))
+ return NULL;
+
+ if (orig)
+ fx = rpmfilesFindOFN(s->files, fn);
+ else
+ fx = rpmfilesFindFN(s->files, fn);
+
+ if (fx >= 0)
+ return rpmfile_Wrap(s->files, fx);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *rpmfiles_archive(rpmfilesObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ char * kwlist[] = {"fd", "write", NULL};
+ rpmfdObject *fdo = NULL;
+ FD_t fd = NULL;
+ rpmfi archive = NULL;
+ int writer = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|i", kwlist,
+ rpmfdFromPyObject, &fdo, &writer)) {
+ return NULL;
+ }
+
+ fd = rpmfdGetFd(fdo);
+ if (writer) {
+ archive = rpmfiNewArchiveWriter(fd, s->files);
+ } else {
+ archive = rpmfiNewArchiveReader(fd, s->files, RPMFI_ITER_READ_ARCHIVE);
+ }
+
+ return rpmarchive_Wrap(&rpmarchive_Type, s->files, archive);
+}
+
+static PyObject *rpmfiles_subscript(rpmfilesObject *s, PyObject *item)
+{
+ PyObject *str = NULL;
+
+ /* treat numbers as sequence accesses */
+ if (PyInt_Check(item)) {
+ return rpmfiles_getitem(s, PyInt_AsSsize_t(item));
+ } else if (PyLong_Check(item)) {
+ return rpmfiles_getitem(s, PyLong_AsSsize_t(item));
+ }
+
+ /* handle slices by returning tuples of rpm.file items */
+ if (PySlice_Check(item)) {
+ Py_ssize_t start, stop, step, slicelength, i, cur;
+ PyObject * result;
+
+ if (PySlice_GetIndicesEx(
+#if PY_MAJOR_VERSION < 3
+ (PySliceObject*)
+#endif
+ item, rpmfiles_length(s),
+ &start, &stop, &step, &slicelength) < 0) {
+ return NULL;
+ }
+
+ result = PyTuple_New(slicelength);
+ if (result) {
+ for (cur = start, i = 0; i < slicelength; cur += step, i++) {
+ PyTuple_SET_ITEM(result, i, rpmfiles_getitem(s, cur));
+ }
+ }
+ return result;
+ }
+
+ /* ... and strings as mapping access */
+ if (utf8FromPyObject(item, &str)) {
+ int fx = rpmfilesFindFN(s->files, PyBytes_AsString(str));
+ Py_DECREF(str);
+
+ if (fx >= 0) {
+ return rpmfile_Wrap(s->files, fx);
+ } else {
+ PyErr_SetObject(PyExc_KeyError, item);
+ }
+ } else {
+ PyErr_SetObject(PyExc_TypeError, item);
+ }
+
+ return NULL;
+}
+
+static PyMappingMethods rpmfiles_as_mapping = {
+ (lenfunc) rpmfiles_length, /* mp_length */
+ (binaryfunc) rpmfiles_subscript, /* mp_subscript */
+ 0, /* mp_ass_subscript */
+};
+
+static struct PyMethodDef rpmfiles_methods[] = {
+ { "archive", (PyCFunction) rpmfiles_archive, METH_VARARGS|METH_KEYWORDS,
+ "files.archive(fd, write=False) -- Return a rpm.archive object\n\n"
+ "Args:\n"
+ " fd : File to read from or write to.\n"
+ " write : True to get an archive writer, False for an archive reader"},
+ { "find", (PyCFunction) rpmfiles_find, METH_VARARGS|METH_KEYWORDS,
+ "files.find(filename, orig=False) -- Return index of given file name.\n\n"
+ " Return -1 if file is not found.\n"
+ " Leading \".\" in filename is ignored."},
+ { NULL, NULL, 0, NULL }
+};
+
+static char rpmfiles_doc[] =
+ "rpm.files(hdr, tag=RPMTAG_BASENAMES, flags=None, pool=None)\n\n"
+ "Stores the meta data of a package's files.\n\n"
+ "Args:\n"
+ "\thdr: The header object to get the data from.\n"
+ "\tflags : Controls which data to store and whether to create\n\t\tcopies or use the data from the header.\n\t\tBy default all data is copied.\n\t\tSee RPMFI_* constants in rpmfiles.h.\n"
+ "\tpool : rpm.strpool object to store the strings in.\n\t\tLeave empty to use global pool.\n"
+ "\ttag : Obsolete. Leave alone!\n\n"
+ "rpm.files is basically a sequence of rpm.file objects.\nNote that this is a read only data structure. To write file data you\nhave to write it directly into aheader object.";
+
+PyTypeObject rpmfiles_Type = {
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
+ "rpm.files", /* tp_name */
+ sizeof(rpmfilesObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ (destructor) rpmfiles_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ &rpmfiles_as_sequence, /* tp_as_sequence */
+ &rpmfiles_as_mapping, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+ rpmfiles_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ rpmfiles_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ (newfunc) rpmfiles_new, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+};
+
+PyObject * rpmfiles_Wrap(PyTypeObject *subtype, rpmfiles files)
+{
+ rpmfilesObject *s = (rpmfilesObject *)subtype->tp_alloc(subtype, 0);
+ if (s == NULL) return NULL;
+
+ s->files = files;
+ return (PyObject *) s;
+}
+
diff --git a/python/rpmfiles-py.h b/python/rpmfiles-py.h
new file mode 100644
index 000000000..2e27d3db4
--- /dev/null
+++ b/python/rpmfiles-py.h
@@ -0,0 +1,18 @@
+#ifndef H_RPMFILES_PY
+#define H_RPMFILES_PY
+
+#include <rpm/rpmfiles.h>
+
+typedef struct rpmfileObject_s rpmfileObject;
+typedef struct rpmfilesObject_s rpmfilesObject;
+
+extern PyTypeObject rpmfile_Type;
+extern PyTypeObject rpmfiles_Type;
+
+#define rpmfileObject_Check(v) ((v)->ob_type == &rpmfile_Type)
+#define rpmfilesObject_Check(v) ((v)->ob_type == &rpmfiles_Type)
+
+PyObject * rpmfile_Wrap(rpmfiles files, int ix);
+PyObject * rpmfiles_Wrap(PyTypeObject *subtype, rpmfiles files);
+
+#endif
diff --git a/python/rpmii-py.c b/python/rpmii-py.c
index d7713affd..180741479 100644
--- a/python/rpmii-py.c
+++ b/python/rpmii-py.c
@@ -1,7 +1,9 @@
#include "rpmsystem-py.h"
#include <rpm/rpmdb.h>
+#include <rpm/rpmtd.h>
+#include "rpmtd-py.h"
#include "rpmii-py.h"
#include "header-py.h"
@@ -36,18 +38,25 @@ struct rpmiiObject_s {
PyObject *md_dict; /*!< to look like PyModuleObject */
PyObject *ref; /* for db/ts refcounting */
rpmdbIndexIterator ii;
+ rpmtd keytd;
};
static PyObject *
rpmii_iternext(rpmiiObject * s)
{
- char * key;
- size_t keylen;
- if (s->ii == NULL || (rpmdbIndexIteratorNext(s->ii, (const void**)&key, &keylen)) != 0) {
- s->ii = rpmdbIndexIteratorFree(s->ii);
- return NULL;
+ PyObject *keyo = NULL;
+
+ if (s->ii != NULL) {
+ if (rpmdbIndexIteratorNextTd(s->ii, s->keytd) == 0) {
+ /* The keys must never be arrays so rpmtd_AsPyObj() wont work */
+ keyo = rpmtd_ItemAsPyobj(s->keytd, rpmtdClass(s->keytd));
+ rpmtdFreeData(s->keytd);
+ } else {
+ s->ii = rpmdbIndexIteratorFree(s->ii);
+ }
}
- return PyBytes_FromStringAndSize(key, keylen);
+
+ return keyo;
};
static PyObject *
@@ -75,6 +84,7 @@ static struct PyMethodDef rpmii_methods[] = {
static void rpmii_dealloc(rpmiiObject * s)
{
s->ii = rpmdbIndexIteratorFree(s->ii);
+ rpmtdFree(s->keytd);
Py_DECREF(s->ref);
Py_TYPE(s)->tp_free((PyObject *)s);
}
@@ -88,7 +98,9 @@ static PyNumberMethods rpmii_as_number = {
0, /* nb_add */
0, /* nb_subtract */
0, /* nb_multiply */
+#if PY_MAJOR_VERSION < 3
0, /* nb_divide */
+#endif
0, /* nb_remainder */
0, /* nb_divmod */
0, /* nb_power */
@@ -151,6 +163,7 @@ PyObject * rpmii_Wrap(PyTypeObject *subtype, rpmdbIndexIterator ii, PyObject *s)
iio->ii = ii;
iio->ref = s;
+ iio->keytd = rpmtdNew();
Py_INCREF(iio->ref);
return (PyObject *) iio;
}
diff --git a/python/rpmmacro-py.c b/python/rpmmacro-py.c
index 3eb0acb56..3cb1a51f5 100644
--- a/python/rpmmacro-py.c
+++ b/python/rpmmacro-py.c
@@ -2,6 +2,7 @@
#include <rpm/rpmmacro.h>
+#include "header-py.h" /* XXX for pyrpmError, doh */
#include "rpmmacro-py.h"
PyObject *
@@ -14,7 +15,7 @@ rpmmacro_AddMacro(PyObject * self, PyObject * args, PyObject * kwds)
&name, &val))
return NULL;
- addMacro(NULL, name, NULL, val, -1);
+ rpmPushMacro(NULL, name, NULL, val, -1);
Py_RETURN_NONE;
}
@@ -28,7 +29,7 @@ rpmmacro_DelMacro(PyObject * self, PyObject * args, PyObject * kwds)
if (!PyArg_ParseTupleAndKeywords(args, kwds, "s:DelMacro", kwlist, &name))
return NULL;
- delMacro(NULL, name);
+ rpmPopMacro(NULL, name);
Py_RETURN_NONE;
}
@@ -37,7 +38,7 @@ PyObject *
rpmmacro_ExpandMacro(PyObject * self, PyObject * args, PyObject * kwds)
{
const char *macro;
- PyObject *res;
+ PyObject *res = NULL;
int num = 0;
char * kwlist[] = {"macro", "numeric", NULL};
@@ -47,8 +48,11 @@ rpmmacro_ExpandMacro(PyObject * self, PyObject * args, PyObject * kwds)
if (num) {
res = Py_BuildValue("i", rpmExpandNumeric(macro));
} else {
- char *str = rpmExpand(macro, NULL);
- res = Py_BuildValue("s", str);
+ char *str = NULL;
+ if (rpmExpandMacros(NULL, macro, &str, 0) < 0)
+ PyErr_SetString(pyrpmError, "error expanding macro");
+ else
+ res = Py_BuildValue("s", str);
free(str);
}
return res;
diff --git a/python/rpmmi-py.c b/python/rpmmi-py.c
index 8e670ce02..379cafb38 100644
--- a/python/rpmmi-py.c
+++ b/python/rpmmi-py.c
@@ -1,6 +1,7 @@
#include "rpmsystem-py.h"
#include <rpm/rpmdb.h>
+#include <rpm/header.h>
#include "rpmmi-py.h"
#include "header-py.h"
@@ -36,20 +37,20 @@
* \code
* import rpm
* ts = rpm.TransactionSet()
- * mi = ts.dbMatch('name', "kernel")
+ * mi = ts.dbMatch('name', 'kernel')
* for h in mi:
- * print "%s-%s-%s" % (h['name'], h['version'], h['release'])
+ * print '%s-%s-%s' % (h['name'], h['version'], h['release'])
* \endcode
*
* Finally, here's an example that retrieves all packages whose name
- * matches the glob expression "XFree*":
+ * matches the glob expression 'XFree*':
* \code
* import rpm
* ts = rpm.TransactionSet()
* mi = ts.dbMatch()
- * mi.pattern('name', rpm.RPMMIRE_GLOB, "XFree*")
+ * mi.pattern('name', rpm.RPMMIRE_GLOB, 'XFree*')
* for h in mi:
- * print "%s-%s-%s" % (h['name'], h['version'], h['release'])
+ * print '%s-%s-%s' % (h['name'], h['version'], h['release'])
* \endcode
*
*/
@@ -74,6 +75,7 @@ rpmmi_iternext(rpmmiObject * s)
s->mi = rpmdbFreeIterator(s->mi);
return NULL;
}
+ headerLink(h);
return hdr_Wrap(&hdr_Type, h);
}
@@ -114,7 +116,7 @@ rpmmi_Pattern(rpmmiObject * s, PyObject * args, PyObject * kwds)
static struct PyMethodDef rpmmi_methods[] = {
{"instance", (PyCFunction) rpmmi_Instance, METH_NOARGS,
- NULL },
+ "mi.instance() -- Return the number (db key) of the current header."},
{"count", (PyCFunction) rpmmi_Count, METH_NOARGS,
"Deprecated, use len(mi) instead.\n" },
{"pattern", (PyCFunction) rpmmi_Pattern, METH_VARARGS|METH_KEYWORDS,
@@ -149,7 +151,9 @@ static PyNumberMethods rpmmi_as_number = {
0, /* nb_add */
0, /* nb_subtract */
0, /* nb_multiply */
+#if PY_MAJOR_VERSION < 3
0, /* nb_divide */
+#endif
0, /* nb_remainder */
0, /* nb_divmod */
0, /* nb_power */
@@ -160,7 +164,40 @@ static PyNumberMethods rpmmi_as_number = {
};
static char rpmmi_doc[] =
-"";
+ "rpm.mi match iterator object represents the result of a\n"
+ " database query.\n"
+ "\n"
+ "Instances of the rpm.mi object provide access to headers that match\n"
+ "certain criteria. Typically, a primary index is accessed to find\n"
+ "a set of headers that contain a key, and each header is returned\n"
+ "serially.\n"
+ "\n"
+ "To obtain a rpm.mi object to query the database used by a transaction,\n"
+ "the ts.match(tag,key,len) method is used.\n"
+ "\n"
+ "Here's an example that prints the name of all installed packages:\n"
+ " import rpm\n"
+ " ts = rpm.TransactionSet()\n"
+ " for h in ts.dbMatch():\n"
+ " print h['name']\n"
+ "\n"
+ "Here's a more typical example that uses the Name index to retrieve\n"
+ "all installed kernel(s):\n"
+ " import rpm\n"
+ " ts = rpm.TransactionSet()\n"
+ " mi = ts.dbMatch('name', 'kernel')\n"
+ " for h in mi:\n"
+ " print '%s-%s-%s' % (h['name'], h['version'], h['release'])\n"
+ "\n"
+ "Finally, here's an example that retrieves all packages whose name\n"
+ "matches the glob expression 'XFree*':\n"
+ " import rpm\n"
+ " ts = rpm.TransactionSet()\n"
+ " mi = ts.dbMatch()\n"
+ " mi.pattern('name', rpm.RPMMIRE_GLOB, 'XFree*')\n"
+ " for h in mi:\n"
+ " print '%s-%s-%s' % (h['name'], h['version'], h['release'])\n"
+;
PyTypeObject rpmmi_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
diff --git a/python/rpmmodule.c b/python/rpmmodule.c
index 4f2c31869..d1390e889 100644
--- a/python/rpmmodule.c
+++ b/python/rpmmodule.c
@@ -8,14 +8,17 @@
#include <rpm/rpmmacro.h>
#include "header-py.h"
+#include "rpmarchive-py.h"
#include "rpmds-py.h"
#include "rpmfd-py.h"
#include "rpmfi-py.h"
+#include "rpmfiles-py.h"
#include "rpmkeyring-py.h"
#include "rpmmi-py.h"
#include "rpmii-py.h"
#include "rpmps-py.h"
#include "rpmmacro-py.h"
+#include "rpmstrpool-py.h"
#include "rpmtd-py.h"
#include "rpmte-py.h"
#include "rpmts-py.h"
@@ -46,10 +49,18 @@ static PyObject * signalCaught(PyObject *self, PyObject *o)
static PyObject * checkSignals(PyObject * self)
{
- rpmdbCheckSignals();
- Py_RETURN_NONE;
+ return Py_BuildValue("i", rpmsqPoll());
+}
+
+static PyObject * blockSignals(PyObject * self, PyObject *arg)
+{
+ int block;
+ if (!PyArg_Parse(arg, "p", &block)) return NULL;
+
+ return Py_BuildValue("i", rpmsqBlock(block ? SIG_BLOCK : SIG_UNBLOCK));
}
+
static PyObject * setLogFile (PyObject * self, PyObject *arg)
{
FILE *fp;
@@ -131,56 +142,83 @@ static PyObject * reloadConfig(PyObject * self, PyObject * args, PyObject *kwds)
return PyBool_FromLong(rc == 0);
}
+static PyObject * setInterruptSafety(PyObject * self, PyObject * args, PyObject *kwds)
+{
+ int on = 1;
+ PyObject * obj;
+ char * kwlist[] = { "on", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &obj))
+ return NULL;
+ if (obj) {
+ on = PyObject_IsTrue(obj);
+ }
+ rpmsqSetInterruptSafety(on);
+ Py_RETURN_NONE;
+}
+
static PyMethodDef rpmModuleMethods[] = {
{ "addMacro", (PyCFunction) rpmmacro_AddMacro, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "rpmPushMacro(macro, value)\n"
+ },
{ "delMacro", (PyCFunction) rpmmacro_DelMacro, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "rpmPopMacro(macro)\n"
+ },
{ "expandMacro", (PyCFunction) rpmmacro_ExpandMacro, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "expandMacro(string, numeric=False) -- expands a string containing macros\n\n"
+ "Returns an int if numeric is True. 'Y' or 'y' returns 1,\n'N' or 'n' returns 0\nAn undefined macro returns 0."},
{ "archscore", (PyCFunction) archScore, METH_O,
- NULL },
+ "archscore(archname) -- How well does an architecture fit on this machine\n\n"
+ "0 for non matching arch names\n1 for best arch\nhigher numbers for less fitting arches\n(e.g. 2 for \"i586\" on an i686 machine)" },
{ "signalCaught", (PyCFunction) signalCaught, METH_O,
- NULL },
+ "signalCaught(signo) -- Returns True if signal was caught." },
{ "checkSignals", (PyCFunction) checkSignals, METH_NOARGS,
- NULL },
+ "checkSignals() -- Check for and exit on termination signals."},
+ { "blockSignals", (PyCFunction) blockSignals, METH_O,
+ "blocksignals(True/False) -- Block/unblock signals, refcounted."},
{ "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS|METH_KEYWORDS,
NULL },
{ "log", (PyCFunction) doLog, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "log(level, msg) -- Write msg to log if level is selected to be logged.\n\n"
+ "level must be one of the RPMLOG_* constants."},
{ "setLogFile", (PyCFunction) setLogFile, METH_O,
- NULL },
+ "setLogFile(file) -- set file to write log messages to or None." },
{ "versionCompare", (PyCFunction) versionCompare, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "versionCompare(version0, version1) -- compares two version strings\n\n"
+ "Returns 1 if version0 > version1\n"
+ "Returns 0 if version0 == version1\n"
+ "Returns -1 if version0 < version1\n"},
{ "labelCompare", (PyCFunction) labelCompare, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "labelCompare(version0, version1) -- as versionCompare()\n\n"
+ "but arguments are tuples of of strings for (epoch, version, release)"},
{ "setVerbosity", (PyCFunction) setVerbosity, METH_O,
- NULL },
+ "setVerbosity(level) -- Set log level. See RPMLOG_* constants." },
{ "setEpochPromote", (PyCFunction) setEpochPromote, METH_O,
- NULL },
+ "setEpochPromote(bool) -- Set if no epoch shall be treated as epoch 0" },
{ "setStats", (PyCFunction) setStats, METH_O,
- NULL },
+ "setStats(bool) -- Set if timing stats are printed after a transaction."},
{ "reloadConfig", (PyCFunction) reloadConfig, METH_VARARGS|METH_KEYWORDS,
- NULL },
-
+ "reloadConfig(target=None) -- Reload config from files.\n\n"
+ "Set all macros and settings accordingly."},
+
+ { "setInterruptSafety", (PyCFunction) setInterruptSafety,
+ METH_VARARGS|METH_KEYWORDS,
+ "setInterruptSafety(on=True) -- Set if various signals get intercepted.\n\n"
+ "By default, librpm will trap various unix signals (like SIGINT and\n"
+ "SIGTERM), in order to avoid process exit while locks are held or\n"
+ "a transaction is being performed.\n\n"
+ "If this is not the desired behaviour it's recommended to call this\n"
+ "once only at process startup because currently signal handlers will\n"
+ "not be retroactively applied if a database is open."
+ },
{ NULL }
} ;
-/*
-* Force clean up of open iterators and dbs on exit.
-*/
-static void rpm_exithook(void)
-{
- rpmdbCheckTerminate(1);
-}
-
-static char rpm__doc__[] =
-"";
+static char rpm__doc__[] = "";
/*
* Add rpm tag dictionaries to the module
@@ -205,7 +243,6 @@ static void addRpmTags(PyObject *module)
Py_DECREF(pyname);
}
PyModule_AddObject(module, "tagnames", dict);
- rpmtdFreeData(names);
rpmtdFree(names);
}
@@ -215,14 +252,18 @@ static void addRpmTags(PyObject *module)
static int prepareInitModule(void)
{
if (PyType_Ready(&hdr_Type) < 0) return 0;
+ if (PyType_Ready(&rpmarchive_Type) < 0) return 0;
if (PyType_Ready(&rpmds_Type) < 0) return 0;
if (PyType_Ready(&rpmfd_Type) < 0) return 0;
if (PyType_Ready(&rpmfi_Type) < 0) return 0;
+ if (PyType_Ready(&rpmfile_Type) < 0) return 0;
+ if (PyType_Ready(&rpmfiles_Type) < 0) return 0;
if (PyType_Ready(&rpmKeyring_Type) < 0) return 0;
if (PyType_Ready(&rpmmi_Type) < 0) return 0;
if (PyType_Ready(&rpmii_Type) < 0) return 0;
if (PyType_Ready(&rpmProblem_Type) < 0) return 0;
if (PyType_Ready(&rpmPubkey_Type) < 0) return 0;
+ if (PyType_Ready(&rpmstrPool_Type) < 0) return 0;
#if 0
if (PyType_Ready(&rpmtd_Type) < 0) return 0;
#endif
@@ -287,14 +328,9 @@ static int initModule(PyObject *m)
{
PyObject * d;
- /*
- * treat error to register rpm cleanup hook as fatal, tracebacks
- * can and will leave stale locks around if we can't clean up
- */
- if (Py_AtExit(rpm_exithook) == -1)
- return 0;
-
- rpmReadConfigFiles(NULL, NULL);
+ /* failure to initialize rpm (crypto and all) is rather fatal too... */
+ if (rpmReadConfigFiles(NULL, NULL) == -1)
+ return 0;
d = PyModule_GetDict(m);
@@ -305,6 +341,9 @@ static int initModule(PyObject *m)
Py_INCREF(&hdr_Type);
PyModule_AddObject(m, "hdr", (PyObject *) &hdr_Type);
+ Py_INCREF(&rpmarchive_Type);
+ PyModule_AddObject(m, "archive", (PyObject *) &rpmarchive_Type);
+
Py_INCREF(&rpmds_Type);
PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type);
@@ -314,6 +353,12 @@ static int initModule(PyObject *m)
Py_INCREF(&rpmfi_Type);
PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type);
+ Py_INCREF(&rpmfile_Type);
+ PyModule_AddObject(m, "file", (PyObject *) &rpmfile_Type);
+
+ Py_INCREF(&rpmfiles_Type);
+ PyModule_AddObject(m, "files", (PyObject *) &rpmfiles_Type);
+
Py_INCREF(&rpmKeyring_Type);
PyModule_AddObject(m, "keyring", (PyObject *) &rpmKeyring_Type);
@@ -329,6 +374,9 @@ static int initModule(PyObject *m)
Py_INCREF(&rpmPubkey_Type);
PyModule_AddObject(m, "pubkey", (PyObject *) &rpmPubkey_Type);
+ Py_INCREF(&rpmstrPool_Type);
+ PyModule_AddObject(m, "strpool", (PyObject *) &rpmstrPool_Type);
+
#if 0
Py_INCREF(&rpmtd_Type);
PyModule_AddObject(m, "td", (PyObject *) &rpmtd_Type);
@@ -344,6 +392,9 @@ static int initModule(PyObject *m)
PyModule_AddStringConstant(m, "__version__", RPMVERSION);
+ PyModule_AddObject(m, "header_magic",
+ PyBytes_FromStringAndSize((const char *)rpm_header_magic, 8));
+
#define REGISTER_ENUM(val) PyModule_AddIntConstant(m, #val, val)
REGISTER_ENUM(RPMTAG_NOT_FOUND);
@@ -362,12 +413,15 @@ static int initModule(PyObject *m)
REGISTER_ENUM(RPMFILE_CONFIG);
REGISTER_ENUM(RPMFILE_DOC);
+ REGISTER_ENUM(RPMFILE_ICON);
REGISTER_ENUM(RPMFILE_MISSINGOK);
REGISTER_ENUM(RPMFILE_NOREPLACE);
+ REGISTER_ENUM(RPMFILE_SPECFILE);
REGISTER_ENUM(RPMFILE_GHOST);
REGISTER_ENUM(RPMFILE_LICENSE);
REGISTER_ENUM(RPMFILE_README);
REGISTER_ENUM(RPMFILE_PUBKEY);
+ REGISTER_ENUM(RPMFILE_ARTIFACT);
REGISTER_ENUM(RPMDEP_SENSE_REQUIRES);
REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS);
@@ -395,6 +449,7 @@ static int initModule(PyObject *m)
REGISTER_ENUM(RPMSENSE_KEYRING);
REGISTER_ENUM(RPMSENSE_STRONG);
REGISTER_ENUM(RPMSENSE_CONFIG);
+ REGISTER_ENUM(RPMSENSE_MISSINGOK);
REGISTER_ENUM(RPMTRANS_FLAG_TEST);
REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS);
@@ -403,8 +458,10 @@ static int initModule(PyObject *m)
REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS);
REGISTER_ENUM(RPMTRANS_FLAG_NODOCS);
REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES);
+ REGISTER_ENUM(RPMTRANS_FLAG_NOPLUGINS);
REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE);
REGISTER_ENUM(RPMTRANS_FLAG_NOCONTEXTS);
+ REGISTER_ENUM(RPMTRANS_FLAG_NOCAPS);
REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE);
REGISTER_ENUM(RPMTRANS_FLAG_REVERSE);
REGISTER_ENUM(RPMTRANS_FLAG_NOPRE);
@@ -422,6 +479,7 @@ static int initModule(PyObject *m)
REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST);
REGISTER_ENUM(RPMTRANS_FLAG_ADDINDEPS);
REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS);
+ REGISTER_ENUM(RPMTRANS_FLAG_DEPLOOPS);
REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS);
REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH);
@@ -453,6 +511,7 @@ static int initModule(PyObject *m)
REGISTER_ENUM(RPMCALLBACK_SCRIPT_START);
REGISTER_ENUM(RPMCALLBACK_SCRIPT_STOP);
REGISTER_ENUM(RPMCALLBACK_INST_STOP);
+ REGISTER_ENUM(RPMCALLBACK_ELEM_PROGRESS);
REGISTER_ENUM(RPMPROB_BADARCH);
REGISTER_ENUM(RPMPROB_BADOS);
@@ -488,10 +547,10 @@ static int initModule(PyObject *m)
REGISTER_ENUM(RPMVSF_NOHDRCHK);
REGISTER_ENUM(RPMVSF_NEEDPAYLOAD);
REGISTER_ENUM(RPMVSF_NOSHA1HEADER);
- REGISTER_ENUM(RPMVSF_NOMD5HEADER);
+ REGISTER_ENUM(RPMVSF_NOSHA256HEADER);
REGISTER_ENUM(RPMVSF_NODSAHEADER);
REGISTER_ENUM(RPMVSF_NORSAHEADER);
- REGISTER_ENUM(RPMVSF_NOSHA1);
+ REGISTER_ENUM(RPMVSF_NOPAYLOAD);
REGISTER_ENUM(RPMVSF_NOMD5);
REGISTER_ENUM(RPMVSF_NODSA);
REGISTER_ENUM(RPMVSF_NORSA);
@@ -523,6 +582,20 @@ static int initModule(PyObject *m)
REGISTER_ENUM(HEADERCONV_COMPRESSFILELIST);
REGISTER_ENUM(HEADERCONV_RETROFIT_V3);
+ REGISTER_ENUM(RPMVERIFY_NONE);
+ REGISTER_ENUM(RPMVERIFY_FILEDIGEST);
+ REGISTER_ENUM(RPMVERIFY_FILESIZE);
+ REGISTER_ENUM(RPMVERIFY_LINKTO);
+ REGISTER_ENUM(RPMVERIFY_USER);
+ REGISTER_ENUM(RPMVERIFY_GROUP);
+ REGISTER_ENUM(RPMVERIFY_MTIME);
+ REGISTER_ENUM(RPMVERIFY_MODE);
+ REGISTER_ENUM(RPMVERIFY_RDEV);
+ REGISTER_ENUM(RPMVERIFY_CAPS);
+ REGISTER_ENUM(RPMVERIFY_READLINKFAIL);
+ REGISTER_ENUM(RPMVERIFY_READFAIL);
+ REGISTER_ENUM(RPMVERIFY_LSTATFAIL);
+
return 1;
}
diff --git a/python/rpmsmodule.c b/python/rpmsmodule.c
index 3eb240314..72465221d 100644
--- a/python/rpmsmodule.c
+++ b/python/rpmsmodule.c
@@ -5,33 +5,36 @@
static char rpms__doc__[] =
"";
+static int parseSignArgs(PyObject * args, PyObject *kwds,
+ const char **path, struct rpmSignArgs *sargs)
+{
+ char * kwlist[] = { "path", "keyid", "hashalgo", NULL };
+
+ memset(sargs, 0, sizeof(*sargs));
+ return PyArg_ParseTupleAndKeywords(args, kwds, "s|si", kwlist,
+ path, &sargs->keyid, &sargs->hashalgo);
+}
+
static PyObject * addSign(PyObject * self, PyObject * args, PyObject *kwds)
{
const char *path = NULL;
- const char *passPhrase = NULL;
- char * kwlist[] = { "path", "passPhrase", "keyid", "hashalgo", NULL };
- struct rpmSignArgs sig, *sigp = NULL;
+ struct rpmSignArgs sargs;
- memset(&sig, 0, sizeof(sig));
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|si", kwlist,
- &path, &passPhrase, &sig.keyid, &sig.hashalgo))
+ if (parseSignArgs(args, kwds, &path, &sargs))
return NULL;
- if (sig.keyid || sig.hashalgo)
- sigp = &sig;
-
- return PyBool_FromLong(rpmPkgSign(path, sigp, passPhrase) == 0);
+ return PyBool_FromLong(rpmPkgSign(path, &sargs) == 0);
}
static PyObject * delSign(PyObject * self, PyObject * args, PyObject *kwds)
{
const char *path = NULL;
- char * kwlist[] = { "path", NULL };
+ struct rpmSignArgs sargs;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &path))
+ if (parseSignArgs(args, kwds, &path, &sargs))
return NULL;
- return PyBool_FromLong(rpmPkgDelSign(path) == 0);
+ return PyBool_FromLong(rpmPkgDelSign(path, &sargs) == 0);
}
/*
@@ -59,15 +62,15 @@ static struct PyModuleDef moduledef = {
"_rpms", /* m_name */
rpms__doc__, /* m_doc */
0, /* m_size */
- NULL, /* m_methods */
+ modMethods, /* m_methods */
NULL, /* m_reload */
NULL, /* m_traverse */
NULL, /* m_clear */
NULL /* m_free */
};
-PyObject * PyInit__rpm(void); /* XXX eliminate gcc warning */
-PyObject * PyInit__rpm(void)
+PyObject * PyInit__rpms(void); /* XXX eliminate gcc warning */
+PyObject * PyInit__rpms(void)
{
PyObject *m;
diff --git a/python/rpmstrpool-py.c b/python/rpmstrpool-py.c
new file mode 100644
index 000000000..356bd1de5
--- /dev/null
+++ b/python/rpmstrpool-py.c
@@ -0,0 +1,156 @@
+#include "rpmsystem-py.h"
+#include <rpm/rpmstrpool.h>
+#include "rpmstrpool-py.h"
+
+struct rpmstrPoolObject_s {
+ PyObject_HEAD
+ PyObject *md_dict;
+ rpmstrPool pool;
+};
+
+static char strpool_doc[] = "";
+
+static void strpool_dealloc(rpmstrPoolObject *s)
+{
+ s->pool = rpmstrPoolFree(s->pool);
+ Py_TYPE(s)->tp_free((PyObject *)s);
+}
+
+static PyObject *strpool_new(PyTypeObject *subtype,
+ PyObject *args, PyObject *kwds)
+{
+ return rpmstrPool_Wrap(subtype, NULL);
+}
+
+static PyObject *strpool_str2id(rpmstrPoolObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ char * kwlist[] = { "str", "create", NULL };
+ const char *str = NULL;
+ int create = 1;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, &str, &create))
+ return NULL;
+
+ return PyLong_FromLong(rpmstrPoolId(s->pool, str, create));
+}
+
+static PyObject *strpool_id2str(rpmstrPoolObject *s, PyObject *item)
+{
+ PyObject *ret = NULL;
+ rpmsid id = 0;
+
+ if (PyArg_Parse(item, "I", &id)) {
+ const char *str = rpmstrPoolStr(s->pool, id);
+
+ if (str)
+ ret = PyBytes_FromString(str);
+ else
+ PyErr_SetObject(PyExc_KeyError, item);
+ }
+ return ret;
+}
+
+static PyObject *strpool_freeze(rpmstrPoolObject *s,
+ PyObject *args, PyObject *kwds)
+{
+ char * kwlist[] = { "keephash", NULL };
+ int keephash = 0;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i", kwlist, &keephash))
+ return NULL;
+
+ rpmstrPoolFreeze(s->pool, keephash);
+ Py_RETURN_NONE;
+}
+
+static PyObject *strpool_unfreeze(rpmstrPoolObject *s)
+{
+ rpmstrPoolUnfreeze(s->pool);
+ Py_RETURN_NONE;
+}
+
+static Py_ssize_t strpool_length(rpmstrPoolObject *s)
+{
+ return rpmstrPoolNumStr(s->pool);
+}
+
+static struct PyMethodDef strpool_methods[] = {
+ { "str2id", (PyCFunction)strpool_str2id, METH_VARARGS|METH_KEYWORDS,
+ NULL },
+ { "id2str", (PyCFunction)strpool_id2str, METH_O,
+ NULL },
+ { "freeze", (PyCFunction)strpool_freeze, METH_VARARGS|METH_KEYWORDS,
+ NULL },
+ { "unfreeze", (PyCFunction)strpool_unfreeze, METH_NOARGS,
+ NULL },
+ { NULL, NULL }
+};
+
+static PyMappingMethods strpool_as_mapping = {
+ (lenfunc) strpool_length, /* mp_length */
+ (binaryfunc) strpool_id2str, /* mp_subscript */
+ (objobjargproc) 0, /* mp_ass_subscript */
+};
+
+PyTypeObject rpmstrPool_Type = {
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
+ "rpm.strpool", /* tp_name */
+ sizeof(rpmstrPoolObject), /* tp_size */
+ 0, /* tp_itemsize */
+ (destructor) strpool_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc)0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ &strpool_as_mapping, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+ strpool_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ strpool_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ strpool_new, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+};
+
+PyObject * rpmstrPool_Wrap(PyTypeObject *subtype, rpmstrPool pool)
+{
+ rpmstrPoolObject *s = (rpmstrPoolObject *)subtype->tp_alloc(subtype, 0);
+ if (s == NULL) return NULL;
+
+ /* permit referencing a pre-existing pool as well */
+ s->pool = (pool != NULL) ? rpmstrPoolLink(pool) : rpmstrPoolCreate();
+
+ return (PyObject *) s;
+}
+
+int poolFromPyObject(PyObject *item, rpmstrPool *pool)
+{
+ rpmstrPoolObject *p = NULL;
+ if (PyArg_Parse(item, "O!", &rpmstrPool_Type, &p))
+ *pool = p->pool;
+ return (p != NULL);
+}
diff --git a/python/rpmstrpool-py.h b/python/rpmstrpool-py.h
new file mode 100644
index 000000000..b91c8f642
--- /dev/null
+++ b/python/rpmstrpool-py.h
@@ -0,0 +1,14 @@
+#ifndef H_RPMSTRPOOL_PY
+#define H_RPMSTRPOOL_PY
+
+#include <rpm/rpmtypes.h>
+
+typedef struct rpmstrPoolObject_s rpmstrPoolObject;
+
+extern PyTypeObject rpmstrPool_Type;
+
+PyObject * rpmstrPool_Wrap(PyTypeObject *subtype, rpmstrPool pool);
+
+int poolFromPyObject(PyObject *item, rpmstrPool *pool);
+
+#endif
diff --git a/python/rpmsystem-py.h b/python/rpmsystem-py.h
index 58ac1ba32..c8423e3dc 100644
--- a/python/rpmsystem-py.h
+++ b/python/rpmsystem-py.h
@@ -5,6 +5,7 @@
#include <sys/types.h>
#endif
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <structmember.h>
@@ -48,6 +49,7 @@ typedef Py_ssize_t (*lenfunc)(PyObject *);
#define PyInt_FromLong PyLong_FromLong
#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+#define PyInt_AsSsize_t PyLong_AsSsize_t
#endif
#endif /* H_SYSTEM_PYTHON */
diff --git a/python/rpmtd-py.c b/python/rpmtd-py.c
index 7655755f0..247c7502a 100644
--- a/python/rpmtd-py.c
+++ b/python/rpmtd-py.c
@@ -11,7 +11,7 @@
/*
* Convert single tag data item to python object of suitable type
*/
-static PyObject * rpmtd_ItemAsPyobj(rpmtd td, rpmTagClass tclass)
+PyObject * rpmtd_ItemAsPyobj(rpmtd td, rpmTagClass tclass)
{
PyObject *res = NULL;
@@ -61,161 +61,3 @@ PyObject *rpmtd_AsPyobj(rpmtd td)
}
return res;
}
-
-#if 0
-struct rpmtdObject_s {
- PyObject_HEAD
- PyObject *md_dict;
- struct rpmtd_s td;
-};
-
-/* string format should never fail but do regular repr just in case it does */
-static PyObject *rpmtd_str(rpmtdObject *s)
-{
- PyObject *res = NULL;
- char *str = rpmtdFormat(&(s->td), RPMTD_FORMAT_STRING, NULL);
- if (str) {
- res = PyBytes_FromString(str);
- free(str);
- } else {
- res = PyObject_Repr((PyObject *)s);
- }
- return res;
-}
-
-static PyObject *rpmtd_iternext(rpmtdObject *s)
-{
- PyObject *next = NULL;
-
- if (rpmtdNext(&(s->td)) >= 0) {
- Py_INCREF(s);
- next = (PyObject*) s;
- }
- return next;
-}
-
-static PyObject *rpmtd_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
-{
- rpmtdObject *s = NULL;
- Header h = NULL;
- rpmTagVal tag;
- int raw = 0;
- int noext = 0;
- headerGetFlags flags = (HEADERGET_EXT | HEADERGET_ALLOC);
- char *kwlist[] = { "header", "tag", "raw", "noext", NULL };
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&O&|ii", kwlist,
- hdrFromPyObject, &h, tagNumFromPyObject, &tag,
- &raw, &noext))
- return NULL;
-
- if (raw) {
- flags |= HEADERGET_RAW;
- noext = 1; /* extensions with raw dont make sense */
- }
- if (noext) flags &= ~HEADERGET_EXT;
-
- if ((s = (rpmtdObject *)subtype->tp_alloc(subtype, 0)) == NULL)
- return NULL;
-
- headerGet(h, tag, &(s->td), flags);
-
- return (PyObject *) s;
-}
-
-static void rpmtd_dealloc(rpmtdObject * s)
-{
- rpmtdFreeData(&(s->td));
- Py_TYPE(s)->tp_free((PyObject *)s);
-}
-
-static int rpmtd_length(rpmtdObject *s)
-{
- return rpmtdCount(&(s->td));
-}
-
-static PyMappingMethods rpmtd_as_mapping = {
- (lenfunc) rpmtd_length, /* mp_length */
-};
-
-static PyMemberDef rpmtd_members[] = {
- { "type", T_INT, offsetof(rpmtdObject, td.type), READONLY, NULL },
- { NULL }
-};
-
-static PyObject *rpmtd_get_tag(rpmtdObject *s, void *closure)
-{
- return Py_BuildValue("i", rpmtdTag(&(s->td)));
-}
-
-static int rpmtd_set_tag(rpmtdObject *s, PyObject *value, void *closure)
-{
- rpmTagVal tag;
- if (!tagNumFromPyObject(value, &tag)) return -1;
-
- if (!rpmtdSetTag(&(s->td), tag)) {
- PyErr_SetString(PyExc_ValueError, "incompatible tag for data");
- return -1;
- }
- return 0;
-}
-
-static PyGetSetDef rpmtd_getseters[] = {
- { "tag", (getter)rpmtd_get_tag, (setter)rpmtd_set_tag, NULL },
- { NULL }
-};
-
-PyTypeObject rpmtd_Type = {
- PyVarObject_HEAD_INIT(&PyType_Type, 0)
- "rpm.td", /* tp_name */
- sizeof(rpmtdObject), /* tp_size */
- 0, /* tp_itemsize */
- (destructor) rpmtd_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- (getattrfunc)0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_compare */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- &rpmtd_as_mapping, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- (reprfunc)rpmtd_str, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- PyObject_GenericSetAttr, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
- 0, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- PyObject_SelfIter, /* tp_iter */
- (iternextfunc)rpmtd_iternext, /* tp_iternext */
- 0, /* tp_methods */
- rpmtd_members, /* tp_members */
- rpmtd_getseters, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- rpmtd_new, /* tp_new */
- 0, /* tp_free */
- 0, /* tp_is_gc */
-};
-
-int rpmtdFromPyObject(PyObject *obj, rpmtd *td)
-{
- if (rpmtdObject_Check(obj)) {
- *td = &(((rpmtdObject *)obj)->td);
- return 1;
- } else {
- PyErr_SetString(PyExc_TypeError, "rpm.td type expected");
- return 0;
- }
-}
-#endif
diff --git a/python/rpmtd-py.h b/python/rpmtd-py.h
index 4c95e89b4..c7ac4091c 100644
--- a/python/rpmtd-py.h
+++ b/python/rpmtd-py.h
@@ -7,6 +7,7 @@ extern PyTypeObject rpmtd_Type;
#define rpmtdObject_Check(v) ((v)->ob_type == &rpmtd_Type)
+PyObject * rpmtd_ItemAsPyobj(rpmtd td, rpmTagClass tclass);
PyObject * rpmtd_AsPyobj(rpmtd td);
int rpmtdFromPyObject(PyObject *obj, rpmtd *td);
diff --git a/python/rpmte-py.c b/python/rpmte-py.c
index 2204a5281..6936e757e 100644
--- a/python/rpmte-py.c
+++ b/python/rpmte-py.c
@@ -3,6 +3,7 @@
#include "header-py.h" /* XXX tagNumFromPyObject */
#include "rpmds-py.h"
#include "rpmfi-py.h"
+#include "rpmfiles-py.h"
#include "rpmte-py.h"
#include "rpmps-py.h"
@@ -35,8 +36,9 @@
* - te.Key() Return the associated opaque key, i.e. 2nd arg ts.addInstall().
* - te.DS(tag) Return package dependency set.
* @param tag 'Providename', 'Requirename', 'Obsoletename', 'Conflictname'
- * - te.FI(tag) Return package file info set.
+ * - te.FI(tag) Return package file info set iterator (deprecated).
* @param tag 'Basenames'
+ * - te.Files() Return package file info set.
*/
struct rpmteObject_s {
@@ -182,6 +184,8 @@ rpmte_FI(rpmteObject * s, PyObject * args, PyObject * kwds)
{
rpmfi fi;
+ DEPRECATED_METHOD("use .Files() instead");
+
fi = rpmteFI(s->te);
if (fi == NULL) {
Py_RETURN_NONE;
@@ -189,57 +193,60 @@ rpmte_FI(rpmteObject * s, PyObject * args, PyObject * kwds)
return rpmfi_Wrap(&rpmfi_Type, rpmfiLink(fi));
}
+static PyObject *
+rpmte_Files(rpmteObject * s, PyObject * args, PyObject * kwds)
+{
+ rpmfiles files = rpmteFiles(s->te);
+ if (files == NULL) {
+ Py_RETURN_NONE;
+ }
+ return rpmfiles_Wrap(&rpmfiles_Type, files);
+}
static struct PyMethodDef rpmte_methods[] = {
{"Type", (PyCFunction)rpmte_TEType, METH_NOARGS,
-"te.Type() -> Type\n\
-- Return element type (rpm.TR_ADDED | rpm.TR_REMOVED).\n" },
+ "te.Type() -- Return element type (rpm.TR_ADDED | rpm.TR_REMOVED).\n" },
{"N", (PyCFunction)rpmte_N, METH_NOARGS,
-"te.N() -> N\n\
-- Return element name.\n" },
+ "te.N() -- Return element name.\n" },
{"E", (PyCFunction)rpmte_E, METH_NOARGS,
-"te.E() -> E\n\
-- Return element epoch.\n" },
+ "te.E() -- Return element epoch.\n" },
{"V", (PyCFunction)rpmte_V, METH_NOARGS,
-"te.V() -> V\n\
-- Return element version.\n" },
+ "te.V() -- Return element version.\n" },
{"R", (PyCFunction)rpmte_R, METH_NOARGS,
-"te.R() -> R\n\
-- Return element release.\n" },
+ "te.R() -- Return element release.\n" },
{"A", (PyCFunction)rpmte_A, METH_NOARGS,
-"te.A() -> A\n\
-- Return element arch.\n" },
+ "te.A() -- Return element arch.\n" },
{"O", (PyCFunction)rpmte_O, METH_NOARGS,
-"te.O() -> O\n\
-- Return element os.\n" },
+ "te.O() -- Return element os.\n" },
{"NEVR", (PyCFunction)rpmte_NEVR, METH_NOARGS,
-"te.NEVR() -> NEVR\n\
-- Return element name-[epoch:]version-release.\n" },
+ "te.NEVR() -- Return element name-[epoch:]version-release.\n" },
{"NEVRA", (PyCFunction)rpmte_NEVRA, METH_NOARGS,
-"te.NEVRA() -> NEVRA\n\
-- Return element name-[epoch:]version-release.arch\n" },
+ "te.NEVRA() -- Return element name-[epoch:]version-release.arch\n" },
{"Color",(PyCFunction)rpmte_Color, METH_NOARGS,
- NULL},
+ "te.Color() -- Return package color bits."},
{"PkgFileSize",(PyCFunction)rpmte_PkgFileSize, METH_NOARGS,
- NULL},
+ "te.PkgFileSize() -- Return no. of bytes in package file (approx)."},
{"Parent", (PyCFunction)rpmte_Parent, METH_NOARGS,
- NULL},
+ "te.Parent() -- Return the parent element index."},
{"Problems",(PyCFunction)rpmte_Problems, METH_NOARGS,
- NULL},
+ "te.Problems() -- Return problems associated with this element."},
/* {"DependsOnKey",(PyCFunction)rpmte_DependsOnKey, METH_NOARGS,
NULL}, */
{"DBOffset",(PyCFunction)rpmte_DBOffset, METH_NOARGS,
- NULL},
+ "te.DBOffset() -- Return the Package's database instance number.\n\nTR_REMOVED only"},
{"Failed", (PyCFunction)rpmte_Failed, METH_NOARGS,
- NULL},
+ "te.Failed() -- Return if there are any related errors."},
{"Key", (PyCFunction)rpmte_Key, METH_NOARGS,
- NULL},
+ "te.Key() -- Return the associated opaque key aka user data\n\
+ as passed e.g. as data arg ts.addInstall()"},
{"DS", (PyCFunction)rpmte_DS, METH_VARARGS|METH_KEYWORDS,
-"te.DS(TagN) -> DS\n\
-- Return the TagN dependency set (or None). TagN is one of\n\
- 'Providename', 'Requirename', 'Obsoletename', 'Conflictname'\n" },
+"te.DS(TagN) -- Return the TagN dependency set (or None).\n\
+ TagN is one of 'Providename', 'Requirename', 'Obsoletename',\n\
+ 'Conflictname', 'Triggername', 'Recommendname', 'Suggestname',\n\
+ 'Supplementname', 'Enhancename'" },
{"FI", (PyCFunction)rpmte_FI, METH_VARARGS|METH_KEYWORDS,
-"te.FI(TagN) -> FI\n\
-- Return the TagN dependency set (or None). TagN must be 'Basenames'.\n" },
+"te.FI(TagN) -- Return file info iterator of element.\n\n DEPRECATED! Use .Files() instead.\n" },
+ {"Files", (PyCFunction)rpmte_Files, METH_NOARGS,
+"te.Files() -- Return file info set of element.\n" },
{NULL, NULL} /* sentinel */
};
diff --git a/python/rpmts-py.c b/python/rpmts-py.c
index 5c6e9baf3..d56a09c22 100644
--- a/python/rpmts-py.c
+++ b/python/rpmts-py.c
@@ -96,23 +96,26 @@
* @return None
*
* - ts.setFlags(transFlags) Set transaction set flags.
- * @param transFlags - bit(s) to controll transaction operations. The
+ * @param transFlags - bit(s) to control transaction operations. The
* following values can be logically OR'ed together:
* - rpm.RPMTRANS_FLAG_TEST - test mode, do not modify the RPM
* database, change any files, or run any package scripts
* - rpm.RPMTRANS_FLAG_BUILD_PROBS - only build a list of
* problems encountered when attempting to run this transaction
* set
- * - rpm.RPMTRANS_FLAG_NOSCRIPTS - do not execute package scripts
* - rpm.RPMTRANS_FLAG_JUSTDB - only make changes to the rpm
* database, do not modify files.
+ * - rpm.RPMTRANS_FLAG_NOSCRIPTS - do not execute package scripts
* - rpm.RPMTRANS_FLAG_NOTRIGGERS - do not run trigger scripts
+ * - rpm.RPMTRANS_FLAG_NO* - disable specific scripts and triggers
* - rpm.RPMTRANS_FLAG_NODOCS - do not install files marked as %doc
+ * - rpm.RPMTRANS_FLAG_NOPLUGINS - do not run plugins
+ * - rpm.RPMTRANS_FLAG_NOFILEDIGEST - disable checking checksums
* - rpm.RPMTRANS_FLAG_ALLFILES - create all files, even if a
* file is marked %config(missingok) and an upgrade is
* being performed.
- * - rpm.RPMTRANS_FLAG_KEEPOBSOLETE - do not remove obsoleted
- * packages.
+ * - rpm.RPMTRANS_FLAG_NOCONFIGS - skip config files
+ * - rpm.RPMTRANS_FLAG_DEPLOOPS - enable debugging for dependency loops
* @return previous transFlags
*
* - ts.setProbFilter(ignoreSet) Set transaction set problem filter.
@@ -164,7 +167,6 @@ static void die(PyObject *cb)
}
fprintf(stderr, "FATAL ERROR: python callback %s failed, aborting!\n",
pyfn ? pyfn : "???");
- rpmdbCheckTerminate(1);
exit(EXIT_FAILURE);
}
@@ -188,6 +190,24 @@ rpmts_AddInstall(rpmtsObject * s, PyObject * args)
}
static PyObject *
+rpmts_AddReinstall(rpmtsObject * s, PyObject * args)
+{
+ Header h = NULL;
+ PyObject * key;
+ int rc;
+
+ if (!PyArg_ParseTuple(args, "O&O:AddReinstall",
+ hdrFromPyObject, &h, &key))
+ return NULL;
+
+ rc = rpmtsAddReinstallElement(s->ts, h, key);
+ if (key && rc == 0) {
+ PyList_Append(s->keyList, key);
+ }
+ return PyBool_FromLong((rc == 0));
+}
+
+static PyObject *
rpmts_AddErase(rpmtsObject * s, PyObject * args)
{
Header h;
@@ -363,7 +383,6 @@ rpmts_HdrFromFdno(rpmtsObject * s, PyObject *arg)
if (rpmrc == RPMRC_OK) {
ho = hdr_Wrap(&hdr_Type, h);
- h = headerFree(h); /* ref held by python object */
} else {
Py_INCREF(Py_None);
ho = Py_None;
@@ -609,6 +628,10 @@ rpmts_Match(rpmtsObject * s, PyObject * args, PyObject * kwds)
lkey = PyInt_AsLong(Key);
key = (char *)&lkey;
len = sizeof(lkey);
+ } else if (PyLong_Check(Key)) {
+ lkey = PyLong_AsLong(Key);
+ key = (char *)&lkey;
+ len = sizeof(lkey);
} else if (utf8FromPyObject(Key, &str)) {
key = PyBytes_AsString(str);
len = PyBytes_Size(str);
@@ -669,13 +692,55 @@ exit:
static struct PyMethodDef rpmts_methods[] = {
{"addInstall", (PyCFunction) rpmts_AddInstall, METH_VARARGS,
- NULL },
+ "ts.addInstall(hdr, data, mode) -- Add transaction element(s)\n"
+ "representing an installation or update of a package.\n\n"
+ "Args:\n"
+ " hdr : the header to be added\n"
+ " data : user data that will be passed to the transaction callback\n\t\tduring transaction execution\n"
+ " mode : optional argument that specifies if this package should be\n\t\tinstalled ('i'), upgraded ('u')"},
+ {"addReinstall", (PyCFunction) rpmts_AddReinstall, METH_VARARGS,
+ "ts.addReinstall(hdr, data) -- Adds transaction elements\nrepresenting a reinstall of an already installed package.\n\nSee addInstall for details."},
{"addErase", (PyCFunction) rpmts_AddErase, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "addErase(name) -- Add a transaction element representing an erase\nof an installed package.\n\n"
+ " name: the package name to be erased"},
{"check", (PyCFunction) rpmts_Check, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "ts.check( )-- Perform a dependency check on the transaction set.\n"
+ " After headers have been added to a transaction set,\n"
+ " a dependencycheck can be performed to make sure that\n"
+ " all package dependencies are satisfied.\n"
+ "Return None If there are no unresolved dependencies\n"
+ " Otherwise a list of complex tuples is returned,\n"
+ " one tuple per unresolved dependency, with\n"
+ "The format of the dependency tuple is:\n"
+ " ((packageName, packageVersion, packageRelease),\n"
+ " (reqName, reqVersion),\n"
+ " needsFlags,\n"
+ " suggestedPackage,\n"
+ " sense)\n"
+ " packageName, packageVersion, packageRelease are the name,\n"
+ " version, and release of the package that has the unresolved\n"
+ " dependency or conflict.\n"
+ " The reqName and reqVersion are the name and version of the\n"
+ " requirement or conflict.\n"
+ " The needsFlags is a bitfield that describes the versioned\n"
+ " nature of a requirement or conflict. The constants\n"
+ " rpm.RPMSENSE_LESS, rpm.RPMSENSE_GREATER, and\n"
+ " rpm.RPMSENSE_EQUAL can be logical ANDed with the needsFlags\n"
+ " to get versioned dependency information.\n"
+ " suggestedPackage is a tuple if the dependency check was aware\n"
+ " of a package that solves this dependency problem when the\n"
+ " dependency check was run. Packages that are added to the\n"
+ " transaction set as \"available\" are examined during the\n"
+ " dependency check as possible dependency solvers. The tuple\n"
+ " contains two values, (header, suggestedName). These are set to\n"
+ " the header of the suggested package and its name, respectively.\n"
+ " If there is no known package to solve the dependency problem,\n"
+ " suggestedPackage is None.\n"
+ " The constants rpm.RPMDEP_SENSE_CONFLICTS and\n"
+ " rpm.RPMDEP_SENSE_REQUIRES are set to show a dependency as a\n"
+ " requirement or a conflict.\n"},
{"order", (PyCFunction) rpmts_Order, METH_NOARGS,
- NULL },
+ "ts.order() Do a topological sort of added element relations." },
{"problems", (PyCFunction) rpmts_Problems, METH_NOARGS,
"ts.problems() -> ps\n\
- Return current problem set.\n" },
@@ -684,18 +749,18 @@ static struct PyMethodDef rpmts_methods[] = {
- Run a transaction set, returning list of problems found.\n\
Note: The callback may not be None.\n" },
{"clean", (PyCFunction) rpmts_Clean, METH_NOARGS,
- NULL },
+ "ts.clean()-- Free memory needed only for dependency checks\nand ordering. Should not be needed in normal operation." },
{"clear", (PyCFunction) rpmts_Clear, METH_NOARGS,
"ts.clear() -> None\n\
Remove all elements from the transaction set\n" },
{"openDB", (PyCFunction) rpmts_OpenDB, METH_NOARGS,
-"ts.openDB() -> None\n\
-- Open the default transaction rpmdb.\n\
- Note: The transaction rpmdb is lazily opened, so ts.openDB() is seldom needed.\n" },
+"ts.openDB() -> None -- Open the default transaction rpmdb.\n\n\
+ Note: The transaction rpmdb is lazily opened,\n so ts.openDB() is seldom needed.\n" },
{"closeDB", (PyCFunction) rpmts_CloseDB, METH_NOARGS,
"ts.closeDB() -> None\n\
- Close the default transaction rpmdb.\n\
- Note: ts.closeDB() disables lazy opens, and should hardly ever be used.\n" },
+ Note: ts.closeDB() disables lazy opens,\n\
+ and should hardly ever be used.\n" },
{"initDB", (PyCFunction) rpmts_InitDB, METH_NOARGS,
"ts.initDB() -> None\n\
- Initialize the default transaction rpmdb.\n\
@@ -710,15 +775,21 @@ Remove all elements from the transaction set\n" },
"ts.hdrFromFdno(fdno) -> hdr\n\
- Read a package header from a file descriptor.\n" },
{"hdrCheck", (PyCFunction) rpmts_HdrCheck, METH_O,
- NULL },
+ "ts.hdrCheck(hdrblob) -- Check header consistency,\nperforming headerGetEntry() the hard way.\n\n"
+ "Sanity checks on the header are performed while looking for a\n"
+ "header-only digest or signature to verify the blob. If found,\n"
+ "the digest or signature is verified.\n\n"
+ "\thdrblob : unloaded header blob\n"
+ "Return tuple (int status, message string)"},
{"pgpPrtPkts", (PyCFunction) rpmts_PgpPrtPkts, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "pgpPrtPkts(octets) -- Print/parse a OpenPGP packet(s).\n\nReturn 0 on success." },
{"pgpImportPubkey", (PyCFunction) rpmts_PgpImportPubkey, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "pgpImportPubkey(pubkey) -- Import public key packet." },
{"getKeyring", (PyCFunction) rpmts_getKeyring, METH_VARARGS|METH_KEYWORDS,
- NULL },
+ "ts.getKeyring(autoload=False) -- Return key ring object." },
{"setKeyring", (PyCFunction) rpmts_setKeyring, METH_O,
- NULL },
+ "ts.setKeyring(keyring) -- Set key ring used for checking signatures\n\n"
+ "Pass None for an empty key ring." },
{"dbMatch", (PyCFunction) rpmts_Match, METH_VARARGS|METH_KEYWORDS,
"ts.dbMatch([TagN, [key]]) -> mi\n\
- Create a match iterator for the default transaction rpmdb.\n" },
@@ -856,13 +927,38 @@ static PyObject *rpmts_get_vsflags(rpmtsObject *s, void *closure)
}
static char rpmts_doc[] =
-"";
+ "A python rpm.ts object represents an RPM transaction set.\n"
+ "\n"
+ "The transaction set is the workhorse of RPM. It performs the\n"
+ "installation and upgrade of packages. The rpm.ts object is\n"
+ "instantiated by the TransactionSet function in the rpm module.\n"
+ "\n"
+ "The TransactionSet function takes two optional arguments. The first\n"
+ "argument is the root path. The second is the verify signature disable\n"
+ "flags, a set of the following bits:\n"
+ "\n"
+ "- rpm.RPMVSF_NOHDRCHK if set, don't check rpmdb headers\n"
+ "- rpm.RPMVSF_NEEDPAYLOAD if not set, check header+payload\n"
+ " (if possible)\n"
+ "- rpm.RPMVSF_NOSHA1HEADER if set, don't check header SHA1 digest\n"
+ "- rpm.RPMVSF_NODSAHEADER if set, don't check header DSA signature\n"
+ "- rpm.RPMVSF_NOMD5 if set, don't check header+payload MD5 digest\n"
+ "- rpm.RPMVSF_NODSA if set, don't check header+payload DSA signature\n"
+ "- rpm.RPMVSF_NORSA if set, don't check header+payload RSA signature\n"
+ "\n"
+ "For convenience, there are the following masks:\n"
+ "- rpm._RPMVSF_NODIGESTS if set, don't check digest(s).\n"
+ "- rpm._RPMVSF_NOSIGNATURES if set, don't check signature(s).\n\n"
+ "The transaction set offers an read only iterable interface for the\ntransaction elements added by the .addInstall(), .addErase() and\n.addReinstall() methods.";
static PyGetSetDef rpmts_getseters[] = {
/* only provide a setter until we have rpmfd wrappings */
- {"scriptFd", NULL, (setter)rpmts_set_scriptFd, NULL },
- {"tid", (getter)rpmts_get_tid, NULL, NULL },
- {"rootDir", (getter)rpmts_get_rootDir, NULL, NULL },
+ {"scriptFd", NULL, (setter)rpmts_set_scriptFd,
+ "write only, file descriptor the output of script gets written to." },
+ {"tid", (getter)rpmts_get_tid, NULL,
+ "read only, current transaction id, i.e. transaction time stamp."},
+ {"rootDir", (getter)rpmts_get_rootDir, NULL,
+ "read only, directory rpm treats as root of the file system." },
{"_color", (getter)rpmts_get_color, (setter)rpmts_set_color, NULL},
{"_prefcolor", (getter)rpmts_get_prefcolor, (setter)rpmts_set_prefcolor, NULL},
{"_flags", (getter)rpmts_get_flags, (setter)rpmts_set_flags, NULL},
diff --git a/python/setup.py.in b/python/setup.py.in
index 619b0ac73..dd56a47a9 100644
--- a/python/setup.py.in
+++ b/python/setup.py.in
@@ -2,7 +2,7 @@
from distutils.core import setup, Extension
import subprocess
-from glob import glob
+import os
def pkgconfig(what):
out = []
@@ -12,40 +12,53 @@ def pkgconfig(what):
out.append(token[2:])
return out
-def mksources(names):
- srcs = []
- for n in names:
- srcs.extend(glob('%s*.c' % n))
- return srcs
+cflags = ['-std=c99', '-Wno-strict-aliasing']
+additional_link_args = []
+
+# See if we're building in-tree
+if os.access('Makefile.am', os.F_OK):
+ cflags.append('-I../include')
+ additional_link_args.extend(['-Wl,-L../rpmio/.libs',
+ '-Wl,-L../lib/.libs',
+ '-Wl,-L../build/.libs',
+ '-Wl,-L../sign/.libs'])
+ os.environ['PKG_CONFIG_PATH'] = '..'
-cflags = ['-std=c99']
rpmmod = Extension('rpm._rpm',
- sources = mksources([
- 'header', 'rpmds', 'rpmfd', 'rpmfi', 'rpmii',
- 'rpmkeyring', 'rpmmacro', 'rpmmi', 'rpmps',
- 'rpmtd', 'rpmte', 'rpmts', 'rpmmodule',
- ]),
+ sources = [ 'header-py.c', 'rpmds-py.c', 'rpmfd-py.c',
+ 'rpmfi-py.c', 'rpmii-py.c', 'rpmkeyring-py.c',
+ 'rpmmacro-py.c', 'rpmmi-py.c', 'rpmps-py.c',
+ 'rpmstrpool-py.c', 'rpmfiles-py.c',
+ 'rpmarchive-py.c', 'rpmtd-py.c',
+ 'rpmte-py.c', 'rpmts-py.c', 'rpmmodule.c',
+ ],
include_dirs = pkgconfig('--cflags'),
- libraries = pkgconfig('--libs'),
- extra_compile_args = cflags
+ library_dirs = pkgconfig('--libs-only-L'),
+ libraries = pkgconfig('--libs-only-l'),
+ extra_compile_args = cflags,
+ extra_link_args = additional_link_args
)
rpmbuild_mod = Extension('rpm._rpmb',
- sources = mksources(['rpmbmodule', 'spec']),
+ sources = ['rpmbmodule.c', 'spec-py.c'],
include_dirs = pkgconfig('--cflags'),
- libraries = pkgconfig('--libs') + ['rpmbuild'],
- extra_compile_args = cflags
+ library_dirs = pkgconfig('--libs-only-L'),
+ libraries = pkgconfig('--libs-only-l') + ['rpmbuild'],
+ extra_compile_args = cflags,
+ extra_link_args = additional_link_args
)
rpmsign_mod = Extension('rpm._rpms',
- sources = mksources(['rpmbmodule']),
+ sources = ['rpmsmodule.c'],
include_dirs = pkgconfig('--cflags'),
- libraries = pkgconfig('--libs') + ['rpmsign'],
- extra_compile_args = cflags
+ library_dirs = pkgconfig('--libs-only-L'),
+ libraries = pkgconfig('--libs-only-l') + ['rpmsign'],
+ extra_compile_args = cflags,
+ extra_link_args = additional_link_args
)
-setup(name='@PACKAGE_NAME@-python',
+setup(name='@PACKAGE_NAME@',
version='@VERSION@',
description='Python bindings for @PACKAGE_NAME@',
maintainer_email='@PACKAGE_BUGREPORT@',
diff --git a/python/spec-py.c b/python/spec-py.c
index 1850a50ee..47c17400f 100644
--- a/python/spec-py.c
+++ b/python/spec-py.c
@@ -19,7 +19,7 @@
* For example
* \code
* import rpm
- * rpm.addMacro("_topdir","/path/to/topdir")
+ * rpm.rpmPushMacro("_topdir","/path/to/topdir")
* s=rpm.spec("foo.spec")
* print s.prep()
* \endcode
@@ -45,19 +45,55 @@ struct specPkgObject_s {
PyObject_HEAD
/*type specific fields */
rpmSpecPkg pkg;
+ specObject *source_spec;
};
+static void specPkg_dealloc(specPkgObject * s)
+{
+ Py_DECREF(s->source_spec);
+}
+
+static PyObject *pkgGetSection(rpmSpecPkg pkg, int section)
+{
+ char *sect = rpmSpecPkgGetSection(pkg, section);
+ if (sect != NULL) {
+ PyObject *ps = PyBytes_FromString(sect);
+ free(sect);
+ if (ps != NULL)
+ return ps;
+ }
+ Py_RETURN_NONE;
+}
+
static char specPkg_doc[] =
-"";
+"Package data parsed from spec file.";
static PyObject * specpkg_get_header(specPkgObject *s, void *closure)
{
return makeHeader(rpmSpecPkgHeader(s->pkg));
}
+static PyObject * specpkg_get_fileFile(specPkgObject *s, void *closure)
+{
+ return pkgGetSection(s->pkg, RPMBUILD_FILE_FILE);
+}
+
+static PyObject * specpkg_get_fileList(specPkgObject *s, void *closure)
+{
+ return pkgGetSection(s->pkg, RPMBUILD_FILE_LIST);
+}
+
+static PyObject * specpkg_get_policyList(specPkgObject *s, void *closure)
+{
+ return pkgGetSection(s->pkg, RPMBUILD_POLICY);
+}
+
static PyGetSetDef specpkg_getseters[] = {
- { "header", (getter) specpkg_get_header, NULL, NULL },
- { NULL } /* sentinel */
+ { "header", (getter) specpkg_get_header, NULL, NULL },
+ { "fileFile", (getter) specpkg_get_fileFile, NULL, NULL },
+ { "fileList", (getter) specpkg_get_fileList, NULL, NULL },
+ { "policyList", (getter) specpkg_get_policyList, NULL, NULL },
+ { NULL } /* sentinel */
};
PyTypeObject specPkg_Type = {
@@ -65,7 +101,7 @@ PyTypeObject specPkg_Type = {
"rpm.specpkg", /* tp_name */
sizeof(specPkgObject), /* tp_size */
0, /* tp_itemsize */
- 0, /* tp_dealloc */
+ (destructor) specPkg_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
@@ -127,6 +163,12 @@ static PyObject * getSection(rpmSpec spec, int section)
Py_RETURN_NONE;
}
+static PyObject *
+spec_get_parsed(specObject * s, void *closure)
+{
+ return getSection(s->spec, RPMBUILD_NONE);
+}
+
static PyObject *
spec_get_prep(specObject * s, void *closure)
{
@@ -144,6 +186,11 @@ static PyObject * spec_get_install(specObject * s, void *closure)
return getSection(s->spec, RPMBUILD_INSTALL);
}
+static PyObject * spec_get_check(specObject * s, void *closure)
+{
+ return getSection(s->spec, RPMBUILD_CHECK);
+}
+
static PyObject * spec_get_clean(specObject * s, void *closure)
{
return getSection(s->spec, RPMBUILD_CLEAN);
@@ -192,7 +239,7 @@ static PyObject * spec_get_packages(specObject *s, void *closure)
iter = rpmSpecPkgIterInit(s->spec);
while ((pkg = rpmSpecPkgIterNext(iter)) != NULL) {
- PyObject *po = specPkg_Wrap(&specPkg_Type, pkg);
+ PyObject *po = specPkg_Wrap(&specPkg_Type, pkg, s);
if (!po) {
rpmSpecPkgIterFree(iter);
Py_DECREF(pkgList);
@@ -214,9 +261,11 @@ static char spec_doc[] = "RPM Spec file object";
static PyGetSetDef spec_getseters[] = {
{"sources", (getter) spec_get_sources, NULL, NULL },
+ {"parsed", (getter) spec_get_parsed, NULL, NULL},
{"prep", (getter) spec_get_prep, NULL, NULL },
{"build", (getter) spec_get_build, NULL, NULL },
{"install", (getter) spec_get_install, NULL, NULL },
+ {"check", (getter) spec_get_check, NULL, NULL },
{"clean", (getter) spec_get_clean, NULL, NULL },
{"packages", (getter) spec_get_packages, NULL, NULL },
{"sourceHeader", (getter) spec_get_source_header, NULL, NULL },
@@ -314,12 +363,14 @@ spec_Wrap(PyTypeObject *subtype, rpmSpec spec)
return (PyObject *) s;
}
-PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg)
+PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg, specObject *source)
{
specPkgObject * s = (specPkgObject *)subtype->tp_alloc(subtype, 0);
if (s == NULL) return NULL;
s->pkg = pkg;
+ s->source_spec = source;
+ Py_INCREF(s->source_spec);
return (PyObject *) s;
}
diff --git a/python/spec-py.h b/python/spec-py.h
index 558fbf207..65b8dc3d7 100644
--- a/python/spec-py.h
+++ b/python/spec-py.h
@@ -13,6 +13,6 @@ extern PyTypeObject specPkg_Type;
#define specPkgObject_Check(v) ((v)->ob_type == &specPkg_Type)
PyObject * spec_Wrap(PyTypeObject *subtype, rpmSpec spec);
-PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg);
+PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg, specObject *source);
#endif /* RPMPYTHON_SPEC */
diff --git a/rpm.am b/rpm.am
index 9b533bb0d..1b9ef71cf 100644
--- a/rpm.am
+++ b/rpm.am
@@ -4,3 +4,6 @@ rpmlibexecdir = @RPMCONFIGDIR@
# Host independent config files
## HACK: it probably should be $(datadir)/rpm
rpmconfigdir = @RPMCONFIGDIR@
+
+# Libtool version (current-revision-age) for all our libraries
+rpm_version_info = 4:0:1 \ No newline at end of file
diff --git a/rpm.pc.in b/rpm.pc.in
index 942692015..d942e5165 100644
--- a/rpm.pc.in
+++ b/rpm.pc.in
@@ -8,8 +8,8 @@ Name: RPM
Description: RPM Package Manager
Version: @VERSION@
URL: http://rpm.org
-# Requires:
+Requires.private: @ZSTD_REQUIRES@ @LMDB_REQUIRES@
# Conflicts:
Cflags: -I${includedir}
Libs: -L${libdir} -lrpm -lrpmio
-Libs.private: -lpopt -lrt -lpthread @WITH_SELINUX_LIB@ @WITH_LZMA_LIB@ @WITH_DB_LIB@ @WITH_BZ2_LIB@ @WITH_ZLIB_LIB@ @WITH_NSS_LIB@ @WITH_LUA_LIB@
+Libs.private: -lpopt -lrt -lpthread @WITH_LZMA_LIB@ @WITH_DB_LIB@ @WITH_BZ2_LIB@ @WITH_ZLIB_LIB@ @WITH_BEECRYPT_LIB@ @WITH_NSS_LIB@ @LUA_LIBS@
diff --git a/rpm2archive.c b/rpm2archive.c
new file mode 100644
index 000000000..27b84d69d
--- /dev/null
+++ b/rpm2archive.c
@@ -0,0 +1,218 @@
+/* rpmarchive: spit out the main archive portion of a package */
+
+#include "system.h"
+
+#include <rpm/rpmlib.h> /* rpmReadPackageFile .. */
+#include <rpm/rpmfi.h>
+#include <rpm/rpmtag.h>
+#include <rpm/rpmio.h>
+#include <rpm/rpmpgp.h>
+
+#include <rpm/rpmts.h>
+
+#include <archive.h>
+#include <archive_entry.h>
+#include <unistd.h>
+
+#include "debug.h"
+
+#define BUFSIZE (128*1024)
+
+static void fill_archive_entry(struct archive * a, struct archive_entry * entry, rpmfi fi)
+{
+ archive_entry_clear(entry);
+
+ char * filename = rstrscat(NULL, ".", rpmfiDN(fi), rpmfiBN(fi), NULL);
+ archive_entry_copy_pathname(entry, filename);
+ _free(filename);
+
+ archive_entry_set_size(entry, rpmfiFSize(fi));
+ rpm_mode_t mode = rpmfiFMode(fi);
+ archive_entry_set_filetype(entry, mode & S_IFMT);
+ archive_entry_set_perm(entry, mode);
+
+ archive_entry_set_uname(entry, rpmfiFUser(fi));
+ archive_entry_set_gname(entry, rpmfiFGroup(fi));
+ archive_entry_set_rdev(entry, rpmfiFRdev(fi));
+ archive_entry_set_mtime(entry, rpmfiFMtime(fi), 0);
+
+ if (S_ISLNK(mode))
+ archive_entry_set_symlink(entry, rpmfiFLink(fi));
+}
+
+static void write_file_content(struct archive * a, char * buf, rpmfi fi)
+{
+ rpm_loff_t left = rpmfiFSize(fi);
+ size_t len, read;
+
+ while (left) {
+ len = (left > BUFSIZE ? BUFSIZE : left);
+ read = rpmfiArchiveRead(fi, buf, len);
+ if (read==len) {
+ archive_write_data(a, buf, len);
+ } else {
+ fprintf(stderr, "Error reading file from rpm payload\n");
+ break;
+ }
+ left -= len;
+ }
+}
+
+static int process_package(rpmts ts, char * filename)
+{
+ FD_t fdi;
+ FD_t gzdi;
+ Header h;
+ int rc = 0;
+ char * rpmio_flags = NULL;
+ struct archive *a;
+ struct archive_entry *entry;
+
+ if (!strcmp(filename, "-")) {
+ fdi = fdDup(STDIN_FILENO);
+ } else {
+ fdi = Fopen(filename, "r.ufdio");
+ }
+
+ if (Ferror(fdi)) {
+ fprintf(stderr, "rpm2archive: %s: %s\n",
+ filename, Fstrerror(fdi));
+ exit(EXIT_FAILURE);
+ }
+
+ rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h);
+
+ switch (rc) {
+ case RPMRC_OK:
+ case RPMRC_NOKEY:
+ case RPMRC_NOTTRUSTED:
+ break;
+ case RPMRC_NOTFOUND:
+ fprintf(stderr, _("argument is not an RPM package\n"));
+ exit(EXIT_FAILURE);
+ break;
+ case RPMRC_FAIL:
+ default:
+ fprintf(stderr, _("error reading header from package\n"));
+ exit(EXIT_FAILURE);
+ break;
+ }
+
+
+ /* Retrieve payload size and compression type. */
+ { const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR);
+ rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL);
+ }
+
+ gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
+ free(rpmio_flags);
+
+ if (gzdi == NULL) {
+ fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
+ exit(EXIT_FAILURE);
+ }
+
+ rpmfiles files = rpmfilesNew(NULL, h, 0, RPMFI_KEEPHEADER);
+ rpmfi fi = rpmfiNewArchiveReader(gzdi, files, RPMFI_ITER_READ_ARCHIVE_CONTENT_FIRST);
+
+ /* create archive */
+ a = archive_write_new();
+ archive_write_add_filter_gzip(a);
+ archive_write_set_format_pax_restricted(a);
+
+ if (!strcmp(filename, "-")) {
+ if (isatty(STDOUT_FILENO)) {
+ fprintf(stderr, "Error: refusing to output archive data to a terminal.\n");
+ exit(EXIT_FAILURE);
+ }
+ archive_write_open_fd(a, STDOUT_FILENO);
+ } else {
+ char * outname = rstrscat(NULL, filename, ".tgz", NULL);
+ archive_write_open_filename(a, outname);
+ _free(outname);
+ // XXX error handling
+ }
+
+ entry = archive_entry_new();
+
+ char * buf = xmalloc(BUFSIZE);
+ char * hardlink = NULL;
+
+ rc = 0;
+ while (rc >= 0) {
+ rc = rpmfiNext(fi);
+ if (rc == RPMERR_ITER_END) {
+ break;
+ }
+
+ rpm_mode_t mode = rpmfiFMode(fi);
+ int nlink = rpmfiFNlink(fi);
+
+ fill_archive_entry(a, entry, fi);
+
+ if (nlink > 1) {
+ if (rpmfiArchiveHasContent(fi)) {
+ _free(hardlink);
+ hardlink = rstrscat(NULL, ".", rpmfiFN(fi), NULL);
+ } else {
+ archive_entry_set_hardlink(entry, hardlink);
+ }
+ }
+
+ archive_write_header(a, entry);
+
+ if (S_ISREG(mode) && (nlink == 1 || rpmfiArchiveHasContent(fi))) {
+ write_file_content(a, buf, fi);
+ }
+ }
+ /* End of iteration is not an error */
+ if (rc == RPMERR_ITER_END) {
+ rc = 0;
+ }
+
+ _free(hardlink);
+
+ Fclose(gzdi); /* XXX gzdi == fdi */
+ archive_entry_free(entry);
+ archive_write_close(a);
+ archive_write_free(a);
+ buf = _free(buf);
+ rpmfilesFree(files);
+ rpmfiFree(fi);
+ headerFree(h);
+ return rc;
+}
+
+int main(int argc, char *argv[])
+{
+ int rc;
+
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+ rpmReadConfigFiles(NULL, NULL);
+ char * filename;
+ if (argc == 1)
+ filename = "-";
+ else {
+ if (rstreq(argv[1], "-h") || rstreq(argv[1], "--help")) {
+ fprintf(stderr, "Usage: rpm2archive file.rpm\n");
+ exit(EXIT_FAILURE);
+ } else {
+ filename = argv[1];
+ }
+ }
+
+ rpmts ts = rpmtsCreate();
+ rpmVSFlags vsflags = 0;
+
+ /* XXX retain the ageless behavior of rpm2cpio */
+ vsflags |= _RPMVSF_NODIGESTS;
+ vsflags |= _RPMVSF_NOSIGNATURES;
+ vsflags |= RPMVSF_NOHDRCHK;
+ (void) rpmtsSetVSFlags(ts, vsflags);
+
+ rc = process_package(ts, filename);
+
+ ts = rpmtsFree(ts);
+
+ return rc;
+}
diff --git a/rpm2cpio.c b/rpm2cpio.c
index 89ebdfac0..8bee3c7cc 100644
--- a/rpm2cpio.c
+++ b/rpm2cpio.c
@@ -1,7 +1,6 @@
/* rpmarchive: spit out the main archive portion of a package */
#include "system.h"
-const char *__progname;
#include <rpm/rpmlib.h> /* rpmReadPackageFile .. */
#include <rpm/rpmtag.h>
@@ -9,6 +8,7 @@ const char *__progname;
#include <rpm/rpmpgp.h>
#include <rpm/rpmts.h>
+#include <unistd.h>
#include "debug.h"
@@ -21,7 +21,8 @@ int main(int argc, char *argv[])
off_t payload_size;
FD_t gzdi;
- setprogname(argv[0]); /* Retrofit glibc __progname */
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
rpmReadConfigFiles(NULL, NULL);
if (argc == 1)
fdi = fdDup(STDIN_FILENO);
@@ -38,6 +39,10 @@ int main(int argc, char *argv[])
(argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
exit(EXIT_FAILURE);
}
+ if (isatty(STDOUT_FILENO)) {
+ fprintf(stderr, "Error: refusing to output cpio data to a terminal.\n");
+ exit(EXIT_FAILURE);
+ }
fdo = fdDup(STDOUT_FILENO);
{ rpmts ts = rpmtsCreate();
diff --git a/rpmbuild.c b/rpmbuild.c
index 4fb4289f8..893a55987 100644
--- a/rpmbuild.c
+++ b/rpmbuild.c
@@ -1,5 +1,4 @@
#include "system.h"
-const char *__progname;
#include <errno.h>
#include <libgen.h>
@@ -28,9 +27,10 @@ static struct rpmBuildArguments_s rpmBTArgs;
#define POPT_NOBUILD -1017
#define POPT_RMSPEC -1019
#define POPT_NODIRTOKENS -1020
+#define POPT_BUILDINPLACE -1021
-#define POPT_REBUILD 0x4220
-#define POPT_RECOMPILE 0x4320
+#define POPT_REBUILD 0x4262 /* Bb */
+#define POPT_RECOMPILE 0x4369 /* Ci */
#define POPT_BA 0x6261
#define POPT_BB 0x6262
#define POPT_BC 0x6263
@@ -38,6 +38,13 @@ static struct rpmBuildArguments_s rpmBTArgs;
#define POPT_BL 0x626c
#define POPT_BP 0x6270
#define POPT_BS 0x6273
+#define POPT_RA 0x4261
+#define POPT_RB 0x4262
+#define POPT_RC 0x4263
+#define POPT_RI 0x4269
+#define POPT_RL 0x426c
+#define POPT_RP 0x4270
+#define POPT_RS 0x4273
#define POPT_TA 0x7461
#define POPT_TB 0x7462
#define POPT_TC 0x7463
@@ -55,6 +62,7 @@ static char buildMode = 0; /*!< Build mode (one of "btBC") */
static char buildChar = 0; /*!< Build stage (one of "abcilps ") */
static rpmBuildFlags nobuildAmount = 0; /*!< Build stage disablers */
static ARGV_t build_targets = NULL; /*!< Target platform(s) */
+static int buildInPlace = 0; /*!< from --build-in-place */
static void buildArgCallback( poptContext con,
enum poptCallbackReason reason,
@@ -73,6 +81,13 @@ static void buildArgCallback( poptContext con,
case POPT_BL:
case POPT_BP:
case POPT_BS:
+ case POPT_RA:
+ /* case POPT_RB: same value as POPT_REBUILD */
+ case POPT_RC:
+ case POPT_RI:
+ case POPT_RL:
+ case POPT_RP:
+ case POPT_RS:
case POPT_TA:
case POPT_TB:
case POPT_TC:
@@ -109,6 +124,10 @@ static void buildArgCallback( poptContext con,
spec_flags |= RPMSPEC_FORCE;
break;
+ case POPT_BUILDINPLACE:
+ rpmDefineMacro(NULL, "_build_in_place 1", 0);
+ buildInPlace = 1;
+ break;
}
}
@@ -138,6 +157,28 @@ static struct poptOption rpmBuildPoptTable[] = {
N_("build source package only from <specfile>"),
N_("<specfile>") },
+ { "rp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RP,
+ N_("build through %prep (unpack sources and apply patches) from <source package>"),
+ N_("<source package>") },
+ { "rc", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RC,
+ N_("build through %build (%prep, then compile) from <source package>"),
+ N_("<source package>") },
+ { "ri", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RI,
+ N_("build through %install (%prep, %build, then install) from <source package>"),
+ N_("<source package>") },
+ { "rl", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RL,
+ N_("verify %files section from <source package>"),
+ N_("<source package>") },
+ { "ra", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RA,
+ N_("build source and binary packages from <source package>"),
+ N_("<source package>") },
+ { "rb", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RB,
+ N_("build binary package only from <source package>"),
+ N_("<source package>") },
+ { "rs", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_RS,
+ N_("build source package only from <source package>"),
+ N_("<source package>") },
+
{ "tp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TP,
N_("build through %prep (unpack sources and apply patches) from <tarball>"),
N_("<tarball>") },
@@ -169,6 +210,8 @@ static struct poptOption rpmBuildPoptTable[] = {
{ "buildroot", '\0', POPT_ARG_STRING, 0, POPT_BUILDROOT,
N_("override build root"), "DIRECTORY" },
+ { "build-in-place", '\0', 0, 0, POPT_BUILDINPLACE,
+ N_("run build in current directory"), NULL },
{ "clean", '\0', 0, 0, POPT_RMBUILD,
N_("remove build tree when done"), NULL},
{ "force", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_FORCE,
@@ -185,6 +228,8 @@ static struct poptOption rpmBuildPoptTable[] = {
{ "noclean", '\0', POPT_BIT_SET, &nobuildAmount, RPMBUILD_CLEAN,
N_("do not execute %clean stage of the build"), NULL },
+ { "noprep", '\0', POPT_BIT_SET, &nobuildAmount, RPMBUILD_PREP,
+ N_("do not execute %prep stage of the build"), NULL },
{ "nocheck", '\0', POPT_BIT_SET, &nobuildAmount, RPMBUILD_CHECK,
N_("do not execute %check stage of the build"), NULL },
@@ -308,9 +353,10 @@ static char * getTarSpec(const char *arg)
for (spec = tryspec; *spec != NULL; spec++) {
FILE *fp;
char *cmd;
+ int specfiles = 0;
cmd = rpmExpand("%{uncompress: ", arg, "} | ",
- "%{__tar} xOvf - --wildcards ", *spec,
+ "%{__tar} xOvof - --wildcards ", *spec,
" 2>&1 > ", tmpSpecFile, NULL);
if (!(fp = popen(cmd, "r"))) {
@@ -319,12 +365,19 @@ static char * getTarSpec(const char *arg)
char *fok;
for (;;) {
fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp);
+ if (!fok) break;
/* tar sometimes prints "tar: Record size = 16" messages */
- if (!fok || strncmp(fok, "tar: ", 5) != 0)
- break;
+ if (strstr(fok, "tar: ")) {
+ continue;
+ }
+ specfiles++;
}
pclose(fp);
- gotspec = (fok != NULL) && isSpecFile(tmpSpecFile);
+ gotspec = (specfiles == 1) && isSpecFile(tmpSpecFile);
+ if (specfiles > 1) {
+ rpmlog(RPMLOG_ERR, _("Found more than one spec file in %s\n"), arg);
+ goto exit;
+ }
}
if (!gotspec)
@@ -373,6 +426,13 @@ static int buildForTarget(rpmts ts, const char * arg, BTA_t ba)
int justRm = ((buildAmount & ~(RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)) == 0);
rpmSpecFlags specFlags = spec_flags;
+ /* Override default BUILD value for _builddir */
+ if (buildInPlace) {
+ char *cwd = rpmGetCwd();
+ rpmPushMacro(NULL, "_builddir", NULL, cwd, 0);
+ free(cwd);
+ }
+
if (ba->buildRootOverride)
buildRootURL = rpmGenPath(NULL, ba->buildRootOverride, NULL);
@@ -399,7 +459,7 @@ static int buildForTarget(rpmts ts, const char * arg, BTA_t ba)
dir = xstrdup(arg);
}
srcdir = dirname(dir);
- addMacro(NULL, "_sourcedir", NULL, srcdir, RMIL_TARBALL);
+ rpmPushMacro(NULL, "_sourcedir", NULL, srcdir, RMIL_TARBALL);
free(dir);
} else {
specFile = xstrdup(arg);
@@ -505,6 +565,10 @@ static int build(rpmts ts, const char * arg, BTA_t ba, const char * rcfile)
/* Read in configuration for target. */
rpmFreeMacros(NULL);
+ if (buildInPlace) {
+ /* Need to redefine this after freeing all the macros */
+ rpmDefineMacro(NULL, "_build_in_place 1", 0);
+ }
rpmFreeRpmrc();
(void) rpmReadConfigFiles(rcfile, *target);
rc = buildForTarget(ts, arg, ba);
@@ -531,9 +595,15 @@ int main(int argc, char *argv[])
const char *pkg = NULL;
int ec = 0;
- poptContext optCon = rpmcliInit(argc, argv, optionsTable);
- if (argc <= 1 || poptPeekArg(optCon) == NULL) {
+ poptContext optCon = NULL;
+
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
+ optCon = rpmcliInit(argc, argv, optionsTable);
+
+ /* Args required only when building, let lone --eval etc through */
+ if (ba->buildAmount && poptPeekArg(optCon) == NULL) {
printUsage(optCon, stderr, 0);
exit(EXIT_FAILURE);
}
@@ -549,24 +619,59 @@ int main(int argc, char *argv[])
argerror(_("arguments to --root (-r) must begin with a /"));
}
- /* rpmbuild is rather chatty by default */
- rpmSetVerbosity(quiet ? RPMLOG_WARNING : RPMLOG_INFO);
+ /* rpmbuild runs in verbose mode by default */
+ if (rpmlogSetMask(0) < RPMLOG_MASK(RPMLOG_INFO))
+ rpmSetVerbosity(RPMLOG_INFO);
+
+ if (quiet)
+ rpmSetVerbosity(RPMLOG_WARNING);
if (rpmcliPipeOutput && initPipe())
exit(EXIT_FAILURE);
ts = rpmtsCreate();
(void) rpmtsSetRootDir(ts, rpmcliRootDir);
+ rpmtsSetFlags(ts, rpmtsFlags(ts) | RPMTRANS_FLAG_NOPLUGINS);
+
+ switch (buildChar) {
+ case 'a':
+ ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
+ case 'b':
+ ba->buildAmount |= RPMBUILD_PACKAGEBINARY;
+ ba->buildAmount |= RPMBUILD_CLEAN;
+ if ((buildChar == 'b') && shortCircuit)
+ break;
+ case 'i':
+ ba->buildAmount |= RPMBUILD_INSTALL;
+ ba->buildAmount |= RPMBUILD_CHECK;
+ if ((buildChar == 'i') && shortCircuit)
+ break;
+ case 'c':
+ ba->buildAmount |= RPMBUILD_BUILD;
+ if ((buildChar == 'c') && shortCircuit)
+ break;
+ case 'p':
+ ba->buildAmount |= RPMBUILD_PREP;
+ break;
+ case 'l':
+ ba->buildAmount |= RPMBUILD_FILECHECK;
+ break;
+ case 's':
+ ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
+ break;
+ }
+ ba->buildAmount &= ~(nobuildAmount);
+
switch (bigMode) {
case MODE_REBUILD:
case MODE_RECOMPILE:
- ba->buildAmount =
- RPMBUILD_PREP | RPMBUILD_BUILD | RPMBUILD_INSTALL | RPMBUILD_CHECK;
- if (bigMode == MODE_REBUILD) {
- ba->buildAmount |= RPMBUILD_PACKAGEBINARY;
+ if (bigMode == MODE_REBUILD &&
+ buildChar != 'p' &&
+ buildChar != 'c' &&
+ buildChar != 'i' &&
+ buildChar != 'l') {
ba->buildAmount |= RPMBUILD_RMSOURCE;
ba->buildAmount |= RPMBUILD_RMSPEC;
- ba->buildAmount |= RPMBUILD_CLEAN;
ba->buildAmount |= RPMBUILD_RMBUILD;
}
ba->buildAmount &= ~(nobuildAmount);
@@ -589,35 +694,6 @@ int main(int argc, char *argv[])
break;
case MODE_BUILD:
case MODE_TARBUILD:
- switch (buildChar) {
- case 'a':
- ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
- case 'b':
- ba->buildAmount |= RPMBUILD_PACKAGEBINARY;
- ba->buildAmount |= RPMBUILD_CLEAN;
- if ((buildChar == 'b') && shortCircuit)
- break;
- case 'i':
- ba->buildAmount |= RPMBUILD_INSTALL;
- ba->buildAmount |= RPMBUILD_CHECK;
- if ((buildChar == 'i') && shortCircuit)
- break;
- case 'c':
- ba->buildAmount |= RPMBUILD_BUILD;
- if ((buildChar == 'c') && shortCircuit)
- break;
- case 'p':
- ba->buildAmount |= RPMBUILD_PREP;
- break;
-
- case 'l':
- ba->buildAmount |= RPMBUILD_FILECHECK;
- break;
- case 's':
- ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
- break;
- }
- ba->buildAmount &= ~(nobuildAmount);
while ((pkg = poptGetArg(optCon))) {
ba->rootdir = rpmcliRootDir;
diff --git a/rpmdb.c b/rpmdb.c
index 7223fdf28..25c088da9 100644
--- a/rpmdb.c
+++ b/rpmdb.c
@@ -2,17 +2,16 @@
#include <popt.h>
#include <rpm/rpmcli.h>
+#include <rpm/rpmdb.h>
#include "cliutils.h"
#include "debug.h"
-#if !defined(__GLIBC__) && !defined(__APPLE__)
-char ** environ = NULL;
-#endif
-
enum modes {
MODE_INITDB = (1 << 0),
MODE_REBUILDDB = (1 << 1),
MODE_VERIFYDB = (1 << 2),
+ MODE_EXPORTDB = (1 << 3),
+ MODE_IMPORTDB = (1 << 4),
};
static int mode = 0;
@@ -25,6 +24,12 @@ static struct poptOption dbOptsTable[] = {
NULL},
{ "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN),
&mode, MODE_VERIFYDB, N_("verify database files"), NULL},
+ { "exportdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_EXPORTDB,
+ N_("export database to stdout header list"),
+ NULL},
+ { "importdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_IMPORTDB,
+ N_("import database from stdin header list"),
+ NULL},
POPT_TABLEEND
};
@@ -39,12 +44,57 @@ static struct poptOption optionsTable[] = {
POPT_TABLEEND
};
+static int exportDB(rpmts ts)
+{
+ FD_t fd = fdDup(STDOUT_FILENO);
+ rpmtxn txn = rpmtxnBegin(ts, RPMTXN_READ);
+ int rc = 0;
+
+ if (txn && fd) {
+ Header h;
+ rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMDBI_PACKAGES, NULL, 0);
+ while ((h = rpmdbNextIterator(mi))) {
+ rc += headerWrite(fd, h, HEADER_MAGIC_YES);
+ }
+ rpmdbFreeIterator(mi);
+ } else {
+ rc = -1;
+ }
+ Fclose(fd);
+ rpmtxnEnd(txn);
+ return rc;
+}
+
+/* XXX: only allow this on empty db? */
+static int importDB(rpmts ts)
+{
+ FD_t fd = fdDup(STDIN_FILENO);
+ rpmtxn txn = rpmtxnBegin(ts, RPMTXN_WRITE);
+ int rc = 0;
+
+ if (txn && fd) {
+ Header h;
+ while ((h = headerRead(fd, HEADER_MAGIC_YES))) {
+ rc += rpmtsImportHeader(txn, h, 0);
+ }
+ } else {
+ rc = -1;
+ }
+ rpmtxnEnd(txn);
+ Fclose(fd);
+ return rc;
+}
+
int main(int argc, char *argv[])
{
int ec = EXIT_FAILURE;
- poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+ poptContext optCon = NULL;
rpmts ts = NULL;
-
+
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
+ optCon = rpmcliInit(argc, argv, optionsTable);
+
if (argc < 2 || poptPeekArg(optCon)) {
printUsage(optCon, stderr, 0);
goto exit;
@@ -66,6 +116,12 @@ int main(int argc, char *argv[])
case MODE_VERIFYDB:
ec = rpmtsVerifyDB(ts);
break;
+ case MODE_EXPORTDB:
+ ec = exportDB(ts);
+ break;
+ case MODE_IMPORTDB:
+ ec = importDB(ts);
+ break;
default:
argerror(_("only one major mode may be specified"));
}
diff --git a/rpmio/Makefile.am b/rpmio/Makefile.am
index 7b27d6153..6024ae4e2 100644
--- a/rpmio/Makefile.am
+++ b/rpmio/Makefile.am
@@ -1,9 +1,14 @@
# Makefile for rpm library.
+include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
+
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
AM_CPPFLAGS += @WITH_NSS_INCLUDE@
AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
+AM_CPPFLAGS += @WITH_OPENSSL_INCLUDE@
AM_CPPFLAGS += @WITH_POPT_INCLUDE@
+AM_CPPFLAGS += $(ZSTD_CFLAGS)
AM_CPPFLAGS += -I$(top_srcdir)/misc
AM_CPPFLAGS += -DRPMCONFIGDIR="\"@RPMCONFIGDIR@\""
AM_CPPFLAGS += -DLOCALSTATEDIR="\"$(localstatedir)\""
@@ -21,20 +26,26 @@ librpmio_la_SOURCES = \
if WITH_BEECRYPT
librpmio_la_SOURCES += digest_beecrypt.c
else
+if WITH_OPENSSL
+librpmio_la_SOURCES += digest_openssl.c
+else
librpmio_la_SOURCES += digest_nss.c
endif
+endif
-librpmio_la_LDFLAGS = -version-info 4:0:1
+librpmio_la_LDFLAGS = -version-info $(rpm_version_info)
librpmio_la_LIBADD = \
../misc/libmisc.la \
@WITH_NSS_LIB@ \
@WITH_BEECRYPT_LIB@ \
+ @WITH_OPENSSL_LIB@ \
@WITH_BZ2_LIB@ \
@WITH_ZLIB_LIB@ \
@WITH_LIBELF_LIB@ \
@WITH_POPT_LIB@ \
@WITH_LZMA_LIB@ \
+ $(ZSTD_LIBS) \
-lpthread
if WITH_INTERNAL_BEECRYPT
diff --git a/rpmio/argv.c b/rpmio/argv.c
index f061f03de..3508a9fc1 100644
--- a/rpmio/argv.c
+++ b/rpmio/argv.c
@@ -213,12 +213,32 @@ int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
char *argvJoin(ARGV_const_t argv, const char *sep)
{
+ int argc = 0;
+ size_t argvlen = 0;
char *dest = NULL;
- char * const *arg;
- for (arg = argv; arg && *arg; arg++) {
- rstrscat(&dest, *arg, *(arg+1) ? sep : "", NULL);
- }
+ if (argv) {
+ ARGV_const_t arg;
+ for (arg = argv; *arg; arg++)
+ argvlen += strlen(*arg);
+ argc = arg - argv;
+ }
+
+ if (argc > 0) {
+ size_t seplen = (sep != NULL) ? strlen(sep) : 0;
+ char *p;
+
+ dest = xmalloc(argvlen + (seplen * (argc - 1)) + 1);
+
+ p = stpcpy(dest, argv[0]);
+ for (int i = 1; i < argc; i++) {
+ if (seplen)
+ p = stpcpy(p, sep);
+ p = stpcpy(p, argv[i]);
+ }
+ *p = '\0';
+ }
+
return dest;
}
diff --git a/rpmio/argv.h b/rpmio/argv.h
index d73a3c35f..602b1dc20 100644
--- a/rpmio/argv.h
+++ b/rpmio/argv.h
@@ -3,6 +3,8 @@
/** \ingroup rpmargv
* \file rpmio/argv.h
+ *
+ * Argument Manipulation API.
*/
#include <stdio.h>
@@ -149,7 +151,7 @@ typedef rpmFlags argvFlags;
/** \ingroup rpmargv
* Split a string into an argv array.
* @param str string arg to split
- * @param seps seperator characters
+ * @param seps separator characters
* @param flags flags to control behavior
* @return argv array
*/
@@ -159,7 +161,7 @@ ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags);
* Split a string into an argv array.
* @retval *argvp argv array
* @param str string arg to split
- * @param seps seperator characters
+ * @param seps separator characters
* @return 0 always
*/
int argvSplit(ARGV_t * argvp, const char * str, const char * seps);
@@ -167,7 +169,7 @@ int argvSplit(ARGV_t * argvp, const char * str, const char * seps);
/** \ingroup rpmargv
* Join an argv array into a string.
* @param *argv argv array to join
- * @param sep seperator string to use
+ * @param sep separator string to use
* @return malloc'ed string
*/
char *argvJoin(ARGV_const_t argv, const char *sep);
diff --git a/rpmio/base64.c b/rpmio/base64.c
index 60e67d442..4424aabbd 100644
--- a/rpmio/base64.c
+++ b/rpmio/base64.c
@@ -104,7 +104,7 @@ static int base64_decode_value(unsigned char value_in)
{
static const int decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51};
value_in -= 43;
- if (value_in > sizeof(decoding)/sizeof(int))
+ if (value_in >= sizeof(decoding)/sizeof(int))
return -1;
return decoding[value_in];
}
diff --git a/rpmio/digest.c b/rpmio/digest.c
index c1f73b331..1f5e1667b 100644
--- a/rpmio/digest.c
+++ b/rpmio/digest.c
@@ -8,14 +8,28 @@
#include "debug.h"
-#define DIGESTS_MAX 11
+#define DIGESTS_MAX 12
struct rpmDigestBundle_s {
- int index_min; /*!< Smallest index of active digest */
int index_max; /*!< Largest index of active digest */
off_t nbytes; /*!< Length of total input data */
- DIGEST_CTX digests[DIGESTS_MAX]; /*!< Digest contexts indexed by algo */
+ DIGEST_CTX digests[DIGESTS_MAX]; /*!< Digest contexts identified by id */
+ int ids[DIGESTS_MAX]; /*!< Digest ID (arbitrary non-zero) */
};
+static int findID(rpmDigestBundle bundle, int id)
+{
+ int ix = -1;
+ if (bundle) {
+ for (int i = 0; i < DIGESTS_MAX; i++) {
+ if (bundle->ids[i] == id) {
+ ix = i;
+ break;
+ }
+ }
+ }
+ return ix;
+}
+
rpmDigestBundle rpmDigestBundleNew(void)
{
rpmDigestBundle bundle = xcalloc(1, sizeof(*bundle));
@@ -25,7 +39,7 @@ rpmDigestBundle rpmDigestBundleNew(void)
rpmDigestBundle rpmDigestBundleFree(rpmDigestBundle bundle)
{
if (bundle) {
- for (int i = bundle->index_min; i <= bundle->index_max ; i++) {
+ for (int i = 0; i <= bundle->index_max ; i++) {
if (bundle->digests[i] == NULL)
continue;
rpmDigestFinal(bundle->digests[i], NULL, NULL, 0);
@@ -40,56 +54,58 @@ rpmDigestBundle rpmDigestBundleFree(rpmDigestBundle bundle)
int rpmDigestBundleAdd(rpmDigestBundle bundle, int algo,
rpmDigestFlags flags)
{
- DIGEST_CTX ctx = NULL;
- if (bundle && algo > 0 && algo < DIGESTS_MAX) {
- if (bundle->digests[algo] == NULL) {
- ctx = rpmDigestInit(algo, flags);
- if (ctx) {
- bundle->digests[algo] = ctx;
- if (algo < bundle->index_min) {
- bundle->index_min = algo;
- }
- if (algo > bundle->index_max) {
- bundle->index_max = algo;
- }
+ return rpmDigestBundleAddID(bundle, algo, algo, flags);
+}
+
+int rpmDigestBundleAddID(rpmDigestBundle bundle, int algo, int id,
+ rpmDigestFlags flags)
+{
+ int rc = -1;
+ if (id > 0 && findID(bundle, id) < 0) {
+ int ix = findID(bundle, 0); /* Find first free slot */
+ if (ix >= 0) {
+ bundle->digests[ix] = rpmDigestInit(algo, flags);
+ if (bundle->digests[ix]) {
+ bundle->ids[ix]= id;
+ if (ix > bundle->index_max)
+ bundle->index_max = ix;
+ rc = 0;
}
}
}
- return (ctx != NULL);
+ return rc;
}
-
int rpmDigestBundleUpdate(rpmDigestBundle bundle, const void *data, size_t len)
{
int rc = 0;
if (bundle && data && len > 0) {
- for (int i = bundle->index_min; i <= bundle->index_max; i++) {
- DIGEST_CTX ctx = bundle->digests[i];
- if (ctx == NULL)
- continue;
- rc += rpmDigestUpdate(ctx, data, len);
+ for (int i = 0; i <= bundle->index_max; i++) {
+ if (bundle->ids[i] > 0)
+ rc += rpmDigestUpdate(bundle->digests[i], data, len);
}
bundle->nbytes += len;
}
return rc;
}
-int rpmDigestBundleFinal(rpmDigestBundle bundle,
- int algo, void ** datap, size_t * lenp, int asAscii)
+int rpmDigestBundleFinal(rpmDigestBundle bundle, int id,
+ void ** datap, size_t * lenp, int asAscii)
{
int rc = 0;
- if (bundle && algo >= bundle->index_min && algo <= bundle->index_max) {
- rc = rpmDigestFinal(bundle->digests[algo], datap, lenp, asAscii);
- bundle->digests[algo] = NULL;
+ int ix = findID(bundle, id);
+
+ if (ix >= 0) {
+ rc = rpmDigestFinal(bundle->digests[ix], datap, lenp, asAscii);
+ bundle->digests[ix] = NULL;
+ bundle->ids[ix] = 0;
}
return rc;
}
-DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int algo)
+DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int id)
{
- DIGEST_CTX dup = NULL;
- if (bundle && algo >= bundle->index_min && algo <= bundle->index_max) {
- dup = rpmDigestDup(bundle->digests[algo]);
- }
+ int ix = findID(bundle, id);
+ DIGEST_CTX dup = (ix >= 0) ? rpmDigestDup(bundle->digests[ix]) : NULL;
return dup;
}
diff --git a/rpmio/digest.h b/rpmio/digest.h
index f10f1c871..9e0cde3b9 100644
--- a/rpmio/digest.h
+++ b/rpmio/digest.h
@@ -5,8 +5,7 @@
typedef struct pgpDigAlg_s * pgpDigAlg;
-typedef int (*setmpifunc)(pgpDigAlg digp,
- int num, const uint8_t *p, const uint8_t *pend);
+typedef int (*setmpifunc)(pgpDigAlg digp, int num, const uint8_t *p);
typedef int (*verifyfunc)(pgpDigAlg pgpkey, pgpDigAlg pgpsig,
uint8_t *hash, size_t hashlen, int hash_algo);
typedef void (*freefunc)(pgpDigAlg digp);
@@ -28,7 +27,7 @@ struct pgpDigParams_s {
uint8_t tag;
uint8_t version; /*!< version number. */
- pgpTime_t time; /*!< time that the key was created. */
+ uint32_t time; /*!< key/signature creation time. */
uint8_t pubkey_algo; /*!< public key algorithm. */
uint8_t hash_algo;
diff --git a/rpmio/digest_beecrypt.c b/rpmio/digest_beecrypt.c
index 7ff706034..597027e25 100644
--- a/rpmio/digest_beecrypt.c
+++ b/rpmio/digest_beecrypt.c
@@ -1,17 +1,17 @@
#include "system.h"
-#include <beecrypt.h>
-#include <dsa.h>
-#include <endianness.h>
-#include <md5.h>
-#include <mp.h>
-#include <rsa.h>
-#include <rsapk.h>
-#include <sha1.h>
+#include <beecrypt/beecrypt.h>
+#include <beecrypt/dsa.h>
+#include <beecrypt/endianness.h>
+#include <beecrypt/md5.h>
+#include <beecrypt/mp.h>
+#include <beecrypt/rsa.h>
+#include <beecrypt/rsapk.h>
+#include <beecrypt/sha1.h>
#if HAVE_BEECRYPT_API_H
-#include <sha256.h>
-#include <sha384.h>
-#include <sha512.h>
+#include <beecrypt/sha256.h>
+#include <beecrypt/sha384.h>
+#include <beecrypt/sha512.h>
#endif
#include <rpm/rpmpgp.h>
@@ -198,66 +198,6 @@ int rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
return 0;
}
-/**************************** helpers ************************************/
-
-static inline char * pgpHexCvt(char *t, const byte *s, int nbytes)
-{
- static char hex[] = "0123456789abcdef";
- while (nbytes-- > 0) {
- unsigned int i;
- i = *s++;
- *t++ = hex[ (i >> 4) & 0xf ];
- *t++ = hex[ (i ) & 0xf ];
- }
- *t = '\0';
- return t;
-}
-
-static const char * pgpMpiHex(const byte *p, const byte *pend)
-{
- static char prbuf[2048];
- char *t = prbuf;
- int nbytes = pgpMpiLen(p) - 2;
- if (nbytes > 1024 || nbytes > pend - (p + 2))
- return NULL;
- t = pgpHexCvt(t, p+2, nbytes);
- return prbuf;
-}
-
-static int pgpHexSet(int lbits, mpnumber * mpn, const byte * p, const byte * pend)
-{
- unsigned int mbits = pgpMpiBits(p);
- unsigned int nbits;
- unsigned int nbytes;
- char *t;
- unsigned int ix;
-
- nbits = (lbits > mbits ? lbits : mbits);
- nbytes = ((nbits + 7) >> 3);
- t = xmalloc(2*nbytes+1);
- ix = 2 * ((nbits - mbits) >> 3);
-
- if (ix > 0) memset(t, (int)'0', ix);
- strcpy(t+ix, pgpMpiHex(p, pend));
- (void) mpnsethex(mpn, t);
- t = _free(t);
- return 0;
-}
-
-static void pgpFreeSigRSADSA(pgpDigAlg sa)
-{
- if (sa->data)
- free(sa->data);
- sa->data = 0;
-}
-
-static void pgpFreeKeyRSADSA(pgpDigAlg sa)
-{
- if (sa->data)
- free(sa->data);
- sa->data = 0;
-}
-
/****************************** RSA **************************************/
@@ -267,45 +207,73 @@ struct pgpDigSigRSA_s {
struct pgpDigKeyRSA_s {
rsapk rsa_pk;
+ int nbytes;
};
-static int pgpSetSigMpiRSA(pgpDigAlg pgpsig, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetSigMpiRSA(pgpDigAlg pgpsig, int num, const uint8_t *p)
{
struct pgpDigSigRSA_s *sig = pgpsig->data;
+ int mlen = pgpMpiLen(p) - 2;
int rc = 1;
+ if (!sig)
+ sig = pgpsig->data = xcalloc(1, sizeof(*sig));
+
switch (num) {
case 0:
- sig = pgpsig->data = xcalloc(1, sizeof(*sig));
- (void) mpnsethex(&sig->c, pgpMpiHex(p, pend));
- rc = 0;
+ if (!mpnsetbin(&sig->c, p + 2, mlen))
+ rc = 0;
break;
}
return rc;
}
-static int pgpSetKeyMpiRSA(pgpDigAlg pgpkey, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetKeyMpiRSA(pgpDigAlg pgpkey, int num, const uint8_t *p)
{
struct pgpDigKeyRSA_s *key = pgpkey->data;
+ int mlen = pgpMpiLen(p) - 2;
int rc = 1;
if (!key)
key = pgpkey->data = xcalloc(1, sizeof(*key));
+
switch (num) {
case 0:
- (void) mpbsethex(&key->rsa_pk.n, pgpMpiHex(p, pend));
- rc = 0;
+ key->nbytes = mlen;
+ if (!mpbsetbin(&key->rsa_pk.n, p + 2, mlen))
+ rc = 0;
break;
case 1:
- (void) mpnsethex(&key->rsa_pk.e, pgpMpiHex(p, pend));
- rc = 0;
+ if (!mpnsetbin(&key->rsa_pk.e, p + 2, mlen))
+ rc = 0;
break;
}
return rc;
}
+static int pkcs1pad(mpnumber *rsahm, int nbytes, const char *prefix, uint8_t *hash, size_t hashlen)
+{
+ int datalen = strlen(prefix) / 2 + hashlen;
+ byte *buf, *bp;
+ int rc = 1;
+
+ if (nbytes < 4 + datalen)
+ return 1;
+ buf = xmalloc(nbytes);
+ memset(buf, 0xff, nbytes);
+ buf[0] = 0x00;
+ buf[1] = 0x01;
+ bp = buf + nbytes - datalen;
+ bp[-1] = 0;
+ for (; *prefix; prefix += 2)
+ *bp++ = (rnibble(prefix[0]) << 4) | rnibble(prefix[1]);
+ memcpy(bp, hash, hashlen);
+ if (!mpnsetbin(rsahm, buf, nbytes))
+ rc = 0;
+ buf = _free(buf);
+ return rc;
+}
+
static int pgpVerifySigRSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig, uint8_t *hash, size_t hashlen, int hash_algo)
{
struct pgpDigKeyRSA_s *key = pgpkey->data;
@@ -340,28 +308,10 @@ static int pgpVerifySigRSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig, uint8_t *hash, si
return 1;
}
- /* Generate RSA modulus parameter. */
- { unsigned int nbits = MP_WORDS_TO_BITS(sig->c.size);
- unsigned int nb = (nbits + 7) >> 3;
- byte *buf, *bp;
-
- if (nb < 3)
- return 1;
- buf = xmalloc(nb);
- memset(buf, 0xff, nb);
- buf[0] = 0x00;
- buf[1] = 0x01;
- bp = buf + nb - strlen(prefix)/2 - hashlen - 1;
- if (bp < buf)
- return 1;
- *bp++ = 0;
- for (; *prefix; prefix += 2)
- *bp++ = (rnibble(prefix[0]) << 4) | rnibble(prefix[1]);
- memcpy(bp, hash, hashlen);
- mpnzero(&rsahm);
- (void) mpnsetbin(&rsahm, buf, nb);
- buf = _free(buf);
- }
+ memset(&rsahm, 0, sizeof(rsahm));
+ if (pkcs1pad(&rsahm, key->nbytes, prefix, hash, hashlen) != 0)
+ return 1;
+
#if HAVE_BEECRYPT_API_H
rc = rsavrfy(&key->rsa_pk.n, &key->rsa_pk.e, &sig->c, &rsahm) == 1 ? 0 : 1;
#else
@@ -371,6 +321,25 @@ static int pgpVerifySigRSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig, uint8_t *hash, si
return rc;
}
+static void pgpFreeSigRSA(pgpDigAlg pgpsig)
+{
+ struct pgpDigSigRSA_s *sig = pgpsig->data;
+ if (sig) {
+ mpnfree(&sig->c);
+ pgpsig->data = _free(sig);
+ }
+}
+
+static void pgpFreeKeyRSA(pgpDigAlg pgpkey)
+{
+ struct pgpDigKeyRSA_s *key = pgpkey->data;
+ if (key) {
+ mpbfree(&key->rsa_pk.n);
+ mpnfree(&key->rsa_pk.e);
+ pgpkey->data = _free(key);
+ }
+}
+
/****************************** DSA **************************************/
@@ -384,30 +353,35 @@ struct pgpDigKeyDSA_s {
mpbarrett q;
mpnumber g;
mpnumber y;
+ int qbytes;
};
-static int pgpSetSigMpiDSA(pgpDigAlg pgpsig, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetSigMpiDSA(pgpDigAlg pgpsig, int num, const uint8_t *p)
{
struct pgpDigSigDSA_s *sig = pgpsig->data;
+ int mlen = pgpMpiLen(p) - 2;
int rc = 1;
+ if (!sig)
+ sig = pgpsig->data = xcalloc(1, sizeof(*sig));
+
switch (num) {
case 0:
- sig = pgpsig->data = xcalloc(1, sizeof(*sig));
- rc = pgpHexSet(160, &sig->r, p, pend);
+ if (!mpnsetbin(&sig->r, p + 2, mlen))
+ rc = 0;
break;
case 1:
- rc = pgpHexSet(160, &sig->s, p, pend);
+ if (!mpnsetbin(&sig->s, p + 2, mlen))
+ rc = 0;
break;
}
return rc;
}
-static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num, const uint8_t *p)
{
struct pgpDigKeyDSA_s *key = pgpkey->data;
+ int mlen = pgpMpiLen(p) - 2;
int rc = 1;
if (!key)
@@ -415,20 +389,21 @@ static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num,
switch (num) {
case 0:
- mpbsethex(&key->p, pgpMpiHex(p, pend));
- rc = 0;
+ if (!mpbsetbin(&key->p, p + 2, mlen))
+ rc = 0;
break;
case 1:
- mpbsethex(&key->q, pgpMpiHex(p, pend));
- rc = 0;
+ key->qbytes = mlen;
+ if (!mpbsetbin(&key->q, p + 2, mlen))
+ rc = 0;
break;
case 2:
- mpnsethex(&key->g, pgpMpiHex(p, pend));
- rc = 0;
+ if (!mpnsetbin(&key->g, p + 2, mlen))
+ rc = 0;
break;
case 3:
- mpnsethex(&key->y, pgpMpiHex(p, pend));
- rc = 0;
+ if (!mpnsetbin(&key->y, p + 2, mlen))
+ rc = 0;
break;
}
return rc;
@@ -441,17 +416,41 @@ static int pgpVerifySigDSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig, uint8_t *hash, si
mpnumber hm;
int rc = 1;
- if (sig && key) {
+ if (sig && key && hashlen >= key->qbytes) {
mpnzero(&hm);
- mpnsetbin(&hm, hash, hashlen);
+ mpnsetbin(&hm, hash, key->qbytes);
rc = dsavrfy(&key->p, &key->q, &key->g, &hm, &key->y, &sig->r, &sig->s) == 1 ? 0 : 1;
mpnfree(&hm);
}
return rc;
}
-static int pgpSetMpiNULL(pgpDigAlg pgpkey, int num,
- const uint8_t *p, const uint8_t *pend)
+static void pgpFreeSigDSA(pgpDigAlg pgpsig)
+{
+ struct pgpDigSigDSA_s *sig = pgpsig->data;
+ if (sig) {
+ mpnfree(&sig->r);
+ mpnfree(&sig->s);
+ pgpsig->data = _free(sig);
+ }
+}
+
+static void pgpFreeKeyDSA(pgpDigAlg pgpkey)
+{
+ struct pgpDigKeyDSA_s *key = pgpkey->data;
+ if (key) {
+ mpbfree(&key->p);
+ mpbfree(&key->q);
+ mpnfree(&key->g);
+ mpnfree(&key->y);
+ pgpkey->data = _free(key);
+ }
+}
+
+
+/****************************** NULL **************************************/
+
+static int pgpSetMpiNULL(pgpDigAlg pgpkey, int num, const uint8_t *p)
{
return 1;
}
@@ -469,12 +468,12 @@ pgpDigAlg pgpPubkeyNew(int algo)
switch (algo) {
case PGPPUBKEYALGO_RSA:
ka->setmpi = pgpSetKeyMpiRSA;
- ka->free = pgpFreeKeyRSADSA;
+ ka->free = pgpFreeKeyRSA;
ka->mpis = 2;
break;
case PGPPUBKEYALGO_DSA:
ka->setmpi = pgpSetKeyMpiDSA;
- ka->free = pgpFreeKeyRSADSA;
+ ka->free = pgpFreeKeyDSA;
ka->mpis = 4;
break;
default:
@@ -495,13 +494,13 @@ pgpDigAlg pgpSignatureNew(int algo)
switch (algo) {
case PGPPUBKEYALGO_RSA:
sa->setmpi = pgpSetSigMpiRSA;
- sa->free = pgpFreeSigRSADSA;
+ sa->free = pgpFreeSigRSA;
sa->verify = pgpVerifySigRSA;
sa->mpis = 1;
break;
case PGPPUBKEYALGO_DSA:
sa->setmpi = pgpSetSigMpiDSA;
- sa->free = pgpFreeSigRSADSA;
+ sa->free = pgpFreeSigDSA;
sa->verify = pgpVerifySigDSA;
sa->mpis = 2;
break;
diff --git a/rpmio/digest_nss.c b/rpmio/digest_nss.c
index 8a948219d..992d9acf6 100644
--- a/rpmio/digest_nss.c
+++ b/rpmio/digest_nss.c
@@ -53,6 +53,9 @@ int rpmInitCrypto(void)
* a private context if possible.
*/
if (!_crypto_initialized) {
+ /* NSPR sets SIGPIPE to ignore behind our back, save and restore */
+ struct sigaction oact;
+ sigaction(SIGPIPE, NULL, &oact);
#if HAVE_NSS_INITCONTEXT
PRUint32 flags = (NSS_INIT_READONLY|NSS_INIT_NOCERTDB|
NSS_INIT_NOMODDB|NSS_INIT_FORCEOPEN|
@@ -62,10 +65,12 @@ int rpmInitCrypto(void)
#else
if (NSS_NoDB_Init(NULL) != SECSuccess) {
#endif
+ rpmlog(RPMLOG_ERR, _("Failed to initialize NSS library\n"));
rc = -1;
} else {
_crypto_initialized = 1;
}
+ sigaction(SIGPIPE, &oact, NULL);
}
/* Register one post-fork handler per process */
@@ -223,8 +228,7 @@ static SECOidTag getHashAlg(unsigned int hashalgo)
return SEC_OID_UNKNOWN;
}
-static int pgpMpiSet(unsigned int lbits, uint8_t *dest,
- const uint8_t * p, const uint8_t * pend)
+static int pgpMpiSet(unsigned int lbits, uint8_t *dest, const uint8_t * p)
{
unsigned int mbits = pgpMpiBits(p);
unsigned int nbits;
@@ -232,9 +236,6 @@ static int pgpMpiSet(unsigned int lbits, uint8_t *dest,
uint8_t *t = dest;
unsigned int ix;
- if ((p + ((mbits+7) >> 3)) > pend)
- return 1;
-
if (mbits > lbits)
return 1;
@@ -249,14 +250,10 @@ static int pgpMpiSet(unsigned int lbits, uint8_t *dest,
return 0;
}
-static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item,
- const uint8_t *p, const uint8_t *pend)
+static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p)
{
size_t nbytes = pgpMpiLen(p)-2;
- if (p + nbytes + 2 > pend)
- return NULL;
-
if (item == NULL) {
if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL)
return item;
@@ -312,25 +309,28 @@ static SECKEYPublicKey *pgpNewPublicKey(KeyType type)
#define DSA1_Q_BITS DSA_Q_BITS
#endif
-static int pgpSetSigMpiDSA(pgpDigAlg pgpsig, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetSigMpiDSA(pgpDigAlg pgpsig, int num, const uint8_t *p)
{
SECItem *sig = pgpsig->data;
- int lbits = DSA1_Q_BITS;
+ unsigned int qbits = DSA1_Q_BITS;
+ unsigned int subprlen = DSA1_SUBPRIME_LEN;
+ unsigned int siglen = DSA1_SIGNATURE_LEN;
int rc = 1; /* assume failure */
switch (num) {
case 0:
- sig = pgpsig->data = SECITEM_AllocItem(NULL, NULL, DSA1_SIGNATURE_LEN);
+ sig = pgpsig->data = SECITEM_AllocItem(NULL, NULL, siglen);
if (sig) {
- memset(sig->data, 0, DSA1_SIGNATURE_LEN);
- rc = pgpMpiSet(lbits, sig->data, p, pend);
+ memset(sig->data, 0, siglen);
+ rc = pgpMpiSet(qbits, sig->data, p);
}
break;
case 1:
- if (sig && pgpMpiSet(lbits, sig->data+DSA1_SUBPRIME_LEN, p, pend) == 0) {
+ if (sig && pgpMpiSet(qbits, sig->data+subprlen, p) == 0) {
SECItem *signew = SECITEM_AllocItem(NULL, NULL, 0);
- if (signew && DSAU_EncodeDerSig(signew, sig) == SECSuccess) {
+ if (signew == NULL)
+ break;
+ if (DSAU_EncodeDerSigWithLen(signew, sig, siglen) == SECSuccess) {
SECITEM_FreeItem(sig, PR_TRUE);
pgpsig->data = signew;
rc = 0;
@@ -342,8 +342,7 @@ static int pgpSetSigMpiDSA(pgpDigAlg pgpsig, int num,
return rc;
}
-static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num, const uint8_t *p)
{
SECItem *mpi = NULL;
SECKEYPublicKey *key = pgpkey->data;
@@ -354,16 +353,16 @@ static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num,
if (key) {
switch (num) {
case 0:
- mpi = pgpMpiItem(key->arena, &key->u.dsa.params.prime, p, pend);
+ mpi = pgpMpiItem(key->arena, &key->u.dsa.params.prime, p);
break;
case 1:
- mpi = pgpMpiItem(key->arena, &key->u.dsa.params.subPrime, p, pend);
+ mpi = pgpMpiItem(key->arena, &key->u.dsa.params.subPrime, p);
break;
case 2:
- mpi = pgpMpiItem(key->arena, &key->u.dsa.params.base, p, pend);
+ mpi = pgpMpiItem(key->arena, &key->u.dsa.params.base, p);
break;
case 3:
- mpi = pgpMpiItem(key->arena, &key->u.dsa.publicValue, p, pend);
+ mpi = pgpMpiItem(key->arena, &key->u.dsa.publicValue, p);
break;
}
}
@@ -388,21 +387,19 @@ static int pgpVerifySigDSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig,
return (rc != SECSuccess);
}
-static int pgpSetSigMpiRSA(pgpDigAlg pgpsig, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetSigMpiRSA(pgpDigAlg pgpsig, int num, const uint8_t *p)
{
SECItem *sigitem = NULL;
if (num == 0) {
- sigitem = pgpMpiItem(NULL, pgpsig->data, p, pend);
+ sigitem = pgpMpiItem(NULL, pgpsig->data, p);
if (sigitem)
pgpsig->data = sigitem;
}
return (sigitem == NULL);
}
-static int pgpSetKeyMpiRSA(pgpDigAlg pgpkey, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetKeyMpiRSA(pgpDigAlg pgpkey, int num, const uint8_t *p)
{
SECItem *kitem = NULL;
SECKEYPublicKey *key = pgpkey->data;
@@ -413,10 +410,10 @@ static int pgpSetKeyMpiRSA(pgpDigAlg pgpkey, int num,
if (key) {
switch (num) {
case 0:
- kitem = pgpMpiItem(key->arena, &key->u.rsa.modulus, p, pend);
+ kitem = pgpMpiItem(key->arena, &key->u.rsa.modulus, p);
break;
case 1:
- kitem = pgpMpiItem(key->arena, &key->u.rsa.publicExponent, p, pend);
+ kitem = pgpMpiItem(key->arena, &key->u.rsa.publicExponent, p);
break;
}
}
@@ -471,8 +468,7 @@ static void pgpFreeKeyRSADSA(pgpDigAlg ka)
ka->data = NULL;
}
-static int pgpSetMpiNULL(pgpDigAlg pgpkey, int num,
- const uint8_t *p, const uint8_t *pend)
+static int pgpSetMpiNULL(pgpDigAlg pgpkey, int num, const uint8_t *p)
{
return 1;
}
diff --git a/rpmio/digest_openssl.c b/rpmio/digest_openssl.c
new file mode 100644
index 000000000..18e52a724
--- /dev/null
+++ b/rpmio/digest_openssl.c
@@ -0,0 +1,839 @@
+#include "system.h"
+
+#include <openssl/evp.h>
+#include <openssl/rsa.h>
+#include <openssl/dsa.h>
+#include <rpm/rpmpgp.h>
+
+#include "rpmio/digest.h"
+
+
+/* Compatibility functions for OpenSSL 1.0.2 */
+
+#ifndef HAVE_EVP_MD_CTX_NEW
+# define EVP_MD_CTX_new EVP_MD_CTX_create
+# define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
+
+#ifndef HAVE_RSA_SET0_KEY
+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
+{
+ if (!r) return 0;
+
+ if (n) {
+ r->n = n;
+ }
+
+ if (e) {
+ r->e = e;
+ }
+
+ if (d) {
+ r->d = d;
+ }
+
+ return 1;
+}
+#endif /* HAVE_RSA_SET0_KEY */
+
+#ifndef HAVE_DSA_SET0_KEY
+int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key);
+
+int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key)
+{
+ if (!d) return 0;
+
+ if (pub_key) {
+ d->pub_key = pub_key;
+ }
+
+ if (priv_key) {
+ d->priv_key = priv_key;
+ }
+
+ return 1;
+}
+#endif /* HAVE_DSA_SET0_KEY */
+
+#ifndef HAVE_DSA_SET0_PQG
+int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+
+int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g)
+{
+ if (!d) return 0;
+
+ if (p) {
+ d->p = p;
+ }
+
+ if (q) {
+ d->q = q;
+ }
+
+ if (g) {
+ d->g = g;
+ }
+
+ return 1;
+}
+#endif /* HAVE_DSA_SET0_PQG */
+
+#ifndef HAVE_DSA_SIG_SET0
+int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s);
+
+int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
+{
+ if (!sig) return 0;
+
+ if (r) {
+ sig->r = r;
+ }
+
+ if (s) {
+ sig->s = s;
+ }
+
+ return 1;
+}
+#endif /* HAVE_DSA_SIG_SET0 */
+
+#ifndef HAVE_BN2BINPAD
+static int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen)
+{
+ int i;
+
+ i = BN_num_bytes(a);
+ if (tolen < i)
+ return -1;
+
+ /* Add leading zeroes if necessary */
+ if (tolen > i) {
+ memset(to, 0, tolen - i);
+ to += tolen - i;
+ }
+
+ BN_bn2bin(a, to);
+
+ return tolen;
+}
+#endif /* HAVE_BN2BINPAD */
+
+struct DIGEST_CTX_s {
+ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */
+ int algo; /*!< Used hash algorithm */
+
+ EVP_MD_CTX *md_ctx; /* Digest context (opaque) */
+
+};
+
+/**************************** init ************************************/
+
+int rpmInitCrypto(void) {
+ return 0;
+}
+
+int rpmFreeCrypto(void) {
+ return 0;
+}
+
+/**************************** digest ************************************/
+
+DIGEST_CTX rpmDigestDup(DIGEST_CTX octx)
+{
+ if (!octx) return NULL;
+
+ DIGEST_CTX nctx = NULL;
+ nctx = xcalloc(1, sizeof(*nctx));
+
+ nctx->flags = octx->flags;
+ nctx->algo = octx->algo;
+ nctx->md_ctx = EVP_MD_CTX_new();
+ if (!nctx->md_ctx) {
+ free(nctx);
+ return NULL;
+ }
+
+ if (!EVP_MD_CTX_copy(nctx->md_ctx, octx->md_ctx)) {
+ free(nctx);
+ return NULL;
+ }
+
+ return nctx;
+}
+
+static const EVP_MD *getEVPMD(int hashalgo)
+{
+ switch (hashalgo) {
+
+ case PGPHASHALGO_MD5:
+ return EVP_md5();
+
+ case PGPHASHALGO_SHA1:
+ return EVP_sha1();
+
+ case PGPHASHALGO_RIPEMD160:
+ return EVP_ripemd160();
+
+ case PGPHASHALGO_MD2:
+ return EVP_md2();
+
+ case PGPHASHALGO_SHA256:
+ return EVP_sha256();
+
+ case PGPHASHALGO_SHA384:
+ return EVP_sha384();
+
+ case PGPHASHALGO_SHA512:
+ return EVP_sha512();
+
+ case PGPHASHALGO_SHA224:
+ return EVP_sha224();
+
+ default:
+ return EVP_md_null();
+ }
+}
+
+size_t rpmDigestLength(int hashalgo)
+{
+ return EVP_MD_size(getEVPMD(hashalgo));
+}
+
+DIGEST_CTX rpmDigestInit(int hashalgo, rpmDigestFlags flags)
+{
+ DIGEST_CTX ctx = xcalloc(1, sizeof(*ctx));
+
+ ctx->md_ctx = EVP_MD_CTX_new();
+ if (!ctx->md_ctx) {
+ free(ctx);
+ return NULL;
+ }
+
+ const EVP_MD *md = getEVPMD(hashalgo);
+ if (md == EVP_md_null()) {
+ free(ctx->md_ctx);
+ free(ctx);
+ return NULL;
+ }
+
+ ctx->algo = hashalgo;
+ ctx->flags = flags;
+ if (!EVP_DigestInit_ex(ctx->md_ctx, md, NULL)) {
+ free(ctx->md_ctx);
+ free(ctx);
+ return NULL;
+ }
+
+ return ctx;
+}
+
+int rpmDigestUpdate(DIGEST_CTX ctx, const void *data, size_t len)
+{
+ if (ctx == NULL) return -1;
+
+ EVP_DigestUpdate(ctx->md_ctx, data, len);
+
+ return 0;
+}
+
+int rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
+{
+ int ret;
+ unsigned char *digest = NULL;
+ unsigned int digestlen;
+
+ if (ctx == NULL) return -1;
+
+ digestlen = EVP_MD_CTX_size(ctx->md_ctx);
+ digest = xcalloc(digestlen, sizeof(*digest));
+
+ ret = EVP_DigestFinal_ex(ctx->md_ctx, digest, &digestlen);
+ if (ret != 1) goto done;
+
+ if (!asAscii) {
+ /* Raw data requested */
+ if (lenp) *lenp = digestlen;
+ if (datap) {
+ *datap = digest;
+ digest = NULL;
+ }
+ }
+
+ else {
+ /* ASCII requested */
+ if (lenp) *lenp = (2*digestlen) + 1;
+ if (datap) {
+ const uint8_t * s = (const uint8_t *) digest;
+ *datap = pgpHexStr(s, digestlen);
+ }
+ }
+
+ ret = 1;
+
+done:
+ if (digest) {
+ /* Zero the digest, just in case it's sensitive */
+ memset(digest, 0, digestlen);
+ free(digest);
+ }
+
+ EVP_MD_CTX_free(ctx->md_ctx);
+ free(ctx);
+
+ if (ret != 1) {
+ return -1;
+ }
+
+ return 0;
+}
+
+
+/****************************** RSA **************************************/
+
+/* Key */
+
+struct pgpDigKeyRSA_s {
+ size_t nbytes; /* Size of modulus */
+
+ BIGNUM *n; /* Common Modulus */
+ BIGNUM *e; /* Public Exponent */
+
+ EVP_PKEY *evp_pkey; /* Fully constructed key */
+};
+
+static int constructRSASigningKey(struct pgpDigKeyRSA_s *key)
+{
+ if (key->evp_pkey) {
+ /* We've already constructed it, so just reuse it */
+ return 1;
+ }
+
+ /* Create the RSA key */
+ RSA *rsa = RSA_new();
+ if (!rsa) return 0;
+
+ if (!RSA_set0_key(rsa, key->n, key->e, NULL)) {
+ RSA_free(rsa);
+ return 0;
+ }
+
+ /* Create an EVP_PKEY container to abstract the key-type. */
+ key->evp_pkey = EVP_PKEY_new();
+ if (!key->evp_pkey) {
+ RSA_free(rsa);
+ return 0;
+ }
+
+ /* Assign the RSA key to the EVP_PKEY structure.
+ This will take over memory management of the RSA key */
+ if (!EVP_PKEY_assign_RSA(key->evp_pkey, rsa)) {
+ EVP_PKEY_free(key->evp_pkey);
+ key->evp_pkey = NULL;
+ RSA_free(rsa);
+ }
+
+ return 1;
+}
+
+static int pgpSetKeyMpiRSA(pgpDigAlg pgpkey, int num, const uint8_t *p)
+{
+ size_t mlen = pgpMpiLen(p) - 2;
+ struct pgpDigKeyRSA_s *key = pgpkey->data;
+
+ if (!key) {
+ key = pgpkey->data = xcalloc(1, sizeof(*key));
+ }
+
+ switch (num) {
+ case 0:
+ /* Modulus */
+ if (key->n) {
+ /* This should only ever happen once per key */
+ return 1;
+ }
+
+ key->nbytes = mlen;
+ /* Create a BIGNUM from the pointer.
+ Note: this assumes big-endian data as required by PGP */
+ key->n = BN_bin2bn(p+2, mlen, NULL);
+ if (!key->n) return 1;
+ break;
+
+ case 1:
+ /* Exponent */
+ if (key->e) {
+ /* This should only ever happen once per key */
+ return 1;
+ }
+
+ /* Create a BIGNUM from the pointer.
+ Note: this assumes big-endian data as required by PGP */
+ key->e = BN_bin2bn(p+2, mlen, NULL);
+ if (!key->e) return 1;
+ break;
+ }
+
+ return 0;
+}
+
+static void pgpFreeKeyRSA(pgpDigAlg pgpkey)
+{
+ struct pgpDigKeyRSA_s *key = pgpkey->data;
+ if (key) {
+ if (key->evp_pkey) {
+ EVP_PKEY_free(key->evp_pkey);
+ } else {
+ /* If key->evp_pkey was constructed,
+ * the memory management of these BNs
+ * are freed with it. */
+ BN_clear_free(key->n);
+ BN_clear_free(key->e);
+ }
+
+ free(key);
+ }
+}
+
+/* Signature */
+
+struct pgpDigSigRSA_s {
+ BIGNUM *bn;
+ size_t len;
+};
+
+static int pgpSetSigMpiRSA(pgpDigAlg pgpsig, int num, const uint8_t *p)
+{
+ BIGNUM *bn = NULL;
+
+ int mlen = pgpMpiLen(p) - 2;
+ int rc = 1;
+
+ struct pgpDigSigRSA_s *sig = pgpsig->data;
+ if (!sig) {
+ sig = xcalloc(1, sizeof(*sig));
+ }
+
+ switch (num) {
+ case 0:
+ if (sig->bn) {
+ /* This should only ever happen once per signature */
+ return 1;
+ }
+
+ bn = sig->bn = BN_new();
+ if (!bn) return 1;
+
+ /* Create a BIGNUM from the signature pointer.
+ Note: this assumes big-endian data as required
+ by the PGP multiprecision integer format
+ (RFC4880, Section 3.2)
+ This will be useful later, as we can
+ retrieve this value with appropriate
+ padding. */
+ bn = BN_bin2bn(p+2, mlen, bn);
+ if (!bn) return 1;
+
+ sig->bn = bn;
+ sig->len = mlen;
+
+ pgpsig->data = sig;
+ rc = 0;
+ break;
+ }
+ return rc;
+}
+
+static void pgpFreeSigRSA(pgpDigAlg pgpsig)
+{
+ struct pgpDigSigRSA_s *sig = pgpsig->data;
+ if (sig) {
+ BN_clear_free(sig->bn);
+ free(pgpsig->data);
+ }
+}
+
+static int pgpVerifySigRSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig,
+ uint8_t *hash, size_t hashlen, int hash_algo)
+{
+ int rc, ret;
+ EVP_PKEY_CTX *pkey_ctx = NULL;
+ struct pgpDigSigRSA_s *sig = pgpsig->data;
+
+ void *padded_sig = NULL;
+
+ struct pgpDigKeyRSA_s *key = pgpkey->data;
+
+ if (!constructRSASigningKey(key)) {
+ rc = 1;
+ goto done;
+ }
+
+ pkey_ctx = EVP_PKEY_CTX_new(key->evp_pkey, NULL);
+ if (!pkey_ctx) {
+ rc = 1;
+ goto done;
+ }
+
+ ret = EVP_PKEY_verify_init(pkey_ctx);
+ if (ret < 0) {
+ rc = 1;
+ goto done;
+ }
+
+ ret = EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PADDING);
+ if (ret < 0) {
+ rc = 1;
+ goto done;
+ }
+
+ ret = EVP_PKEY_CTX_set_signature_md(pkey_ctx, getEVPMD(hash_algo));
+ if (ret < 0) {
+ rc = 1;
+ goto done;
+ }
+
+ int pkey_len = EVP_PKEY_size(key->evp_pkey);
+ padded_sig = xcalloc(1, pkey_len);
+ if (!BN_bn2binpad(sig->bn, padded_sig, pkey_len)) {
+ rc = 1;
+ goto done;
+ }
+
+ ret = EVP_PKEY_verify(pkey_ctx, padded_sig, pkey_len, hash, hashlen);
+ if (ret == 1)
+ {
+ /* Success */
+ rc = 0;
+ }
+ else
+ {
+ /* Failure */
+ rc = 1;
+ }
+
+done:
+ EVP_PKEY_CTX_free(pkey_ctx);
+ free(padded_sig);
+ return rc;
+}
+
+/****************************** DSA ***************************************/
+/* Key */
+
+struct pgpDigKeyDSA_s {
+ BIGNUM *p; /* Prime */
+ BIGNUM *q; /* Subprime */
+ BIGNUM *g; /* Base */
+ BIGNUM *y; /* Public Key */
+
+ DSA *dsa_key; /* Fully constructed key */
+};
+
+static int constructDSASigningKey(struct pgpDigKeyDSA_s *key)
+{
+ int rc;
+
+ if (key->dsa_key) {
+ /* We've already constructed it, so just reuse it */
+ return 1;
+ }
+
+ /* Create the DSA key */
+ DSA *dsa = DSA_new();
+ if (!dsa) return 0;
+
+ if (!DSA_set0_pqg(dsa, key->p, key->q, key->g)) {
+ rc = 0;
+ goto done;
+ }
+
+ if (!DSA_set0_key(dsa, key->y, NULL)) {
+ rc = 0;
+ goto done;
+ }
+
+ key->dsa_key = dsa;
+
+ rc = 1;
+done:
+ if (rc == 0) {
+ DSA_free(dsa);
+ }
+ return rc;
+}
+
+
+static int pgpSetKeyMpiDSA(pgpDigAlg pgpkey, int num, const uint8_t *p)
+{
+ BIGNUM *bn;
+ size_t mlen = pgpMpiLen(p) - 2;
+ struct pgpDigKeyDSA_s *key = pgpkey->data;
+
+ if (!key) {
+ key = pgpkey->data = xcalloc(1, sizeof(*key));
+ }
+
+ /* Create a BIGNUM from the key pointer.
+ Note: this assumes big-endian data as required
+ by the PGP multiprecision integer format
+ (RFC4880, Section 3.2) */
+ bn = BN_bin2bn(p+2, mlen, NULL);
+ if (!bn) return 1;
+
+ switch (num) {
+ case 0:
+ /* Prime */
+ if (key->p) {
+ /* This should only ever happen once per key */
+ return 1;
+ }
+ key->p = bn;
+ break;
+
+ case 1:
+ /* Subprime */
+ if (key->q) {
+ /* This should only ever happen once per key */
+ return 1;
+ }
+ key->q = bn;
+ break;
+ case 2:
+ /* Base */
+ if (key->g) {
+ /* This should only ever happen once per key */
+ return 1;
+ }
+ key->g = bn;
+ break;
+ case 3:
+ /* Public */
+ if (key->y) {
+ /* This should only ever happen once per key */
+ return 1;
+ }
+ key->y = bn;
+ break;
+ }
+
+ return 0;
+}
+
+static void pgpFreeKeyDSA(pgpDigAlg pgpkey)
+{
+ struct pgpDigKeyDSA_s *key = pgpkey->data;
+ if (key) {
+ if (key->dsa_key) {
+ DSA_free(key->dsa_key);
+ } else {
+ /* If sig->dsa_key was constructed,
+ * the memory management of these BNs
+ * are freed with it. */
+ BN_clear_free(key->p);
+ BN_clear_free(key->q);
+ BN_clear_free(key->g);
+ BN_clear_free(key->y);
+ }
+ free(key);
+ }
+}
+
+/* Signature */
+
+struct pgpDigSigDSA_s {
+ BIGNUM *r;
+ BIGNUM *s;
+
+ DSA_SIG *dsa_sig;
+};
+
+static int constructDSASignature(struct pgpDigSigDSA_s *sig)
+{
+ int rc;
+
+ if (sig->dsa_sig) {
+ /* We've already constructed it, so just reuse it */
+ return 1;
+ }
+
+ /* Create the DSA signature */
+ DSA_SIG *dsa_sig = DSA_SIG_new();
+ if (!dsa_sig) return 0;
+
+ if (!DSA_SIG_set0(dsa_sig, sig->r, sig->s)) {
+ rc = 0;
+ goto done;
+ }
+
+ sig->dsa_sig = dsa_sig;
+
+ rc = 1;
+done:
+ if (rc == 0) {
+ DSA_SIG_free(sig->dsa_sig);
+ }
+ return rc;
+}
+
+static int pgpSetSigMpiDSA(pgpDigAlg pgpsig, int num, const uint8_t *p)
+{
+ BIGNUM *bn = NULL;
+
+ int mlen = pgpMpiLen(p) - 2;
+ int rc = 1;
+
+ struct pgpDigSigDSA_s *sig = pgpsig->data;
+ if (!sig) {
+ sig = xcalloc(1, sizeof(*sig));
+ }
+
+ /* Create a BIGNUM from the signature pointer.
+ Note: this assumes big-endian data as required
+ by the PGP multiprecision integer format
+ (RFC4880, Section 3.2) */
+ bn = BN_bin2bn(p+2, mlen, NULL);
+ if (!bn) return 1;
+
+ switch (num) {
+ case 0:
+ if (sig->r) {
+ /* This should only ever happen once per signature */
+ BN_free(bn);
+ return 1;
+ }
+ sig->r = bn;
+ rc = 0;
+ break;
+ case 1:
+ if (sig->s) {
+ /* This should only ever happen once per signature */
+ BN_free(bn);
+ return 1;
+ }
+ sig->s = bn;
+ rc = 0;
+ break;
+ }
+
+ pgpsig->data = sig;
+
+ return rc;
+}
+
+static void pgpFreeSigDSA(pgpDigAlg pgpsig)
+{
+ struct pgpDigSigDSA_s *sig = pgpsig->data;
+ if (sig) {
+ if (sig->dsa_sig) {
+ DSA_SIG_free(sig->dsa_sig);
+ } else {
+ /* If sig->dsa_sig was constructed,
+ * the memory management of these BNs
+ * are freed with it. */
+ BN_clear_free(sig->r);
+ BN_clear_free(sig->s);
+ }
+ free(pgpsig->data);
+ }
+}
+
+static int pgpVerifySigDSA(pgpDigAlg pgpkey, pgpDigAlg pgpsig,
+ uint8_t *hash, size_t hashlen, int hash_algo)
+{
+ int rc, ret;
+ struct pgpDigSigDSA_s *sig = pgpsig->data;
+
+ struct pgpDigKeyDSA_s *key = pgpkey->data;
+
+ if (!constructDSASigningKey(key)) {
+ rc = 1;
+ goto done;
+ }
+
+ if (!constructDSASignature(sig)) {
+ rc = 1;
+ goto done;
+ }
+
+ ret = DSA_do_verify(hash, hashlen, sig->dsa_sig, key->dsa_key);
+ if (ret == 1)
+ {
+ /* Success */
+ rc = 0;
+ }
+ else
+ {
+ /* Failure */
+ rc = 1;
+ }
+
+done:
+ return rc;
+}
+
+/****************************** NULL **************************************/
+
+static int pgpSetMpiNULL(pgpDigAlg pgpkey, int num, const uint8_t *p)
+{
+ return 1;
+}
+
+static int pgpVerifyNULL(pgpDigAlg pgpkey, pgpDigAlg pgpsig,
+ uint8_t *hash, size_t hashlen, int hash_algo)
+{
+ return 1;
+}
+
+/****************************** PGP **************************************/
+pgpDigAlg pgpPubkeyNew(int algo)
+{
+ pgpDigAlg ka = xcalloc(1, sizeof(*ka));;
+
+ switch (algo) {
+ case PGPPUBKEYALGO_RSA:
+ ka->setmpi = pgpSetKeyMpiRSA;
+ ka->free = pgpFreeKeyRSA;
+ ka->mpis = 2;
+ break;
+ case PGPPUBKEYALGO_DSA:
+ ka->setmpi = pgpSetKeyMpiDSA;
+ ka->free = pgpFreeKeyDSA;
+ ka->mpis = 4;
+ break;
+ default:
+ ka->setmpi = pgpSetMpiNULL;
+ ka->mpis = -1;
+ break;
+ }
+
+ ka->verify = pgpVerifyNULL; /* keys can't be verified */
+
+ return ka;
+}
+
+pgpDigAlg pgpSignatureNew(int algo)
+{
+ pgpDigAlg sa = xcalloc(1, sizeof(*sa));
+
+ switch (algo) {
+ case PGPPUBKEYALGO_RSA:
+ sa->setmpi = pgpSetSigMpiRSA;
+ sa->free = pgpFreeSigRSA;
+ sa->verify = pgpVerifySigRSA;
+ sa->mpis = 1;
+ break;
+ case PGPPUBKEYALGO_DSA:
+ sa->setmpi = pgpSetSigMpiDSA;
+ sa->free = pgpFreeSigDSA;
+ sa->verify = pgpVerifySigDSA;
+ sa->mpis = 2;
+ break;
+ default:
+ sa->setmpi = pgpSetMpiNULL;
+ sa->verify = pgpVerifyNULL;
+ sa->mpis = -1;
+ break;
+ }
+ return sa;
+}
diff --git a/rpmio/macro.c b/rpmio/macro.c
index 5362512f6..7858b10b2 100644
--- a/rpmio/macro.c
+++ b/rpmio/macro.c
@@ -4,6 +4,8 @@
#include "system.h"
#include <stdarg.h>
+#include <pthread.h>
+#include <errno.h>
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#else
@@ -34,21 +36,31 @@ extern int optind;
#include "debug.h"
+enum macroFlags_e {
+ ME_NONE = 0,
+ ME_AUTO = (1 << 0),
+ ME_USED = (1 << 1),
+};
+
/*! The structure used to store a macro. */
struct rpmMacroEntry_s {
struct rpmMacroEntry_s *prev;/*!< Macro entry stack. */
- char *name; /*!< Macro name. */
- char *opts; /*!< Macro parameters (a la getopt) */
- char *body; /*!< Macro body. */
- int used; /*!< No. of expansions. */
+ const char *name; /*!< Macro name. */
+ const char *opts; /*!< Macro parameters (a la getopt) */
+ const char *body; /*!< Macro body. */
+ int flags; /*!< Macro state bits. */
int level; /*!< Scoping level. */
+ char arena[]; /*!< String arena. */
};
/*! The structure used to store the set of macros in a context. */
struct rpmMacroContext_s {
- rpmMacroEntry *macroTable; /*!< Macro entry table for context. */
- int macrosAllocated;/*!< No. of allocated macros. */
- int firstFree; /*!< No. of macros. */
+ rpmMacroEntry *tab; /*!< Macro entry table (array of pointers). */
+ int n; /*!< No. of macros. */
+ int depth; /*!< Depth tracking when recursing from Lua */
+ int level; /*!< Scope level tracking when recursing from Lua */
+ pthread_mutex_t lock;
+ pthread_mutexattr_t lockattr;
};
@@ -58,6 +70,29 @@ rpmMacroContext rpmGlobalMacroContext = &rpmGlobalMacroContext_s;
static struct rpmMacroContext_s rpmCLIMacroContext_s;
rpmMacroContext rpmCLIMacroContext = &rpmCLIMacroContext_s;
+/*
+ * The macro engine internals do not require recursive mutexes but Lua
+ * macro bindings which can get called from the internals use the external
+ * interfaces which do perform locking. Until that is fixed somehow
+ * we'll just have to settle for recursive mutexes.
+ * Unfortunately POSIX doesn't specify static initializers for recursive
+ * mutexes so we need to have a separate PTHREAD_ONCE initializer just
+ * to initialize the otherwise static macro context mutexes. Pooh.
+ */
+static pthread_once_t locksInitialized = PTHREAD_ONCE_INIT;
+
+static void initLocks(void)
+{
+ rpmMacroContext mcs[] = { rpmGlobalMacroContext, rpmCLIMacroContext, NULL };
+
+ for (rpmMacroContext *mcp = mcs; *mcp; mcp++) {
+ rpmMacroContext mc = *mcp;
+ pthread_mutexattr_init(&mc->lockattr);
+ pthread_mutexattr_settype(&mc->lockattr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutex_init(&mc->lock, &mc->lockattr);
+ }
+}
+
/**
* Macro expansion state.
*/
@@ -66,12 +101,16 @@ typedef struct MacroBuf_s {
size_t tpos; /*!< Current position in expansion buffer */
size_t nb; /*!< No. bytes remaining in expansion buffer. */
int depth; /*!< Current expansion depth. */
+ int level; /*!< Current scoping level */
+ int error; /*!< Errors encountered during expansion? */
int macro_trace; /*!< Pre-print macro to expand? */
int expand_trace; /*!< Post-print macro expansion? */
+ int escape; /*!< Preserve '%%' during expansion? */
+ int flags; /*!< Flags to control behavior */
rpmMacroContext mc;
} * MacroBuf;
-#define _MAX_MACRO_DEPTH 16
+#define _MAX_MACRO_DEPTH 64
static int max_macro_depth = _MAX_MACRO_DEPTH;
#define _PRINT_MACRO_TRACE 0
@@ -80,110 +119,28 @@ static int print_macro_trace = _PRINT_MACRO_TRACE;
#define _PRINT_EXPAND_TRACE 0
static int print_expand_trace = _PRINT_EXPAND_TRACE;
-#define MACRO_CHUNK_SIZE 16
-
/* forward ref */
static int expandMacro(MacroBuf mb, const char *src, size_t slen);
+static void pushMacro(rpmMacroContext mc,
+ const char * n, const char * o, const char * b, int level, int flags);
+static void popMacro(rpmMacroContext mc, const char * n);
+static int loadMacroFile(rpmMacroContext mc, const char * fn);
/* =============================================================== */
-/**
- * Compare macro entries by name (qsort/bsearch).
- * @param ap 1st macro entry
- * @param bp 2nd macro entry
- * @return result of comparison
- */
-static int
-compareMacroName(const void * ap, const void * bp)
+static rpmMacroContext rpmmctxAcquire(rpmMacroContext mc)
{
- rpmMacroEntry ame = *((const rpmMacroEntry *)ap);
- rpmMacroEntry bme = *((const rpmMacroEntry *)bp);
-
- if (ame == NULL && bme == NULL)
- return 0;
- if (ame == NULL)
- return 1;
- if (bme == NULL)
- return -1;
- return strcmp(ame->name, bme->name);
+ if (mc == NULL)
+ mc = rpmGlobalMacroContext;
+ pthread_once(&locksInitialized, initLocks);
+ pthread_mutex_lock(&mc->lock);
+ return mc;
}
-/**
- * Enlarge macro table.
- * @param mc macro context
- */
-static void
-expandMacroTable(rpmMacroContext mc)
+static rpmMacroContext rpmmctxRelease(rpmMacroContext mc)
{
- if (mc->macroTable == NULL) {
- mc->macrosAllocated = MACRO_CHUNK_SIZE;
- mc->macroTable = (rpmMacroEntry *)
- xmalloc(sizeof(*(mc->macroTable)) * mc->macrosAllocated);
- mc->firstFree = 0;
- } else {
- mc->macrosAllocated += MACRO_CHUNK_SIZE;
- mc->macroTable = (rpmMacroEntry *)
- xrealloc(mc->macroTable, sizeof(*(mc->macroTable)) *
- mc->macrosAllocated);
- }
- memset(&mc->macroTable[mc->firstFree], 0, MACRO_CHUNK_SIZE * sizeof(*(mc->macroTable)));
-}
-
-/**
- * Sort entries in macro table.
- * @param mc macro context
- */
-static void
-sortMacroTable(rpmMacroContext mc)
-{
- int i;
-
- if (mc == NULL || mc->macroTable == NULL)
- return;
-
- qsort(mc->macroTable, mc->firstFree, sizeof(*(mc->macroTable)),
- compareMacroName);
-
- /* Empty pointers are now at end of table. Reset first free index. */
- for (i = 0; i < mc->firstFree; i++) {
- if (mc->macroTable[i] != NULL)
- continue;
- mc->firstFree = i;
- break;
- }
-}
-
-void
-rpmDumpMacroTable(rpmMacroContext mc, FILE * fp)
-{
- int nempty = 0;
- int nactive = 0;
-
- if (mc == NULL) mc = rpmGlobalMacroContext;
- if (fp == NULL) fp = stderr;
-
- fprintf(fp, "========================\n");
- if (mc->macroTable != NULL) {
- int i;
- for (i = 0; i < mc->firstFree; i++) {
- rpmMacroEntry me;
- if ((me = mc->macroTable[i]) == NULL) {
- /* XXX this should never happen */
- nempty++;
- continue;
- }
- fprintf(fp, "%3d%c %s", me->level,
- (me->used > 0 ? '=' : ':'), me->name);
- if (me->opts && *me->opts)
- fprintf(fp, "(%s)", me->opts);
- if (me->body && *me->body)
- fprintf(fp, "\t%s", me->body);
- fprintf(fp, "\n");
- nactive++;
- }
- }
- fprintf(fp, _("======================== active %d empty %d\n"),
- nactive, nempty);
+ pthread_mutex_unlock(&mc->lock);
+ return NULL;
}
/**
@@ -191,33 +148,41 @@ rpmDumpMacroTable(rpmMacroContext mc, FILE * fp)
* @param mc macro context
* @param name macro name
* @param namelen no. of bytes
+ * @param pos found/insert position
* @return address of slot in macro table with name (or NULL)
*/
static rpmMacroEntry *
-findEntry(rpmMacroContext mc, const char * name, size_t namelen)
+findEntry(rpmMacroContext mc, const char *name, size_t namelen, size_t *pos)
{
- rpmMacroEntry key, *ret;
- struct rpmMacroEntry_s keybuf;
- char namebuf[namelen+1];
- const char *mname = name;
-
- if (mc == NULL) mc = rpmGlobalMacroContext;
- if (mc->macroTable == NULL || mc->firstFree == 0)
- return NULL;
-
- if (namelen > 0) {
- strncpy(namebuf, name, namelen);
- namebuf[namelen] = '\0';
- mname = namebuf;
+ /* bsearch */
+ int cmp = 1;
+ size_t l = 0;
+ size_t u = mc->n;
+ size_t i = 0;
+ while (l < u) {
+ i = (l + u) / 2;
+ rpmMacroEntry me = mc->tab[i];
+ if (namelen == 0)
+ cmp = strcmp(me->name, name);
+ else {
+ cmp = strncmp(me->name, name, namelen);
+ /* longer me->name compares greater */
+ if (cmp == 0)
+ cmp = (me->name[namelen] != '\0');
+ }
+ if (cmp < 0)
+ l = i + 1;
+ else if (cmp > 0)
+ u = i;
+ else
+ break;
}
-
- key = &keybuf;
- memset(key, 0, sizeof(*key));
- key->name = (char *)mname;
- ret = (rpmMacroEntry *) bsearch(&key, mc->macroTable, mc->firstFree,
- sizeof(*(mc->macroTable)), compareMacroName);
- /* XXX TODO: find 1st empty slot and return that */
- return ret;
+
+ if (pos)
+ *pos = (cmp < 0) ? i + 1 : i;
+ if (cmp == 0)
+ return &mc->tab[i];
+ return NULL;
}
/* =============================================================== */
@@ -226,7 +191,7 @@ findEntry(rpmMacroContext mc, const char * name, size_t namelen)
* fgets(3) analogue that reads \ continuations. Last newline always trimmed.
* @param buf input buffer
* @param size inbut buffer size (bytes)
- * @param fd file handle
+ * @param f file handle
* @return buffer, or NULL on end-of-file
*/
static char *
@@ -316,11 +281,9 @@ static void
printMacro(MacroBuf mb, const char * s, const char * se)
{
const char *senl;
- const char *ellipsis;
- int choplen;
if (s >= se) { /* XXX just in case */
- fprintf(stderr, _("%3d>%*s(empty)"), mb->depth,
+ fprintf(stderr, _("%3d>%*s(empty)\n"), mb->depth,
(2 * mb->depth + 1), "");
return;
}
@@ -332,19 +295,11 @@ printMacro(MacroBuf mb, const char * s, const char * se)
for (senl = se; *senl && !iseol(*senl); senl++)
{};
- /* Limit trailing non-trace output */
- choplen = 61 - (2 * mb->depth);
- if ((senl - s) > choplen) {
- senl = s + choplen;
- ellipsis = "...";
- } else
- ellipsis = "";
-
/* Substitute caret at end-of-macro position */
fprintf(stderr, "%3d>%*s%%%.*s^", mb->depth,
(2 * mb->depth + 1), "", (int)(se - s), s);
- if (se[1] != '\0' && (senl - (se+1)) > 0)
- fprintf(stderr, "%-.*s%s", (int)(senl - (se+1)), se+1, ellipsis);
+ if (se[0] != '\0' && se[1] != '\0' && (senl - (se+1)) > 0)
+ fprintf(stderr, "%-.*s", (int)(senl - (se+1)), se+1);
fprintf(stderr, "\n");
}
@@ -357,9 +312,6 @@ printMacro(MacroBuf mb, const char * s, const char * se)
static void
printExpansion(MacroBuf mb, const char * t, const char * te)
{
- const char *ellipsis;
- int choplen;
-
if (!(te > t)) {
rpmlog(RPMLOG_DEBUG, _("%3d<%*s(empty)\n"), mb->depth, (2 * mb->depth + 1), "");
return;
@@ -368,7 +320,6 @@ printExpansion(MacroBuf mb, const char * t, const char * te)
/* Shorten output which contains newlines */
while (te > t && iseol(te[-1]))
te--;
- ellipsis = "";
if (mb->depth > 0) {
const char *tenl;
@@ -376,17 +327,11 @@ printExpansion(MacroBuf mb, const char * t, const char * te)
while ((tenl = strchr(t, '\n')) && tenl < te)
t = ++tenl;
- /* Limit expand output */
- choplen = 61 - (2 * mb->depth);
- if ((te - t) > choplen) {
- te = t + choplen;
- ellipsis = "...";
- }
}
rpmlog(RPMLOG_DEBUG,"%3d<%*s", mb->depth, (2 * mb->depth + 1), "");
if (te > t)
- rpmlog(RPMLOG_DEBUG, "%.*s%s", (int)(te - t), t, ellipsis);
+ rpmlog(RPMLOG_DEBUG, "%.*s", (int)(te - t), t);
rpmlog(RPMLOG_DEBUG, "\n");
}
@@ -400,14 +345,14 @@ printExpansion(MacroBuf mb, const char * t, const char * te)
#define COPYNAME(_ne, _s, _c) \
{ SKIPBLANK(_s,_c); \
- while(((_c) = *(_s)) && (risalnum(_c) || (_c) == '_')) \
+ while (((_c) = *(_s)) && (risalnum(_c) || (_c) == '_')) \
*(_ne)++ = *(_s)++; \
*(_ne) = '\0'; \
}
#define COPYOPTS(_oe, _s, _c) \
{ \
- while(((_c) = *(_s)) && (_c) != ')') \
+ while (((_c) = *(_s)) && (_c) != ')') \
*(_oe)++ = *(_s)++; \
*(_oe) = '\0'; \
}
@@ -424,15 +369,18 @@ static int
expandThis(MacroBuf mb, const char * src, size_t slen, char **target)
{
struct MacroBuf_s umb;
- int rc;
/* Copy other state from "parent", but we want a buffer of our own */
umb = *mb;
umb.buf = NULL;
- rc = expandMacro(&umb, src, slen);
+ umb.error = 0;
+ /* In case of error, flag it in the "parent"... */
+ if (expandMacro(&umb, src, slen))
+ mb->error = 1;
*target = umb.buf;
- return rc;
+ /* ...but return code for this operation specifically */
+ return umb.error;
}
static void mbAppend(MacroBuf mb, char c)
@@ -446,6 +394,7 @@ static void mbAppend(MacroBuf mb, char c)
mb->nb--;
}
+#ifdef WITH_LUA
static void mbAppendStr(MacroBuf mb, const char *str)
{
size_t len = strlen(str);
@@ -457,64 +406,66 @@ static void mbAppendStr(MacroBuf mb, const char *str)
mb->tpos += len;
mb->nb -= len;
}
+#endif
+
/**
* Expand output of shell command into target buffer.
* @param mb macro expansion state
* @param cmd shell command
* @param clen no. bytes in shell command
- * @return result of expansion
*/
-static int
+static void
doShellEscape(MacroBuf mb, const char * cmd, size_t clen)
{
char *buf = NULL;
FILE *shf;
- int rc = 0;
int c;
- rc = expandThis(mb, cmd, clen, &buf);
- if (rc)
+ if (expandThis(mb, cmd, clen, &buf))
goto exit;
if ((shf = popen(buf, "r")) == NULL) {
- rc = 1;
+ mb->error = 1;
goto exit;
}
- while((c = fgetc(shf)) != EOF) {
+
+ size_t tpos = mb->tpos;
+ while ((c = fgetc(shf)) != EOF) {
mbAppend(mb, c);
}
(void) pclose(shf);
- /* XXX delete trailing \r \n */
- while (iseol(mb->buf[mb->tpos-1])) {
- mb->buf[mb->tpos--] = '\0';
+ /* Delete trailing \r \n */
+ while (mb->tpos > tpos && iseol(mb->buf[mb->tpos-1])) {
+ mb->buf[--mb->tpos] = '\0';
mb->nb++;
}
exit:
_free(buf);
- return rc;
}
/**
* Parse (and execute) new macro definition.
* @param mb macro expansion state
* @param se macro definition to parse
+ * @param slen length of se argument
* @param level macro recursion level
* @param expandbody should body be expanded?
* @return address to continue parsing
*/
static const char *
-doDefine(MacroBuf mb, const char * se, int level, int expandbody)
+doDefine(MacroBuf mb, const char * se, size_t slen, int level, int expandbody)
{
const char *s = se;
- size_t blen = MACROBUFSIZ;
- char *buf = xmalloc(blen);
+ char *buf = xmalloc(slen + 3); /* Some leeway for termination issues... */
char *n = buf, *ne = n;
char *o = NULL, *oe;
char *b, *be, *ebody = NULL;
int c;
int oc = ')';
+ const char *sbody; /* as-is body start */
+ int rc = 1; /* assume failure */
/* Copy name */
COPYNAME(ne, s, c);
@@ -523,13 +474,20 @@ doDefine(MacroBuf mb, const char * se, int level, int expandbody)
oe = ne + 1;
if (*s == '(') {
s++; /* skip ( */
- o = oe;
- COPYOPTS(oe, s, oc);
- s++; /* skip ) */
+ /* Options must be terminated with ')' */
+ if (strchr(s, ')')) {
+ o = oe;
+ COPYOPTS(oe, s, oc);
+ s++; /* skip ) */
+ } else {
+ rpmlog(RPMLOG_ERR, _("Macro %%%s has unterminated opts\n"), n);
+ goto exit;
+ }
}
/* Copy body, skipping over escaped newlines */
b = be = oe + 1;
+ sbody = s;
SKIPBLANK(s, c);
if (c == '{') { /* XXX permit silent {...} grouping */
if ((se = matchchar(s, c, '}')) == NULL) {
@@ -590,14 +548,8 @@ doDefine(MacroBuf mb, const char * se, int level, int expandbody)
/* Names must start with alphabetic or _ and be at least 3 chars */
if (!((c = *n) && (risalpha(c) || c == '_') && (ne - n) > 2)) {
- rpmlog(RPMLOG_ERR,
- _("Macro %%%s has illegal name (%%define)\n"), n);
- goto exit;
- }
-
- /* Options must be terminated with ')' */
- if (o && oc != ')') {
- rpmlog(RPMLOG_ERR, _("Macro %%%s has unterminated opts\n"), n);
+ rpmlog(RPMLOG_ERR, _("Macro %%%s has illegal name (%s)\n"),
+ n, expandbody ? "%global": "%define");
goto exit;
}
@@ -606,6 +558,9 @@ doDefine(MacroBuf mb, const char * se, int level, int expandbody)
goto exit;
}
+ if (!isblank(*sbody) && !(*sbody == '\\' && iseol(sbody[1])))
+ rpmlog(RPMLOG_WARNING, _("Macro %%%s needs whitespace before body\n"), n);
+
if (expandbody) {
if (expandThis(mb, b, 0, &ebody)) {
rpmlog(RPMLOG_ERR, _("Macro %%%s failed to expand\n"), n);
@@ -614,9 +569,12 @@ doDefine(MacroBuf mb, const char * se, int level, int expandbody)
b = ebody;
}
- addMacro(mb->mc, n, o, b, (level - 1));
+ pushMacro(mb->mc, n, o, b, level, ME_NONE);
+ rc = 0;
exit:
+ if (rc)
+ mb->error = 1;
_free(buf);
_free(ebody);
return se;
@@ -624,15 +582,16 @@ exit:
/**
* Parse (and execute) macro undefinition.
- * @param mc macro context
+ * @param mb macro expansion state
* @param se macro name to undefine
+ * @param slen length of se argument
* @return address to continue parsing
*/
static const char *
-doUndefine(rpmMacroContext mc, const char * se)
+doUndefine(MacroBuf mb, const char * se, size_t slen)
{
const char *s = se;
- char *buf = xmalloc(MACROBUFSIZ);
+ char *buf = xmalloc(slen + 1);
char *n = buf, *ne = n;
int c;
@@ -645,12 +604,12 @@ doUndefine(rpmMacroContext mc, const char * se)
/* Names must start with alphabetic or _ and be at least 3 chars */
if (!((c = *n) && (risalpha(c) || c == '_') && (ne - n) > 2)) {
- rpmlog(RPMLOG_ERR,
- _("Macro %%%s has illegal name (%%undefine)\n"), n);
+ rpmlog(RPMLOG_ERR, _("Macro %%%s has illegal name (%%undefine)\n"), n);
+ mb->error = 1;
goto exit;
}
- delMacro(mc, n);
+ popMacro(mb->mc, n);
exit:
_free(buf);
@@ -658,58 +617,6 @@ exit:
}
/**
- * Push new macro definition onto macro entry stack.
- * @param mep address of macro entry slot
- * @param n macro name
- * @param o macro parameters (NULL if none)
- * @param b macro body (NULL becomes "")
- * @param level macro recursion level
- */
-static void
-pushMacro(rpmMacroEntry * mep,
- const char * n, const char * o,
- const char * b, int level)
-{
- rpmMacroEntry prev = (mep && *mep ? *mep : NULL);
- rpmMacroEntry me = (rpmMacroEntry) xmalloc(sizeof(*me));
-
- me->prev = prev;
- me->name = (prev ? prev->name : xstrdup(n));
- me->opts = (o ? xstrdup(o) : NULL);
- me->body = xstrdup(b ? b : "");
- me->used = 0;
- me->level = level;
- if (mep)
- *mep = me;
- else
- me = _free(me);
-}
-
-/**
- * Pop macro definition from macro entry stack.
- * @param mep address of macro entry slot
- */
-static void
-popMacro(rpmMacroEntry * mep)
-{
- if (mep && *mep) {
- rpmMacroEntry me = *mep;
-
- /* restore previous definition of the macro */
- *mep = me->prev;
-
- /* name is shared between entries, only free if last of its kind */
- if (me->prev == NULL)
- free(me->name);
- free(me->opts);
- free(me->body);
-
- memset(me, 0, sizeof(*me)); /* trash and burn */
- free(me);
- }
-}
-
-/**
* Free parsed arguments for parameterized macro.
* @param mb macro expansion state
*/
@@ -717,41 +624,60 @@ static void
freeArgs(MacroBuf mb)
{
rpmMacroContext mc = mb->mc;
- int ndeleted = 0;
- int i;
-
- if (mc == NULL || mc->macroTable == NULL)
- return;
/* Delete dynamic macro definitions */
- for (i = 0; i < mc->firstFree; i++) {
- rpmMacroEntry *mep, me;
- int skiptest = 0;
- mep = &mc->macroTable[i];
- me = *mep;
-
- if (me == NULL) /* XXX this should never happen */
- continue;
- if (me->level < mb->depth)
+ for (int i = 0; i < mc->n; i++) {
+ rpmMacroEntry me = mc->tab[i];
+ assert(me);
+ if (me->level < mb->level)
continue;
- if (strlen(me->name) == 1 && strchr("#*0", *me->name)) {
- if (*me->name == '*' && me->used > 0)
- skiptest = 1; /* XXX skip test for %# %* %0 */
- } else if (!skiptest && me->used <= 0) {
-#if NOTYET
- rpmlog(RPMLOG_ERR,
- _("Macro %%%s (%s) was not used below level %d\n"),
- me->name, me->body, me->level);
-#endif
+ /* Warn on defined but unused non-automatic, scoped macros */
+ if (!(me->flags & (ME_AUTO|ME_USED))) {
+ rpmlog(RPMLOG_WARNING,
+ _("Macro %%%s defined but not used within scope\n"),
+ me->name);
+ /* Only whine once */
+ me->flags |= ME_USED;
}
- popMacro(mep);
- if (!(mep && *mep))
- ndeleted++;
+
+ /* compensate if the slot is to go away */
+ if (me->prev == NULL)
+ i--;
+ popMacro(mc, me->name);
}
+ mb->level--;
+}
- /* If any deleted macros, sort macro table */
- if (ndeleted)
- sortMacroTable(mc);
+static void splitQuoted(ARGV_t *av, const char * str, const char * seps)
+{
+ const int qchar = 0x1f; /* ASCII unit separator */
+ const char *s = str;
+ const char *start = str;
+ int quoted = 0;
+
+ while (start != NULL) {
+ if (!quoted && strchr(seps, *s)) {
+ size_t slen = s - start;
+ /* quoted arguments are always kept, otherwise skip empty args */
+ if (slen > 0) {
+ char *d, arg[slen + 1];
+ const char *t;
+ for (d = arg, t = start; t - start < slen; t++) {
+ if (*t == qchar)
+ continue;
+ *d++ = *t;
+ }
+ arg[d - arg] = '\0';
+ argvAdd(av, arg);
+ }
+ start = s + 1;
+ }
+ if (*s == qchar)
+ quoted = !quoted;
+ else if (*s == '\0')
+ start = NULL;
+ s++;
+ }
}
/**
@@ -767,31 +693,41 @@ static const char *
grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
const char * lastc)
{
+ const char *cont = NULL;
const char *opts;
char *args = NULL;
ARGV_t argv = NULL;
int argc = 0;
int c;
- /* Copy macro name as argv[0] */
- argvAdd(&argv, me->name);
- addMacro(mb->mc, "0", NULL, me->name, mb->depth);
-
/*
+ * Prepare list of call arguments, starting with macro name as argv[0].
* Make a copy of se up to lastc string that we can pass to argvSplit().
* Append the results to main argv.
*/
- { ARGV_t av = NULL;
- char *s = xcalloc((lastc-se)+1, sizeof(*s));
- memcpy(s, se, (lastc-se));
+ argvAdd(&argv, me->name);
+ if (lastc) {
+ int oescape = mb->escape;
+ char *s = NULL;
- argvSplit(&av, s, " \t");
- argvAppend(&argv, av);
+ /* Expand possible macros in arguments */
+ mb->escape = 1;
+ expandThis(mb, se, lastc-se, &s);
+ mb->escape = oescape;
- argvFree(av);
+ splitQuoted(&argv, s, " \t");
free(s);
+
+ cont = ((*lastc == '\0' || *lastc == '\n') && *(lastc-1) != '\\') ?
+ lastc : lastc + 1;
}
+ /* Bump call depth on entry before first macro define */
+ mb->level++;
+
+ /* Setup macro name as %0 */
+ pushMacro(mb->mc, "0", NULL, me->name, mb->level, ME_AUTO);
+
/*
* The macro %* analoguous to the shell's $* means "Pass all non-macro
* parameters." Consequently, there needs to be a macro that means "Pass all
@@ -801,7 +737,7 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
* This is the (potential) justification for %{**} ...
*/
args = argvJoin(argv + 1, " ");
- addMacro(mb->mc, "**", NULL, args, mb->depth);
+ pushMacro(mb->mc, "**", NULL, args, mb->level, ME_AUTO);
free(args);
/*
@@ -818,12 +754,13 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
argc = argvCount(argv);
/* Define option macros. */
- while((c = getopt(argc, argv, opts)) != -1)
+ while ((c = getopt(argc, argv, opts)) != -1)
{
char *name = NULL, *body = NULL;
if (c == '?' || strchr(opts, c) == NULL) {
rpmlog(RPMLOG_ERR, _("Unknown option %c in %s(%s)\n"),
(char)optopt, me->name, opts);
+ mb->error = 1;
goto exit;
}
@@ -833,13 +770,13 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
} else {
rasprintf(&body, "-%c", c);
}
- addMacro(mb->mc, name, NULL, body, mb->depth);
+ pushMacro(mb->mc, name, NULL, body, mb->level, ME_AUTO);
free(name);
free(body);
if (optarg) {
rasprintf(&name, "-%c*", c);
- addMacro(mb->mc, name, NULL, optarg, mb->depth);
+ pushMacro(mb->mc, name, NULL, optarg, mb->level, ME_AUTO);
free(name);
}
}
@@ -847,7 +784,7 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
/* Add argument count (remaining non-option items) as macro. */
{ char *ac = NULL;
rasprintf(&ac, "%d", (argc - optind));
- addMacro(mb->mc, "#", NULL, ac, mb->depth);
+ pushMacro(mb->mc, "#", NULL, ac, mb->level, ME_AUTO);
free(ac);
}
@@ -856,41 +793,70 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
for (c = optind; c < argc; c++) {
char *name = NULL;
rasprintf(&name, "%d", (c - optind + 1));
- addMacro(mb->mc, name, NULL, argv[c], mb->depth);
+ pushMacro(mb->mc, name, NULL, argv[c], mb->level, ME_AUTO);
free(name);
}
}
/* Add concatenated unexpanded arguments as yet another macro. */
args = argvJoin(argv + optind, " ");
- addMacro(mb->mc, "*", NULL, args ? args : "", mb->depth);
+ pushMacro(mb->mc, "*", NULL, args ? args : "", mb->level, ME_AUTO);
free(args);
exit:
argvFree(argv);
- return *lastc ? lastc + 1 : lastc;
+ return cont;
}
/**
* Perform macro message output
* @param mb macro expansion state
* @param waserror use rpmlog()?
- * @param msg message to ouput
+ * @param msg message to output
* @param msglen no. of bytes in message
*/
static void
-doOutput(MacroBuf mb, int waserror, const char * msg, size_t msglen)
+doOutput(MacroBuf mb, int loglevel, const char * msg, size_t msglen)
{
char *buf = NULL;
(void) expandThis(mb, msg, msglen, &buf);
- if (waserror)
- rpmlog(RPMLOG_ERR, "%s\n", buf);
- else
- fprintf(stderr, "%s", buf);
+ rpmlog(loglevel, "%s\n", buf);
_free(buf);
}
+static void doLua(MacroBuf mb, const char * f, size_t fn, const char * g, size_t gn)
+{
+#ifdef WITH_LUA
+ rpmlua lua = NULL; /* Global state. */
+ char *scriptbuf = xmalloc(gn + 1);
+ char *printbuf;
+ rpmMacroContext mc = mb->mc;
+ int odepth = mc->depth;
+ int olevel = mc->level;
+
+ if (g != NULL && gn > 0)
+ memcpy(scriptbuf, g, gn);
+ scriptbuf[gn] = '\0';
+ rpmluaPushPrintBuffer(lua);
+ mc->depth = mb->depth;
+ mc->level = mb->level;
+ if (rpmluaRunScript(lua, scriptbuf, NULL) == -1)
+ mb->error = 1;
+ mc->depth = odepth;
+ mc->level = olevel;
+ printbuf = rpmluaPopPrintBuffer(lua);
+ if (printbuf) {
+ mbAppendStr(mb, printbuf);
+ free(printbuf);
+ }
+ free(scriptbuf);
+#else
+ rpmlog(RPMLOG_ERR, _("<lua> scriptlet support not built in\n"));
+ mb->error = 1;
+#endif
+}
+
/**
* Execute macro primitives.
* @param mb macro expansion state
@@ -907,8 +873,14 @@ doFoo(MacroBuf mb, int negate, const char * f, size_t fn,
char *buf = NULL;
char *b = NULL, *be;
int c;
+ int verbose = (rpmIsVerbose() != 0);
+ int expand = (g != NULL && gn > 0);
+
+ /* Don't expand %{verbose:...} argument on false condition */
+ if (STREQ("verbose", f, fn) && (verbose == negate))
+ expand = 0;
- if (g != NULL) {
+ if (expand) {
(void) expandThis(mb, g, gn, &buf);
} else {
buf = xmalloc(MACROBUFSIZ + fn + gn);
@@ -923,16 +895,38 @@ doFoo(MacroBuf mb, int negate, const char * f, size_t fn,
if ((b = strrchr(buf, '/')) != NULL)
*b = '\0';
b = buf;
+ } else if (STREQ("shrink", f, fn)) {
+ /*
+ * shrink body by removing all leading and trailing whitespaces and
+ * reducing intermediate whitespaces to a single space character.
+ */
+ size_t i = 0, j = 0;
+ size_t buflen = strlen(buf);
+ int was_space = 0;
+ while (i < buflen) {
+ if (risspace(buf[i])) {
+ was_space = 1;
+ i++;
+ continue;
+ } else if (was_space) {
+ was_space = 0;
+ if (j > 0) /* remove leading blanks at all */
+ buf[j++] = ' ';
+ }
+ buf[j++] = buf[i++];
+ }
+ buf[j] = '\0';
+ b = buf;
+ } else if (STREQ("quote", f, fn)) {
+ char *quoted = NULL;
+ rasprintf(&quoted, "%c%s%c", 0x1f, buf, 0x1f);
+ free(buf);
+ b = buf = quoted;
} else if (STREQ("suffix", f, fn)) {
if ((b = strrchr(buf, '.')) != NULL)
b++;
- } else if (STREQ("expand", f, fn)) {
+ } else if (STREQ("expand", f, fn) || STREQ("verbose", f, fn)) {
b = buf;
- } else if (STREQ("verbose", f, fn)) {
- if (negate)
- b = (rpmIsVerbose() ? NULL : buf);
- else
- b = (rpmIsVerbose() ? buf : NULL);
} else if (STREQ("url2path", f, fn) || STREQ("u2p", f, fn)) {
(void)urlPath(buf, (const char **)&b);
if (*b == '\0') b = "/";
@@ -944,7 +938,7 @@ doFoo(MacroBuf mb, int negate, const char * f, size_t fn,
be++;
*be++ = '\0';
(void) rpmFileIsCompressed(b, &compressed);
- switch(compressed) {
+ switch (compressed) {
default:
case COMPRESSED_NOT:
sprintf(be, "%%__cat %s", b);
@@ -971,6 +965,9 @@ doFoo(MacroBuf mb, int negate, const char * f, size_t fn,
case COMPRESSED_7ZIP:
sprintf(be, "%%__7zip x %s", b);
break;
+ case COMPRESSED_ZSTD:
+ sprintf(be, "%%__zstd -dc %s", b);
+ break;
}
b = be;
} else if (STREQ("getenv", f, fn)) {
@@ -1009,6 +1006,7 @@ doFoo(MacroBuf mb, int negate, const char * f, size_t fn,
* The main macro recursion loop.
* @param mb macro expansion state
* @param src string to expand
+ * @param slen length of string buffer
* @return 0 on success, 1 on failure
*/
static int
@@ -1021,13 +1019,19 @@ expandMacro(MacroBuf mb, const char *src, size_t slen)
const char *g, *ge;
size_t fn, gn, tpos;
int c;
- int rc = 0;
int negate;
const char * lastc;
int chkexist;
char *source = NULL;
+ int store_macro_trace;
+ int store_expand_trace;
- /* Handle non-terminated substrings by creating a terminated copy */
+ /*
+ * Always make a (terminated) copy of the source string.
+ * Beware: avoiding the copy when src is known \0-terminated seems like
+ * an obvious opportunity for optimization, but doing that breaks
+ * a special case of macro undefining itself.
+ */
if (!slen)
slen = strlen(src);
source = xmalloc(slen + 1);
@@ -1036,36 +1040,41 @@ expandMacro(MacroBuf mb, const char *src, size_t slen)
s = source;
if (mb->buf == NULL) {
- size_t blen = MACROBUFSIZ + strlen(s);
- mb->buf = xcalloc(blen + 1, sizeof(*mb->buf));
+ size_t blen = MACROBUFSIZ + slen;
+ mb->buf = xmalloc(blen + 1);
+ mb->buf[0] = '\0';
mb->tpos = 0;
mb->nb = blen;
}
tpos = mb->tpos; /* save expansion pointer for printExpand */
+ store_macro_trace = mb->macro_trace;
+ store_expand_trace = mb->expand_trace;
if (++mb->depth > max_macro_depth) {
rpmlog(RPMLOG_ERR,
_("Too many levels of recursion in macro expansion. It is likely caused by recursive macro declaration.\n"));
mb->depth--;
mb->expand_trace = 1;
- _free(source);
- return 1;
+ mb->error = 1;
+ goto exit;
}
- while (rc == 0 && (c = *s) != '\0') {
+ while (mb->error == 0 && (c = *s) != '\0') {
s++;
/* Copy text until next macro */
- switch(c) {
+ switch (c) {
case '%':
- if (*s) { /* Ensure not end-of-string. */
- if (*s != '%')
- break;
- s++; /* skip first % in %% */
- }
+ if (*s) { /* Ensure not end-of-string. */
+ if (*s != '%')
+ break;
+ s++; /* skip first % in %% */
+ if (mb->escape)
+ mbAppend(mb, c);
+ }
default:
- mbAppend(mb, c);
- continue;
- break;
+ mbAppend(mb, c);
+ continue;
+ break;
}
/* Expand next macro */
@@ -1078,183 +1087,183 @@ expandMacro(MacroBuf mb, const char *src, size_t slen)
chkexist = 0;
switch ((c = *s)) {
default: /* %name substitution */
- while (strchr("!?", *s) != NULL) {
- switch(*s++) {
- case '!':
- negate = ((negate + 1) % 2);
- break;
- case '?':
- chkexist++;
- break;
- }
- }
- f = se = s;
- if (*se == '-')
- se++;
- while((c = *se) && (risalnum(c) || c == '_'))
- se++;
- /* Recognize non-alnum macros too */
- switch (*se) {
- case '*':
- se++;
- if (*se == '*') se++;
- break;
- case '#':
- se++;
+ while (*s != '\0' && strchr("!?", *s) != NULL) {
+ switch (*s++) {
+ case '!':
+ negate = ((negate + 1) % 2);
break;
- default:
+ case '?':
+ chkexist++;
break;
}
- fe = se;
- /* For "%name " macros ... */
- if ((c = *fe) && isblank(c))
- if ((lastc = strchr(fe,'\n')) == NULL)
- lastc = strchr(fe, '\0');
+ }
+ f = se = s;
+ if (*se == '-')
+ se++;
+ while ((c = *se) && (risalnum(c) || c == '_'))
+ se++;
+ /* Recognize non-alnum macros too */
+ switch (*se) {
+ case '*':
+ se++;
+ if (*se == '*') se++;
break;
+ case '#':
+ se++;
+ break;
+ default:
+ break;
+ }
+ fe = se;
+ /* For "%name " macros ... */
+ if ((c = *fe) && isblank(c))
+ if ((lastc = strchr(fe,'\n')) == NULL)
+ lastc = strchr(fe, '\0');
+ break;
case '(': /* %(...) shell escape */
- if ((se = matchchar(s, c, ')')) == NULL) {
- rpmlog(RPMLOG_ERR,
- _("Unterminated %c: %s\n"), (char)c, s);
- rc = 1;
- continue;
- }
- if (mb->macro_trace)
- printMacro(mb, s, se+1);
+ if ((se = matchchar(s, c, ')')) == NULL) {
+ rpmlog(RPMLOG_ERR, _("Unterminated %c: %s\n"), (char)c, s);
+ mb->error = 1;
+ continue;
+ }
+ if (mb->macro_trace)
+ printMacro(mb, s, se+1);
- s++; /* skip ( */
- rc = doShellEscape(mb, s, (se - s));
- se++; /* skip ) */
+ s++; /* skip ( */
+ doShellEscape(mb, s, (se - s));
+ se++; /* skip ) */
- s = se;
- continue;
- break;
+ s = se;
+ continue;
+ break;
case '{': /* %{...}/%{...:...} substitution */
- if ((se = matchchar(s, c, '}')) == NULL) {
- rpmlog(RPMLOG_ERR,
- _("Unterminated %c: %s\n"), (char)c, s);
- rc = 1;
- continue;
- }
- f = s+1;/* skip { */
- se++; /* skip } */
- while (strchr("!?", *f) != NULL) {
- switch(*f++) {
- case '!':
- negate = ((negate + 1) % 2);
- break;
- case '?':
- chkexist++;
- break;
- }
- }
- for (fe = f; (c = *fe) && !strchr(" :}", c);)
- fe++;
- switch (c) {
- case ':':
- g = fe + 1;
- ge = se - 1;
- break;
- case ' ':
- lastc = se-1;
- break;
- default:
- break;
+ if ((se = matchchar(s, c, '}')) == NULL) {
+ rpmlog(RPMLOG_ERR, _("Unterminated %c: %s\n"), (char)c, s);
+ mb->error = 1;
+ continue;
+ }
+ f = s+1;/* skip { */
+ se++; /* skip } */
+ while (strchr("!?", *f) != NULL) {
+ switch (*f++) {
+ case '!':
+ negate = ((negate + 1) % 2);
+ break;
+ case '?':
+ chkexist++;
+ break;
}
+ }
+ for (fe = f; (c = *fe) && !strchr(" :}", c);)
+ fe++;
+ switch (c) {
+ case ':':
+ g = fe + 1;
+ ge = se - 1;
+ break;
+ case ' ':
+ lastc = se-1;
break;
+ default:
+ break;
+ }
+ break;
}
/* XXX Everything below expects fe > f */
fn = (fe - f);
gn = (ge - g);
if ((fe - f) <= 0) {
-/* XXX Process % in unknown context */
- c = '%'; /* XXX only need to save % */
- mbAppend(mb, c);
+ /* XXX Process % in unknown context */
+ c = '%'; /* XXX only need to save % */
+ mbAppend(mb, c);
#if 0
- rpmlog(RPMLOG_ERR,
- _("A %% is followed by an unparseable macro\n"));
+ rpmlog(RPMLOG_ERR,
+ _("A %% is followed by an unparseable macro\n"));
#endif
- s = se;
- continue;
+ s = se;
+ continue;
}
if (mb->macro_trace)
- printMacro(mb, s, se);
+ printMacro(mb, s, se);
/* Expand builtin macros */
+ if (STREQ("load", f, fn)) {
+ char *arg = NULL;
+ if (g && gn > 0 && expandThis(mb, g, gn, &arg) == 0) {
+ /* Print failure iff %{load:...} or %{!?load:...} */
+ if (loadMacroFile(mb->mc, arg) && chkexist == negate) {
+ rpmlog(RPMLOG_ERR, _("failed to load macro file %s"), arg);
+ mb->error = 1;
+ }
+ }
+ free(arg);
+ s = se;
+ continue;
+ }
if (STREQ("global", f, fn)) {
- s = doDefine(mb, se, RMIL_GLOBAL, 1);
- continue;
+ s = doDefine(mb, se, slen - (se - s), RMIL_GLOBAL, 1);
+ continue;
}
if (STREQ("define", f, fn)) {
- s = doDefine(mb, se, mb->depth, 0);
- continue;
+ s = doDefine(mb, se, slen - (se - s), mb->level, 0);
+ continue;
}
if (STREQ("undefine", f, fn)) {
- s = doUndefine(mb->mc, se);
- continue;
+ s = doUndefine(mb, se, slen - (se - s));
+ continue;
}
if (STREQ("echo", f, fn) ||
- STREQ("warn", f, fn) ||
- STREQ("error", f, fn)) {
- int waserror = 0;
- if (STREQ("error", f, fn))
- waserror = 1;
- if (g != NULL && g < ge)
- doOutput(mb, waserror, g, gn);
- else
- doOutput(mb, waserror, f, fn);
- s = se;
- continue;
+ STREQ("warn", f, fn) ||
+ STREQ("error", f, fn)) {
+ int loglevel = RPMLOG_NOTICE; /* assume echo */
+ if (STREQ("error", f, fn)) {
+ loglevel = RPMLOG_ERR;
+ mb->error = 1;
+ } else if (STREQ("warn", f, fn)) {
+ loglevel = RPMLOG_WARNING;
+ }
+ if (g != NULL && g < ge)
+ doOutput(mb, loglevel, g, gn);
+ else
+ doOutput(mb, loglevel, "", 0);
+ s = se;
+ continue;
}
if (STREQ("trace", f, fn)) {
- /* XXX TODO restore expand_trace/macro_trace to 0 on return */
- mb->expand_trace = mb->macro_trace = (negate ? 0 : mb->depth);
- if (mb->depth == 1) {
- print_macro_trace = mb->macro_trace;
- print_expand_trace = mb->expand_trace;
- }
- s = se;
- continue;
+ /* XXX TODO restore expand_trace/macro_trace to 0 on return */
+ mb->expand_trace = mb->macro_trace = (negate ? 0 : mb->depth);
+ if (mb->depth == 1) {
+ print_macro_trace = mb->macro_trace;
+ print_expand_trace = mb->expand_trace;
+ }
+ s = se;
+ continue;
}
if (STREQ("dump", f, fn)) {
- rpmDumpMacroTable(mb->mc, NULL);
- while (iseol(*se))
- se++;
- s = se;
- continue;
+ rpmDumpMacroTable(mb->mc, NULL);
+ while (iseol(*se))
+ se++;
+ s = se;
+ continue;
}
-#ifdef WITH_LUA
if (STREQ("lua", f, fn)) {
- rpmlua lua = NULL; /* Global state. */
- const char *ls = s+sizeof("{lua:")-1;
- const char *lse = se-sizeof("}")+1;
- char *scriptbuf = (char *)xmalloc((lse-ls)+1);
- char *printbuf;
- memcpy(scriptbuf, ls, lse-ls);
- scriptbuf[lse-ls] = '\0';
- rpmluaPushPrintBuffer(lua);
- if (rpmluaRunScript(lua, scriptbuf, NULL) == -1)
- rc = 1;
- printbuf = rpmluaPopPrintBuffer(lua);
- if (printbuf) {
- mbAppendStr(mb, printbuf);
- free(printbuf);
- }
- free(scriptbuf);
- s = se;
- continue;
+ doLua(mb, f, fn, g, gn);
+ s = se;
+ continue;
}
-#endif
/* XXX necessary but clunky */
if (STREQ("basename", f, fn) ||
STREQ("dirname", f, fn) ||
+ STREQ("shrink", f, fn) ||
STREQ("suffix", f, fn) ||
+ STREQ("quote", f, fn) ||
STREQ("expand", f, fn) ||
STREQ("verbose", f, fn) ||
STREQ("uncompress", f, fn) ||
@@ -1264,110 +1273,116 @@ expandMacro(MacroBuf mb, const char *src, size_t slen)
STREQ("getconfdir", f, fn) ||
STREQ("S", f, fn) ||
STREQ("P", f, fn) ||
- STREQ("F", f, fn)) {
- /* FIX: verbose may be set */
- doFoo(mb, negate, f, fn, g, gn);
- s = se;
- continue;
+ STREQ("F", f, fn))
+ {
+ /* FIX: verbose may be set */
+ doFoo(mb, negate, f, fn, g, gn);
+ s = se;
+ continue;
}
/* Expand defined macros */
- mep = findEntry(mb->mc, f, fn);
+ mep = findEntry(mb->mc, f, fn, NULL);
me = (mep ? *mep : NULL);
+ if (me) {
+ if ((me->flags & ME_AUTO) && mb->level > me->level) {
+ /* Ignore out-of-scope automatic macros */
+ me = NULL;
+ } else {
+ /* If we looked up a macro, consider it used */
+ me->flags |= ME_USED;
+ }
+ }
+
/* XXX Special processing for flags */
if (*f == '-') {
- if (me)
- me->used++; /* Mark macro as used */
- if ((me == NULL && !negate) || /* Without -f, skip %{-f...} */
+ if ((me == NULL && !negate) || /* Without -f, skip %{-f...} */
(me != NULL && negate)) { /* With -f, skip %{!-f...} */
- s = se;
- continue;
- }
+ s = se;
+ continue;
+ }
- if (g && g < ge) { /* Expand X in %{-f:X} */
- rc = expandMacro(mb, g, gn);
- } else
+ if (g && g < ge) { /* Expand X in %{-f:X} */
+ expandMacro(mb, g, gn);
+ } else
if (me && me->body && *me->body) {/* Expand %{-f}/%{-f*} */
- rc = expandMacro(mb, me->body, 0);
+ expandMacro(mb, me->body, 0);
}
- s = se;
- continue;
+ s = se;
+ continue;
}
/* XXX Special processing for macro existence */
if (chkexist) {
- if ((me == NULL && !negate) || /* Without -f, skip %{?f...} */
+ if ((me == NULL && !negate) || /* Without -f, skip %{?f...} */
(me != NULL && negate)) { /* With -f, skip %{!?f...} */
- s = se;
- continue;
- }
- if (g && g < ge) { /* Expand X in %{?f:X} */
- rc = expandMacro(mb, g, gn);
- } else
- if (me && me->body && *me->body) { /* Expand %{?f}/%{?f*} */
- rc = expandMacro(mb, me->body, 0);
- }
s = se;
continue;
+ }
+ if (g && g < ge) { /* Expand X in %{?f:X} */
+ expandMacro(mb, g, gn);
+ } else
+ if (me && me->body && *me->body) { /* Expand %{?f}/%{?f*} */
+ expandMacro(mb, me->body, 0);
+ }
+ s = se;
+ continue;
}
if (me == NULL) { /* leave unknown %... as is */
- /* XXX hack to permit non-overloaded %foo to be passed */
- c = '%'; /* XXX only need to save % */
- mbAppend(mb, c);
- continue;
+ /* XXX hack to permit non-overloaded %foo to be passed */
+ c = '%'; /* XXX only need to save % */
+ mbAppend(mb, c);
+ continue;
}
/* Setup args for "%name " macros with opts */
if (me && me->opts != NULL) {
- if (lastc != NULL) {
- se = grabArgs(mb, me, fe, lastc);
- } else {
- addMacro(mb->mc, "**", NULL, "", mb->depth);
- addMacro(mb->mc, "*", NULL, "", mb->depth);
- addMacro(mb->mc, "#", NULL, "0", mb->depth);
- addMacro(mb->mc, "0", NULL, me->name, mb->depth);
- }
+ const char *xe = grabArgs(mb, me, fe, lastc);
+ if (xe != NULL)
+ se = xe;
}
/* Recursively expand body of macro */
if (me->body && *me->body) {
- rc = expandMacro(mb, me->body, 0);
- if (rc == 0)
- me->used++; /* Mark macro as used */
+ expandMacro(mb, me->body, 0);
}
/* Free args for "%name " macros with opts */
if (me->opts != NULL)
- freeArgs(mb);
+ freeArgs(mb);
s = se;
}
mb->buf[mb->tpos] = '\0';
mb->depth--;
- if (rc != 0 || mb->expand_trace)
+ if (mb->error != 0 || mb->expand_trace)
printExpansion(mb, mb->buf+tpos, mb->buf+mb->tpos);
+ mb->macro_trace = store_macro_trace;
+ mb->expand_trace = store_expand_trace;
+exit:
_free(source);
- return rc;
+ return mb->error;
}
/* =============================================================== */
-static int doExpandMacros(rpmMacroContext mc, const char *src, char **target)
+static int doExpandMacros(rpmMacroContext mc, const char *src, int flags,
+ char **target)
{
MacroBuf mb = xcalloc(1, sizeof(*mb));
int rc = 0;
- if (mc == NULL) mc = rpmGlobalMacroContext;
-
mb->buf = NULL;
- mb->depth = 0;
+ mb->depth = mc->depth;
+ mb->level = mc->level;
mb->macro_trace = print_macro_trace;
mb->expand_trace = print_expand_trace;
mb->mc = mc;
+ mb->flags = flags;
rc = expandMacro(mb, src, 0);
@@ -1379,91 +1394,111 @@ static int doExpandMacros(rpmMacroContext mc, const char *src, char **target)
return rc;
}
-int expandMacros(void * spec, rpmMacroContext mc, char * sbuf, size_t slen)
+static void pushMacro(rpmMacroContext mc,
+ const char * n, const char * o, const char * b, int level, int flags)
{
- char *target = NULL;
- int rc = doExpandMacros(mc, sbuf, &target);
- rstrlcpy(sbuf, target, slen);
- free(target);
- return rc;
-}
-
-void
-addMacro(rpmMacroContext mc,
- const char * n, const char * o, const char * b, int level)
-{
- rpmMacroEntry * mep;
-
- if (mc == NULL) mc = rpmGlobalMacroContext;
-
- /* If new name, expand macro table */
- if ((mep = findEntry(mc, n, 0)) == NULL) {
- if (mc->firstFree == mc->macrosAllocated)
- expandMacroTable(mc);
- if (mc->macroTable != NULL)
- mep = mc->macroTable + mc->firstFree++;
+ /* new entry */
+ rpmMacroEntry me;
+ /* pointer into me */
+ char *p;
+ /* calculate sizes */
+ size_t olen = o ? strlen(o) : 0;
+ size_t blen = b ? strlen(b) : 0;
+ size_t mesize = sizeof(*me) + blen + 1 + (olen ? olen + 1 : 0);
+
+ size_t pos;
+ rpmMacroEntry *mep = findEntry(mc, n, 0, &pos);
+ if (mep) {
+ /* entry with shared name */
+ me = xmalloc(mesize);
+ /* copy body */
+ me->body = p = me->arena;
+ if (blen)
+ memcpy(p, b, blen + 1);
+ else
+ *p = '\0';
+ p += blen + 1;
+ /* set name */
+ me->name = (*mep)->name;
}
-
- if (mep != NULL) {
- /* Push macro over previous definition */
- pushMacro(mep, n, o, b, level);
-
- /* If new name, sort macro table */
- if ((*mep)->prev == NULL)
- sortMacroTable(mc);
+ else {
+ /* extend macro table */
+ const int delta = 256;
+ if (mc->n % delta == 0)
+ mc->tab = xrealloc(mc->tab, sizeof(me) * (mc->n + delta));
+ /* shift pos+ entries to the right */
+ memmove(mc->tab + pos + 1, mc->tab + pos, sizeof(me) * (mc->n - pos));
+ mc->n++;
+ /* make slot */
+ mc->tab[pos] = NULL;
+ mep = &mc->tab[pos];
+ /* entry with new name */
+ size_t nlen = strlen(n);
+ me = xmalloc(mesize + nlen + 1);
+ /* copy body */
+ me->body = p = me->arena;
+ if (blen)
+ memcpy(p, b, blen + 1);
+ else
+ *p = '\0';
+ p += blen + 1;
+ /* copy name */
+ me->name = memcpy(p, n, nlen + 1);
+ p += nlen + 1;
}
+
+ /* copy options */
+ if (olen)
+ me->opts = memcpy(p, o, olen + 1);
+ else
+ me->opts = o ? "" : NULL;
+ /* initialize */
+ me->flags = flags;
+ me->flags &= ~(ME_USED);
+ me->level = level;
+ /* push over previous definition */
+ me->prev = *mep;
+ *mep = me;
}
-void
-delMacro(rpmMacroContext mc, const char * n)
+static void popMacro(rpmMacroContext mc, const char * n)
{
- rpmMacroEntry * mep;
-
- if (mc == NULL) mc = rpmGlobalMacroContext;
- /* If name exists, pop entry */
- if ((mep = findEntry(mc, n, 0)) != NULL) {
- popMacro(mep);
- /* If deleted name, sort macro table */
- if (!(mep && *mep))
- sortMacroTable(mc);
+ size_t pos;
+ rpmMacroEntry *mep = findEntry(mc, n, 0, &pos);
+ if (mep == NULL)
+ return;
+ /* parting entry */
+ rpmMacroEntry me = *mep;
+ assert(me);
+ /* detach/pop definition */
+ mc->tab[pos] = me->prev;
+ /* shrink macro table */
+ if (me->prev == NULL) {
+ mc->n--;
+ /* move pos+ elements to the left */
+ memmove(mc->tab + pos, mc->tab + pos + 1, sizeof(me) * (mc->n - pos));
+ /* deallocate */
+ if (mc->n == 0)
+ mc->tab = _free(mc->tab);
}
+ /* comes in a single chunk */
+ free(me);
}
-int
-rpmDefineMacro(rpmMacroContext mc, const char * macro, int level)
+static int defineMacro(rpmMacroContext mc, const char * macro, int level)
{
MacroBuf mb = xcalloc(1, sizeof(*mb));
+ int rc;
/* XXX just enough to get by */
- mb->mc = (mc ? mc : rpmGlobalMacroContext);
- (void) doDefine(mb, macro, level, 0);
+ mb->mc = mc;
+ (void) doDefine(mb, macro, strlen(macro), level, 0);
+ rc = mb->error;
_free(mb);
- return 0;
-}
-
-void
-rpmLoadMacros(rpmMacroContext mc, int level)
-{
-
- if (mc == NULL || mc == rpmGlobalMacroContext)
- return;
-
- if (mc->macroTable != NULL) {
- int i;
- for (i = 0; i < mc->firstFree; i++) {
- rpmMacroEntry *mep, me;
- mep = &mc->macroTable[i];
- me = *mep;
-
- if (me == NULL) /* XXX this should never happen */
- continue;
- addMacro(NULL, me->name, me->opts, me->body, (level - 1));
- }
- }
+ return rc;
}
-int
-rpmLoadMacroFile(rpmMacroContext mc, const char * fn)
+static int loadMacroFile(rpmMacroContext mc, const char * fn)
{
FILE *fd = fopen(fn, "r");
size_t blen = MACROBUFSIZ;
@@ -1473,11 +1508,8 @@ rpmLoadMacroFile(rpmMacroContext mc, const char * fn)
if (fd == NULL)
goto exit;
- /* XXX Assume new fangled macro expansion */
- max_macro_depth = 16;
-
buf[0] = '\0';
- while(rdcl(buf, blen, fd) != NULL) {
+ while (rdcl(buf, blen, fd) != NULL) {
char c, *n;
n = buf;
@@ -1486,8 +1518,9 @@ rpmLoadMacroFile(rpmMacroContext mc, const char * fn)
if (c != '%')
continue;
n++; /* skip % */
- rc = rpmDefineMacro(mc, n, RMIL_MACROFILES);
+ rc = defineMacro(mc, n, RMIL_MACROFILES);
}
+
rc = fclose(fd);
exit:
@@ -1495,15 +1528,124 @@ exit:
return rc;
}
+static void copyMacros(rpmMacroContext src, rpmMacroContext dst, int level)
+{
+ for (int i = 0; i < src->n; i++) {
+ rpmMacroEntry me = src->tab[i];
+ assert(me);
+ pushMacro(dst, me->name, me->opts, me->body, level, me->flags);
+ }
+}
+
+/* External interfaces */
+
+int rpmExpandMacros(rpmMacroContext mc, const char * sbuf, char ** obuf, int flags)
+{
+ char *target = NULL;
+ int rc;
+
+ mc = rpmmctxAcquire(mc);
+ rc = doExpandMacros(mc, sbuf, flags, &target);
+ rpmmctxRelease(mc);
+
+ if (rc) {
+ free(target);
+ return -1;
+ } else {
+ *obuf = target;
+ return 1;
+ }
+}
+
+void
+rpmDumpMacroTable(rpmMacroContext mc, FILE * fp)
+{
+ mc = rpmmctxAcquire(mc);
+ if (fp == NULL) fp = stderr;
+
+ fprintf(fp, "========================\n");
+ for (int i = 0; i < mc->n; i++) {
+ rpmMacroEntry me = mc->tab[i];
+ assert(me);
+ fprintf(fp, "%3d%c %s", me->level,
+ ((me->flags & ME_USED) ? '=' : ':'), me->name);
+ if (me->opts && *me->opts)
+ fprintf(fp, "(%s)", me->opts);
+ if (me->body && *me->body)
+ fprintf(fp, "\t%s", me->body);
+ fprintf(fp, "\n");
+ }
+ fprintf(fp, _("======================== active %d empty %d\n"),
+ mc->n, 0);
+ rpmmctxRelease(mc);
+}
+
+int rpmPushMacro(rpmMacroContext mc,
+ const char * n, const char * o, const char * b, int level)
+{
+ mc = rpmmctxAcquire(mc);
+ pushMacro(mc, n, o, b, level, ME_NONE);
+ rpmmctxRelease(mc);
+ return 0;
+}
+
+int rpmPopMacro(rpmMacroContext mc, const char * n)
+{
+ mc = rpmmctxAcquire(mc);
+ popMacro(mc, n);
+ rpmmctxRelease(mc);
+ return 0;
+}
+
+int
+rpmDefineMacro(rpmMacroContext mc, const char * macro, int level)
+{
+ int rc;
+ mc = rpmmctxAcquire(mc);
+ rc = defineMacro(mc, macro, level);
+ rpmmctxRelease(mc);
+ return rc;
+}
+
+void
+rpmLoadMacros(rpmMacroContext mc, int level)
+{
+ rpmMacroContext gmc;
+ if (mc == NULL || mc == rpmGlobalMacroContext)
+ return;
+
+ gmc = rpmmctxAcquire(NULL);
+ mc = rpmmctxAcquire(mc);
+
+ copyMacros(mc, gmc, level);
+
+ rpmmctxRelease(mc);
+ rpmmctxRelease(gmc);
+}
+
+int
+rpmLoadMacroFile(rpmMacroContext mc, const char * fn)
+{
+ int rc;
+
+ mc = rpmmctxAcquire(mc);
+ rc = loadMacroFile(mc, fn);
+ rpmmctxRelease(mc);
+
+ return rc;
+}
+
void
rpmInitMacros(rpmMacroContext mc, const char * macrofiles)
{
ARGV_t pattern, globs = NULL;
+ rpmMacroContext climc;
if (macrofiles == NULL)
return;
argvSplit(&globs, macrofiles, ":");
+ mc = rpmmctxAcquire(mc);
for (pattern = globs; *pattern; pattern++) {
ARGV_t path, files = NULL;
@@ -1519,31 +1661,30 @@ rpmInitMacros(rpmMacroContext mc, const char * macrofiles)
rpmFileHasSuffix(*path, ".rpmorig")) {
continue;
}
- (void) rpmLoadMacroFile(mc, *path);
+ (void) loadMacroFile(mc, *path);
}
argvFree(files);
}
argvFree(globs);
/* Reload cmdline macros */
- rpmLoadMacros(rpmCLIMacroContext, RMIL_CMDLINE);
+ climc = rpmmctxAcquire(rpmCLIMacroContext);
+ copyMacros(climc, mc, RMIL_CMDLINE);
+ rpmmctxRelease(climc);
+
+ rpmmctxRelease(mc);
}
void
rpmFreeMacros(rpmMacroContext mc)
{
-
- if (mc == NULL) mc = rpmGlobalMacroContext;
-
- if (mc->macroTable != NULL) {
- for (int i = 0; i < mc->firstFree; i++) {
- while (mc->macroTable[i] != NULL) {
- popMacro(&mc->macroTable[i]);
- }
- }
- free(mc->macroTable);
+ mc = rpmmctxAcquire(mc);
+ while (mc->n > 0) {
+ /* remove from the end to avoid memmove */
+ rpmMacroEntry me = mc->tab[mc->n - 1];
+ popMacro(mc, me->name);
}
- memset(mc, 0, sizeof(*mc));
+ rpmmctxRelease(mc);
}
char *
@@ -1554,6 +1695,7 @@ rpmExpand(const char *arg, ...)
char *pe;
const char *s;
va_list ap;
+ rpmMacroContext mc;
if (arg == NULL) {
ret = xstrdup("");
@@ -1574,7 +1716,9 @@ rpmExpand(const char *arg, ...)
pe = stpcpy(pe, s);
va_end(ap);
- (void) doExpandMacros(NULL, buf, &ret);
+ mc = rpmmctxAcquire(NULL);
+ (void) doExpandMacros(mc, buf, 0, &ret);
+ rpmmctxRelease(mc);
free(buf);
exit:
diff --git a/rpmio/rpmbase64.h b/rpmio/rpmbase64.h
index 95ee9cd03..3858cc331 100644
--- a/rpmio/rpmbase64.h
+++ b/rpmio/rpmbase64.h
@@ -1,6 +1,12 @@
/* base64 encoder/decoder based on public domain implementation
* by Chris Venter */
+/** \ingroup rpmio
+ * \file rpmio/rpmbase64.h
+ *
+ * Base64 encoding and decoding API
+ */
+
#include <sys/types.h>
#ifdef __cplusplus
diff --git a/rpmio/rpmfileutil.c b/rpmio/rpmfileutil.c
index 6cdfe2552..9e47ff8a5 100644
--- a/rpmio/rpmfileutil.c
+++ b/rpmio/rpmfileutil.c
@@ -19,6 +19,7 @@
#include <errno.h>
#include <popt.h>
#include <ctype.h>
+#include <pthread.h>
#include <rpm/rpmfileutil.h>
#include <rpm/rpmurl.h>
@@ -31,6 +32,7 @@
#include "debug.h"
static const char *rpm_config_dir = NULL;
+static pthread_once_t configDirSet = PTHREAD_ONCE_INIT;
static int is_prelinked(int fdno)
{
@@ -103,28 +105,38 @@ static int open_dso(const char * path, pid_t * pidp, rpm_loff_t *fsizep)
if (pidp != NULL && is_prelinked(fdno)) {
int pipes[2];
pid_t pid;
- int xx;
- xx = close(fdno);
+ close(fdno);
pipes[0] = pipes[1] = -1;
- xx = pipe(pipes);
- if (!(pid = fork())) {
+ if (pipe(pipes) < 0)
+ return -1;
+
+ pid = fork();
+ if (pid < 0) {
+ close(pipes[0]);
+ close(pipes[1]);
+ return -1;
+ }
+
+ if (pid == 0) {
ARGV_t av, lib;
+ int dfd;
argvSplit(&av, cmd, " ");
- xx = close(pipes[0]);
- xx = dup2(pipes[1], STDOUT_FILENO);
- xx = close(pipes[1]);
- if ((lib = argvSearch(av, "library", NULL)) != NULL) {
+ close(pipes[0]);
+ dfd = dup2(pipes[1], STDOUT_FILENO);
+ close(pipes[1]);
+ if (dfd >= 0 && (lib = argvSearch(av, "library", NULL)) != NULL) {
*lib = (char *) path;
unsetenv("MALLOC_CHECK_");
- xx = execve(av[0], av+1, environ);
+ execve(av[0], av+1, environ);
}
- _exit(127);
+ _exit(127); /* not normally reached */
+ } else {
+ *pidp = pid;
+ fdno = pipes[0];
+ close(pipes[1]);
}
- *pidp = pid;
- fdno = pipes[0];
- xx = close(pipes[1]);
}
return fdno;
@@ -136,8 +148,8 @@ int rpmDoDigest(int algo, const char * fn,int asAscii,
const char * path;
urltype ut = urlPath(fn, &path);
unsigned char * dig = NULL;
- size_t diglen;
- unsigned char buf[32*BUFSIZ];
+ size_t diglen, buflen = 32 * BUFSIZ;
+ unsigned char *buf = xmalloc(buflen);
FD_t fd;
rpm_loff_t fsize = 0;
pid_t pid = 0;
@@ -150,7 +162,7 @@ int rpmDoDigest(int algo, const char * fn,int asAscii,
goto exit;
}
- switch(ut) {
+ switch (ut) {
case URL_IS_PATH:
case URL_IS_UNKNOWN:
case URL_IS_HTTPS:
@@ -171,10 +183,10 @@ int rpmDoDigest(int algo, const char * fn,int asAscii,
fdInitDigest(fd, algo, 0);
fsize = 0;
- while ((rc = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0)
+ while ((rc = Fread(buf, sizeof(*buf), buflen, fd)) > 0)
fsize += rc;
fdFiniDigest(fd, algo, (void **)&dig, &diglen, asAscii);
- if (Ferror(fd))
+ if (dig == NULL || Ferror(fd))
rc = 1;
(void) Fclose(fd);
@@ -195,6 +207,7 @@ exit:
if (!rc)
memcpy(digest, dig, diglen);
dig = _free(dig);
+ free(buf);
return rc;
}
@@ -326,7 +339,8 @@ int rpmFileIsCompressed(const char * file, rpmCompressedMagic * compressed)
rc = 0;
- if ((magic[0] == 'B') && (magic[1] == 'Z')) {
+ if ((magic[0] == 'B') && (magic[1] == 'Z') &&
+ (magic[2] == 'h')) {
*compressed = COMPRESSED_BZIP2;
} else if ((magic[0] == 'P') && (magic[1] == 'K') &&
(((magic[2] == 3) && (magic[3] == 4)) ||
@@ -337,6 +351,9 @@ int rpmFileIsCompressed(const char * file, rpmCompressedMagic * compressed)
(magic[4] == 0x5a) && (magic[5] == 0x00)) {
/* new style xz (lzma) with magic */
*compressed = COMPRESSED_XZ;
+ } else if ((magic[0] == 0x28) && (magic[1] == 0x85) &&
+ (magic[2] == 0x2f) ) {
+ *compressed = COMPRESSED_ZSTD;
} else if ((magic[0] == 'L') && (magic[1] == 'Z') &&
(magic[2] == 'I') && (magic[3] == 'P')) {
*compressed = COMPRESSED_LZIP;
@@ -356,6 +373,8 @@ int rpmFileIsCompressed(const char * file, rpmCompressedMagic * compressed)
*compressed = COMPRESSED_7ZIP;
} else if (rpmFileHasSuffix(file, ".lzma")) {
*compressed = COMPRESSED_LZMA;
+ } else if (rpmFileHasSuffix(file, ".gem")) {
+ *compressed = COMPRESSED_GEM;
}
return rc;
@@ -375,7 +394,7 @@ char *rpmCleanPath(char * path)
s = t = te = path;
while (*s != '\0') {
/*fprintf(stderr, "*** got \"%.*s\"\trest \"%s\"\n", (t-path), path, s); */
- switch(*s) {
+ switch (*s) {
case ':': /* handle url's */
if (s[1] == '/' && s[2] == '/') {
*t++ = *s++;
@@ -599,11 +618,14 @@ int rpmMkdirs(const char *root, const char *pathstr)
return rc;
}
+static void setConfigDir(void)
+{
+ char *rpmenv = getenv("RPM_CONFIGDIR");
+ rpm_config_dir = rpmenv ? xstrdup(rpmenv) : RPMCONFIGDIR;
+}
+
const char *rpmConfigDir(void)
{
- if (rpm_config_dir == NULL) {
- char *rpmenv = getenv("RPM_CONFIGDIR");
- rpm_config_dir = rpmenv ? xstrdup(rpmenv) : RPMCONFIGDIR;
- }
+ pthread_once(&configDirSet, setConfigDir);
return rpm_config_dir;
}
diff --git a/rpmio/rpmfileutil.h b/rpmio/rpmfileutil.h
index 79fac8699..916f6b240 100644
--- a/rpmio/rpmfileutil.h
+++ b/rpmio/rpmfileutil.h
@@ -26,7 +26,9 @@ typedef enum rpmCompressedMagic_e {
COMPRESSED_XZ = 5, /*!< xz can handle */
COMPRESSED_LZIP = 6, /*!< lzip can handle */
COMPRESSED_LRZIP = 7, /*!< lrzip can handle */
- COMPRESSED_7ZIP = 8 /*!< 7zip can handle */
+ COMPRESSED_7ZIP = 8, /*!< 7zip can handle */
+ COMPRESSED_GEM = 9, /*!< gem can handle */
+ COMPRESSED_ZSTD = 10 /*!< zstd can handle */
} rpmCompressedMagic;
/** \ingroup rpmfileutil
diff --git a/rpmio/rpmglob.c b/rpmio/rpmglob.c
index 4fc106daf..da5493d75 100644
--- a/rpmio/rpmglob.c
+++ b/rpmio/rpmglob.c
@@ -124,30 +124,15 @@ static inline const char *next_brace_sub(const char *begin)
unsigned int depth = 0;
const char *cp = begin;
- while (1) {
- if (depth == 0) {
- if (*cp != ',' && *cp != '}' && *cp != '\0') {
- if (*cp == '{')
- ++depth;
- ++cp;
- continue;
- }
- } else {
- while (*cp != '\0' && (*cp != '}' || depth > 0)) {
- if (*cp == '}')
- --depth;
- ++cp;
- }
- if (*cp == '\0')
- /* An incorrectly terminated brace expression. */
- return NULL;
+ while (*cp != '\0') {
+ if ((*cp == '}' && depth-- == 0) || (*cp == ',' && depth == 0))
+ break;
- continue;
- }
- break;
+ if (*cp++ == '{')
+ depth++;
}
- return cp;
+ return *cp != '\0' ? cp : NULL;
}
static int __glob_pattern_p(const char *pattern, int quote);
@@ -352,7 +337,7 @@ glob(const char *pattern, int flags,
user_name = dirname + 1;
else {
char *newp;
- newp = (char *) alloca(end_name - dirname);
+ newp = (char *) alloca(end_name - dirname + 1);
*((char *) mempcpy(newp, dirname + 1, end_name - dirname))
= '\0';
user_name = newp;
@@ -649,7 +634,7 @@ static int prefix_array(const char *dirname, char **array, size_t n)
static int __glob_pattern_p(const char *pattern, int quote)
{
register const char *p;
- int open = 0;
+ int openBrackets = 0;
for (p = pattern; *p != '\0'; ++p)
switch (*p) {
@@ -663,11 +648,11 @@ static int __glob_pattern_p(const char *pattern, int quote)
break;
case '[':
- open = 1;
+ openBrackets = 1;
break;
case ']':
- if (open)
+ if (openBrackets)
return 1;
break;
}
@@ -844,6 +829,8 @@ int rpmGlob(const char * patterns, int * argcPtr, ARGV_t * argvPtr)
int i, j;
int rc;
+ gflags |= GLOB_BRACE;
+
if (home != NULL && strlen(home) > 0)
gflags |= GLOB_TILDE;
@@ -966,5 +953,32 @@ exit:
int rpmIsGlob(const char * pattern, int quote)
{
- return __glob_pattern_p(pattern, quote);
+ if (!__glob_pattern_p(pattern, quote)) {
+
+ const char *begin;
+ const char *next;
+ const char *rest;
+
+ begin = strchr(pattern, '{');
+ if (begin == NULL)
+ return 0;
+ /*
+ * Find the first sub-pattern and at the same time find the
+ * rest after the closing brace.
+ */
+ next = next_brace_sub(begin + 1);
+ if (next == NULL)
+ return 0;
+
+ /* Now find the end of the whole brace expression. */
+ rest = next;
+ while (*rest != '}') {
+ rest = next_brace_sub(rest + 1);
+ if (rest == NULL)
+ return 0;
+ }
+ /* Now we can be sure that brace expression is well-foermed. */
+ }
+
+ return 1;
}
diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
index 34bb3f55d..57df81a9d 100644
--- a/rpmio/rpmio.c
+++ b/rpmio/rpmio.c
@@ -21,11 +21,17 @@
#include "debug.h"
-typedef struct _FDSTACK_s {
+typedef struct FDSTACK_s * FDSTACK_t;
+
+struct FDSTACK_s {
FDIO_t io;
void * fp;
int fdno;
-} FDSTACK_t;
+ int syserrno; /* last system errno encountered */
+ const char *errcookie; /* pointer to custom error string */
+
+ FDSTACK_t prev;
+};
/** \ingroup rpmio
* Cumulative statistics for a descriptor.
@@ -43,13 +49,9 @@ struct _FD_s {
#define RPMIO_DEBUG_IO 0x40000000
int magic;
#define FDMAGIC 0x04463138
- int nfps;
- FDSTACK_t fps[8];
+ FDSTACK_t fps;
int urlType; /* ufdio: */
- int syserrno; /* last system errno encountered */
- const char *errcookie; /* gzdio/bzdio/ufdio/xzdio: */
-
char *descr; /* file name (or other description) */
FDSTAT_t stats; /* I/O statistics */
@@ -62,51 +64,37 @@ struct _FD_s {
#define DBGIO(_f, _x) DBG((_f), RPMIO_DEBUG_IO, _x)
-static FDIO_t fdGetIo(FD_t fd)
-{
- return (fd != NULL) ? fd->fps[fd->nfps].io : NULL;
-}
-
-static void fdSetIo(FD_t fd, FDIO_t io)
-{
- if (fd)
- fd->fps[fd->nfps].io = io;
-}
-
-static void * fdGetFp(FD_t fd)
+static FDSTACK_t fdGetFps(FD_t fd)
{
- return (fd != NULL) ? fd->fps[fd->nfps].fp : NULL;
-}
-
-static void fdSetFp(FD_t fd, void * fp)
-{
- if (fd)
- fd->fps[fd->nfps].fp = fp;
+ return (fd != NULL) ? fd->fps : NULL;
}
static void fdSetFdno(FD_t fd, int fdno)
{
if (fd)
- fd->fps[fd->nfps].fdno = fdno;
+ fd->fps->fdno = fdno;
}
static void fdPush(FD_t fd, FDIO_t io, void * fp, int fdno)
{
- if (fd == NULL || fd->nfps >= (sizeof(fd->fps)/sizeof(fd->fps[0]) - 1))
- return;
- fd->nfps++;
- fdSetIo(fd, io);
- fdSetFp(fd, fp);
- fdSetFdno(fd, fdno);
+ FDSTACK_t fps = xcalloc(1, sizeof(*fps));
+ fps->io = io;
+ fps->fp = fp;
+ fps->fdno = fdno;
+ fps->prev = fd->fps;
+
+ fd->fps = fps;
+ fdLink(fd);
}
-static void fdPop(FD_t fd)
+static FDSTACK_t fdPop(FD_t fd)
{
- if (fd == NULL || fd->nfps < 0) return;
- fdSetIo(fd, NULL);
- fdSetFp(fd, NULL);
- fdSetFdno(fd, -1);
- fd->nfps--;
+ FDSTACK_t fps = fd->fps;
+ fd->fps = fps->prev;
+ free(fps);
+ fps = fd->fps;
+ fdFree(fd);
+ return fps;
}
void fdSetBundle(FD_t fd, rpmDigestBundle bundle)
@@ -115,77 +103,67 @@ void fdSetBundle(FD_t fd, rpmDigestBundle bundle)
fd->digests = bundle;
}
-rpmDigestBundle fdGetBundle(FD_t fd)
+rpmDigestBundle fdGetBundle(FD_t fd, int create)
{
- return (fd != NULL) ? fd->digests : NULL;
-}
-
-static void * iotFileno(FD_t fd, FDIO_t iot)
-{
- void * rc = NULL;
-
- if (fd == NULL)
- return NULL;
-
- for (int i = fd->nfps; i >= 0; i--) {
- FDSTACK_t * fps = &fd->fps[i];
- if (fps->io != iot)
- continue;
- rc = fps->fp;
- break;
+ rpmDigestBundle bundle = NULL;
+ if (fd) {
+ if (fd->digests == NULL && create)
+ fd->digests = rpmDigestBundleNew();
+ bundle = fd->digests;
}
-
- return rc;
+ return bundle;
}
/** \ingroup rpmio
* \name RPMIO Vectors.
*/
-typedef ssize_t (*fdio_read_function_t) (FD_t fd, void *buf, size_t nbytes);
-typedef ssize_t (*fdio_write_function_t) (FD_t fd, const void *buf, size_t nbytes);
-typedef int (*fdio_seek_function_t) (FD_t fd, off_t pos, int whence);
-typedef int (*fdio_close_function_t) (FD_t fd);
-typedef FD_t (*fdio_ref_function_t) (FD_t fd);
-typedef FD_t (*fdio_deref_function_t) (FD_t fd);
-typedef FD_t (*fdio_new_function_t) (const char *descr);
-typedef int (*fdio_fileno_function_t) (FD_t fd);
+typedef ssize_t (*fdio_read_function_t) (FDSTACK_t fps, void *buf, size_t nbytes);
+typedef ssize_t (*fdio_write_function_t) (FDSTACK_t fps, const void *buf, size_t nbytes);
+typedef int (*fdio_seek_function_t) (FDSTACK_t fps, off_t pos, int whence);
+typedef int (*fdio_close_function_t) (FDSTACK_t fps);
typedef FD_t (*fdio_open_function_t) (const char * path, int flags, mode_t mode);
-typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode);
-typedef void * (*fdio_ffileno_function_t) (FD_t fd);
-typedef int (*fdio_fflush_function_t) (FD_t fd);
-typedef long (*fdio_ftell_function_t) (FD_t);
+typedef FD_t (*fdio_fdopen_function_t) (FD_t fd, int fdno, const char * fmode);
+typedef int (*fdio_fflush_function_t) (FDSTACK_t fps);
+typedef off_t (*fdio_ftell_function_t) (FDSTACK_t fps);
+typedef int (*fdio_ferror_function_t) (FDSTACK_t fps);
+typedef const char * (*fdio_fstrerr_function_t)(FDSTACK_t fps);
struct FDIO_s {
+ const char * ioname;
+ const char * name;
fdio_read_function_t read;
fdio_write_function_t write;
fdio_seek_function_t seek;
fdio_close_function_t close;
- fdio_ref_function_t _fdref;
- fdio_deref_function_t _fdderef;
- fdio_new_function_t _fdnew;
- fdio_fileno_function_t _fileno;
-
fdio_open_function_t _open;
- fdio_fopen_function_t _fopen;
- fdio_ffileno_function_t _ffileno;
+ fdio_fdopen_function_t _fdopen;
fdio_fflush_function_t _fflush;
fdio_ftell_function_t _ftell;
+ fdio_ferror_function_t _ferror;
+ fdio_fstrerr_function_t _fstrerr;
};
/* forward refs */
static const FDIO_t fdio;
static const FDIO_t ufdio;
static const FDIO_t gzdio;
+#if HAVE_BZLIB_H
static const FDIO_t bzdio;
+#endif
+#ifdef HAVE_LZMA_H
static const FDIO_t xzdio;
static const FDIO_t lzdio;
+#endif
+#ifdef HAVE_ZSTD
+static const FDIO_t zstdio;
+#endif
/** \ingroup rpmio
* Update digest(s) attached to fd.
*/
static void fdUpdateDigests(FD_t fd, const void * buf, size_t buflen);
-static FD_t fdNew(const char *descr);
+static FD_t fdNew(int fdno, const char *descr);
/**
*/
int _rpmio_debug = 0;
@@ -196,38 +174,23 @@ static const char * fdbg(FD_t fd)
{
static char buf[BUFSIZ];
char *be = buf;
- int i;
buf[0] = '\0';
if (fd == NULL)
return buf;
*be++ = '\t';
- for (i = fd->nfps; i >= 0; i--) {
- FDSTACK_t * fps = &fd->fps[i];
- if (i != fd->nfps)
+ for (FDSTACK_t fps = fd->fps; fps != NULL; fps = fps->prev) {
+ FDIO_t iot = fps->io;
+ if (fps != fd->fps)
*be++ = ' ';
*be++ = '|';
*be++ = ' ';
- if (fps->io == fdio) {
- sprintf(be, "FD %d fp %p", fps->fdno, fps->fp);
- } else if (fps->io == ufdio) {
- sprintf(be, "UFD %d fp %p", fps->fdno, fps->fp);
- } else if (fps->io == gzdio) {
- sprintf(be, "GZD %p fdno %d", fps->fp, fps->fdno);
-#if HAVE_BZLIB_H
- } else if (fps->io == bzdio) {
- sprintf(be, "BZD %p fdno %d", fps->fp, fps->fdno);
-#endif
-#if HAVE_LZMA_H
- } else if (fps->io == xzdio) {
- sprintf(be, "XZD %p fdno %d", fps->fp, fps->fdno);
- } else if (fps->io == lzdio) {
- sprintf(be, "LZD %p fdno %d", fps->fp, fps->fdno);
-#endif
+ /* plain fd io types dont have _fopen() method */
+ if (iot->_fdopen == NULL) {
+ sprintf(be, "%s %d fp %p", iot->ioname, fps->fdno, fps->fp);
} else {
- sprintf(be, "??? io %p fp %p fdno %d ???",
- fps->io, fps->fp, fps->fdno);
+ sprintf(be, "%s %p fp %d", iot->ioname, fps->fp, fps->fdno);
}
be += strlen(be);
*be = '\0';
@@ -243,8 +206,10 @@ static void fdstat_enter(FD_t fd, fdOpX opx)
static void fdstat_exit(FD_t fd, fdOpX opx, ssize_t rc)
{
- if (rc == -1)
- fd->syserrno = errno;
+ if (rc == -1) {
+ FDSTACK_t fps = fdGetFps(fd);
+ fps->syserrno = errno;
+ }
if (fd->stats != NULL)
(void) rpmswExit(fdOp(fd, opx), rc);
}
@@ -296,21 +261,35 @@ FD_t fdDup(int fdno)
if ((nfdno = dup(fdno)) < 0)
return NULL;
- fd = fdNew(NULL);
- fdSetFdno(fd, nfdno);
+ fd = fdNew(nfdno, NULL);
DBGIO(fd, (stderr, "==> fdDup(%d) fd %p %s\n", fdno, (fd ? fd : NULL), fdbg(fd)));
return fd;
}
/* Regular fd doesn't have fflush() equivalent but its not an error either */
-static int fdFlush(FD_t fd)
+static int fdFlush(FDSTACK_t fps)
{
return 0;
}
-static int fdFileno(FD_t fd)
+static int fdError(FDSTACK_t fps)
+{
+ return fps->syserrno;
+}
+
+static int zfdError(FDSTACK_t fps)
{
- return (fd != NULL) ? fd->fps[0].fdno : -2;
+ return (fps->syserrno || fps->errcookie != NULL) ? -1 : 0;
+}
+
+static const char * fdStrerr(FDSTACK_t fps)
+{
+ return (fps->syserrno != 0) ? strerror(fps->syserrno) : "";
+}
+
+static const char * zfdStrerr(FDSTACK_t fps)
+{
+ return (fps->errcookie != NULL) ? fps->errcookie : "";
}
const char * Fdescr(FD_t fd)
@@ -320,7 +299,7 @@ const char * Fdescr(FD_t fd)
/* Lazy lookup if description is not set (eg dupped fd) */
if (fd->descr == NULL) {
- int fdno = fd->fps[fd->nfps].fdno;
+ int fdno = fd->fps->fdno;
#if defined(__linux__)
/* Grab the path from /proc if we can */
char *procpath = NULL;
@@ -363,69 +342,55 @@ FD_t fdFree( FD_t fd)
if (fd->digests) {
fd->digests = rpmDigestBundleFree(fd->digests);
}
+ free(fd->fps);
free(fd->descr);
free(fd);
}
return NULL;
}
-FD_t fdNew(const char *descr)
+static FD_t fdNew(int fdno, const char *descr)
{
FD_t fd = xcalloc(1, sizeof(*fd));
- if (fd == NULL) /* XXX xmalloc never returns NULL */
- return NULL;
fd->nrefs = 0;
fd->flags = 0;
fd->magic = FDMAGIC;
fd->urlType = URL_IS_UNKNOWN;
-
- fd->nfps = 0;
- memset(fd->fps, 0, sizeof(fd->fps));
-
- fd->fps[0].io = fdio;
- fd->fps[0].fp = NULL;
- fd->fps[0].fdno = -1;
-
- fd->syserrno = 0;
- fd->errcookie = NULL;
fd->stats = xcalloc(1, sizeof(*fd->stats));
fd->digests = NULL;
fd->descr = descr ? xstrdup(descr) : NULL;
- return fdLink(fd);
+ fdPush(fd, fdio, NULL, fdno);
+ return fd;
}
-static ssize_t fdRead(FD_t fd, void * buf, size_t count)
+static ssize_t fdRead(FDSTACK_t fps, void * buf, size_t count)
{
- return read(fdFileno(fd), buf, count);
+ return read(fps->fdno, buf, count);
}
-static ssize_t fdWrite(FD_t fd, const void * buf, size_t count)
+static ssize_t fdWrite(FDSTACK_t fps, const void * buf, size_t count)
{
if (count == 0)
return 0;
- return write(fdFileno(fd), buf, count);
+ return write(fps->fdno, buf, count);
}
-static int fdSeek(FD_t fd, off_t pos, int whence)
+static int fdSeek(FDSTACK_t fps, off_t pos, int whence)
{
- return lseek(fdFileno(fd), pos, whence);
+ return lseek(fps->fdno, pos, whence);
}
-static int fdClose(FD_t fd)
+static int fdClose(FDSTACK_t fps)
{
- int fdno;
+ int fdno = fps->fdno;
int rc;
- if (fd == NULL) return -2;
- fdno = fdFileno(fd);
-
- fdSetFdno(fd, -1);
+ fps->fdno = -1;
rc = ((fdno >= 0) ? close(fdno) : -2);
- fdFree(fd);
return rc;
}
@@ -440,20 +405,20 @@ static FD_t fdOpen(const char *path, int flags, mode_t mode)
(void) close(fdno);
return NULL;
}
- fd = fdNew(path);
- fdSetFdno(fd, fdno);
+ fd = fdNew(fdno, path);
fd->flags = flags;
return fd;
}
-static long fdTell(FD_t fd)
+static off_t fdTell(FDSTACK_t fps)
{
- return lseek(Fileno(fd), 0, SEEK_CUR);
+ return lseek(fps->fdno, 0, SEEK_CUR);
}
static const struct FDIO_s fdio_s = {
- fdRead, fdWrite, fdSeek, fdClose, fdLink, fdFree, fdNew, fdFileno,
- fdOpen, NULL, fdGetFp, fdFlush, fdTell
+ "fdio", NULL,
+ fdRead, fdWrite, fdSeek, fdClose,
+ fdOpen, NULL, fdFlush, fdTell, fdError, fdStrerr,
};
static const FDIO_t fdio = &fdio_s ;
@@ -548,21 +513,17 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o)\n", url, (unsigned)flags, (unsigned)mo
break;
}
- if (fd == NULL) return NULL;
-
- fdSetIo(fd, ufdio);
- fd->urlType = urlType;
-
- if (Fileno(fd) < 0) {
- (void) fdClose(fd);
- return NULL;
+ if (fd != NULL) {
+ fd->fps->io = ufdio;
+ fd->urlType = urlType;
}
return fd;
}
static const struct FDIO_s ufdio_s = {
- fdRead, fdWrite, fdSeek, fdClose, fdLink, fdFree, fdNew, fdFileno,
- ufdOpen, NULL, fdGetFp, fdFlush, fdTell
+ "ufdio", NULL,
+ fdRead, fdWrite, fdSeek, fdClose,
+ ufdOpen, NULL, fdFlush, fdTell, fdError, fdStrerr
};
static const FDIO_t ufdio = &ufdio_s ;
@@ -570,161 +531,104 @@ static const FDIO_t ufdio = &ufdio_s ;
/* Support for GZIP library. */
#include <zlib.h>
-static void * gzdFileno(FD_t fd)
+static FD_t gzdFdopen(FD_t fd, int fdno, const char *fmode)
{
- return iotFileno(fd, gzdio);
-}
+ gzFile gzfile = gzdopen(fdno, fmode);
-static
-FD_t gzdOpen(const char * path, const char * fmode)
-{
- FD_t fd;
- gzFile gzfile;
- if ((gzfile = gzopen(path, fmode)) == NULL)
+ if (gzfile == NULL)
return NULL;
- fd = fdNew(path);
- fdPop(fd); fdPush(fd, gzdio, gzfile, -1);
-
- return fdLink(fd);
-}
-
-static FD_t gzdFdopen(FD_t fd, const char *fmode)
-{
- int fdno;
- gzFile gzfile;
- if (fd == NULL || fmode == NULL) return NULL;
- fdno = fdFileno(fd);
fdSetFdno(fd, -1); /* XXX skip the fdio close */
- if (fdno < 0) return NULL;
- gzfile = gzdopen(fdno, fmode);
- if (gzfile == NULL) return NULL;
-
fdPush(fd, gzdio, gzfile, fdno); /* Push gzdio onto stack */
-
- return fdLink(fd);
+ return fd;
}
-static int gzdFlush(FD_t fd)
+static int gzdFlush(FDSTACK_t fps)
{
- gzFile gzfile;
- gzfile = gzdFileno(fd);
+ gzFile gzfile = fps->fp;
if (gzfile == NULL) return -2;
return gzflush(gzfile, Z_SYNC_FLUSH); /* XXX W2DO? */
}
-static ssize_t gzdRead(FD_t fd, void * buf, size_t count)
+static void gzdSetError(FDSTACK_t fps)
{
- gzFile gzfile;
+ gzFile gzfile = fps->fp;
+ int zerror = 0;
+ fps->errcookie = gzerror(gzfile, &zerror);
+ if (zerror == Z_ERRNO) {
+ fps->syserrno = errno;
+ fps->errcookie = strerror(fps->syserrno);
+ }
+}
+
+static ssize_t gzdRead(FDSTACK_t fps, void * buf, size_t count)
+{
+ gzFile gzfile = fps->fp;
ssize_t rc;
- gzfile = gzdFileno(fd);
if (gzfile == NULL) return -2; /* XXX can't happen */
rc = gzread(gzfile, buf, count);
- if (rc < 0) {
- int zerror = 0;
- fd->errcookie = gzerror(gzfile, &zerror);
- if (zerror == Z_ERRNO) {
- fd->syserrno = errno;
- fd->errcookie = strerror(fd->syserrno);
- }
- }
+ if (rc < 0)
+ gzdSetError(fps);
return rc;
}
-static ssize_t gzdWrite(FD_t fd, const void * buf, size_t count)
+static ssize_t gzdWrite(FDSTACK_t fps, const void * buf, size_t count)
{
gzFile gzfile;
ssize_t rc;
- gzfile = gzdFileno(fd);
+ gzfile = fps->fp;
if (gzfile == NULL) return -2; /* XXX can't happen */
rc = gzwrite(gzfile, (void *)buf, count);
- if (rc < 0) {
- int zerror = 0;
- fd->errcookie = gzerror(gzfile, &zerror);
- if (zerror == Z_ERRNO) {
- fd->syserrno = errno;
- fd->errcookie = strerror(fd->syserrno);
- }
- }
+ if (rc < 0)
+ gzdSetError(fps);
return rc;
}
/* XXX zlib-1.0.4 has not */
-static int gzdSeek(FD_t fd, off_t pos, int whence)
+static int gzdSeek(FDSTACK_t fps, off_t pos, int whence)
{
off_t p = pos;
int rc;
#if HAVE_GZSEEK
- gzFile gzfile;
-
- if (fd == NULL) return -2;
+ gzFile gzfile = fps->fp;
- gzfile = gzdFileno(fd);
if (gzfile == NULL) return -2; /* XXX can't happen */
rc = gzseek(gzfile, p, whence);
- if (rc < 0) {
- int zerror = 0;
- fd->errcookie = gzerror(gzfile, &zerror);
- if (zerror == Z_ERRNO) {
- fd->syserrno = errno;
- fd->errcookie = strerror(fd->syserrno);
- }
- }
+ if (rc < 0)
+ gzdSetError(fps);
#else
rc = -2;
#endif
return rc;
}
-static int gzdClose(FD_t fd)
+static int gzdClose(FDSTACK_t fps)
{
- gzFile gzfile;
+ gzFile gzfile = fps->fp;
int rc;
- gzfile = gzdFileno(fd);
if (gzfile == NULL) return -2; /* XXX can't happen */
rc = gzclose(gzfile);
- /* XXX TODO: preserve fd if errors */
-
- if (fd) {
- if (rc < 0) {
- fd->errcookie = "gzclose error";
- if (rc == Z_ERRNO) {
- fd->syserrno = errno;
- fd->errcookie = strerror(fd->syserrno);
- }
- }
- }
-
- if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "GZDIO", stderr);
- if (rc == 0)
- fdFree(fd);
- return rc;
+ return (rc != 0) ? -1 : 0;
}
-static long gzdTell(FD_t fd)
+static off_t gzdTell(FDSTACK_t fps)
{
off_t pos = -1;
- gzFile gzfile = gzdFileno(fd);
+ gzFile gzfile = fps->fp;
if (gzfile != NULL) {
#if HAVE_GZSEEK
pos = gztell(gzfile);
- if (pos < 0) {
- int zerror = 0;
- fd->errcookie = gzerror(gzfile, &zerror);
- if (zerror == Z_ERRNO) {
- fd->syserrno = errno;
- fd->errcookie = strerror(fd->syserrno);
- }
- }
+ if (pos < 0)
+ gzdSetError(fps);
#else
pos = -2;
#endif
@@ -732,8 +636,9 @@ static long gzdTell(FD_t fd)
return pos;
}
static const struct FDIO_s gzdio_s = {
- gzdRead, gzdWrite, gzdSeek, gzdClose, fdLink, fdFree, fdNew, fdFileno,
- NULL, gzdOpen, gzdFileno, gzdFlush, gzdTell
+ "gzdio", "gzip",
+ gzdRead, gzdWrite, gzdSeek, gzdClose,
+ NULL, gzdFdopen, gzdFlush, gzdTell, zfdError, zfdStrerr
};
static const FDIO_t gzdio = &gzdio_s ;
@@ -743,133 +648,73 @@ static const FDIO_t gzdio = &gzdio_s ;
#include <bzlib.h>
-static void * bzdFileno(FD_t fd)
+static FD_t bzdFdopen(FD_t fd, int fdno, const char * fmode)
{
- return iotFileno(fd, bzdio);
-}
+ BZFILE *bzfile = BZ2_bzdopen(fdno, fmode);
-static FD_t bzdOpen(const char * path, const char * mode)
-{
- FD_t fd;
- BZFILE *bzfile;;
- if ((bzfile = BZ2_bzopen(path, mode)) == NULL)
+ if (bzfile == NULL)
return NULL;
- fd = fdNew(path);
- fdPop(fd); fdPush(fd, bzdio, bzfile, -1);
- return fdLink(fd);
-}
-static FD_t bzdFdopen(FD_t fd, const char * fmode)
-{
- int fdno;
- BZFILE *bzfile;
-
- if (fd == NULL || fmode == NULL) return NULL;
- fdno = fdFileno(fd);
fdSetFdno(fd, -1); /* XXX skip the fdio close */
- if (fdno < 0) return NULL;
- bzfile = BZ2_bzdopen(fdno, fmode);
- if (bzfile == NULL) return NULL;
-
fdPush(fd, bzdio, bzfile, fdno); /* Push bzdio onto stack */
-
- return fdLink(fd);
+ return fd;
}
-static int bzdFlush(FD_t fd)
+static int bzdFlush(FDSTACK_t fps)
{
- return BZ2_bzflush(bzdFileno(fd));
+ return BZ2_bzflush(fps->fp);
}
-static ssize_t bzdRead(FD_t fd, void * buf, size_t count)
+static ssize_t bzdRead(FDSTACK_t fps, void * buf, size_t count)
{
- BZFILE *bzfile;
+ BZFILE *bzfile = fps->fp;
ssize_t rc = 0;
- bzfile = bzdFileno(fd);
if (bzfile)
rc = BZ2_bzread(bzfile, buf, count);
if (rc == -1) {
int zerror = 0;
- if (bzfile)
- fd->errcookie = BZ2_bzerror(bzfile, &zerror);
+ if (bzfile) {
+ fps->errcookie = BZ2_bzerror(bzfile, &zerror);
+ }
}
return rc;
}
-static ssize_t bzdWrite(FD_t fd, const void * buf, size_t count)
+static ssize_t bzdWrite(FDSTACK_t fps, const void * buf, size_t count)
{
- BZFILE *bzfile;
+ BZFILE *bzfile = fps->fp;
ssize_t rc;
- bzfile = bzdFileno(fd);
rc = BZ2_bzwrite(bzfile, (void *)buf, count);
if (rc == -1) {
int zerror = 0;
- fd->errcookie = BZ2_bzerror(bzfile, &zerror);
+ fps->errcookie = BZ2_bzerror(bzfile, &zerror);
}
return rc;
}
-static int bzdClose(FD_t fd)
+static int bzdClose(FDSTACK_t fps)
{
- BZFILE *bzfile;
- int rc;
-
- bzfile = bzdFileno(fd);
+ BZFILE *bzfile = fps->fp;
if (bzfile == NULL) return -2;
- /* FIX: check rc */
- BZ2_bzclose(bzfile);
- rc = 0; /* XXX FIXME */
- /* XXX TODO: preserve fd if errors */
-
- if (fd) {
- if (rc == -1) {
- int zerror = 0;
- fd->errcookie = BZ2_bzerror(bzfile, &zerror);
- }
- }
+ /* bzclose() doesn't return errors */
+ BZ2_bzclose(bzfile);
- if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "BZDIO", stderr);
- if (rc == 0)
- fdFree(fd);
- return rc;
+ return 0;
}
static const struct FDIO_s bzdio_s = {
- bzdRead, bzdWrite, NULL, bzdClose, fdLink, fdFree, fdNew, fdFileno,
- NULL, bzdOpen, bzdFileno, bzdFlush, NULL
+ "bzdio", "bzip2",
+ bzdRead, bzdWrite, NULL, bzdClose,
+ NULL, bzdFdopen, bzdFlush, NULL, zfdError, zfdStrerr
};
static const FDIO_t bzdio = &bzdio_s ;
#endif /* HAVE_BZLIB_H */
-static const char * getFdErrstr (FD_t fd)
-{
- const char *errstr = NULL;
-
- if (fdGetIo(fd) == gzdio) {
- errstr = fd->errcookie;
- } else
-#ifdef HAVE_BZLIB_H
- if (fdGetIo(fd) == bzdio) {
- errstr = fd->errcookie;
- } else
-#endif /* HAVE_BZLIB_H */
-#ifdef HAVE_LZMA_H
- if (fdGetIo(fd) == xzdio || fdGetIo(fd) == lzdio) {
- errstr = fd->errcookie;
- } else
-#endif /* HAVE_LZMA_H */
- {
- errstr = (fd->syserrno ? strerror(fd->syserrno) : "");
- }
-
- return errstr;
-}
-
/* =============================================================== */
/* Support for LZMA library. */
@@ -898,7 +743,7 @@ typedef struct lzfile {
} LZFILE;
-static LZFILE *lzopen_internal(const char *path, const char *mode, int fd, int xz)
+static LZFILE *lzopen_internal(const char *mode, int fd, int xz)
{
int level = LZMA_PRESET_DEFAULT;
int encoding = 0;
@@ -925,7 +770,7 @@ static LZFILE *lzopen_internal(const char *path, const char *mode, int fd, int x
/* skip past rest of digits in string that atoi()
* should've processed
* */
- while(isdigit(*++mode));
+ while (isdigit(*++mode));
}
#ifdef HAVE_LZMA_MT
else
@@ -933,18 +778,10 @@ static LZFILE *lzopen_internal(const char *path, const char *mode, int fd, int x
#endif
}
}
- if (fd != -1)
- fp = fdopen(fd, encoding ? "w" : "r");
- else
- fp = fopen(path, encoding ? "w" : "r");
+ fp = fdopen(fd, encoding ? "w" : "r");
if (!fp)
- return 0;
+ return NULL;
lzfile = calloc(1, sizeof(*lzfile));
- if (!lzfile) {
- fclose(fp);
- return 0;
- }
-
lzfile->file = fp;
lzfile->encoding = encoding;
lzfile->eof = 0;
@@ -991,8 +828,7 @@ static LZFILE *lzopen_internal(const char *path, const char *mode, int fd, int x
#endif
)
memlimit += (SIZE_MAX>>2);
-
- /* keep reducing the number of threads untill memory usage gets below limit */
+ /* keep reducing the number of threads until memory usage gets below limit */
while ((memory_usage = lzma_stream_encoder_mt_memusage(&mt_options)) > memlimit) {
/* number of threads shouldn't be able to hit zero with compression
* settings aailable to set through rpm... */
@@ -1034,40 +870,11 @@ static LZFILE *lzopen_internal(const char *path, const char *mode, int fd, int x
}
fclose(fp);
free(lzfile);
- return 0;
+ return NULL;
}
return lzfile;
}
-static LZFILE *xzopen(const char *path, const char *mode)
-{
- return lzopen_internal(path, mode, -1, 1);
-}
-
-static LZFILE *xzdopen(int fd, const char *mode)
-{
- if (fd < 0)
- return 0;
- return lzopen_internal(0, mode, fd, 1);
-}
-
-static LZFILE *lzopen(const char *path, const char *mode)
-{
- return lzopen_internal(path, mode, -1, 0);
-}
-
-static LZFILE *lzdopen(int fd, const char *mode)
-{
- if (fd < 0)
- return 0;
- return lzopen_internal(0, mode, fd, 0);
-}
-
-static int lzflush(LZFILE *lzfile)
-{
- return fflush(lzfile->file);
-}
-
static int lzclose(LZFILE *lzfile)
{
lzma_ret ret;
@@ -1152,170 +959,363 @@ static ssize_t lzwrite(LZFILE *lzfile, void *buf, size_t len)
}
}
-static void * lzdFileno(FD_t fd)
+static FD_t xzdFdopen(FD_t fd, int fdno, const char * fmode)
{
- void * rc = NULL;
-
- if (fd == NULL)
- return NULL;
-
- for (int i = fd->nfps; i >= 0; i--) {
- FDSTACK_t * fps = &fd->fps[i];
- if (fps->io != xzdio && fps->io != lzdio)
- continue;
- rc = fps->fp;
- break;
- }
- return rc;
-}
+ LZFILE *lzfile = lzopen_internal(fmode, fdno, 1);
-static FD_t xzdOpen(const char * path, const char * mode)
-{
- FD_t fd;
- LZFILE *lzfile;
- if ((lzfile = xzopen(path, mode)) == NULL)
+ if (lzfile == NULL)
return NULL;
- fd = fdNew(path);
- fdPop(fd); fdPush(fd, xzdio, lzfile, -1);
- return fdLink(fd);
-}
-static FD_t xzdFdopen(FD_t fd, const char * fmode)
-{
- int fdno;
- LZFILE *lzfile;
-
- if (fd == NULL || fmode == NULL) return NULL;
- fdno = fdFileno(fd);
fdSetFdno(fd, -1); /* XXX skip the fdio close */
- if (fdno < 0) return NULL;
- lzfile = xzdopen(fdno, fmode);
- if (lzfile == NULL) return NULL;
fdPush(fd, xzdio, lzfile, fdno);
- return fdLink(fd);
+ return fd;
}
-static FD_t lzdOpen(const char * path, const char * mode)
+static FD_t lzdFdopen(FD_t fd, int fdno, const char * fmode)
{
- FD_t fd;
- LZFILE *lzfile;
- if ((lzfile = lzopen(path, mode)) == NULL)
- return NULL;
- fd = fdNew(path);
- fdPop(fd); fdPush(fd, xzdio, lzfile, -1);
- return fdLink(fd);
-}
+ LZFILE *lzfile = lzopen_internal(fmode, fdno, 0);
-static FD_t lzdFdopen(FD_t fd, const char * fmode)
-{
- int fdno;
- LZFILE *lzfile;
+ if (lzfile == NULL)
+ return NULL;
- if (fd == NULL || fmode == NULL) return NULL;
- fdno = fdFileno(fd);
fdSetFdno(fd, -1); /* XXX skip the fdio close */
- if (fdno < 0) return NULL;
- lzfile = lzdopen(fdno, fmode);
- if (lzfile == NULL) return NULL;
- fdPush(fd, xzdio, lzfile, fdno);
- return fdLink(fd);
+ fdPush(fd, lzdio, lzfile, fdno);
+ return fd;
}
-static int lzdFlush(FD_t fd)
+static int lzdFlush(FDSTACK_t fps)
{
- return lzflush(lzdFileno(fd));
+ LZFILE *lzfile = fps->fp;
+ return fflush(lzfile->file);
}
-static ssize_t lzdRead(FD_t fd, void * buf, size_t count)
+static ssize_t lzdRead(FDSTACK_t fps, void * buf, size_t count)
{
- LZFILE *lzfile;
+ LZFILE *lzfile = fps->fp;
ssize_t rc = 0;
- lzfile = lzdFileno(fd);
if (lzfile)
rc = lzread(lzfile, buf, count);
if (rc == -1) {
- fd->errcookie = "Lzma: decoding error";
+ fps->errcookie = "Lzma: decoding error";
}
return rc;
}
-static ssize_t lzdWrite(FD_t fd, const void * buf, size_t count)
+static ssize_t lzdWrite(FDSTACK_t fps, const void * buf, size_t count)
{
- LZFILE *lzfile;
+ LZFILE *lzfile = fps->fp;
ssize_t rc = 0;
- lzfile = lzdFileno(fd);
-
rc = lzwrite(lzfile, (void *)buf, count);
if (rc < 0) {
- fd->errcookie = "Lzma: encoding error";
+ fps->errcookie = "Lzma: encoding error";
}
return rc;
}
-static int lzdClose(FD_t fd)
+static int lzdClose(FDSTACK_t fps)
{
- LZFILE *lzfile;
+ LZFILE *lzfile = fps->fp;
int rc;
- lzfile = lzdFileno(fd);
-
if (lzfile == NULL) return -2;
rc = lzclose(lzfile);
- /* XXX TODO: preserve fd if errors */
-
- if (fd) {
- if (rc == -1) {
- fd->errcookie = "lzclose error";
- fd->syserrno = errno;
- fd->errcookie = strerror(fd->syserrno);
- }
- }
-
- if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "XZDIO", stderr);
- if (rc == 0)
- fdFree(fd);
return rc;
}
static struct FDIO_s xzdio_s = {
- lzdRead, lzdWrite, NULL, lzdClose, NULL, NULL, NULL, fdFileno,
- NULL, xzdOpen, lzdFileno, lzdFlush, NULL
+ "xzdio", "xz",
+ lzdRead, lzdWrite, NULL, lzdClose,
+ NULL, xzdFdopen, lzdFlush, NULL, zfdError, zfdStrerr
};
static const FDIO_t xzdio = &xzdio_s;
static struct FDIO_s lzdio_s = {
- lzdRead, lzdWrite, NULL, lzdClose, NULL, NULL, NULL, fdFileno,
- NULL, lzdOpen, lzdFileno, lzdFlush, NULL
+ "lzdio", "lzma",
+ lzdRead, lzdWrite, NULL, lzdClose,
+ NULL, lzdFdopen, lzdFlush, NULL, zfdError, zfdStrerr
};
static const FDIO_t lzdio = &lzdio_s;
#endif /* HAVE_LZMA_H */
/* =============================================================== */
+/* Support for ZSTD library. */
+#ifdef HAVE_ZSTD
-const char *Fstrerror(FD_t fd)
+#include <zstd.h>
+
+typedef struct rpmzstd_s {
+ int flags; /*!< open flags. */
+ int fdno;
+ int level; /*!< compression level */
+ FILE * fp;
+ void * _stream; /*!< ZSTD_{C,D}Stream */
+ size_t nb;
+ void * b;
+ ZSTD_inBuffer zib; /*!< ZSTD_inBuffer */
+ ZSTD_outBuffer zob; /*!< ZSTD_outBuffer */
+} * rpmzstd;
+
+static rpmzstd rpmzstdNew(int fdno, const char *fmode)
{
- if (fd == NULL)
- return (errno ? strerror(errno) : "");
- return getFdErrstr(fd);
+ int flags = 0;
+ int level = 3;
+ const char * s = fmode;
+ char stdio[32];
+ char *t = stdio;
+ char *te = t + sizeof(stdio) - 2;
+ int c;
+
+ switch ((c = *s++)) {
+ case 'a':
+ *t++ = (char)c;
+ flags &= ~O_ACCMODE;
+ flags |= O_WRONLY | O_CREAT | O_APPEND;
+ break;
+ case 'w':
+ *t++ = (char)c;
+ flags &= ~O_ACCMODE;
+ flags |= O_WRONLY | O_CREAT | O_TRUNC;
+ break;
+ case 'r':
+ *t++ = (char)c;
+ flags &= ~O_ACCMODE;
+ flags |= O_RDONLY;
+ break;
+ }
+
+ while ((c = *s++) != 0) {
+ switch (c) {
+ case '.':
+ break;
+ case '+':
+ if (t < te) *t++ = c;
+ flags &= ~O_ACCMODE;
+ flags |= O_RDWR;
+ continue;
+ break;
+ default:
+ if (c >= (int)'0' && c <= (int)'9') {
+ level = strtol(s-1, (char **)&s, 10);
+ if (level < 1){
+ level = 1;
+ rpmlog(RPMLOG_WARNING, "Invalid compression level for zstd. Using %i instead.\n", 1);
+ }
+ if (level > 19) {
+ level = 19;
+ rpmlog(RPMLOG_WARNING, "Invalid compression level for zstd. Using %i instead.\n", 19);
+ }
+ }
+ continue;
+ break;
+ }
+ break;
+ }
+ *t = '\0';
+
+ FILE * fp = fdopen(fdno, stdio);
+ if (fp == NULL)
+ return NULL;
+
+ void * _stream = NULL;
+ size_t nb = 0;
+
+ if ((flags & O_ACCMODE) == O_RDONLY) { /* decompressing */
+ if ((_stream = (void *) ZSTD_createDStream()) == NULL
+ || ZSTD_isError(ZSTD_initDStream(_stream))) {
+ return NULL;
+ }
+ nb = ZSTD_DStreamInSize();
+ } else { /* compressing */
+ if ((_stream = (void *) ZSTD_createCStream()) == NULL
+ || ZSTD_isError(ZSTD_initCStream(_stream, level))) {
+ return NULL;
+ }
+ nb = ZSTD_CStreamOutSize();
+ }
+
+ rpmzstd zstd = (rpmzstd) xcalloc(1, sizeof(*zstd));
+ zstd->flags = flags;
+ zstd->fdno = fdno;
+ zstd->level = level;
+ zstd->fp = fp;
+ zstd->_stream = _stream;
+ zstd->nb = nb;
+ zstd->b = xmalloc(nb);
+
+ return zstd;
+}
+
+static FD_t zstdFdopen(FD_t fd, int fdno, const char * fmode)
+{
+ rpmzstd zstd = rpmzstdNew(fdno, fmode);
+
+ if (zstd == NULL)
+ return NULL;
+
+ fdSetFdno(fd, -1); /* XXX skip the fdio close */
+ fdPush(fd, zstdio, zstd, fdno); /* Push zstdio onto stack */
+ return fd;
+}
+
+static int zstdFlush(FDSTACK_t fps)
+{
+ rpmzstd zstd = (rpmzstd) fps->fp;
+assert(zstd);
+ int rc = -1;
+
+ if ((zstd->flags & O_ACCMODE) == O_RDONLY) { /* decompressing */
+ rc = 0;
+ } else { /* compressing */
+ /* close frame */
+ zstd->zob.dst = zstd->b;
+ zstd->zob.size = zstd->nb;
+ zstd->zob.pos = 0;
+ int xx = ZSTD_flushStream(zstd->_stream, &zstd->zob);
+ if (ZSTD_isError(xx))
+ fps->errcookie = ZSTD_getErrorName(xx);
+ else if (zstd->zob.pos != fwrite(zstd->b, 1, zstd->zob.pos, zstd->fp))
+ fps->errcookie = "zstdFlush fwrite failed.";
+ else
+ rc = 0;
+ }
+ return rc;
}
-#define FDIOVEC(_fd, _vec) \
- ((fdGetIo(_fd) && fdGetIo(_fd)->_vec) ? fdGetIo(_fd)->_vec : NULL)
+static ssize_t zstdRead(FDSTACK_t fps, void * buf, size_t count)
+{
+ rpmzstd zstd = (rpmzstd) fps->fp;
+assert(zstd);
+ ZSTD_outBuffer zob = { buf, count, 0 };
+
+ while (zob.pos < zob.size) {
+ /* Re-fill compressed data buffer. */
+ if (zstd->zib.pos >= zstd->zib.size) {
+ zstd->zib.size = fread(zstd->b, 1, zstd->nb, zstd->fp);
+ if (zstd->zib.size == 0)
+ break; /* EOF */
+ zstd->zib.src = zstd->b;
+ zstd->zib.pos = 0;
+ }
+
+ /* Decompress next chunk. */
+ int xx = ZSTD_decompressStream(zstd->_stream, &zob, &zstd->zib);
+ if (ZSTD_isError(xx)) {
+ fps->errcookie = ZSTD_getErrorName(xx);
+ return -1;
+ }
+ }
+ return zob.pos;
+}
+
+static ssize_t zstdWrite(FDSTACK_t fps, const void * buf, size_t count)
+{
+ rpmzstd zstd = (rpmzstd) fps->fp;
+assert(zstd);
+ ZSTD_inBuffer zib = { buf, count, 0 };
+
+ while (zib.pos < zib.size) {
+
+ /* Reset to beginning of compressed data buffer. */
+ zstd->zob.dst = zstd->b;
+ zstd->zob.size = zstd->nb;
+ zstd->zob.pos = 0;
+
+ /* Compress next chunk. */
+ int xx = ZSTD_compressStream(zstd->_stream, &zstd->zob, &zib);
+ if (ZSTD_isError(xx)) {
+ fps->errcookie = ZSTD_getErrorName(xx);
+ return -1;
+ }
+
+ /* Write compressed data buffer. */
+ if (zstd->zob.pos > 0) {
+ size_t nw = fwrite(zstd->b, 1, zstd->zob.pos, zstd->fp);
+ if (nw != zstd->zob.pos) {
+ fps->errcookie = "zstdWrite fwrite failed.";
+ return -1;
+ }
+ }
+ }
+ return zib.pos;
+}
+
+static int zstdClose(FDSTACK_t fps)
+{
+ rpmzstd zstd = (rpmzstd) fps->fp;
+assert(zstd);
+ int rc = -2;
+
+ if ((zstd->flags & O_ACCMODE) == O_RDONLY) { /* decompressing */
+ rc = 0;
+ ZSTD_freeDStream(zstd->_stream);
+ } else { /* compressing */
+ /* close frame */
+ zstd->zob.dst = zstd->b;
+ zstd->zob.size = zstd->nb;
+ zstd->zob.pos = 0;
+ int xx = ZSTD_endStream(zstd->_stream, &zstd->zob);
+ if (ZSTD_isError(xx))
+ fps->errcookie = ZSTD_getErrorName(xx);
+ else if (zstd->zob.pos != fwrite(zstd->b, 1, zstd->zob.pos, zstd->fp))
+ fps->errcookie = "zstdClose fwrite failed.";
+ else
+ rc = 0;
+ ZSTD_freeCStream(zstd->_stream);
+ }
+
+ if (zstd->fp && fileno(zstd->fp) > 2)
+ (void) fclose(zstd->fp);
+
+ if (zstd->b) free(zstd->b);
+ free(zstd);
+
+ return rc;
+}
+
+static const struct FDIO_s zstdio_s = {
+ "zstdio", "zstd",
+ zstdRead, zstdWrite, NULL, zstdClose,
+ NULL, zstdFdopen, zstdFlush, NULL, zfdError, zfdStrerr
+};
+static const FDIO_t zstdio = &zstdio_s ;
+
+#endif /* HAVE_ZSTD */
+
+/* =============================================================== */
+
+#define FDIOVEC(_fps, _vec) \
+ ((_fps) && (_fps)->io) ? (_fps)->io->_vec : NULL
+
+const char *Fstrerror(FD_t fd)
+{
+ const char *err = "";
+
+ if (fd != NULL) {
+ FDSTACK_t fps = fdGetFps(fd);
+ fdio_fstrerr_function_t _fstrerr = FDIOVEC(fps, _fstrerr);
+ if (_fstrerr)
+ err = _fstrerr(fps);
+ } else if (errno){
+ err = strerror(errno);
+ }
+ return err;
+}
ssize_t Fread(void *buf, size_t size, size_t nmemb, FD_t fd)
{
ssize_t rc = -1;
if (fd != NULL) {
- fdio_read_function_t _read = FDIOVEC(fd, read);
+ FDSTACK_t fps = fdGetFps(fd);
+ fdio_read_function_t _read = FDIOVEC(fps, read);
fdstat_enter(fd, FDSTAT_READ);
do {
- rc = (_read ? (*_read) (fd, buf, size * nmemb) : -2);
+ rc = (_read ? (*_read) (fps, buf, size * nmemb) : -2);
} while (rc == -1 && errno == EINTR);
fdstat_exit(fd, FDSTAT_READ, rc);
@@ -1334,11 +1334,12 @@ ssize_t Fwrite(const void *buf, size_t size, size_t nmemb, FD_t fd)
ssize_t rc = -1;
if (fd != NULL) {
- fdio_write_function_t _write = FDIOVEC(fd, write);
+ FDSTACK_t fps = fdGetFps(fd);
+ fdio_write_function_t _write = FDIOVEC(fps, write);
fdstat_enter(fd, FDSTAT_WRITE);
do {
- rc = (_write ? _write(fd, buf, size * nmemb) : -2);
+ rc = (_write ? _write(fps, buf, size * nmemb) : -2);
} while (rc == -1 && errno == EINTR);
fdstat_exit(fd, FDSTAT_WRITE, rc);
@@ -1357,10 +1358,11 @@ int Fseek(FD_t fd, off_t offset, int whence)
int rc = -1;
if (fd != NULL) {
- fdio_seek_function_t _seek = FDIOVEC(fd, seek);
+ FDSTACK_t fps = fdGetFps(fd);
+ fdio_seek_function_t _seek = FDIOVEC(fps, seek);
fdstat_enter(fd, FDSTAT_SEEK);
- rc = (_seek ? _seek(fd, offset, whence) : -2);
+ rc = (_seek ? _seek(fps, offset, whence) : -2);
fdstat_exit(fd, FDSTAT_SEEK, rc);
}
@@ -1379,19 +1381,27 @@ int Fclose(FD_t fd)
fd = fdLink(fd);
fdstat_enter(fd, FDSTAT_CLOSE);
- while (fd->nfps >= 0) {
- fdio_close_function_t _close = FDIOVEC(fd, close);
- rc = _close ? _close(fd) : -2;
+ for (FDSTACK_t fps = fd->fps; fps != NULL; fps = fdPop(fd)) {
+ if (fps->fdno >= 0) {
+ fdio_close_function_t _close = FDIOVEC(fps, close);
+ rc = _close ? _close(fps) : -2;
+
+ if (ec == 0 && rc)
+ ec = rc;
+ }
+
+ /* Debugging stats for compresed types */
+ if ((_rpmio_debug || rpmIsDebug()) && fps->fdno == -1)
+ fdstat_print(fd, fps->io->ioname, stderr);
- if (fd->nfps == 0)
+ /* Leave freeing the last one after stats */
+ if (fps->prev == NULL)
break;
- if (ec == 0 && rc)
- ec = rc;
- fdPop(fd);
}
fdstat_exit(fd, FDSTAT_CLOSE, rc);
DBGIO(fd, (stderr, "==>\tFclose(%p) rc %lx %s\n",
(fd ? fd : NULL), (unsigned long)rc, fdbg(fd)));
+ fdPop(fd);
fdFree(fd);
return ec;
@@ -1418,14 +1428,17 @@ static void cvtfmode (const char *m,
switch (*m) {
case 'a':
+ flags &= ~O_ACCMODE;
flags |= O_WRONLY | O_CREAT | O_APPEND;
if (--nstdio > 0) *stdio++ = *m;
break;
case 'w':
+ flags &= ~O_ACCMODE;
flags |= O_WRONLY | O_CREAT | O_TRUNC;
if (--nstdio > 0) *stdio++ = *m;
break;
case 'r':
+ flags &= ~O_ACCMODE;
flags |= O_RDONLY;
if (--nstdio > 0) *stdio++ = *m;
break;
@@ -1441,7 +1454,7 @@ static void cvtfmode (const char *m,
case '.':
break;
case '+':
- flags &= ~(O_RDONLY|O_WRONLY);
+ flags &= ~O_ACCMODE;
flags |= O_RDWR;
if (--nstdio > 0) *stdio++ = c;
continue;
@@ -1455,6 +1468,11 @@ static void cvtfmode (const char *m,
if (--nstdio > 0) *stdio++ = c;
continue;
break;
+ case '?':
+ flags |= RPMIO_DEBUG_IO;
+ if (--nother > 0) *other++ = c;
+ continue;
+ break;
default:
if (--nother > 0) *other++ = c;
continue;
@@ -1470,17 +1488,49 @@ static void cvtfmode (const char *m,
*f = flags;
}
+static FDIO_t findIOT(const char *name)
+{
+ static FDIO_t fdio_types[] = {
+ &fdio_s,
+ &ufdio_s,
+ &gzdio_s,
+#if HAVE_BZLIB_H
+ &bzdio_s,
+#endif
+#if HAVE_LZMA_H
+ &xzdio_s,
+ &lzdio_s,
+#endif
+#ifdef HAVE_ZSTD
+ &zstdio_s,
+#endif
+ NULL
+ };
+ FDIO_t iot = NULL;
+
+ for (FDIO_t *t = fdio_types; t && *t; t++) {
+ if (rstreq(name, (*t)->ioname) ||
+ ((*t)->name && rstreq(name, (*t)->name))) {
+ iot = (*t);
+ break;
+ }
+ }
+
+ return iot;
+}
+
FD_t Fdopen(FD_t ofd, const char *fmode)
{
char stdio[20], other[20], zstdio[40];
const char *end = NULL;
- FDIO_t iof = NULL;
+ FDIO_t iot = NULL;
FD_t fd = ofd;
+ int fdno = Fileno(ofd);
if (_rpmio_debug)
fprintf(stderr, "*** Fdopen(%p,%s) %s\n", fd, fmode, fdbg(fd));
- if (fd == NULL || fmode == NULL)
+ if (fd == NULL || fmode == NULL || fdno < 0)
return NULL;
cvtfmode(fmode, stdio, sizeof(stdio), other, sizeof(other), &end, NULL);
@@ -1494,37 +1544,16 @@ fprintf(stderr, "*** Fdopen(%p,%s) %s\n", fd, fmode, fdbg(fd));
return fd;
if (end && *end) {
- if (rstreq(end, "fdio")) {
- iof = fdio;
- } else if (rstreq(end, "gzdio") || rstreq(end, "gzip")) {
- iof = gzdio;
- fd = gzdFdopen(fd, zstdio);
-#if HAVE_BZLIB_H
- } else if (rstreq(end, "bzdio") || rstreq(end, "bzip2")) {
- iof = bzdio;
- fd = bzdFdopen(fd, zstdio);
-#endif
-#if HAVE_LZMA_H
- } else if (rstreq(end, "xzdio") || rstreq(end, "xz")) {
- iof = xzdio;
- fd = xzdFdopen(fd, zstdio);
- } else if (rstreq(end, "lzdio") || rstreq(end, "lzma")) {
- iof = lzdio;
- fd = lzdFdopen(fd, zstdio);
-#endif
- } else if (rstreq(end, "ufdio")) {
- iof = ufdio;
- }
+ iot = findIOT(end);
} else if (other[0] != '\0') {
for (end = other; *end && strchr("0123456789fh", *end); end++)
{};
- if (*end == '\0') {
- iof = gzdio;
- fd = gzdFdopen(fd, zstdio);
- }
+ if (*end == '\0')
+ iot = findIOT("gzdio");
}
- if (iof == NULL)
- return fd;
+
+ if (iot && iot->_fdopen)
+ fd = iot->_fdopen(fd, fdno, zstdio);
DBGIO(fd, (stderr, "==> Fdopen(%p,\"%s\") returns fd %p %s\n", ofd, fmode, (fd ? fd : NULL), fdbg(fd)));
return fd;
@@ -1536,7 +1565,7 @@ FD_t Fopen(const char *path, const char *fmode)
const char *end = NULL;
mode_t perms = 0666;
int flags = 0;
- FD_t fd;
+ FD_t fd = NULL;
if (path == NULL || fmode == NULL)
return NULL;
@@ -1547,39 +1576,16 @@ FD_t Fopen(const char *path, const char *fmode)
return NULL;
if (end == NULL || rstreq(end, "fdio")) {
-if (_rpmio_debug)
-fprintf(stderr, "*** Fopen fdio path %s fmode %s\n", path, fmode);
+ if (_rpmio_debug)
+ fprintf(stderr, "*** Fopen fdio path %s fmode %s\n", path, fmode);
fd = fdOpen(path, flags, perms);
- if (fdFileno(fd) < 0) {
- if (fd) (void) fdClose(fd);
- return NULL;
- }
} else {
- /* XXX gzdio and bzdio here too */
-
- switch (urlIsURL(path)) {
- case URL_IS_HTTPS:
- case URL_IS_HTTP:
- case URL_IS_HKP:
- case URL_IS_PATH:
- case URL_IS_DASH:
- case URL_IS_FTP:
- case URL_IS_UNKNOWN:
-if (_rpmio_debug)
-fprintf(stderr, "*** Fopen ufdio path %s fmode %s\n", path, fmode);
- fd = ufdOpen(path, flags, perms);
- if (fd == NULL || !(fdFileno(fd) >= 0))
- return fd;
- break;
- default:
-if (_rpmio_debug)
-fprintf(stderr, "*** Fopen WTFO path %s fmode %s\n", path, fmode);
- return NULL;
- break;
- }
-
+ if (_rpmio_debug)
+ fprintf(stderr, "*** Fopen ufdio path %s fmode %s\n", path, fmode);
+ fd = ufdOpen(path, flags, perms);
}
+ /* Open compressed stream if necessary */
if (fd)
fd = Fdopen(fd, fmode);
@@ -1593,9 +1599,10 @@ int Fflush(FD_t fd)
{
int rc = -1;
if (fd != NULL) {
- fdio_fflush_function_t _fflush = FDIOVEC(fd, _fflush);
+ FDSTACK_t fps = fdGetFps(fd);
+ fdio_fflush_function_t _fflush = FDIOVEC(fps, _fflush);
- rc = (_fflush ? _fflush(fd) : -2);
+ rc = (_fflush ? _fflush(fps) : -2);
}
return rc;
}
@@ -1604,42 +1611,25 @@ off_t Ftell(FD_t fd)
{
off_t pos = -1;
if (fd != NULL) {
- fdio_ftell_function_t _ftell = FDIOVEC(fd, _ftell);
+ FDSTACK_t fps = fdGetFps(fd);
+ fdio_ftell_function_t _ftell = FDIOVEC(fps, _ftell);
- pos = (_ftell ? _ftell(fd) : -2);
+ pos = (_ftell ? _ftell(fps) : -2);
}
return pos;
}
int Ferror(FD_t fd)
{
- int i, rc = 0;
+ int rc = 0;
if (fd == NULL) return -1;
- for (i = fd->nfps; rc == 0 && i >= 0; i--) {
- FDSTACK_t * fps = &fd->fps[i];
- int ec;
-
- if (fps->io == gzdio) {
- ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0;
- i--; /* XXX fdio under gzdio always has fdno == -1 */
-#if HAVE_BZLIB_H
- } else if (fps->io == bzdio) {
- ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0;
- i--; /* XXX fdio under bzdio always has fdno == -1 */
-#endif
-#if HAVE_LZMA_H
- } else if (fps->io == xzdio || fps->io == lzdio) {
- ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0;
- i--; /* XXX fdio under xzdio/lzdio always has fdno == -1 */
-#endif
- } else {
- /* XXX need to check ufdio/gzdio/bzdio/fdio errors correctly. */
- ec = (fdFileno(fd) < 0 ? -1 : 0);
- }
+ for (FDSTACK_t fps = fd->fps; fps != NULL; fps = fps->prev) {
+ fdio_ferror_function_t _ferror = FDIOVEC(fps, _ferror);
+ rc = _ferror(fps);
- if (rc == 0 && ec)
- rc = ec;
+ if (rc)
+ break;
}
DBGIO(fd, (stderr, "==> Ferror(%p) rc %d %s\n", fd, rc, fdbg(fd)));
return rc;
@@ -1647,11 +1637,13 @@ DBGIO(fd, (stderr, "==> Ferror(%p) rc %d %s\n", fd, rc, fdbg(fd)));
int Fileno(FD_t fd)
{
- int i, rc = -1;
+ int rc = -1;
if (fd == NULL) return -1;
- for (i = fd->nfps ; rc == -1 && i >= 0; i--) {
- rc = fd->fps[i].fdno;
+ for (FDSTACK_t fps = fd->fps; fps != NULL; fps = fps->prev) {
+ rc = fps->fdno;
+ if (rc != -1)
+ break;
}
DBGIO(fd, (stderr, "==> Fileno(%p) rc %d %s\n", (fd ? fd : NULL), rc, fdbg(fd)));
@@ -1725,11 +1717,16 @@ exit:
void fdInitDigest(FD_t fd, int hashalgo, rpmDigestFlags flags)
{
+ return fdInitDigestID(fd, hashalgo, hashalgo, flags);
+}
+
+void fdInitDigestID(FD_t fd, int hashalgo, int id, rpmDigestFlags flags)
+{
if (fd->digests == NULL) {
fd->digests = rpmDigestBundleNew();
}
fdstat_enter(fd, FDSTAT_DIGEST);
- rpmDigestBundleAdd(fd->digests, hashalgo, flags);
+ rpmDigestBundleAddID(fd->digests, hashalgo, id, flags);
fdstat_exit(fd, FDSTAT_DIGEST, (ssize_t) 0);
}
@@ -1742,14 +1739,22 @@ static void fdUpdateDigests(FD_t fd, const void * buf, size_t buflen)
}
}
-void fdFiniDigest(FD_t fd, int hashalgo,
+void fdFiniDigest(FD_t fd, int id,
void ** datap, size_t * lenp, int asAscii)
{
if (fd && fd->digests) {
fdstat_enter(fd, FDSTAT_DIGEST);
- rpmDigestBundleFinal(fd->digests, hashalgo, datap, lenp, asAscii);
+ rpmDigestBundleFinal(fd->digests, id, datap, lenp, asAscii);
fdstat_exit(fd, FDSTAT_DIGEST, (ssize_t) 0);
}
}
+DIGEST_CTX fdDupDigest(FD_t fd, int id)
+{
+ DIGEST_CTX ctx = NULL;
+ if (fd && fd->digests)
+ ctx = rpmDigestBundleDupCtx(fd->digests, id);
+
+ return ctx;
+}
diff --git a/rpmio/rpmio.h b/rpmio/rpmio.h
index 8cebe16ca..9bd108649 100644
--- a/rpmio/rpmio.h
+++ b/rpmio/rpmio.h
@@ -4,6 +4,7 @@
/** \ingroup rpmio
* \file rpmio/rpmio.h
*
+ * RPM I/O API (Fd_t is RPM equivalent to libc's FILE)
*/
#include <sys/types.h>
diff --git a/rpmio/rpmio_internal.h b/rpmio/rpmio_internal.h
index 8c9f1a81a..fbed183b0 100644
--- a/rpmio/rpmio_internal.h
+++ b/rpmio/rpmio_internal.h
@@ -13,20 +13,24 @@ extern "C" {
#endif
void fdSetBundle(FD_t fd, rpmDigestBundle bundle);
-rpmDigestBundle fdGetBundle(FD_t fd);
+rpmDigestBundle fdGetBundle(FD_t fd, int create);
/** \ingroup rpmio
* Attach digest to fd.
*/
void fdInitDigest(FD_t fd, int hashalgo, rpmDigestFlags flags);
+void fdInitDigestID(FD_t fd, int hashalgo, int id, rpmDigestFlags flags);
+
/** \ingroup rpmio
*/
-void fdFiniDigest(FD_t fd, int hashalgo,
+void fdFiniDigest(FD_t fd, int id,
void ** datap,
size_t * lenp,
int asAscii);
+DIGEST_CTX fdDupDigest(FD_t fd, int id);
+
/**
* Read an entire file into a buffer.
* @param fn file name to read
diff --git a/rpmio/rpmkeyring.c b/rpmio/rpmkeyring.c
index 18fdfa01c..4e14de1e5 100644
--- a/rpmio/rpmkeyring.c
+++ b/rpmio/rpmkeyring.c
@@ -1,5 +1,7 @@
#include "system.h"
+#include <pthread.h>
+
#include <rpm/rpmstring.h>
#include <rpm/rpmpgp.h>
#include <rpm/rpmfileutil.h>
@@ -17,17 +19,16 @@ struct rpmPubkey_s {
pgpKeyID_t keyid;
pgpDigParams pgpkey;
int nrefs;
+ pthread_rwlock_t lock;
};
struct rpmKeyring_s {
struct rpmPubkey_s **keys;
size_t numkeys;
int nrefs;
+ pthread_rwlock_t lock;
};
-static rpmPubkey rpmPubkeyUnlink(rpmPubkey key);
-static rpmKeyring rpmKeyringUnlink(rpmKeyring keyring);
-
static int keyidcmp(const void *k1, const void *k2)
{
const struct rpmPubkey_s *key1 = *(const struct rpmPubkey_s **) k1;
@@ -41,27 +42,30 @@ rpmKeyring rpmKeyringNew(void)
rpmKeyring keyring = xcalloc(1, sizeof(*keyring));
keyring->keys = NULL;
keyring->numkeys = 0;
- keyring->nrefs = 0;
- return rpmKeyringLink(keyring);
+ keyring->nrefs = 1;
+ pthread_rwlock_init(&keyring->lock, NULL);
+ return keyring;
}
rpmKeyring rpmKeyringFree(rpmKeyring keyring)
{
- if (keyring == NULL) {
+ if (keyring == NULL)
return NULL;
- }
-
- if (keyring->nrefs > 1) {
- return rpmKeyringUnlink(keyring);
- }
- if (keyring->keys) {
- for (int i = 0; i < keyring->numkeys; i++) {
- keyring->keys[i] = rpmPubkeyFree(keyring->keys[i]);
+ pthread_rwlock_wrlock(&keyring->lock);
+ if (--keyring->nrefs == 0) {
+ if (keyring->keys) {
+ for (int i = 0; i < keyring->numkeys; i++) {
+ keyring->keys[i] = rpmPubkeyFree(keyring->keys[i]);
+ }
+ free(keyring->keys);
}
- free(keyring->keys);
+ pthread_rwlock_unlock(&keyring->lock);
+ pthread_rwlock_destroy(&keyring->lock);
+ free(keyring);
+ } else {
+ pthread_rwlock_unlock(&keyring->lock);
}
- free(keyring);
return NULL;
}
@@ -74,38 +78,36 @@ static rpmPubkey rpmKeyringFindKeyid(rpmKeyring keyring, rpmPubkey key)
int rpmKeyringAddKey(rpmKeyring keyring, rpmPubkey key)
{
+ int rc = 1; /* assume already seen key */
if (keyring == NULL || key == NULL)
return -1;
- /* check if we already have this key */
- if (rpmKeyringFindKeyid(keyring, key)) {
- return 1;
+ /* check if we already have this key, but always wrlock for simplicity */
+ pthread_rwlock_wrlock(&keyring->lock);
+ if (!rpmKeyringFindKeyid(keyring, key)) {
+ keyring->keys = xrealloc(keyring->keys,
+ (keyring->numkeys + 1) * sizeof(rpmPubkey));
+ keyring->keys[keyring->numkeys] = rpmPubkeyLink(key);
+ keyring->numkeys++;
+ qsort(keyring->keys, keyring->numkeys, sizeof(*keyring->keys),
+ keyidcmp);
+ rc = 0;
}
-
- keyring->keys = xrealloc(keyring->keys, (keyring->numkeys + 1) * sizeof(rpmPubkey));
- keyring->keys[keyring->numkeys] = rpmPubkeyLink(key);
- keyring->numkeys++;
- qsort(keyring->keys, keyring->numkeys, sizeof(*keyring->keys), keyidcmp);
+ pthread_rwlock_unlock(&keyring->lock);
- return 0;
+ return rc;
}
rpmKeyring rpmKeyringLink(rpmKeyring keyring)
{
if (keyring) {
+ pthread_rwlock_wrlock(&keyring->lock);
keyring->nrefs++;
+ pthread_rwlock_unlock(&keyring->lock);
}
return keyring;
}
-static rpmKeyring rpmKeyringUnlink(rpmKeyring keyring)
-{
- if (keyring) {
- keyring->nrefs--;
- }
- return NULL;
-}
-
rpmPubkey rpmPubkeyRead(const char *filename)
{
uint8_t *pkt = NULL;
@@ -131,7 +133,7 @@ rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen)
if (pkt == NULL || pktlen == 0)
goto exit;
- if (pgpPubkeyFingerprint(pkt, pktlen, keyid))
+ if (pgpPubkeyKeyID(pkt, pktlen, keyid))
goto exit;
if (pgpPrtParams(pkt, pktlen, PGPTAG_PUBLIC_KEY, &pgpkey))
@@ -141,12 +143,45 @@ rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen)
key->pkt = xmalloc(pktlen);
key->pktlen = pktlen;
key->pgpkey = pgpkey;
- key->nrefs = 0;
+ key->nrefs = 1;
memcpy(key->pkt, pkt, pktlen);
memcpy(key->keyid, keyid, sizeof(keyid));
+ pthread_rwlock_init(&key->lock, NULL);
exit:
- return rpmPubkeyLink(key);
+ return key;
+}
+
+rpmPubkey *rpmGetSubkeys(rpmPubkey mainkey, int *count)
+{
+ rpmPubkey *subkeys = NULL;
+ pgpDigParams *pgpsubkeys = NULL;
+ int pgpsubkeysCount = 0;
+ int i;
+
+ if (mainkey && !pgpPrtParamsSubkeys(mainkey->pkt, mainkey->pktlen,
+ mainkey->pgpkey, &pgpsubkeys, &pgpsubkeysCount)) {
+
+ subkeys = xmalloc(pgpsubkeysCount * sizeof(*subkeys));
+
+ for (i = 0; i < pgpsubkeysCount; i++) {
+ rpmPubkey subkey = xcalloc(1, sizeof(*subkey));
+ subkeys[i] = subkey;
+
+ /* Packets with all subkeys already stored in main key */
+ subkey->pkt = NULL;
+ subkey->pktlen = 0;
+
+ subkey->pgpkey = pgpsubkeys[i];
+ memcpy(subkey->keyid, pgpsubkeys[i]->signid, sizeof(subkey->keyid));
+ subkey->nrefs = 1;
+ pthread_rwlock_init(&subkey->lock, NULL);
+ }
+ free(pgpsubkeys);
+ }
+ *count = pgpsubkeysCount;
+
+ return subkeys;
}
rpmPubkey rpmPubkeyFree(rpmPubkey key)
@@ -154,31 +189,29 @@ rpmPubkey rpmPubkeyFree(rpmPubkey key)
if (key == NULL)
return NULL;
- if (key->nrefs > 1)
- return rpmPubkeyUnlink(key);
-
- pgpDigParamsFree(key->pgpkey);
- free(key->pkt);
- free(key);
+ pthread_rwlock_wrlock(&key->lock);
+ if (--key->nrefs == 0) {
+ pgpDigParamsFree(key->pgpkey);
+ free(key->pkt);
+ pthread_rwlock_unlock(&key->lock);
+ pthread_rwlock_destroy(&key->lock);
+ free(key);
+ } else {
+ pthread_rwlock_unlock(&key->lock);
+ }
return NULL;
}
rpmPubkey rpmPubkeyLink(rpmPubkey key)
{
if (key) {
+ pthread_rwlock_wrlock(&key->lock);
key->nrefs++;
+ pthread_rwlock_unlock(&key->lock);
}
return key;
}
-static rpmPubkey rpmPubkeyUnlink(rpmPubkey key)
-{
- if (key) {
- key->nrefs--;
- }
- return NULL;
-}
-
pgpDig rpmPubkeyDig(rpmPubkey key)
{
pgpDig dig = NULL;
@@ -189,12 +222,15 @@ pgpDig rpmPubkeyDig(rpmPubkey key)
return NULL;
dig = pgpNewDig();
+
+ pthread_rwlock_rdlock(&key->lock);
rc = pgpPrtPkts(key->pkt, key->pktlen, dig, 0);
+ pthread_rwlock_unlock(&key->lock);
+
if (rc == 0) {
pgpDigParams pubp = pgpDigGetParams(dig, PGPTAG_PUBLIC_KEY);
if (!pubp || !memcmp(pubp->signid, zeros, sizeof(pubp->signid)) ||
- !memcmp(pubp->time, zeros, sizeof(pubp->time)) ||
- pubp->userid == NULL) {
+ pubp->time == 0 || pubp->userid == NULL) {
rc = -1;
}
}
@@ -210,11 +246,23 @@ char * rpmPubkeyBase64(rpmPubkey key)
char *enc = NULL;
if (key) {
+ pthread_rwlock_rdlock(&key->lock);
enc = rpmBase64Encode(key->pkt, key->pktlen, -1);
+ pthread_rwlock_unlock(&key->lock);
}
return enc;
}
+pgpDigParams rpmPubkeyPgpDigParams(rpmPubkey key)
+{
+ pgpDigParams params= NULL;
+
+ if (key) {
+ params = key->pgpkey;
+ }
+ return params;
+}
+
static rpmPubkey findbySig(rpmKeyring keyring, pgpDigParams sig)
{
rpmPubkey key = NULL;
@@ -239,6 +287,8 @@ static rpmPubkey findbySig(rpmKeyring keyring, pgpDigParams sig)
rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig)
{
+ pthread_rwlock_rdlock(&keyring->lock);
+
rpmRC res = RPMRC_NOKEY;
pgpDigParams sigp = pgpDigGetParams(sig, PGPTAG_SIGNATURE);
rpmPubkey key = findbySig(keyring, sigp);
@@ -253,6 +303,7 @@ rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig)
res = RPMRC_OK;
}
+ pthread_rwlock_unlock(&keyring->lock);
return res;
}
@@ -261,6 +312,8 @@ rpmRC rpmKeyringVerifySig(rpmKeyring keyring, pgpDigParams sig, DIGEST_CTX ctx)
rpmRC rc = RPMRC_FAIL;
if (sig && ctx) {
+ pthread_rwlock_rdlock(&keyring->lock);
+
pgpDigParams pgpkey = NULL;
rpmPubkey key = findbySig(keyring, sig);
@@ -269,6 +322,8 @@ rpmRC rpmKeyringVerifySig(rpmKeyring keyring, pgpDigParams sig, DIGEST_CTX ctx)
/* We call verify even if key not found for a signature sanity check */
rc = pgpVerifySignature(pgpkey, sig, ctx);
+
+ pthread_rwlock_unlock(&keyring->lock);
}
return rc;
diff --git a/rpmio/rpmkeyring.h b/rpmio/rpmkeyring.h
index 9fcab5feb..8aeed8c6c 100644
--- a/rpmio/rpmkeyring.h
+++ b/rpmio/rpmkeyring.h
@@ -3,6 +3,8 @@
/** \ingroup rpmkeyring
* \file rpmio/rpmkeyring.h
+ *
+ * RPM keyring API
*/
#include <rpm/rpmtypes.h>
@@ -65,6 +67,14 @@ rpmKeyring rpmKeyringLink(rpmKeyring keyring);
rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen);
/** \ingroup rpmkeyring
+ * Return array of subkeys belonging to maikey
+ * param mainkey main rpmPubkey
+ * param count count of returned subkeys
+ * @return an array of subkey's handles
+ */
+rpmPubkey *rpmGetSubkeys(rpmPubkey mainkey, int *count);
+
+/** \ingroup rpmkeyring
* Create a new rpmPubkey from ASCII-armored pubkey file
* @param filename Path to pubkey file
* @return new pubkey handle
@@ -99,6 +109,13 @@ pgpDig rpmPubkeyDig(rpmPubkey key);
*/
char * rpmPubkeyBase64(rpmPubkey key);
+/** \ingroup rpmkeyring
+ * Return pgp params of key
+ * @param key Pubkey
+ * @return pgp params, NULL on error
+ */
+pgpDigParams rpmPubkeyPgpDigParams(rpmPubkey key);
+
#ifdef __cplusplus
}
#endif
diff --git a/rpmio/rpmlog.c b/rpmio/rpmlog.c
index 8023d5c44..223af32aa 100644
--- a/rpmio/rpmlog.c
+++ b/rpmio/rpmlog.c
@@ -5,11 +5,22 @@
#include "system.h"
#include <stdarg.h>
#include <stdlib.h>
+#include <pthread.h>
+#include <errno.h>
#include <rpm/rpmlog.h>
+#include <rpm/rpmmacro.h>
#include "debug.h"
-static int nrecs = 0;
-static rpmlogRec recs = NULL;
+typedef struct rpmlogCtx_s * rpmlogCtx;
+struct rpmlogCtx_s {
+ pthread_rwlock_t lock;
+ unsigned mask;
+ int nrecs;
+ rpmlogRec recs;
+ rpmlogCallback cbfunc;
+ rpmlogCallbackData cbdata;
+ FILE *stdlog;
+};
struct rpmlogRec_s {
int code; /* unused */
@@ -17,64 +28,110 @@ struct rpmlogRec_s {
char * message; /* log message string */
};
+/* Force log context acquisition through a function */
+static rpmlogCtx rpmlogCtxAcquire(int write)
+{
+ static struct rpmlogCtx_s _globalCtx = { PTHREAD_RWLOCK_INITIALIZER,
+ RPMLOG_UPTO(RPMLOG_NOTICE),
+ 0, NULL, NULL, NULL, NULL };
+ rpmlogCtx ctx = &_globalCtx;
+ int xx;
+
+ /* XXX Silently failing is bad, but we can't very well use log here... */
+ if (write)
+ xx = pthread_rwlock_wrlock(&ctx->lock);
+ else
+ xx = pthread_rwlock_rdlock(&ctx->lock);
+
+ return (xx == 0) ? ctx : NULL;
+}
+
+/* Release log context */
+static rpmlogCtx rpmlogCtxRelease(rpmlogCtx ctx)
+{
+ if (ctx)
+ pthread_rwlock_unlock(&ctx->lock);
+ return NULL;
+}
+
int rpmlogGetNrecs(void)
{
+ rpmlogCtx ctx = rpmlogCtxAcquire(0);
+ int nrecs = -1;
+ if (ctx)
+ nrecs = ctx->nrecs;
+ rpmlogCtxRelease(ctx);
return nrecs;
}
int rpmlogCode(void)
{
- if (recs != NULL && nrecs > 0)
- return recs[nrecs-1].code;
- return -1;
-}
+ int code = -1;
+ rpmlogCtx ctx = rpmlogCtxAcquire(0);
+
+ if (ctx && ctx->recs != NULL && ctx->nrecs > 0)
+ code = ctx->recs[ctx->nrecs-1].code;
+ rpmlogCtxRelease(ctx);
+ return code;
+}
const char * rpmlogMessage(void)
{
- if (recs != NULL && nrecs > 0)
- return recs[nrecs-1].message;
- return _("(no error)");
+ const char *msg = _("(no error)");
+ rpmlogCtx ctx = rpmlogCtxAcquire(0);
+
+ if (ctx && ctx->recs != NULL && ctx->nrecs > 0)
+ msg = ctx->recs[ctx->nrecs-1].message;
+
+ rpmlogCtxRelease(ctx);
+ return msg;
}
const char * rpmlogRecMessage(rpmlogRec rec)
{
- assert(rec != NULL);
- return (rec->message);
+ return (rec != NULL) ? rec->message : NULL;
}
rpmlogLvl rpmlogRecPriority(rpmlogRec rec)
{
- assert(rec != NULL);
- return (rec->pri);
+ return (rec != NULL) ? rec->pri : (rpmlogLvl)-1;
}
void rpmlogPrint(FILE *f)
{
- int i;
+ rpmlogCtx ctx = rpmlogCtxAcquire(0);
+
+ if (ctx == NULL)
+ return;
if (f == NULL)
f = stderr;
- if (recs)
- for (i = 0; i < nrecs; i++) {
- rpmlogRec rec = recs + i;
+ for (int i = 0; i < ctx->nrecs; i++) {
+ rpmlogRec rec = ctx->recs + i;
if (rec->message && *rec->message)
fprintf(f, " %s", rec->message);
}
+
+ rpmlogCtxRelease(ctx);
}
void rpmlogClose (void)
{
- int i;
+ rpmlogCtx ctx = rpmlogCtxAcquire(1);
- if (recs)
- for (i = 0; i < nrecs; i++) {
- rpmlogRec rec = recs + i;
+ if (ctx == NULL)
+ return;
+
+ for (int i = 0; i < ctx->nrecs; i++) {
+ rpmlogRec rec = ctx->recs + i;
rec->message = _free(rec->message);
}
- recs = _free(recs);
- nrecs = 0;
+ ctx->recs = _free(ctx->recs);
+ ctx->nrecs = 0;
+
+ rpmlogCtxRelease(ctx);
}
void rpmlogOpen (const char *ident, int option,
@@ -82,65 +139,51 @@ void rpmlogOpen (const char *ident, int option,
{
}
-static unsigned rpmlogMask = RPMLOG_UPTO( RPMLOG_NOTICE );
-
#ifdef NOTYET
static unsigned rpmlogFacility = RPMLOG_USER;
#endif
int rpmlogSetMask (int mask)
{
- int omask = rpmlogMask;
- if (mask)
- rpmlogMask = mask;
- return omask;
-}
+ rpmlogCtx ctx = rpmlogCtxAcquire(mask ? 1 : 0);
-static rpmlogCallback _rpmlogCallback = NULL;
-static rpmlogCallbackData _rpmlogCallbackData = NULL;
+ int omask = -1;
+ if (ctx) {
+ omask = ctx->mask;
+ if (mask)
+ ctx->mask = mask;
+ }
-rpmlogCallback rpmlogSetCallback(rpmlogCallback cb, rpmlogCallbackData data)
-{
- rpmlogCallback ocb = _rpmlogCallback;
- _rpmlogCallback = cb;
- _rpmlogCallbackData = data;
- return ocb;
+ rpmlogCtxRelease(ctx);
+ return omask;
}
-static FILE * _stdlog = NULL;
-
-static int rpmlogDefault(rpmlogRec rec)
+rpmlogCallback rpmlogSetCallback(rpmlogCallback cb, rpmlogCallbackData data)
{
- FILE *msgout = (_stdlog ? _stdlog : stderr);
+ rpmlogCtx ctx = rpmlogCtxAcquire(1);
- switch (rec->pri) {
- case RPMLOG_INFO:
- case RPMLOG_NOTICE:
- msgout = (_stdlog ? _stdlog : stdout);
- break;
- case RPMLOG_EMERG:
- case RPMLOG_ALERT:
- case RPMLOG_CRIT:
- case RPMLOG_ERR:
- case RPMLOG_WARNING:
- case RPMLOG_DEBUG:
- default:
- break;
+ rpmlogCallback ocb = NULL;
+ if (ctx) {
+ ocb = ctx->cbfunc;
+ ctx->cbfunc = cb;
+ ctx->cbdata = data;
}
- (void) fputs(rpmlogLevelPrefix(rec->pri), msgout);
-
- (void) fputs(rec->message, msgout);
- (void) fflush(msgout);
-
- return (rec->pri <= RPMLOG_CRIT ? RPMLOG_EXIT : 0);
+ rpmlogCtxRelease(ctx);
+ return ocb;
}
-
FILE * rpmlogSetFile(FILE * fp)
{
- FILE * ofp = _stdlog;
- _stdlog = fp;
+ rpmlogCtx ctx = rpmlogCtxAcquire(1);
+
+ FILE * ofp = NULL;
+ if (ctx) {
+ ofp = ctx->stdlog;
+ ctx->stdlog = fp;
+ }
+
+ rpmlogCtxRelease(ctx);
return ofp;
}
@@ -155,6 +198,38 @@ static const char * const rpmlogMsgPrefix[] = {
"D: ", /*!< RPMLOG_DEBUG */
};
+#define ANSI_COLOR_BLACK "\x1b[30m"
+#define ANSI_COLOR_RED "\x1b[31m"
+#define ANSI_COLOR_GREEN "\x1b[32m"
+#define ANSI_COLOR_YELLOW "\x1b[33m"
+#define ANSI_COLOR_BLUE "\x1b[34m"
+#define ANSI_COLOR_MAGENTA "\x1b[35m"
+#define ANSI_COLOR_CYAN "\x1b[36m"
+#define ANSI_COLOR_WHITE "\x1b[37m"
+
+#define ANSI_BRIGHT_BLACK "\x1b[30;1m"
+#define ANSI_BRIGHT_RED "\x1b[31;1m"
+#define ANSI_BRIGHT_GREEN "\x1b[32;1m"
+#define ANSI_BRIGHT_YELLOW "\x1b[33;1m"
+#define ANSI_BRIGHT_BLUE "\x1b[34;1m"
+#define ANSI_BRIGHT_MAGENTA "\x1b[35;1m"
+#define ANSI_BRIGHT_CYAN "\x1b[36;1m"
+#define ANSI_BRIGHT_WHITE "\x1b[37;1m"
+
+#define ANSI_COLOR_BOLD "\x1b[1m"
+#define ANSI_COLOR_RESET "\x1b[0m"
+
+static const char *rpmlogMsgPrefixColor[] = {
+ ANSI_BRIGHT_RED, /*!< RPMLOG_EMERG */
+ ANSI_BRIGHT_RED, /*!< RPMLOG_ALERT */
+ ANSI_BRIGHT_RED, /*!< RPMLOG_CRIT */
+ ANSI_BRIGHT_RED, /*!< RPMLOG_ERR */
+ ANSI_BRIGHT_MAGENTA,/*!< RPMLOG_WARNING */
+ "", /*!< RPMLOG_NOTICE */
+ "", /*!< RPMLOG_INFO */
+ ANSI_BRIGHT_BLUE, /*!< RPMLOG_DEBUG */
+};
+
const char * rpmlogLevelPrefix(rpmlogLvl pri)
{
const char * prefix = "";
@@ -163,46 +238,174 @@ const char * rpmlogLevelPrefix(rpmlogLvl pri)
return prefix;
}
+static const char * rpmlogLevelColor(rpmlogLvl pri)
+{
+ return rpmlogMsgPrefixColor[pri&0x7];
+}
+
+enum {
+ COLOR_NO = 0,
+ COLOR_AUTO = 1,
+ COLOR_ALWAYS = 2,
+};
+
+static int getColorConfig(void)
+{
+ int rc = COLOR_NO;
+ char * color = rpmExpand("%{?_color_output}%{!?_color_output:auto}", NULL);
+ if (rstreq(color, "auto"))
+ rc = COLOR_AUTO;
+ else if (rstreq(color, "always"))
+ rc = COLOR_ALWAYS;
+ free(color);
+ return rc;
+}
+
+static int rpmlogDefault(FILE *stdlog, rpmlogRec rec)
+{
+ static const char fubar[] =
+ "Error occurred during writing of a log message";
+ FILE *msgout = (stdlog ? stdlog : stderr);
+ static __thread int color = -1;
+ const char * colorOn = NULL;
+
+ if (color < 0)
+ color = getColorConfig();
+
+ if (color == COLOR_ALWAYS ||
+ (color == COLOR_AUTO && isatty(fileno(msgout))))
+ colorOn = rpmlogLevelColor(rec->pri);
+
+ switch (rec->pri) {
+ case RPMLOG_INFO:
+ case RPMLOG_NOTICE:
+ msgout = (stdlog ? stdlog : stdout);
+ break;
+ case RPMLOG_EMERG:
+ case RPMLOG_ALERT:
+ case RPMLOG_CRIT:
+ case RPMLOG_ERR:
+ case RPMLOG_WARNING:
+ case RPMLOG_DEBUG:
+ if (colorOn && *colorOn)
+ if (fputs(rpmlogLevelColor(rec->pri), msgout) == EOF
+ && errno != EPIPE)
+ perror(fubar);
+ break;
+ default:
+ break;
+ }
+
+ if (fputs(rpmlogLevelPrefix(rec->pri), msgout) == EOF && errno != EPIPE)
+ perror(fubar);
+
+ switch (rec->pri) {
+ case RPMLOG_INFO:
+ case RPMLOG_NOTICE:
+ break;
+ case RPMLOG_EMERG:
+ case RPMLOG_ALERT:
+ case RPMLOG_CRIT:
+ case RPMLOG_ERR:
+ case RPMLOG_WARNING:
+ if (colorOn && *colorOn) {
+ if (fputs(ANSI_COLOR_RESET, msgout) == EOF && errno != EPIPE)
+ perror(fubar);
+ if (fputs(ANSI_COLOR_BOLD, msgout) == EOF && errno != EPIPE)
+ perror(fubar);
+ }
+ case RPMLOG_DEBUG:
+ default:
+ break;
+ }
+
+ if (rec->message)
+ (void) fputs(rec->message, msgout);
+
+ switch (rec->pri) {
+ case RPMLOG_INFO:
+ case RPMLOG_NOTICE:
+ break;
+ case RPMLOG_EMERG:
+ case RPMLOG_ALERT:
+ case RPMLOG_CRIT:
+ case RPMLOG_ERR:
+ case RPMLOG_WARNING:
+ case RPMLOG_DEBUG:
+ if (colorOn && *colorOn)
+ if (fputs(ANSI_COLOR_RESET, msgout) == EPIPE && errno != EPIPE)
+ perror(fubar);
+ break;
+ default:
+ break;
+ }
+
+ (void) fflush(msgout);
+
+ return (rec->pri <= RPMLOG_CRIT ? RPMLOG_EXIT : 0);
+}
+
/* FIX: rpmlogMsgPrefix[] dependent, not unqualified */
/* FIX: rpmlogMsgPrefix[] may be NULL */
-static void dolog (struct rpmlogRec_s *rec)
+static void dolog(struct rpmlogRec_s *rec, int saverec)
{
+ static pthread_mutex_t serialize = PTHREAD_MUTEX_INITIALIZER;
+
int cbrc = RPMLOG_DEFAULT;
int needexit = 0;
+ FILE *clog = NULL;
+ rpmlogCallbackData *cbdata = NULL;
+ rpmlogCallback cbfunc = NULL;
+ rpmlogCtx ctx = rpmlogCtxAcquire(saverec);
+
+ if (ctx == NULL)
+ return;
/* Save copy of all messages at warning (or below == "more important"). */
- if (rec->pri <= RPMLOG_WARNING) {
- recs = xrealloc(recs, (nrecs+2) * sizeof(*recs));
- recs[nrecs].code = rec->code;
- recs[nrecs].pri = rec->pri;
- recs[nrecs].message = xstrdup(rec->message);
- recs[nrecs+1].code = 0;
- recs[nrecs+1].message = NULL;
- ++nrecs;
+ if (saverec) {
+ ctx->recs = xrealloc(ctx->recs, (ctx->nrecs+2) * sizeof(*ctx->recs));
+ ctx->recs[ctx->nrecs].code = rec->code;
+ ctx->recs[ctx->nrecs].pri = rec->pri;
+ ctx->recs[ctx->nrecs].message = xstrdup(rec->message);
+ ctx->recs[ctx->nrecs+1].code = 0;
+ ctx->recs[ctx->nrecs+1].message = NULL;
+ ctx->nrecs++;
}
-
- if (_rpmlogCallback) {
- cbrc = _rpmlogCallback(rec, _rpmlogCallbackData);
- needexit += cbrc & RPMLOG_EXIT;
- }
-
- if (cbrc & RPMLOG_DEFAULT) {
- cbrc = rpmlogDefault(rec);
- needexit += cbrc & RPMLOG_EXIT;
+ cbfunc = ctx->cbfunc;
+ cbdata = ctx->cbdata;
+ clog = ctx->stdlog;
+
+ /* Free the context for callback and actual log output */
+ ctx = rpmlogCtxRelease(ctx);
+
+ /* Always serialize callback and output to avoid interleaved messages. */
+ if (pthread_mutex_lock(&serialize) == 0) {
+ if (cbfunc) {
+ cbrc = cbfunc(rec, cbdata);
+ needexit += cbrc & RPMLOG_EXIT;
+ }
+
+ if (cbrc & RPMLOG_DEFAULT) {
+ cbrc = rpmlogDefault(clog, rec);
+ needexit += cbrc & RPMLOG_EXIT;
+ }
+ pthread_mutex_unlock(&serialize);
}
if (needexit)
exit(EXIT_FAILURE);
+
}
void rpmlog (int code, const char *fmt, ...)
{
unsigned pri = RPMLOG_PRI(code);
unsigned mask = RPMLOG_MASK(pri);
+ int saverec = (pri <= RPMLOG_WARNING);
va_list ap;
int n;
- if ((mask & rpmlogMask) == 0)
+ if ((mask & rpmlogSetMask(0)) == 0)
return;
va_start(ap, fmt);
@@ -222,9 +425,8 @@ void rpmlog (int code, const char *fmt, ...)
rec.pri = pri;
rec.message = msg;
- dolog(&rec);
+ dolog(&rec, saverec);
free(msg);
}
}
-
diff --git a/rpmio/rpmlog.h b/rpmio/rpmlog.h
index 0766086f4..6b0d8f70a 100644
--- a/rpmio/rpmlog.h
+++ b/rpmio/rpmlog.h
@@ -42,33 +42,6 @@ typedef enum rpmlogLvl_e {
#define RPMLOG_PRI(p) ((p) & RPMLOG_PRIMASK)
#define RPMLOG_MAKEPRI(fac, pri) ((((unsigned)(fac)) << 3) | (pri))
-#ifdef RPMLOG_NAMES
-#define _RPMLOG_NOPRI 0x10 /* the "no priority" priority */
- /* mark "facility" */
-#define _RPMLOG_MARK RPMLOG_MAKEPRI(RPMLOG_NFACILITIES, 0)
-typedef struct _rpmcode {
- const char *c_name;
- int c_val;
-} RPMCODE;
-
-RPMCODE rpmprioritynames[] =
- {
- { "alert", RPMLOG_ALERT },
- { "crit", RPMLOG_CRIT },
- { "debug", RPMLOG_DEBUG },
- { "emerg", RPMLOG_EMERG },
- { "err", RPMLOG_ERR },
- { "error", RPMLOG_ERR }, /* DEPRECATED */
- { "info", RPMLOG_INFO },
- { "none", _RPMLOG_NOPRI }, /* INTERNAL */
- { "notice", RPMLOG_NOTICE },
- { "panic", RPMLOG_EMERG }, /* DEPRECATED */
- { "warn", RPMLOG_WARNING }, /* DEPRECATED */
- { "warning",RPMLOG_WARNING },
- { NULL, -1 }
- };
-#endif
-
/** \ingroup rpmlog
* facility codes
*/
@@ -104,35 +77,6 @@ typedef enum rpmlogFac_e {
#define RPMLOG_FAC(p) (((p) & RPMLOG_FACMASK) >> 3)
-#ifdef RPMLOG_NAMES
-RPMCODE facilitynames[] =
- {
- { "auth", RPMLOG_AUTH },
- { "authpriv",RPMLOG_AUTHPRIV },
- { "cron", RPMLOG_CRON },
- { "daemon", RPMLOG_DAEMON },
- { "ftp", RPMLOG_FTP },
- { "kern", RPMLOG_KERN },
- { "lpr", RPMLOG_LPR },
- { "mail", RPMLOG_MAIL },
- { "mark", _RPMLOG_MARK }, /* INTERNAL */
- { "news", RPMLOG_NEWS },
- { "security",RPMLOG_AUTH }, /* DEPRECATED */
- { "syslog", RPMLOG_SYSLOG },
- { "user", RPMLOG_USER },
- { "uucp", RPMLOG_UUCP },
- { "local0", RPMLOG_LOCAL0 },
- { "local1", RPMLOG_LOCAL1 },
- { "local2", RPMLOG_LOCAL2 },
- { "local3", RPMLOG_LOCAL3 },
- { "local4", RPMLOG_LOCAL4 },
- { "local5", RPMLOG_LOCAL5 },
- { "local6", RPMLOG_LOCAL6 },
- { "local7", RPMLOG_LOCAL7 },
- { NULL, -1 }
- };
-#endif
-
/*
* arguments to setlogmask.
*/
diff --git a/rpmio/rpmlua.c b/rpmio/rpmlua.c
index 86d0408ed..c96fb6b67 100644
--- a/rpmio/rpmlua.c
+++ b/rpmio/rpmlua.c
@@ -7,14 +7,22 @@
#include <lposix.h>
#include <lrexlib.h>
+/* replaced in 5.1 */
#ifndef lua_open
#define lua_open() luaL_newstate()
#endif
+/* defined as lua_objlen in 5.1 */
#ifndef lua_strlen
#define lua_strlen(L,i) lua_rawlen(L, (i))
#endif
+/* deprecated in 5.1, defined as lua_objlen in 5.1 */
+#ifndef luaL_getn
+#define luaL_getn(L,i) ((int)lua_rawlen(L, i))
+#endif
+
+/* define added in 5.2 */
#ifndef lua_pushglobaltable
#define lua_pushglobaltable(L) lua_pushvalue(L, LUA_GLOBALSINDEX)
#endif
@@ -52,6 +60,9 @@ struct rpmluapb_s {
static rpmlua globalLuaState = NULL;
+static char *(*nextFileFunc)(void *) = NULL;
+static void *nextFileFuncParam = NULL;
+
static int luaopen_rpm(lua_State *L);
static int rpm_print(lua_State *L);
@@ -204,6 +215,12 @@ static int pushvar(lua_State *L, rpmluavType type, void *value)
return ret;
}
+void rpmluaSetNextFileFunc(char *(*func)(void *), void *funcParam)
+{
+ nextFileFunc = func;
+ nextFileFuncParam = funcParam;
+}
+
void rpmluaSetVar(rpmlua _lua, rpmluav var)
{
INITSTATE(_lua, lua);
@@ -518,6 +535,8 @@ int rpmluaRunScript(rpmlua _lua, const char *script, const char *name)
int ret = 0;
if (name == NULL)
name = "<lua>";
+ if (script == NULL)
+ script = "";
if (luaL_loadbuffer(L, script, strlen(script), name) != 0) {
rpmlog(RPMLOG_ERR, _("invalid syntax in lua script: %s\n"),
lua_tostring(L, -1));
@@ -648,7 +667,9 @@ static int rpm_b64decode(lua_State *L)
static int rpm_expand(lua_State *L)
{
const char *str = luaL_checkstring(L, 1);
- char *val = rpmExpand(str, NULL);
+ char *val = NULL;
+ if (rpmExpandMacros(NULL, str, &val, 0) < 0)
+ return luaL_error(L, "error expanding macro");
lua_pushstring(L, val);
free(val);
return 1;
@@ -657,16 +678,42 @@ static int rpm_expand(lua_State *L)
static int rpm_define(lua_State *L)
{
const char *str = luaL_checkstring(L, 1);
- (void) rpmDefineMacro(NULL, str, 0);
+ if (rpmDefineMacro(NULL, str, 0))
+ return luaL_error(L, "error defining macro");
+ return 0;
+}
+
+static int rpm_undefine(lua_State *L)
+{
+ const char *str = luaL_checkstring(L, 1);
+ rpmPopMacro(NULL, str);
return 0;
}
+static int rpm_load(lua_State *L)
+{
+ const char *str = luaL_checkstring(L, 1);
+ int rc = rpmLoadMacroFile(NULL, str);
+ lua_pushnumber(L, rc);
+ return 1;
+}
+
static int rpm_interactive(lua_State *L)
{
_rpmluaInteractive(L);
return 0;
}
+static int rpm_next_file(lua_State *L)
+{
+ if (nextFileFunc)
+ lua_pushstring(L, nextFileFunc(nextFileFuncParam));
+ else
+ lua_pushstring(L, NULL);
+
+ return 1;
+}
+
typedef struct rpmluaHookData_s {
lua_State *L;
int funcRef;
@@ -853,10 +900,13 @@ static const luaL_Reg rpmlib[] = {
{"b64decode", rpm_b64decode},
{"expand", rpm_expand},
{"define", rpm_define},
+ {"undefine", rpm_undefine},
+ {"load", rpm_load},
{"register", rpm_register},
{"unregister", rpm_unregister},
{"call", rpm_call},
{"interactive", rpm_interactive},
+ {"next_file", rpm_next_file},
{NULL, NULL}
};
diff --git a/rpmio/rpmlua.h b/rpmio/rpmlua.h
index 7298ed57d..935b892bc 100644
--- a/rpmio/rpmlua.h
+++ b/rpmio/rpmlua.h
@@ -62,6 +62,8 @@ void rpmluaSetData(rpmlua lua, const char *key, const void *data);
char *rpmluaPopPrintBuffer(rpmlua lua);
void rpmluaPushPrintBuffer(rpmlua lua);
+void rpmluaSetNextFileFunc(char *(*func)(void *), void *funcParam);
+
void rpmluaGetVar(rpmlua lua, rpmluav var);
void rpmluaSetVar(rpmlua lua, rpmluav var);
void rpmluaDelVar(rpmlua lua, const char *key, ...);
diff --git a/rpmio/rpmmacro.h b/rpmio/rpmmacro.h
index 765c78c6d..a31beb76a 100644
--- a/rpmio/rpmmacro.h
+++ b/rpmio/rpmmacro.h
@@ -3,6 +3,8 @@
/** \ingroup rpmio
* \file rpmio/rpmmacro.h
+ *
+ * Macro API
*/
#include <stdio.h>
@@ -43,6 +45,10 @@ extern const char * macrofiles;
#define RMIL_OLDSPEC -1
#define RMIL_GLOBAL 0
+/* Deprecated compatibility wrappers */
+#define addMacro(_mc, _n, _o, _b, _l) rpmPushMacro(_mc, _n, _o, _b, _l)
+#define delMacro(_mc, _n) rpmPopMacro(_mc, _n)
+
/** \ingroup rpmmacro
* Print macros to file stream.
* @param mc macro context (NULL uses global context).
@@ -53,37 +59,35 @@ void rpmDumpMacroTable (rpmMacroContext mc,
/** \ingroup rpmmacro
* Expand macro into buffer.
- * @deprecated Use rpmExpand().
- * @todo Eliminate from API.
- * @param spec cookie (unused)
* @param mc macro context (NULL uses global context).
- * @retval sbuf input macro to expand, output expansion
- * @param slen size of buffer
- * @return 0 on success
+ * @param sbuf input macro to expand
+ * @param obuf macro expansion (malloc'ed)
+ * @param flags flags (currently unused)
+ * @return negative on failure
*/
-int expandMacros (void * spec, rpmMacroContext mc,
- char * sbuf,
- size_t slen);
+int rpmExpandMacros (rpmMacroContext mc, const char * sbuf,
+ char ** obuf, int flags);
/** \ingroup rpmmacro
- * Add macro to context.
- * @deprecated Use rpmDefineMacro().
+ * Push macro to context.
* @param mc macro context (NULL uses global context).
* @param n macro name
- * @param o macro paramaters
+ * @param o macro parameters
* @param b macro body
* @param level macro recursion level (0 is entry API)
+ * @return 0 on success
*/
-void addMacro (rpmMacroContext mc, const char * n,
+int rpmPushMacro (rpmMacroContext mc, const char * n,
const char * o,
const char * b, int level);
/** \ingroup rpmmacro
- * Delete macro from context.
+ * Pop macro from context.
* @param mc macro context (NULL uses global context).
* @param n macro name
+ * @return 0 on success
*/
-void delMacro (rpmMacroContext mc, const char * n);
+int rpmPopMacro (rpmMacroContext mc, const char * n);
/** \ingroup rpmmacro
* Define macro in context.
diff --git a/rpmio/rpmpgp.c b/rpmio/rpmpgp.c
index e70cf706b..061751a4d 100644
--- a/rpmio/rpmpgp.c
+++ b/rpmio/rpmpgp.c
@@ -248,6 +248,19 @@ static void pgpPrtVal(const char * pre, pgpValTbl vs, uint8_t val)
fprintf(stderr, "%s(%u)", pgpValStr(vs, val), (unsigned)val);
}
+static void pgpPrtTime(const char * pre, const uint8_t *p, size_t plen)
+{
+ if (!_print) return;
+ if (pre && *pre)
+ fprintf(stderr, "%s", pre);
+ if (plen == 4) {
+ time_t t = pgpGrab(p, plen);
+ fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t);
+ } else {
+ pgpPrtHex("", p+1, plen-1);
+ }
+}
+
/** \ingroup rpmpgp
* Return hex formatted representation of a multiprecision integer.
* @param p bytes
@@ -384,15 +397,24 @@ unsigned int pgpCRC(const uint8_t *octets, size_t len)
return crc & 0xffffff;
}
+static int pgpVersion(const uint8_t *h, size_t hlen, uint8_t *version)
+{
+ if (hlen < 1)
+ return -1;
+
+ *version = h[0];
+ return 0;
+}
+
static int pgpPrtSubType(const uint8_t *h, size_t hlen, pgpSigType sigtype,
pgpDigParams _digp)
{
const uint8_t *p = h;
- size_t plen, i;
+ size_t plen = 0, i;
while (hlen > 0) {
i = pgpLen(p, hlen, &plen);
- if (i == 0 || i + plen > hlen)
+ if (i == 0 || plen < 1 || i + plen > hlen)
break;
p += i;
@@ -423,23 +445,22 @@ static int pgpPrtSubType(const uint8_t *h, size_t hlen, pgpSigType sigtype,
if (!(_digp->saved & PGPDIG_SAVED_TIME) &&
(sigtype == PGPSIGTYPE_POSITIVE_CERT || sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT || sigtype == PGPSIGTYPE_STANDALONE))
{
+ if (plen-1 != sizeof(_digp->time))
+ break;
_digp->saved |= PGPDIG_SAVED_TIME;
- memcpy(_digp->time, p+1, sizeof(_digp->time));
+ _digp->time = pgpGrab(p+1, sizeof(_digp->time));
}
case PGPSUBTYPE_SIG_EXPIRE_TIME:
case PGPSUBTYPE_KEY_EXPIRE_TIME:
- if ((plen - 1) == 4) {
- time_t t = pgpGrab(p+1, plen-1);
- if (_print)
- fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t);
- } else
- pgpPrtHex("", p+1, plen-1);
+ pgpPrtTime(" ", p+1, plen-1);
break;
case PGPSUBTYPE_ISSUER_KEYID: /* issuer key ID */
if (!(_digp->saved & PGPDIG_SAVED_ID) &&
(sigtype == PGPSIGTYPE_POSITIVE_CERT || sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT || sigtype == PGPSIGTYPE_STANDALONE))
{
+ if (plen-1 != sizeof(_digp->signid))
+ break;
_digp->saved |= PGPDIG_SAVED_ID;
memcpy(_digp->signid, p+1, sizeof(_digp->signid));
}
@@ -499,11 +520,15 @@ static int pgpPrtSigParams(pgpTag tag, uint8_t pubkey_algo, uint8_t sigtype,
int i;
pgpDigAlg sigalg = pgpSignatureNew(pubkey_algo);
- for (i = 0; p < pend && i < sigalg->mpis; i++, p += pgpMpiLen(p)) {
+ for (i = 0; i < sigalg->mpis && p + 2 <= pend; i++) {
+ int mpil = pgpMpiLen(p);
+ if (p + mpil > pend)
+ break;
if (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT) {
- if (sigalg->setmpi(sigalg, i, p, pend))
+ if (sigalg->setmpi(sigalg, i, p))
break;
}
+ p += mpil;
}
/* Does the size and number of MPI's match our expectations? */
@@ -519,18 +544,33 @@ static int pgpPrtSigParams(pgpTag tag, uint8_t pubkey_algo, uint8_t sigtype,
return rc;
}
+static int pgpGet(const uint8_t *s, size_t nbytes, const uint8_t *send,
+ unsigned int *valp)
+{
+ int rc = -1;
+
+ if (s + nbytes <= send) {
+ *valp = pgpGrab(s, nbytes);
+ rc = 0;
+ }
+
+ return rc;
+}
+
static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
pgpDigParams _digp)
{
- uint8_t version = h[0];
+ uint8_t version = 0;
uint8_t * p;
- size_t plen;
- int rc;
+ unsigned int plen;
+ int rc = 1;
+
+ if (pgpVersion(h, hlen, &version))
+ return rc;
switch (version) {
case 3:
{ pgpPktSigV3 v = (pgpPktSigV3)h;
- time_t t;
if (hlen <= sizeof(*v) || v->hashlen != 5)
return 1;
@@ -540,9 +580,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
pgpPrtVal(" ", pgpHashTbl, v->hash_algo);
pgpPrtVal(" ", pgpSigTypeTbl, v->sigtype);
pgpPrtNL();
- t = pgpGrab(v->time, sizeof(v->time));
- if (_print)
- fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t);
+ pgpPrtTime(" ", v->time, sizeof(v->time));
pgpPrtNL();
pgpPrtHex(" signer keyid", v->signid, sizeof(v->signid));
plen = pgpGrab(v->signhash16, sizeof(v->signhash16));
@@ -554,7 +592,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
_digp->hashlen = v->hashlen;
_digp->sigtype = v->sigtype;
_digp->hash = memcpy(xmalloc(v->hashlen), &v->sigtype, v->hashlen);
- memcpy(_digp->time, v->time, sizeof(_digp->time));
+ _digp->time = pgpGrab(v->time, sizeof(v->time));
memcpy(_digp->signid, v->signid, sizeof(_digp->signid));
_digp->pubkey_algo = v->pubkey_algo;
_digp->hash_algo = v->hash_algo;
@@ -577,7 +615,8 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
pgpPrtNL();
p = &v->hashlen[0];
- plen = pgpGrab(v->hashlen, sizeof(v->hashlen));
+ if (pgpGet(v->hashlen, sizeof(v->hashlen), h + hlen, &plen))
+ return 1;
p += sizeof(v->hashlen);
if ((p + plen) > (h + hlen))
@@ -591,7 +630,8 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
return 1;
p += plen;
- plen = pgpGrab(p,2);
+ if (pgpGet(p, 2, h + hlen, &plen))
+ return 1;
p += 2;
if ((p + plen) > (h + hlen))
@@ -601,7 +641,8 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
return 1;
p += plen;
- plen = pgpGrab(p,2);
+ if (pgpGet(p, 2, h + hlen, &plen))
+ return 1;
pgpPrtHex(" signhash16", p, 2);
pgpPrtNL();
@@ -620,6 +661,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
rc = pgpPrtSigParams(tag, v->pubkey_algo, v->sigtype, p, h, hlen, _digp);
} break;
default:
+ rpmlog(RPMLOG_WARNING, _("Unsupported version of key: V%d\n"), version);
rc = 1;
break;
}
@@ -650,9 +692,13 @@ static int pgpPrtPubkeyParams(uint8_t pubkey_algo,
int i;
pgpDigAlg keyalg = pgpPubkeyNew(pubkey_algo);
- for (i = 0; p < pend && i < keyalg->mpis; i++, p += pgpMpiLen(p)) {
- if (keyalg->setmpi(keyalg, i, p, pend))
+ for (i = 0; i < keyalg->mpis && p + 2 <= pend; i++) {
+ int mpil = pgpMpiLen(p);
+ if (p + mpil > pend)
+ break;
+ if (keyalg->setmpi(keyalg, i, p))
break;
+ p += mpil;
}
/* Does the size and number of MPI's match our expectations? */
@@ -660,7 +706,9 @@ static int pgpPrtPubkeyParams(uint8_t pubkey_algo,
rc = 0;
/* We can't handle more than one key at a time */
- if (rc == 0 && keyp->alg == NULL && keyp->tag == PGPTAG_PUBLIC_KEY)
+ if (rc == 0 && keyp->alg == NULL && (keyp->tag == PGPTAG_PUBLIC_KEY ||
+ keyp->tag == PGPTAG_PUBLIC_SUBKEY))
+
keyp->alg = keyalg;
else
pgpDigAlgFree(keyalg);
@@ -671,11 +719,13 @@ static int pgpPrtPubkeyParams(uint8_t pubkey_algo,
static int pgpPrtKey(pgpTag tag, const uint8_t *h, size_t hlen,
pgpDigParams _digp)
{
- uint8_t version = *h;
+ uint8_t version = 0;
const uint8_t * p = NULL;
- time_t t;
int rc = 1;
+ if (pgpVersion(h, hlen, &version))
+ return rc;
+
/* We only permit V4 keys, V3 keys are long long since deprecated */
switch (version) {
case 4:
@@ -684,14 +734,13 @@ static int pgpPrtKey(pgpTag tag, const uint8_t *h, size_t hlen,
if (hlen > sizeof(*v)) {
pgpPrtVal("V4 ", pgpTagTbl, tag);
pgpPrtVal(" ", pgpPubkeyTbl, v->pubkey_algo);
- t = pgpGrab(v->time, sizeof(v->time));
- if (_print)
- fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t);
+ pgpPrtTime(" ", v->time, sizeof(v->time));
pgpPrtNL();
- if (_digp->tag == tag) {
+ /* If _digp->hash is not NULL then signature is already loaded */
+ if (_digp->hash == NULL) {
_digp->version = v->version;
- memcpy(_digp->time, v->time, sizeof(_digp->time));
+ _digp->time = pgpGrab(v->time, sizeof(v->time));
_digp->pubkey_algo = v->pubkey_algo;
}
@@ -699,6 +748,8 @@ static int pgpPrtKey(pgpTag tag, const uint8_t *h, size_t hlen,
rc = pgpPrtPubkeyParams(v->pubkey_algo, p, h, hlen, _digp);
}
} break;
+ default:
+ rpmlog(RPMLOG_WARNING, _("Unsupported version of key: V%d\n"), h[0]);
}
return rc;
}
@@ -716,14 +767,19 @@ static int pgpPrtUserID(pgpTag tag, const uint8_t *h, size_t hlen,
return 0;
}
-static int getFingerprint(const uint8_t *h, size_t hlen, pgpKeyID_t keyid)
+int pgpPubkeyFingerprint(const uint8_t *h, size_t hlen,
+ uint8_t **fp, size_t *fplen)
{
int rc = -1; /* assume failure */
const uint8_t *se;
const uint8_t *pend = h + hlen;
+ uint8_t version = 0;
+
+ if (pgpVersion(h, hlen, &version))
+ return rc;
/* We only permit V4 keys, V3 keys are long long since deprecated */
- switch (h[0]) {
+ switch (version) {
case 4:
{ pgpPktKeyV4 v = (pgpPktKeyV4) (h);
int mpis = -1;
@@ -747,8 +803,8 @@ static int getFingerprint(const uint8_t *h, size_t hlen, pgpKeyID_t keyid)
/* Does the size and number of MPI's match our expectations? */
if (se == pend && mpis == 0) {
DIGEST_CTX ctx = rpmDigestInit(PGPHASHALGO_SHA1, RPMDIGEST_NONE);
- uint8_t * d = NULL;
- size_t dlen;
+ uint8_t *d = NULL;
+ size_t dlen = 0;
int i = se - h;
uint8_t in[3] = { 0x99, (i >> 8), i };
@@ -756,42 +812,42 @@ static int getFingerprint(const uint8_t *h, size_t hlen, pgpKeyID_t keyid)
(void) rpmDigestUpdate(ctx, h, i);
(void) rpmDigestFinal(ctx, (void **)&d, &dlen, 0);
- if (d) {
- memcpy(keyid, (d + (dlen-8)), 8);
- free(d);
+ if (dlen == 20) {
rc = 0;
+ *fp = d;
+ *fplen = dlen;
+ } else {
+ free(d);
}
}
} break;
+ default:
+ rpmlog(RPMLOG_WARNING, _("Unsupported version of key: V%d\n"), version);
}
return rc;
}
-int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen, pgpKeyID_t keyid)
+static int getKeyID(const uint8_t *h, size_t hlen, pgpKeyID_t keyid)
+{
+ uint8_t *fp = NULL;
+ size_t fplen = 0;
+ int rc = pgpPubkeyFingerprint(h, hlen, &fp, &fplen);
+ if (fp && fplen > 8) {
+ memcpy(keyid, (fp + (fplen-8)), 8);
+ free(fp);
+ }
+ return rc;
+}
+
+int pgpPubkeyKeyID(const uint8_t * pkt, size_t pktlen, pgpKeyID_t keyid)
{
struct pgpPkt p;
if (decodePkt(pkt, pktlen, &p))
return -1;
- return getFingerprint(p.body, p.blen, keyid);
-}
-
-int pgpExtractPubkeyFingerprint(const char * b64pkt, pgpKeyID_t keyid)
-{
- uint8_t * pkt;
- size_t pktlen;
- int rc = -1; /* assume failure */
-
- if (rpmBase64Decode(b64pkt, (void **)&pkt, &pktlen) == 0) {
- if (pgpPubkeyFingerprint(pkt, pktlen, keyid) == 0) {
- /* if there ever was a bizarre return code for success... */
- rc = 8;
- }
- free(pkt);
- }
- return rc;
+ return getKeyID(p.body, p.blen, keyid);
}
static int pgpPrtPkt(struct pgpPkt *p, pgpDigParams _digp)
@@ -803,8 +859,8 @@ static int pgpPrtPkt(struct pgpPkt *p, pgpDigParams _digp)
rc = pgpPrtSig(p->tag, p->body, p->blen, _digp);
break;
case PGPTAG_PUBLIC_KEY:
- /* Get the public key fingerprint. */
- if (!getFingerprint(p->body, p->blen, _digp->signid))
+ /* Get the public key Key ID. */
+ if (!getKeyID(p->body, p->blen, _digp->signid))
_digp->saved |= PGPDIG_SAVED_ID;
else
memset(_digp->signid, 0, sizeof(_digp->signid));
@@ -813,12 +869,14 @@ static int pgpPrtPkt(struct pgpPkt *p, pgpDigParams _digp)
case PGPTAG_USER_ID:
rc = pgpPrtUserID(p->tag, p->body, p->blen, _digp);
break;
+ case PGPTAG_RESERVED:
+ rc = -1;
+ break;
case PGPTAG_COMMENT:
case PGPTAG_COMMENT_OLD:
case PGPTAG_PUBLIC_SUBKEY:
case PGPTAG_SECRET_KEY:
case PGPTAG_SECRET_SUBKEY:
- case PGPTAG_RESERVED:
case PGPTAG_PUBLIC_SESSION_KEY:
case PGPTAG_SYMMETRIC_SESSION_KEY:
case PGPTAG_COMPRESSED_DATA:
@@ -903,6 +961,8 @@ int pgpDigParamsCmp(pgpDigParams p1, pgpDigParams p2)
int rc = 1; /* assume different, eg if either is NULL */
if (p1 && p2) {
/* XXX Should we compare something else too? */
+ if (p1->tag != p2->tag)
+ goto exit;
if (p1->hash_algo != p2->hash_algo)
goto exit;
if (p1->pubkey_algo != p2->pubkey_algo)
@@ -913,6 +973,8 @@ int pgpDigParamsCmp(pgpDigParams p1, pgpDigParams p2)
goto exit;
if (memcmp(p1->signid, p2->signid, sizeof(p1->signid)) != 0)
goto exit;
+ if (p1->userid && p2->userid && strcmp(p1->userid, p2->userid) != 0)
+ goto exit;
/* Parameters match ... at least for our purposes */
rc = 0;
@@ -975,6 +1037,63 @@ int pgpPrtParams(const uint8_t * pkts, size_t pktlen, unsigned int pkttype,
return rc;
}
+int pgpPrtParamsSubkeys(const uint8_t *pkts, size_t pktlen,
+ pgpDigParams mainkey, pgpDigParams **subkeys,
+ int *subkeysCount)
+{
+ const uint8_t *p = pkts;
+ const uint8_t *pend = pkts + pktlen;
+ pgpDigParams *digps = NULL;
+ int count = 0;
+ int alloced = 10;
+ struct pgpPkt pkt;
+ int rc, i;
+
+ digps = xmalloc(alloced * sizeof(*digps));
+
+ while (p < pend) {
+ if (decodePkt(p, (pend - p), &pkt))
+ break;
+
+ p += (pkt.body - pkt.head) + pkt.blen;
+
+ if (pkt.tag == PGPTAG_PUBLIC_SUBKEY) {
+ if (count == alloced) {
+ alloced <<= 1;
+ digps = xrealloc(digps, alloced * sizeof(*digps));
+ }
+
+ digps[count] = xcalloc(1, sizeof(**digps));
+ digps[count]->tag = PGPTAG_PUBLIC_SUBKEY;
+ /* Copy UID from main key to subkey */
+ digps[count]->userid = xstrdup(mainkey->userid);
+
+ if (getKeyID(pkt.body, pkt.blen, digps[count]->signid)) {
+ pgpDigParamsFree(digps[count]);
+ continue;
+ }
+
+ if (pgpPrtKey(pkt.tag, pkt.body, pkt.blen, digps[count])) {
+ pgpDigParamsFree(digps[count]);
+ continue;
+ }
+ count++;
+ }
+ }
+ rc = (p == pend) ? 0 : -1;
+
+ if (rc == 0) {
+ *subkeys = xrealloc(digps, count * sizeof(*digps));
+ *subkeysCount = count;
+ } else {
+ for (i = 0; i < count; i++)
+ pgpDigParamsFree(digps[i]);
+ free(digps);
+ }
+
+ return rc;
+}
+
int pgpPrtPkts(const uint8_t * pkts, size_t pktlen, pgpDig dig, int printing)
{
int rc;
@@ -1230,6 +1349,29 @@ pgpArmor pgpParsePkts(const char *armor, uint8_t ** pkt, size_t * pktlen)
return ec;
}
+int pgpPubKeyCertLen(const uint8_t *pkts, size_t pktslen, size_t *certlen)
+{
+ const uint8_t *p = pkts;
+ const uint8_t *pend = pkts + pktslen;
+ struct pgpPkt pkt;
+
+ while (p < pend) {
+ if (decodePkt(p, (pend - p), &pkt))
+ return -1;
+
+ if (pkt.tag == PGPTAG_PUBLIC_KEY && pkts != p) {
+ *certlen = p - pkts;
+ return 0;
+ }
+
+ p += (pkt.body - pkt.head) + pkt.blen;
+ }
+
+ *certlen = pktslen;
+
+ return 0;
+}
+
char * pgpArmorWrap(int atype, const unsigned char * s, size_t ns)
{
char *buf = NULL, *val = NULL;
diff --git a/rpmio/rpmpgp.h b/rpmio/rpmpgp.h
index d45465636..d37a2e92c 100644
--- a/rpmio/rpmpgp.h
+++ b/rpmio/rpmpgp.h
@@ -244,14 +244,16 @@ typedef enum pgpCompressAlgo_e {
4 - Reserved for double-width SHA (experimental)
5 - MD2 "MD2"
6 - Reserved for TIGER/192 "TIGER192"
- 7 - Reserved for HAVAL (5 pass, 160-bit)
- "HAVAL-5-160"
+ 7 - Reserved for HAVAL (5 pass, 160-bit) "HAVAL-5-160"
+ 8 - SHA-256 "SHA256"
+ 9 - SHA-384 "SHA384"
+ 10 - SHA-512 "SHA512"
+ 11 - SHA-224 "SHA224"
100 to 110 - Private/Experimental algorithm.
\endverbatim
*
* Implementations MUST implement SHA-1. Implementations SHOULD
* implement MD5.
- * @todo Add SHA256.
*/
typedef enum pgpHashAlgo_e {
PGPHASHALGO_MD5 = 1, /*!< MD5 */
@@ -970,23 +972,23 @@ char * pgpHexStr(const uint8_t *p, size_t plen);
/** \ingroup rpmpgp
* Calculate OpenPGP public key fingerprint.
- * @todo V3 non-RSA public keys not implemented.
* @param pkt OpenPGP packet (i.e. PGPTAG_PUBLIC_KEY)
* @param pktlen OpenPGP packet length (no. of bytes)
- * @retval keyid public key fingerprint
- * @return 0 on sucess, else -1
+ * @retval fp public key fingerprint
+ * @retval fplen public key fingerprint length
+ * @return 0 on success, else -1
*/
int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen,
- pgpKeyID_t keyid);
+ uint8_t **fp, size_t *fplen);
/** \ingroup rpmpgp
-* Extract OpenPGP public key fingerprint from base64 encoded packet.
-* @todo V3 non-RSA public keys not implemented.
-* @param b64pkt base64 encoded openpgp packet
-* @retval keyid public key fingerprint
-* @return 8 (no. of bytes) on success, < 0 on error
-*/
-int pgpExtractPubkeyFingerprint(const char * b64pkt, pgpKeyID_t keyid);
+ * Calculate OpenPGP public key Key ID
+ * @param pkt OpenPGP packet (i.e. PGPTAG_PUBLIC_KEY)
+ * @param pktlen OpenPGP packet length (no. of bytes)
+ * @retval keyid public key Key ID
+ * @return 0 on success, else -1
+ */
+int pgpPubkeyKeyID(const uint8_t * pkt, size_t pktlen, pgpKeyID_t keyid);
/** \ingroup rpmpgp
* Parse a OpenPGP packet(s).
@@ -1000,6 +1002,18 @@ int pgpPrtParams(const uint8_t *pkts, size_t pktlen, unsigned int pkttype,
pgpDigParams * ret);
/** \ingroup rpmpgp
+ * Parse subkey parameters from OpenPGP packet(s).
+ * @param pkts OpenPGP packet(s)
+ * @param pktlen OpenPGP packet(s) length (no. of bytes)
+ * @param mainkey parameters of main key
+ * @param subkeys array of subkey parameters (alloced)
+ * @param subkeysCount count of subkeys
+ * @return -1 on error, 0 on success
+ */
+int pgpPrtParamsSubkeys(const uint8_t *pkts, size_t pktlen,
+ pgpDigParams mainkey, pgpDigParams **subkeys,
+ int *subkeysCount);
+/** \ingroup rpmpgp
* Print/parse a OpenPGP packet(s).
* @param pkts OpenPGP packet(s)
* @param pktlen OpenPGP packet(s) length (no. of bytes)
@@ -1028,6 +1042,20 @@ pgpArmor pgpReadPkts(const char * fn, uint8_t ** pkt, size_t * pktlen);
pgpArmor pgpParsePkts(const char *armor, uint8_t ** pkt, size_t * pktlen);
/** \ingroup rpmpgp
+ * Return a length of the first public key certificate in a buffer given
+ * by pkts that contains one or more certificates. A public key certificate
+ * consits of packets like Public key packet, User ID packet and so on.
+ * In a buffer every certificate starts with Public key packet and it ends
+ * with the start of the next certificate or with the end of the buffer.
+ *
+ * @param pkts pointer to a buffer with certificates
+ * @param pktslen length of the buffer with certificates
+ * @param certlen length of the first certificate in the buffer
+ * @return 0 on success
+ */
+int pgpPubKeyCertLen(const uint8_t *pkts, size_t pktslen, size_t *certlen);
+
+/** \ingroup rpmpgp
* Wrap a OpenPGP packets in ascii armor for transport.
* @param atype type of armor
* @param s binary pkt data
@@ -1187,7 +1215,8 @@ rpmDigestBundle rpmDigestBundleNew(void);
rpmDigestBundle rpmDigestBundleFree(rpmDigestBundle bundle);
/** \ingroup rpmpgp
- * Add a new type of digest to a bundle.
+ * Add a new type of digest to a bundle. Same as calling
+ * rpmDigestBundleAddID() with algo == id value.
* @param bundle digest bundle
* @param algo type of digest
* @param flags bit(s) to control digest operation
@@ -1197,6 +1226,17 @@ int rpmDigestBundleAdd(rpmDigestBundle bundle, int algo,
rpmDigestFlags flags);
/** \ingroup rpmpgp
+ * Add a new type of digest to a bundle.
+ * @param bundle digest bundle
+ * @param algo type of digest
+ * @param id id of digest (arbitrary, must be > 0)
+ * @param flags bit(s) to control digest operation
+ * @return 0 on success
+ */
+int rpmDigestBundleAddID(rpmDigestBundle bundle, int algo, int id,
+ rpmDigestFlags flags);
+
+/** \ingroup rpmpgp
* Update contexts within bundle with next plain text buffer.
* @param bundle digest bundle
* @param data next data buffer
@@ -1209,22 +1249,22 @@ int rpmDigestBundleUpdate(rpmDigestBundle bundle, const void *data, size_t len);
* Return digest from a bundle and destroy context, see rpmDigestFinal().
*
* @param bundle digest bundle
- * @param algo type of digest to return
+ * @param id id of digest to return
* @retval datap address of returned digest
* @retval lenp address of digest length
* @param asAscii return digest as ascii string?
* @return 0 on success
*/
-int rpmDigestBundleFinal(rpmDigestBundle bundle,
- int algo, void ** datap, size_t * lenp, int asAscii);
+int rpmDigestBundleFinal(rpmDigestBundle bundle, int id,
+ void ** datap, size_t * lenp, int asAscii);
/** \ingroup rpmpgp
* Duplicate a digest context from a bundle.
* @param bundle digest bundle
- * @param algo type of digest to dup
+ * @param id id of digest to dup
* @return duplicated digest context
*/
-DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int algo);
+DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int id);
#ifdef __cplusplus
}
diff --git a/rpmio/rpmsq.c b/rpmio/rpmsq.c
index bfd4db004..d157514e9 100644
--- a/rpmio/rpmsq.c
+++ b/rpmio/rpmsq.c
@@ -8,107 +8,218 @@
#include <sys/signal.h>
#include <errno.h>
#include <stdio.h>
-
-#define ADD_REF(__tbl) (__tbl)->active++
-#define SUB_REF(__tbl) --(__tbl)->active
+#include <stdlib.h>
+#include <string.h>
#include <rpm/rpmsq.h>
+#include <rpm/rpmlog.h>
#include "debug.h"
-static sigset_t rpmsqCaught;
+static __thread int disableInterruptSafety;
+static __thread sigset_t rpmsqCaught;
+static __thread sigset_t rpmsqActive;
typedef struct rpmsig_s * rpmsig;
+static void rpmsqIgn(int signum, siginfo_t *info, void *context)
+{
+}
+
+static void rpmsqTerm(int signum, siginfo_t *info, void *context)
+{
+ if (info->si_pid == 0) {
+ rpmlog(RPMLOG_DEBUG,
+ "exiting on signal %d (killed by death, eh?)\n", signum);
+ } else {
+ int lvl = (signum == SIGPIPE) ? RPMLOG_DEBUG : RPMLOG_WARNING;
+ rpmlog(lvl,
+ _("exiting on signal %d from pid %d\n"), signum, info->si_pid);
+ }
+ /* exit 128 + signum for compatibility with bash(1) */
+ exit(128 + signum);
+}
+
static struct rpmsig_s {
int signum;
+ rpmsqAction_t defhandler;
rpmsqAction_t handler;
- int active;
+ siginfo_t siginfo;
struct sigaction oact;
} rpmsigTbl[] = {
- { SIGINT, rpmsqAction },
-#define rpmsigTbl_sigint (&rpmsigTbl[0])
- { SIGQUIT, rpmsqAction },
-#define rpmsigTbl_sigquit (&rpmsigTbl[1])
- { SIGHUP, rpmsqAction },
-#define rpmsigTbl_sighup (&rpmsigTbl[3])
- { SIGTERM, rpmsqAction },
-#define rpmsigTbl_sigterm (&rpmsigTbl[4])
- { SIGPIPE, rpmsqAction },
-#define rpmsigTbl_sigpipe (&rpmsigTbl[5])
- { -1, NULL },
+ { SIGINT, rpmsqTerm, NULL },
+ { SIGQUIT, rpmsqTerm, NULL },
+ { SIGHUP, rpmsqTerm, NULL },
+ { SIGTERM, rpmsqTerm, NULL },
+ { SIGPIPE, rpmsqTerm, NULL },
+ { -1, NULL, NULL },
};
+static int rpmsigGet(int signum, struct rpmsig_s **sig)
+{
+ for (rpmsig tbl = rpmsigTbl; tbl->signum >= 0; tbl++) {
+ if (tbl->signum == signum) {
+ *sig = tbl;
+ return 1;
+ }
+ }
+ return 0;
+}
+
int rpmsqIsCaught(int signum)
{
return sigismember(&rpmsqCaught, signum);
}
-#ifdef SA_SIGINFO
-void rpmsqAction(int signum, siginfo_t * info, void * context)
-#else
-void rpmsqAction(int signum)
-#endif
+static void rpmsqHandler(int signum, siginfo_t * info, void * context)
{
int save = errno;
- rpmsig tbl;
-
- for (tbl = rpmsigTbl; tbl->signum >= 0; tbl++) {
- if (tbl->signum != signum)
- continue;
- (void) sigaddset(&rpmsqCaught, signum);
- break;
+ if (sigismember(&rpmsqActive, signum)) {
+ if (!sigismember(&rpmsqCaught, signum)) {
+ rpmsig sig = NULL;
+ if (rpmsigGet(signum, &sig)) {
+ (void) sigaddset(&rpmsqCaught, signum);
+ memcpy(&sig->siginfo, info, sizeof(*info));
+ }
+ }
}
+
errno = save;
}
-int rpmsqEnable(int signum, rpmsqAction_t handler)
+rpmsqAction_t rpmsqSetAction(int signum, rpmsqAction_t handler)
{
- int tblsignum = (signum >= 0 ? signum : -signum);
- struct sigaction sa;
- rpmsig tbl;
- int ret = -1;
+ rpmsig sig = NULL;
+ rpmsqAction_t oh = RPMSQ_ERR;
- for (tbl = rpmsigTbl; tbl->signum >= 0; tbl++) {
- if (tblsignum != tbl->signum)
- continue;
+ if (rpmsigGet(signum, &sig)) {
+ oh = sig->handler;
+ sig->handler = (handler == RPMSQ_IGN) ? rpmsqIgn : handler;
+ }
+ return oh;
+}
- if (signum >= 0) { /* Enable. */
- if (ADD_REF(tbl) <= 0) {
- (void) sigdelset(&rpmsqCaught, tbl->signum);
-
- /* XXX Don't set a signal handler if already SIG_IGN */
- (void) sigaction(tbl->signum, NULL, &tbl->oact);
- if (tbl->oact.sa_handler == SIG_IGN)
- continue;
-
- (void) sigemptyset (&sa.sa_mask);
-#ifdef SA_SIGINFO
- sa.sa_flags = SA_SIGINFO;
-#else
- sa.sa_flags = 0;
-#endif
- sa.sa_sigaction = (handler != NULL ? handler : tbl->handler);
- if (sigaction(tbl->signum, &sa, &tbl->oact) < 0) {
- SUB_REF(tbl);
- break;
- }
- tbl->active = 1; /* XXX just in case */
- if (handler != NULL)
- tbl->handler = handler;
- }
- } else { /* Disable. */
- if (SUB_REF(tbl) <= 0) {
- if (sigaction(tbl->signum, &tbl->oact, NULL) < 0)
- break;
- tbl->active = 0; /* XXX just in case */
- tbl->handler = (handler != NULL ? handler : rpmsqAction);
+int rpmsqActivate(int state)
+{
+ sigset_t newMask, oldMask;
+
+ if (disableInterruptSafety)
+ return 0;
+
+ (void) sigfillset(&newMask);
+ (void) pthread_sigmask(SIG_BLOCK, &newMask, &oldMask);
+
+ if (state) {
+ struct sigaction sa;
+ for (rpmsig tbl = rpmsigTbl; tbl->signum >= 0; tbl++) {
+ sigdelset(&rpmsqCaught, tbl->signum);
+ memset(&tbl->siginfo, 0, sizeof(tbl->siginfo));
+
+ /* XXX Don't set a signal handler if already SIG_IGN */
+ sigaction(tbl->signum, NULL, &tbl->oact);
+ if (tbl->oact.sa_handler == SIG_IGN)
+ continue;
+
+ sigemptyset (&sa.sa_mask);
+ sa.sa_flags = SA_SIGINFO;
+ sa.sa_sigaction = rpmsqHandler;
+ if (sigaction(tbl->signum, &sa, &tbl->oact) == 0)
+ sigaddset(&rpmsqActive, tbl->signum);
+ }
+ } else {
+ for (rpmsig tbl = rpmsigTbl; tbl->signum >= 0; tbl++) {
+ if (!sigismember(&rpmsqActive, tbl->signum))
+ continue;
+ if (sigaction(tbl->signum, &tbl->oact, NULL) == 0) {
+ sigdelset(&rpmsqActive, tbl->signum);
+ sigdelset(&rpmsqCaught, tbl->signum);
+ memset(&tbl->siginfo, 0, sizeof(tbl->siginfo));
}
}
- ret = tbl->active;
- break;
}
+ pthread_sigmask(SIG_SETMASK, &oldMask, NULL);
+ return 0;
+}
+
+int rpmsqPoll(void)
+{
+ sigset_t newMask, oldMask;
+ int n = 0;
+
+ /* block all signals while processing the queue */
+ (void) sigfillset(&newMask);
+ (void) pthread_sigmask(SIG_BLOCK, &newMask, &oldMask);
+
+ for (rpmsig tbl = rpmsigTbl; tbl->signum >= 0; tbl++) {
+ /* honor blocked signals in polling too */
+ if (sigismember(&oldMask, tbl->signum))
+ continue;
+ if (sigismember(&rpmsqCaught, tbl->signum)) {
+ rpmsqAction_t handler = (tbl->handler != NULL) ? tbl->handler :
+ tbl->defhandler;
+ /* delete signal before running handler to prevent recursing */
+ sigdelset(&rpmsqCaught, tbl->signum);
+ handler(tbl->signum, &tbl->siginfo, NULL);
+ memset(&tbl->siginfo, 0, sizeof(tbl->siginfo));
+ n++;
+ }
+ }
+ pthread_sigmask(SIG_SETMASK, &oldMask, NULL);
+ return n;
+}
+
+int rpmsqBlock(int op)
+{
+ static __thread sigset_t oldMask;
+ static __thread int blocked = 0;
+ sigset_t newMask;
+ int ret = 0;
+
+ if (op == SIG_BLOCK) {
+ blocked++;
+ if (blocked == 1) {
+ sigfillset(&newMask);
+ sigdelset(&newMask, SIGABRT);
+ sigdelset(&newMask, SIGBUS);
+ sigdelset(&newMask, SIGFPE);
+ sigdelset(&newMask, SIGILL);
+ sigdelset(&newMask, SIGSEGV);
+ sigdelset(&newMask, SIGTSTP);
+ ret = pthread_sigmask(SIG_BLOCK, &newMask, &oldMask);
+ }
+ } else if (op == SIG_UNBLOCK) {
+ blocked--;
+ if (blocked == 0) {
+ ret = pthread_sigmask(SIG_SETMASK, &oldMask, NULL);
+ rpmsqPoll();
+ } else if (blocked < 0) {
+ blocked = 0;
+ ret = -1;
+ }
+ }
+
return ret;
}
+/** \ingroup rpmio
+ *
+ * By default, librpm will trap various unix signals such as SIGINT and SIGTERM,
+ * in order to avoid process exit while locks are held or a transaction is being
+ * performed. However, there exist tools that operate on non-running roots (traditionally
+ * build systems such as mock), as well as deployment tools such as rpm-ostree.
+ *
+ * These tools are more robust against interruption - typically they
+ * will just throw away the partially constructed root. This function
+ * is designed for use by those tools, so an operator can happily
+ * press Control-C.
+ *
+ * It's recommended to call this once only at process startup if this
+ * behavior is desired (and to then avoid using librpm against "live"
+ * databases), because currently signal handlers will not be retroactively
+ * applied if a database is open.
+ */
+void rpmsqSetInterruptSafety(int on)
+{
+ disableInterruptSafety = !on;
+}
diff --git a/rpmio/rpmsq.h b/rpmio/rpmsq.h
index 00a1a72cf..23206457c 100644
--- a/rpmio/rpmsq.h
+++ b/rpmio/rpmsq.h
@@ -4,6 +4,7 @@
/** \ingroup rpmio
* \file rpmio/rpmsq.h
*
+ * Signal Queue API
*/
#include <rpm/rpmsw.h>
#include <signal.h>
@@ -18,11 +19,14 @@ extern "C" {
* @param info (siginfo_t) signal info
* @param context signal context
*/
-#ifdef SA_SIGINFO
typedef void (*rpmsqAction_t) (int signum, siginfo_t * info, void * context);
-#else
-typedef void (*rpmsqAction_t) (int signum);
-#endif
+
+/** \ingroup rpmsq
+ * SIG_DFL, SIG_IGN and SIG_ERR counterparts
+ */
+#define RPMSQ_DFL ((rpmsqAction_t)0)
+#define RPMSQ_IGN ((rpmsqAction_t)1)
+#define RPMSQ_ERR ((rpmsqAction_t)-1)
/** \ingroup rpmsq
* Test if given signal has been caught (while signals blocked).
@@ -33,24 +37,36 @@ typedef void (*rpmsqAction_t) (int signum);
int rpmsqIsCaught(int signum);
/** \ingroup rpmsq
- * Default signal handler.
+ * Activate (or disable) the signal queue.
+ * @param state 1 to enable, 0 to disable
+ * @return 0 on success, negative on error
+ */
+int rpmsqActivate(int state);
+
+/** \ingroup rpmsq
+ * Set or delete a signal handler for a signal.
* @param signum signal number
- * @param info (siginfo_t) signal info
- * @param context signal context
+ * @param handler signal handler or NULL to delete
+ * @return previous handler, RPMSQ_ERR on error
*/
-#ifdef SA_SIGINFO
-void rpmsqAction(int signum, siginfo_t * info, void * context);
-#else
-void rpmsqAction(int signum);
-#endif
+rpmsqAction_t rpmsqSetAction(int signum, rpmsqAction_t handler);
/** \ingroup rpmsq
- * Enable or disable a signal handler.
- * @param signum signal to enable (or disable if negative)
- * @param handler sa_sigaction handler (or NULL to use rpmsqHandler())
- * @return no. of refs, -1 on error
+ * Block or unblock (almost) all signals.
+ * The operation is "reference counted" so the calls can be nested,
+ * and signals are only unblocked when the reference count falls to zero.
+ * @param op SIG_BLOCK/SIG_UNBLOCK
+ * @return 0 on success, -1 on error
*/
-int rpmsqEnable(int signum, rpmsqAction_t handler);
+int rpmsqBlock(int op);
+
+/** \ingroup rpmsq
+ * Poll for caught signals, executing their handlers.
+ * @return no. active signals found
+ */
+int rpmsqPoll(void);
+
+void rpmsqSetInterruptSafety(int on);
#ifdef __cplusplus
}
diff --git a/rpmio/rpmstrpool.c b/rpmio/rpmstrpool.c
index 742afaa22..30a57eb10 100644
--- a/rpmio/rpmstrpool.c
+++ b/rpmio/rpmstrpool.c
@@ -27,7 +27,7 @@ struct poolHash_s {
};
struct rpmstrPool_s {
- char ** offs; /* pointers into data area */
+ const char ** offs; /* pointers into data area */
rpmsid offs_size; /* largest offset index */;
rpmsid offs_alloced; /* offsets allocation size */
@@ -35,6 +35,7 @@ struct rpmstrPool_s {
size_t chunks_size; /* current chunk */
size_t chunks_allocated; /* allocated size of the chunks array */
size_t chunk_allocated; /* size of the current chunk */
+ size_t chunk_used; /* usage of the current chunk */
poolHash hash; /* string -> sid hash table */
int frozen; /* are new id additions allowed? */
@@ -137,7 +138,7 @@ static void poolHashAddHEntry(rpmstrPool pool, const char * key, unsigned int ke
{
poolHash ht = pool->hash;
- /* keep load factor inbetween 0.25 and 0.5 */
+ /* keep load factor between 0.25 and 0.5 */
if (2*(ht->keyCount) > ht->numBuckets) {
poolHashResize(pool, ht->numBuckets * 2);
}
@@ -219,7 +220,7 @@ static void rpmstrPoolRehash(rpmstrPool pool)
pool->hash = poolHashFree(pool->hash);
pool->hash = poolHashCreate(sizehint);
- for (int i = 1; i < pool->offs_size; i++)
+ for (int i = 1; i <= pool->offs_size; i++)
poolHashAddEntry(pool, rpmstrPoolStr(pool, i), i);
}
@@ -234,8 +235,8 @@ rpmstrPool rpmstrPoolCreate(void)
pool->chunks = xcalloc(pool->chunks_allocated, sizeof(*pool->chunks));
pool->chunks_size = 1;
pool->chunk_allocated = STRDATA_CHUNK;
- pool->offs[1] = xcalloc(1, pool->chunk_allocated);
- pool->chunks[pool->chunks_size] = pool->offs[1];
+ pool->chunks[pool->chunks_size] = xcalloc(1, pool->chunk_allocated);
+ pool->offs[1] = pool->chunks[pool->chunks_size];
rpmstrPoolRehash(pool);
pool->nrefs = 1;
@@ -296,43 +297,40 @@ static rpmsid rpmstrPoolPut(rpmstrPool pool, const char *s, size_t slen, unsigne
{
char *t = NULL;
size_t ssize = slen + 1;
- size_t chunk_used;
pool->offs_size += 1;
- /* need one extra for end of string */
- /* and one extra to mark the end of the chunk */
- if (pool->offs_alloced <= pool->offs_size + 2) {
+ if (pool->offs_alloced <= pool->offs_size) {
pool->offs_alloced += STROFFS_CHUNK;
pool->offs = xrealloc(pool->offs,
pool->offs_alloced * sizeof(*pool->offs));
}
- chunk_used = pool->offs[pool->offs_size] - pool->chunks[pool->chunks_size];
- if (ssize + 1 > pool->chunk_allocated - chunk_used) {
- /* check size of ->chunks */
+ /* Do we need a new chunk to store the string? */
+ if (ssize > pool->chunk_allocated - pool->chunk_used) {
pool->chunks_size += 1;
+ /* Grow chunks array if needed */
if (pool->chunks_size >= pool->chunks_allocated) {
pool->chunks_allocated += pool->chunks_allocated;
pool->chunks = xrealloc(pool->chunks,
pool->chunks_allocated * sizeof(*pool->chunks));
}
- /* Check if string is bigger than chunks */
+ /* Ensure the string fits in the new chunk we're about to allocate */
if (ssize > pool->chunk_allocated) {
pool->chunk_allocated = 2 * ssize;
}
- /* Dummy entry for end of last string*/
- pool->offs_size += 1;
-
- pool->offs[pool->offs_size] = xcalloc(1, pool->chunk_allocated);
- pool->chunks[pool->chunks_size] = pool->offs[pool->offs_size];
+ pool->chunks[pool->chunks_size] = xcalloc(1, pool->chunk_allocated);
+ pool->chunk_used = 0;
}
- t = memcpy(pool->offs[pool->offs_size], s, slen);
+ /* Copy the string into current chunk, ensure termination */
+ t = memcpy(pool->chunks[pool->chunks_size] + pool->chunk_used, s, slen);
t[slen] = '\0';
- pool->offs[pool->offs_size+1] = t + ssize;
+ pool->chunk_used += ssize;
+ /* Actually add the string to the pool */
+ pool->offs[pool->offs_size] = t;
poolHashAddHEntry(pool, t, hash, pool->offs_size);
return pool->offs_size;
@@ -406,8 +404,8 @@ const char * rpmstrPoolStr(rpmstrPool pool, rpmsid sid)
size_t rpmstrPoolStrlen(rpmstrPool pool, rpmsid sid)
{
size_t slen = 0;
- if (pool && sid <= pool->offs_size) {
- slen = pool->offs[sid+1] - pool->offs[sid] - 1;
+ if (pool && sid > 0 && sid <= pool->offs_size) {
+ slen = strlen(pool->offs[sid]);
}
return slen;
}
diff --git a/rpmio/rpmstrpool.h b/rpmio/rpmstrpool.h
index 0db07bb40..11c946973 100644
--- a/rpmio/rpmstrpool.h
+++ b/rpmio/rpmstrpool.h
@@ -1,6 +1,13 @@
#ifndef _RPMSTRPOOL_H
#define _RPMSTRPOOL_H
+/** \ingroup rpmstrpool
+ * \file rpmio/rpmstrpool.h
+ *
+ * String pools manipulation helper functions
+ *
+ */
+
#include <rpm/rpmtypes.h>
#ifdef __cplusplus
@@ -80,11 +87,11 @@ const char * rpmstrPoolStr(rpmstrPool pool, rpmsid sid);
/** \ingroup rpmstrpool
* Return length of a string by its pool id. The result is equal to
- * calling strlen() on a string retrieved through rpmstrPoolStr() but
- * runs in constant time regardless of the length of the string.
+ * calling strlen() on a string retrieved through rpmstrPoolStr(), but
+ * the pool might be able to optimize the calculation.
* @param pool string pool
* @param sid pool id of a string
- * @return length of the string
+ * @return length of the string, 0 for invalid pool or id
*/
size_t rpmstrPoolStrlen(rpmstrPool pool, rpmsid sid);
diff --git a/rpmio/rpmsw.h b/rpmio/rpmsw.h
index 7c285e784..61d6fe317 100644
--- a/rpmio/rpmsw.h
+++ b/rpmio/rpmsw.h
@@ -3,6 +3,8 @@
/** \ingroup rpmio
* \file rpmio/rpmsw.h
+ *
+ * Statistics API
*/
#include <unistd.h>
diff --git a/rpmio/rpmurl.h b/rpmio/rpmurl.h
index e820e95e7..588c95df1 100644
--- a/rpmio/rpmurl.h
+++ b/rpmio/rpmurl.h
@@ -3,6 +3,8 @@
/** \ingroup rpmio
* \file rpmio/rpmurl.h
+ *
+ * A couple utils for URL Manipulation
*/
#ifdef __cplusplus
diff --git a/rpmio/rpmutil.h b/rpmio/rpmutil.h
index 68a21f980..9e8a25d0f 100644
--- a/rpmio/rpmutil.h
+++ b/rpmio/rpmutil.h
@@ -3,8 +3,9 @@
#include <unistd.h>
-/*
- * Miscellanous utility macros:
+/** \file rpmio/rpmutil.h
+ *
+ * Miscellaneous utility macros:
* - portability wrappers for various gcc extensions like __attribute__()
* - ...
*
diff --git a/rpmio/stubs.c b/rpmio/stubs.c
deleted file mode 100644
index 694306e47..000000000
--- a/rpmio/stubs.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * \file rpmio/stubs.c
- */
-
-/* XXX Portable shared libraries require rpmlib to contain these functions. */
-
-#include "system.h"
-
-#if !defined(HAVE_STPCPY)
-#include "misc/stpcpy.c"
-#endif
-
-#if !defined(HAVE_STPNCPY)
-#include "misc/stpncpy.c"
-#endif
-
-#include "misc/fnmatch.h"
-#include "misc/fnmatch.c"
diff --git a/rpmkeys.c b/rpmkeys.c
index fa4e4d865..2b60a729e 100644
--- a/rpmkeys.c
+++ b/rpmkeys.c
@@ -5,10 +5,6 @@
#include "cliutils.h"
#include "debug.h"
-#if !defined(__GLIBC__) && !defined(__APPLE__)
-char ** environ = NULL;
-#endif
-
enum modes {
MODE_CHECKSIG = (1 << 0),
MODE_IMPORTKEY = (1 << 1),
@@ -49,10 +45,14 @@ static struct poptOption optionsTable[] = {
int main(int argc, char *argv[])
{
int ec = EXIT_FAILURE;
- poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+ poptContext optCon = NULL;
rpmts ts = rpmtsCreate();
ARGV_const_t args = NULL;
+
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+ optCon = rpmcliInit(argc, argv, optionsTable);
+
if (argc < 2) {
printUsage(optCon, stderr, 0);
goto exit;
diff --git a/rpmpopt.in b/rpmpopt.in
index 92656e270..f8ce35f22 100644
--- a/rpmpopt.in
+++ b/rpmpopt.in
@@ -61,27 +61,25 @@ rpm alias --obsoletes --qf \
rpm alias --provides --qf \
"[%|VERBOSE?{%{PROVIDEFLAGS:deptype}: }:{}|%{PROVIDENEVRS}\n]" \
--POPTdesc=$"list capabilities that this package provides"
+rpm alias -P --provides
rpm alias --requires --qf \
"[%|VERBOSE?{%{REQUIREFLAGS:deptype}: }:{}|%{REQUIRENEVRS}\n]" \
--POPTdesc=$"list capabilities required by package(s)"
rpm alias -R --requires
-rpm alias --suggests --qf \
- "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
- --POPTdesc=$"list capabilities this package suggests"
-
-rpm alias --recommends --qf \
- "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
- --POPTdesc=$"list capabilities this package recommends"
-
-rpm alias --enhances --qf \
- "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
- --POPTdesc=$"list capabilities this package enhances"
-
-rpm alias --supplements --qf \
- "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
- --POPTdesc=$"list capabilities this package supplements"
+rpm alias --recommends --qf \
+ "[%|VERBOSE?{%{RECOMMENDFLAGS:deptype}: }:{}|%{RECOMMENDNEVRS}\n]" \
+ --POPTdesc=$"list capabilities recommended by package(s)"
+rpm alias --suggests --qf \
+ "[%|VERBOSE?{%{SUGGESTFLAGS:deptype}: }:{}|%{SUGGESTNEVRS}\n]" \
+ --POPTdesc=$"list capabilities suggested by package(s)"
+rpm alias --supplements --qf \
+ "[%|VERBOSE?{%{SUPPLEMENTFLAGS:deptype}: }:{}|%{SUPPLEMENTNEVRS}\n]" \
+ --POPTdesc=$"list capabilities supplemented by package(s)"
+rpm alias --enhances --qf \
+ "[%|VERBOSE?{%{ENHANCEFLAGS:deptype}: }:{}|%{ENHANCENEVRS}\n]" \
+ --POPTdesc=$"list capabilities enhanced by package(s)"
rpm alias --info --qf '\
Name : %{NAME}\n\
@@ -101,16 +99,17 @@ Relocations : %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
%|PACKAGER?{Packager : %{PACKAGER}\n}|\
%|VENDOR?{Vendor : %{VENDOR}\n}|\
%|URL?{URL : %{URL}\n}|\
-%|VCS?{VCS : %{VCS}\n}|\
%|BUGURL?{Bug URL : %{BUGURL}\n}|\
Summary : %{SUMMARY}\n\
-Description :\n%{DESCRIPTION}\n\
-Distribution: %{DISTRIBUTION}\n' \
+Description :\n%{DESCRIPTION}\n' \
--POPTdesc=$"list descriptive information from package(s)"
rpm alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
--POPTdesc=$"list change logs for this package"
+rpm alias --changes --qf '[* %{CHANGELOGTIME:date} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
+ --POPTdesc=$"list changes for this package with full time stamps"
+
rpm alias --xml --qf '[%{*:xml}\n]' \
--POPTdesc=$"list metadata in xml"
@@ -120,8 +119,16 @@ rpm alias --triggerscripts --qf '\
rpm alias --triggers --triggerscripts \
--POPTdesc=$"list trigger scriptlets from package(s)"
+rpm alias --filetriggerscripts --qf '\
+[filetrigger%{FILETRIGGERTYPE} scriptlet (using %{FILETRIGGERSCRIPTPROG}) -- \
+%{FILETRIGGERCONDS}\n%{FILETRIGGERSCRIPTS}\n]\
+[transfiletrigger%{TRANSFILETRIGGERTYPE} scriptlet (using %{TRANSFILETRIGGERSCRIPTPROG}) -- \
+%{TRANSFILETRIGGERCONDS}\n%{TRANSFILETRIGGERSCRIPTS}\n]'
+rpm alias --filetriggers --filetriggerscripts \
+ --POPTdesc=$"list filetrigger scriptlets from package(s)"
+
rpm alias --last --qf '%|INSTALLTIME?{%{INSTALLTIME}}:{000000000}| %{NVRA} %|INSTALLTIME?{%{INSTALLTIME:date}}:{(not installed)}|\n' \
- --pipe "sort -r -n | sed 's,^[0-9]\+ ,,' | awk '{printf(\"%-45s %-s\n\", $1, substr($0,length($1)+2))}' " \
+ --pipe "LC_NUMERIC=C sort -r -n | sed 's,^[0-9]\+ ,,' | awk '{printf(\"%-45s %-s\n\", $1, substr($0,length($1)+2))}' " \
--POPTdesc=$"list package(s) by install time, most recent first"
rpm alias --dupes --qf '%|SOURCERPM?{%{name}.%{arch}}:{%|ARCH?{%{name}}:{%{name}-%{version}}|}|\n' --pipe "sort | uniq -d" \
@@ -131,28 +138,26 @@ rpm alias --filesbypkg --qf '[%-25{=NAME} %{FILENAMES}\n]' \
--POPTdesc=$"list all files from each package"
rpm alias --fileclass --qf '[%{FILENAMES}\t%{FILECLASS}\n]' \
- --POPTdesc=$"list file names with classes"
+ --POPTdesc=$"list file names with their classes"
rpm alias --filecolor --qf '[%{FILENAMES}\t%{FILECOLORS}\n]' \
- --POPTdesc=$"list file names with colors"
-
-rpm alias --fscontext --qf '[%{FILENAMES}\n]' \
- --pipe "xargs ls --scontext | awk '{printf(\"%s %s\n\", $2, $1)}'" \
- --POPTdesc=$"list file names with security context from file system"
+ --POPTdesc=$"list file names with their colors"
rpm alias --fileprovide --qf '[%{FILENAMES}\t%{FILEPROVIDE}\n]' \
- --POPTdesc=$"list file names with provides"
+ --POPTdesc=$"list file names with their provides"
rpm alias --filerequire --qf '[%{FILENAMES}\t%{FILEREQUIRE}\n]' \
--POPTdesc=$"list file names with requires"
rpm alias --filecaps --qf '[%{FILENAMES}\t%|FILECAPS?{%{FILECAPS}}|\n]' \
- --POPTdesc=$"list file names with POSIX1.e capabilities"
+ --POPTdesc=$"list file names with their POSIX1.e capabilities"
# colon separated i18n domains to use as PO catalogue lookaside for
# retrieving header group/description/summary.
rpm alias --i18ndomains --define '_i18ndomains !#:+'
+rpm alias --color --define '_color_output !#:+'
+
#==============================================================================
# [--ftpport <port>] "port number of ftp server (or proxy)"
rpm alias --ftpport --define '_httpport !#:+'
@@ -162,11 +167,14 @@ rpm alias --ftpproxy --define '_httpproxy !#:+'
rpm alias --httpport --define '_httpport !#:+'
# [--httpproxy <host>] "hostname or IP of http proxy"
rpm alias --httpproxy --define '_httpproxy !#:+'
+# [--trace] "trace macro expansion"
+rpm alias --trace --eval '%trace'
# Minimally preserve commonly used switches from cli split-up
rpm exec --addsign rpmsign --addsign
rpm exec --delsign rpmsign --delsign
rpm exec --resign rpmsign --resign
+#rpm exec --signfiles rpmsign --signfiles
rpm exec --checksig rpmkeys --checksig
rpm exec -K rpmkeys --checksig
rpm exec --import rpmkeys --import
@@ -192,8 +200,10 @@ rpmbuild alias --buildpolicy --define '__os_install_post %{_rpmconfigdir}/brp-!#
--POPTargs=$"<policy>"
# Minimally preserve rpmbuild's --sign functionality
rpmbuild alias --sign \
- --pipe "grep '.*: .*\.rpm$'|cut -d: -f2|xargs -r rpm --addsign" \
- --POPTdesc=$"generate GPG signature"
+ --pipe 'rpm --addsign `grep ".*: .*\.rpm$"|cut -d: -f2` < "/dev/"`ps -p $$ -o tty | tail -n 1`' \
+ --POPTdesc=$"generate GPG signature (deprecated, use command rpmsign instead)"
+# [--trace] "trace macro expansion"
+rpmbuild alias --trace --eval '%trace'
rpmsign alias --key-id --define '_gpg_name !#:+' \
--POPTdesc=$"key id/name to sign with" \
@@ -218,5 +228,7 @@ rpmspec alias --buildconflicts --srpm --conflicts \
--POPTdesc=$"list capabilities conflicting with build of this package"
rpmspec alias --buildrequires --srpm --requires \
--POPTdesc=$"list capabilities required to build this package"
+# [--trace] "trace macro expansion"
+rpmspec alias --trace --eval '%trace'
# \endverbatim
#*/
diff --git a/rpmqv.c b/rpmqv.c
index da5f2ca13..f029d8192 100644
--- a/rpmqv.c
+++ b/rpmqv.c
@@ -1,5 +1,4 @@
#include "system.h"
-const char *__progname;
#include <rpm/rpmcli.h>
#include <rpm/rpmlib.h> /* RPMSIGTAG, rpmReadPackageFile .. */
@@ -88,12 +87,14 @@ int main(int argc, char *argv[])
int i;
#endif
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
optCon = rpmcliInit(argc, argv, optionsTable);
/* Set the major mode based on argv[0] */
#ifdef IAM_RPMQV
- if (rstreq(__progname, "rpmquery")) bigMode = MODE_QUERY;
- if (rstreq(__progname, "rpmverify")) bigMode = MODE_VERIFY;
+ if (rstreq(xgetprogname(), "rpmquery")) bigMode = MODE_QUERY;
+ if (rstreq(xgetprogname(), "rpmverify")) bigMode = MODE_VERIFY;
#endif
#if defined(IAM_RPMQV)
@@ -135,7 +136,8 @@ int main(int argc, char *argv[])
#ifdef IAM_RPMEIU
if (bigMode == MODE_UNKNOWN || (bigMode & MODES_IE))
{ int iflags = (ia->installInterfaceFlags &
- (INSTALL_UPGRADE|INSTALL_FRESHEN|INSTALL_INSTALL));
+ (INSTALL_UPGRADE|INSTALL_FRESHEN|
+ INSTALL_INSTALL|INSTALL_REINSTALL));
int eflags = (ia->installInterfaceFlags & INSTALL_ERASE);
if (iflags & eflags)
@@ -310,6 +312,8 @@ int main(int argc, char *argv[])
verifyFlags &= ~qva->qva_flags;
qva->qva_flags = (rpmQueryFlags) verifyFlags;
+ rpmtsSetFlags(ts, rpmtsFlags(ts) | (ia->transFlags & RPMTRANS_FLAG_NOPLUGINS));
+
if (!poptPeekArg(optCon) && !(qva->qva_source == RPMQV_ALL))
argerror(_("no arguments given for verify"));
ec = rpmcliVerify(ts, qva, (ARGV_const_t) poptGetArgs(optCon));
@@ -325,7 +329,7 @@ int main(int argc, char *argv[])
case MODE_ERASE:
#endif
case MODE_UNKNOWN:
- if (poptPeekArg(optCon) != NULL || argc <= 1 || rpmIsVerbose()) {
+ if (poptPeekArg(optCon) != NULL || argc <= 1) {
printUsage(optCon, stderr, 0);
ec = argc;
}
@@ -350,5 +354,7 @@ int main(int argc, char *argv[])
rpmcliFini(optCon);
+ rpmlog(RPMLOG_DEBUG, "Exit status: %d\n", ec);
+
return RETVAL(ec);
}
diff --git a/rpmrc.in b/rpmrc.in
index da65a80ff..b211bd2c5 100644
--- a/rpmrc.in
+++ b/rpmrc.in
@@ -59,16 +59,29 @@ optflags: hppa2.0 -O2 -g -mpa-risc-1-0
optflags: mips -O2 -g
optflags: mipsel -O2 -g
+optflags: mips64 -O2 -g
+optflags: mips64el -O2 -g
+
+optflags: mipsr6 -O2 -g
+optflags: mipsr6el -O2 -g
+optflags: mips64r6 -O2 -g
+optflags: mips64r6el -O2 -g
optflags: armv3l -O2 -g -march=armv3
optflags: armv4b -O2 -g -march=armv4
optflags: armv4l -O2 -g -march=armv4
optflags: armv4tl -O2 -g -march=armv4t
+optflags: armv5tl -O2 -g -march=armv5t
optflags: armv5tel -O2 -g -march=armv5te
optflags: armv5tejl -O2 -g -march=armv5te
optflags: armv6l -O2 -g -march=armv6
+optflags: armv6hl -O2 -g -march=armv6 -mfloat-abi=hard -mfpu=vfp
+
optflags: armv7l -O2 -g -march=armv7-a -mtune=cortex-a8 -mlittle-endian -mfpu=vfpv3 -mfloat-abi=softfp -D__SOFTFP__
optflags: armv7hl -O2 -g -march=armv7-a -mfloat-abi=hard -mthumb -mabi=aapcs-linux
+optflags: armv7hnl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=neon
+
+optflags: m68k -O2 -g -fomit-frame-pointer
optflags: atarist -O2 -g -fomit-frame-pointer
optflags: atariste -O2 -g -fomit-frame-pointer
@@ -86,6 +99,7 @@ optflags: sh4 -O2 -g -mieee
optflags: sh4a -O2 -g -mieee
optflags: aarch64 -O2 -g
+optflags: riscv64 -O2 -g
#############################################################
# Architecture colors
@@ -98,6 +112,7 @@ archcolor: sparc64 2
archcolor: sparcv9 2
archcolor: ppc 1
archcolor: ppc64 2
+archcolor: ppc64le 2
archcolor: armv3l 1
archcolor: armv4b 1
@@ -109,6 +124,18 @@ archcolor: armv6l 1
archcolor: armv7l 1
archcolor: armv7hl 1
+archcolor: mips 1
+archcolor: mipsel 1
+archcolor: mips64 2
+archcolor: mips64el 2
+
+archcolor: mipsr6 1
+archcolor: mipsr6el 1
+archcolor: mips64r6 2
+archcolor: mips64r6el 2
+
+archcolor: m68k 1
+
archcolor: m68kmint 1
archcolor: s390 1
@@ -123,6 +150,7 @@ archcolor: sh4 1
archcolor: aarch64 2
+archcolor: riscv64 2
#############################################################
# Canonical arch names and numbers
@@ -160,6 +188,7 @@ arch_canon: sparcv9: sparcv9 3
arch_canon: sparcv9v: sparcv9v 3
# This is really a place holder for MIPS.
arch_canon: mips: mips 4
+arch_canon: mipsel: mipsel 4
arch_canon: ppc: ppc 5
arch_canon: ppc8260: ppc8260 5
@@ -173,16 +202,20 @@ arch_canon: IP: sgi 7
arch_canon: rs6000: rs6000 8
arch_canon: ia64: ia64 9
-arch_canon: mipsel: mipsel 11
+arch_canon: mips64: mips64 11
+arch_canon: mips64el: mips64el 11
arch_canon: armv3l: armv3l 12
arch_canon: armv4b: armv4b 12
arch_canon: armv4l: armv4l 12
+arch_canon: armv5tl: armv5tl 12
arch_canon: armv5tel: armv5tel 12
arch_canon: armv5tejl: armv5tejl 12
arch_canon: armv6l: armv6l 12
+arch_canon: armv6hl: armv6hl 12
arch_canon: armv7l: armv7l 12
arch_canon: armv7hl: armv7hl 12
+arch_canon: armv7hnl: armv7hnl 12
arch_canon: m68kmint: m68kmint 13
arch_canon: atarist: m68kmint 13
@@ -198,6 +231,7 @@ arch_canon: i370: i370 14
arch_canon: s390x: s390x 15
arch_canon: ppc64: ppc64 16
+arch_canon: ppc64le: ppc64le 16
arch_canon: ppc64pseries: ppc64pseries 16
arch_canon: ppc64iseries: ppc64iseries 16
arch_canon: ppc64p7: ppc64p7 16
@@ -208,6 +242,13 @@ arch_canon: sh4: sh4 17
arch_canon: sh4a: sh4a 17
arch_canon: xtensa: xtensa 18
arch_canon: aarch64: aarch64 19
+arch_canon: mipsr6: mipsr6 20
+arch_canon: mipsr6el: mipsr6el 20
+arch_canon: mips64r6: mips64r6 21
+arch_canon: mips64r6el: mips64r6el 21
+
+arch_canon: riscv: riscv64 22
+arch_canon: riscv64: riscv64 22
#############################################################
# Canonical OS names and numbers
@@ -285,18 +326,34 @@ buildarchtranslate: ppcpseries: ppc
buildarchtranslate: ppc64iseries: ppc64
buildarchtranslate: ppc64pseries: ppc64
buildarchtranslate: ppc64p7: ppc64
-buildarchtranslate: powerpc64: ppc64
+buildarchtranslate: ppc64le: ppc64le
buildarchtranslate: armv3l: armv3l
buildarchtranslate: armv4b: armv4b
buildarchtranslate: armv4l: armv4l
buildarchtranslate: armv4tl: armv4tl
+buildarchtranslate: armv5tl: armv5tl
buildarchtranslate: armv5tel: armv5tel
buildarchtranslate: armv5tejl: armv5tejl
buildarchtranslate: armv6l: armv6l
+buildarchtranslate: armv6hl: armv6hl
buildarchtranslate: armv7l: armv7l
buildarchtranslate: armv7hl: armv7hl
+buildarchtranslate: armv7hnl: armv7hnl
+
+buildarchtranslate: mips: mips
+buildarchtranslate: mipsel: mipsel
+buildarchtranslate: mips64: mips64
+buildarchtranslate: mips64el: mips64el
+
+buildarchtranslate: mipsr6: mipsr6
+buildarchtranslate: mipsr6el: mipsr6el
+buildarchtranslate: mips64r6: mips64r6
+buildarchtranslate: mips64r6el: mips64r6el
+
+buildarchtranslate: m68k: m68k
+
buildarchtranslate: atarist: m68kmint
buildarchtranslate: atariste: m68kmint
buildarchtranslate: ataritt: m68kmint
@@ -318,6 +375,7 @@ buildarchtranslate: sh3: sh3
buildarchtranslate: sh4: sh4
buildarchtranslate: sh4a: sh4
+
buildarchtranslate: parisc: hppa
buildarchtranslate: hppa2.0: hppa
buildarchtranslate: hppa64: hppa
@@ -327,6 +385,8 @@ buildarchtranslate: armv5tel: armv4l
buildarchtranslate: armv5b: armv4b
buildarchtranslate: armv5teb: armv4b
buildarchtranslate: aarch64: aarch64
+buildarchtranslate: riscv: riscv64
+buildarchtranslate: riscv64: riscv64
#############################################################
# Architecture compatibility
@@ -366,6 +426,7 @@ arch_compat: rs6000: noarch fat
arch_compat: ppc64pseries: ppc64
arch_compat: ppc64iseries: ppc64
arch_compat: ppc64p7: ppc64
+arch_compat: ppc64le: noarch fat
arch_compat: sun4c: sparc
arch_compat: sun4d: sparc
@@ -380,6 +441,13 @@ arch_compat: sparc: noarch
arch_compat: mips: noarch
arch_compat: mipsel: noarch
+arch_compat: mips64: mips
+arch_compat: mips64el: mipsel
+
+arch_compat: mipsr6: noarch
+arch_compat: mipsr6el: noarch
+arch_compat: mips64r6: mipsr6
+arch_compat: mips64r6el: mipsr6el
arch_compat: hppa2.0: hppa1.2
arch_compat: hppa1.2: hppa1.1
@@ -395,11 +463,16 @@ arch_compat: armv7hl: armv7l
arch_compat: armv7l: armv6l
arch_compat: armv6l: armv5tejl
arch_compat: armv5tejl: armv5tel
-arch_compat: armv5tel: armv5l
-arch_compat: armv5l: armv4tl
+arch_compat: armv5tel: armv5tl
+arch_compat: armv5tl: armv4tl
arch_compat: armv4tl: armv4l
arch_compat: armv4l: armv3l
arch_compat: armv3l: noarch
+arch_compat: armv7hnl: armv7hl
+arch_compat: armv7hl: armv6hl
+arch_compat: armv6hl: noarch
+
+arch_compat: m68k: noarch
arch_compat: atarist: m68kmint noarch
arch_compat: atariste: m68kmint noarch
@@ -425,6 +498,8 @@ arch_compat: sh4a: sh4
arch_compat: aarch64: noarch
+arch_compat: riscv: noarch
+arch_compat: riscv64: noarch
os_compat: IRIX64: IRIX
os_compat: solaris2.7: solaris2.3 solaris2.4 solaris2.5 solaris2.6
os_compat: solaris2.6: solaris2.3 solaris2.4 solaris2.5
@@ -458,6 +533,10 @@ buildarch_compat: ia64: noarch
buildarch_compat: aarch64: noarch
+
+buildarch_compat: riscv: noarch
+buildarch_compat: riscv64: noarch
+
buildarch_compat: athlon: i686
buildarch_compat: geode: i586
buildarch_compat: pentium4: pentium3
@@ -494,23 +573,36 @@ buildarch_compat: ppciseries: noarch
buildarch_compat: ppcpseries: noarch
buildarch_compat: ppc: noarch fat
buildarch_compat: ppc64: noarch fat
+buildarch_compat: ppc64le: noarch fat
buildarch_compat: ppc64pseries: ppc64
buildarch_compat: ppc64iseries: ppc64
buildarch_compat: ppc64p7: ppc64
buildarch_compat: mips: noarch
buildarch_compat: mipsel: noarch
+buildarch_compat: mips64: noarch
+buildarch_compat: mips64el: noarch
+
+buildarch_compat: mipsr6: noarch
+buildarch_compat: mipsr6el: noarch
+buildarch_compat: mips64r6: noarch
+buildarch_compat: mips64r6el: noarch
buildarch_compat: armv4b: noarch
buildarch_compat: armv7hl: armv7l
buildarch_compat: armv7l: armv6l
buildarch_compat: armv6l: armv5tejl
-buildarch_compat: armv5tejl: armv5tel
-buildarch_compat: armv5tel: armv4tl
+buildarch_compat: armv5tejl: armv5tel armv5tl
+buildarch_compat: armv5tel: armv4tl armv5tl
+buildarch_compat: armv5tl: armv4tl
buildarch_compat: armv4tl: armv4l
buildarch_compat: armv4l: armv3l
buildarch_compat: armv3l: noarch
+buildarch_compat: armv7hnl: armv7hl
+buildarch_compat: armv7hl: armv6hl
+buildarch_compat: armv6hl: noarch
+
buildarch_compat: hppa2.0: hppa1.2
buildarch_compat: hppa1.2: hppa1.1
buildarch_compat: hppa1.1: hppa1.0
diff --git a/rpmsign.c b/rpmsign.c
index e29864e0b..ae86f666d 100644
--- a/rpmsign.c
+++ b/rpmsign.c
@@ -1,6 +1,7 @@
#include "system.h"
#include <errno.h>
#include <sys/wait.h>
+#include <termios.h>
#include <popt.h>
#include <rpm/rpmcli.h>
@@ -8,17 +9,21 @@
#include "cliutils.h"
#include "debug.h"
-#if !defined(__GLIBC__) && !defined(__APPLE__)
-char ** environ = NULL;
-#endif
-
enum modes {
+ MODE_NONE = 0,
MODE_ADDSIGN = (1 << 0),
MODE_RESIGN = (1 << 1),
MODE_DELSIGN = (1 << 2),
};
-static int mode = 0;
+static int mode = MODE_NONE;
+
+#ifdef WITH_IMAEVM
+static int signfiles = 0, fskpass = 0;
+static char * fileSigningKey = NULL;
+#endif
+
+static struct rpmSignArgs sargs = {NULL, 0, 0};
static struct poptOption signOptsTable[] = {
{ "addsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_ADDSIGN,
@@ -27,6 +32,15 @@ static struct poptOption signOptsTable[] = {
N_("sign package(s) (identical to --addsign)"), NULL },
{ "delsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELSIGN,
N_("delete package signatures"), NULL },
+#ifdef WITH_IMAEVM
+ { "signfiles", '\0', POPT_ARG_NONE, &signfiles, 0,
+ N_("sign package(s) files"), NULL},
+ { "fskpath", '\0', POPT_ARG_STRING, &fileSigningKey, 0,
+ N_("use file signing key <key>"),
+ N_("<key>") },
+ { "fskpass", '\0', POPT_ARG_NONE, &fskpass, 0,
+ N_("prompt for file signing key password"), NULL},
+#endif
POPT_TABLEEND
};
@@ -41,67 +55,46 @@ static struct poptOption optionsTable[] = {
POPT_TABLEEND
};
-static int checkPassPhrase(const char * passPhrase)
+#ifdef WITH_IMAEVM
+static char *get_fskpass(void)
{
- int passPhrasePipe[2];
- int pid, status;
- int rc;
- int xx;
-
- if (passPhrase == NULL)
- return -1;
-
- passPhrasePipe[0] = passPhrasePipe[1] = 0;
- xx = pipe(passPhrasePipe);
- if (!(pid = fork())) {
- char * cmd, * gpg_path;
- char *const *av;
- int fdno;
-
- xx = close(STDIN_FILENO);
- xx = close(STDOUT_FILENO);
- xx = close(passPhrasePipe[1]);
- if ((fdno = open("/dev/null", O_RDONLY)) != STDIN_FILENO) {
- xx = dup2(fdno, STDIN_FILENO);
- xx = close(fdno);
- }
- if ((fdno = open("/dev/null", O_WRONLY)) != STDOUT_FILENO) {
- xx = dup2(fdno, STDOUT_FILENO);
- xx = close(fdno);
- }
- xx = dup2(passPhrasePipe[0], 3);
-
- unsetenv("MALLOC_CHECK_");
- gpg_path = rpmExpand("%{?_gpg_path}", NULL);
-
- if (!rstreq(gpg_path, ""))
- setenv("GNUPGHOME", gpg_path, 1);
-
- cmd = rpmExpand("%{?__gpg_check_password_cmd}", NULL);
- rc = poptParseArgvString(cmd, NULL, (const char ***)&av);
- if (!rc)
- rc = execve(av[0], av+1, environ);
-
- fprintf(stderr, _("Could not exec %s: %s\n"), "gpg",
- strerror(errno));
- _exit(EXIT_FAILURE);
+ struct termios flags, tmp_flags;
+ int passlen = 64;
+ char *password = xmalloc(passlen);
+ char *pwd = NULL;
+
+ tcgetattr(fileno(stdin), &flags);
+ tmp_flags = flags;
+ tmp_flags.c_lflag &= ~ECHO;
+ tmp_flags.c_lflag |= ECHONL;
+
+ if (tcsetattr(fileno(stdin), TCSANOW, &tmp_flags) != 0) {
+ perror("tcsetattr");
+ goto exit;
}
- xx = close(passPhrasePipe[0]);
- xx = write(passPhrasePipe[1], passPhrase, strlen(passPhrase));
- xx = write(passPhrasePipe[1], "\n", 1);
- xx = close(passPhrasePipe[1]);
+ printf("PEM password: ");
+ pwd = fgets(password, passlen, stdin);
- (void) waitpid(pid, &status, 0);
+ if (tcsetattr(fileno(stdin), TCSANOW, &flags) != 0) {
+ perror("tcsetattr");
+ pwd = NULL;
+ goto exit;
+ }
- return ((WIFEXITED(status) && WEXITSTATUS(status) == 0)) ? 0 : 1;
+exit:
+ if (pwd)
+ pwd[strlen(pwd) - 1] = '\0'; /* remove newline */
+ else
+ free(password);
+ return pwd;
}
+#endif
/* TODO: permit overriding macro setup on the command line */
-static int doSign(poptContext optCon)
+static int doSign(poptContext optCon, struct rpmSignArgs *sargs)
{
int rc = EXIT_FAILURE;
- char * passPhrase = NULL;
char * name = rpmExpand("%{?_gpg_name}", NULL);
if (rstreq(name, "")) {
@@ -109,22 +102,42 @@ static int doSign(poptContext optCon)
goto exit;
}
- /* XXX FIXME: eliminate obsolete getpass() usage */
- passPhrase = getpass(_("Enter pass phrase: "));
- passPhrase = (passPhrase != NULL) ? rstrdup(passPhrase) : NULL;
- if (checkPassPhrase(passPhrase) == 0) {
- const char *arg;
- fprintf(stderr, _("Pass phrase is good.\n"));
- rc = 0;
- while ((arg = poptGetArg(optCon)) != NULL) {
- rc += rpmPkgSign(arg, NULL, passPhrase);
+#ifdef WITH_IMAEVM
+ if (fileSigningKey) {
+ rpmPushMacro(NULL, "_file_signing_key", NULL, fileSigningKey, RMIL_GLOBAL);
+ }
+
+ if (signfiles) {
+ char *fileSigningKeyPassword = NULL;
+ char *key = rpmExpand("%{?_file_signing_key}", NULL);
+ if (rstreq(key, "")) {
+ fprintf(stderr, _("You must set \"%%_file_signing_key\" in your macro file or on the command line with --fskpath\n"));
+ goto exit;
}
- } else {
- fprintf(stderr, _("Pass phrase check failed or gpg key expired\n"));
+
+ if (fskpass) {
+ fileSigningKeyPassword = get_fskpass();
+ }
+
+ if (fileSigningKeyPassword) {
+ rpmPushMacro(NULL, "_file_signing_key_password", NULL,
+ fileSigningKeyPassword, RMIL_CMDLINE);
+ memset(fileSigningKeyPassword, 0, strlen(fileSigningKeyPassword));
+ free(fileSigningKeyPassword);
+ }
+
+ sargs->signfiles = 1;
+ free(key);
+ }
+#endif
+
+ const char *arg;
+ rc = 0;
+ while ((arg = poptGetArg(optCon)) != NULL) {
+ rc += rpmPkgSign(arg, sargs);
}
exit:
- free(passPhrase);
free(name);
return rc;
}
@@ -132,9 +145,13 @@ exit:
int main(int argc, char *argv[])
{
int ec = EXIT_FAILURE;
- poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+ poptContext optCon = NULL;
const char *arg;
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
+ optCon = rpmcliInit(argc, argv, optionsTable);
+
if (argc <= 1) {
printUsage(optCon, stderr, 0);
goto exit;
@@ -144,17 +161,26 @@ int main(int argc, char *argv[])
argerror(_("no arguments given"));
}
+#ifdef WITH_IMAEVM
+ if (fileSigningKey && !signfiles) {
+ argerror(_("--fskpath may only be specified when signing files"));
+ }
+#endif
+
switch (mode) {
case MODE_ADDSIGN:
case MODE_RESIGN:
- ec = doSign(optCon);
+ ec = doSign(optCon, &sargs);
break;
case MODE_DELSIGN:
ec = 0;
while ((arg = poptGetArg(optCon)) != NULL) {
- ec += rpmPkgDelSign(arg);
+ ec += rpmPkgDelSign(arg, &sargs);
}
break;
+ case MODE_NONE:
+ printUsage(optCon, stderr, 0);
+ break;
default:
argerror(_("only one major mode may be specified"));
break;
diff --git a/rpmspec.c b/rpmspec.c
index 2027ffabf..86e3285ad 100644
--- a/rpmspec.c
+++ b/rpmspec.c
@@ -1,5 +1,4 @@
#include "system.h"
-const char *__progname;
#include <rpm/rpmcli.h>
#include <rpm/rpmbuild.h>
@@ -28,10 +27,10 @@ static struct poptOption specOptsTable[] = {
N_("query spec file(s)"), NULL },
{ "rpms", 0, POPT_ARG_VAL, &source, RPMQV_SPECRPMS,
N_("operate on binary rpms generated by spec (default)"), NULL },
+ { "builtrpms", 0, POPT_ARG_VAL, &source, RPMQV_SPECBUILTRPMS,
+ N_("operate on binary rpms that would be built from spec"), NULL },
{ "srpm", 0, POPT_ARG_VAL, &source, RPMQV_SPECSRPM,
N_("operate on source rpm generated by spec"), NULL },
- { "target", 0, POPT_ARG_STRING, &target, 0,
- N_("override target platform"), NULL },
{ "queryformat", 0, POPT_ARG_STRING, &queryformat, 0,
N_("use the following query format"), "QUERYFORMAT" },
{ "qf", 0, (POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN), &queryformat, 0,
@@ -60,6 +59,8 @@ int main(int argc, char *argv[])
poptContext optCon;
int ec = 0;
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
optCon = rpmcliInit(argc, argv, optionsTable);
if (rpmcliPipeOutput && initPipe())
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 39bdb37a6..d0949c55e 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -1,6 +1,7 @@
# Makefile for rpm scripts.
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
CLEANFILES =
@@ -10,16 +11,20 @@ EXTRA_DIST = \
brp-strip-shared brp-strip-static-archive \
check-files check-prereqs \
check-buildroot check-rpaths check-rpaths-worker \
+ debuginfo.prov \
find-debuginfo.sh find-lang.sh \
- perldeps.pl perl.prov perl.req pythondeps.sh osgideps.pl \
+ perl.prov perl.req pythondeps.sh pythondistdeps.py \
+ python-macro-helper \
rpmdb_loadcvt rpm.daily rpm.log rpm.supp rpm2cpio.sh \
- tcl.req tgpg vpkg-provides.sh \
+ tgpg vpkg-provides.sh \
+ find-requires find-provides \
find-requires.php find-provides.php \
- find-php-provides find-php-requires \
+ find-requires.ksyms find-provides.ksyms \
mono-find-requires mono-find-provides \
ocaml-find-requires.sh ocaml-find-provides.sh \
- pkgconfigdeps.sh libtooldeps.sh \
+ pkgconfigdeps.sh libtooldeps.sh metainfo.prov \
fontconfig.prov desktop-file.prov script.req \
+ sysvinitdeps.sh \
macros.perl macros.php macros.python
rpmconfig_SCRIPTS = \
@@ -29,13 +34,18 @@ rpmconfig_SCRIPTS = \
brp-strip-shared brp-strip-static-archive \
check-files check-prereqs \
check-buildroot check-rpaths check-rpaths-worker \
- find-lang.sh \
- perl.prov perl.req perldeps.pl pythondeps.sh osgideps.pl \
+ debuginfo.prov \
+ find-lang.sh find-requires find-provides \
+ perl.prov perl.req pythondeps.sh pythondistdeps.py \
+ python-macro-helper \
+ find-requires.ksyms find-provides.ksyms \
+ metainfo.prov \
mono-find-requires mono-find-provides \
pkgconfigdeps.sh libtooldeps.sh \
ocaml-find-requires.sh ocaml-find-provides.sh \
fontconfig.prov desktop-file.prov script.req \
- rpmdb_loadcvt rpm2cpio.sh tcl.req tgpg
+ sysvinitdeps.sh \
+ rpmdb_loadcvt rpm2cpio.sh tgpg
rpmconfig_DATA = \
rpm.daily rpm.log rpm.supp \
diff --git a/scripts/brp-compress b/scripts/brp-compress
index 247779e3c..e6b69a9e4 100755
--- a/scripts/brp-compress
+++ b/scripts/brp-compress
@@ -8,13 +8,13 @@ fi
cd "$RPM_BUILD_ROOT"
# Compress man pages
-COMPRESS="gzip -9 -n"
-COMPRESS_EXT=.gz
+COMPRESS=${COMPRESS:-gzip -9 -n}
+COMPRESS_EXT=${COMPRESS_EXT:-.gz}
for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \
./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \
./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \
- ./usr/share/doc/*/man/man* ./usr/lib/*/man/man*
+ ./usr/share/doc/*/man/man* ./usr/lib/*/man/man* ./usr/share/fish/man/man*
do
[ -d $d ] || continue
for f in `find $d -type f ! -name dir`
diff --git a/scripts/brp-python-bytecompile b/scripts/brp-python-bytecompile
index 333ef9482..894fa3459 100644
--- a/scripts/brp-python-bytecompile
+++ b/scripts/brp-python-bytecompile
@@ -6,12 +6,6 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
exit 0
fi
-# If we don't have a python interpreter, avoid changing anything.
-default_python=${1:-/usr/bin/python}
-if [ ! -x "$default_python" ]; then
- exit 0
-fi
-
# Figure out how deep we need to descend. We could pick an insanely high
# number and hope it's enough, but somewhere, somebody's sure to run into it.
depth=`(find "$RPM_BUILD_ROOT" -type f -name "*.py" -print0 ; echo /) | \
@@ -20,35 +14,64 @@ if [ -z "$depth" -o "$depth" -le "1" ]; then
exit 0
fi
+function python_bytecompile()
+{
+ local options=$1
+ local python_binary=$2
+ local exclude=$3
+ local python_libdir=$4
+ local depth=$5
+ local real_libdir=$6
+
+cat << EOF | $python_binary $options
+import compileall, sys, os, re
+
+python_libdir = "$python_libdir"
+depth = $depth
+real_libdir = "$real_libdir"
+build_root = "$RPM_BUILD_ROOT"
+exclude = r"$exclude"
+
+class Filter:
+ def search(self, path):
+ ret = not os.path.realpath(path).startswith(build_root)
+ if exclude:
+ ret = ret or re.search(exclude, path)
+ return ret
+
+sys.exit(not compileall.compile_dir(python_libdir, depth, real_libdir, force=1, rx=Filter(), quiet=1))
+EOF
+}
+
# .pyc/.pyo files embed a "magic" value, identifying the ABI version of Python
# bytecode that they are for.
#
-# The files below RPM_BUILD_ROOT could be targetting multiple versions of
+# The files below RPM_BUILD_ROOT could be targeting multiple versions of
# python (e.g. a single build that emits several subpackages e.g. a
# python26-foo subpackage, a python31-foo subpackage etc)
#
# Support this by assuming that below each /usr/lib/python$VERSION/, all
# .pyc/.pyo files are to be compiled for /usr/bin/python$VERSION.
#
-# For example, below /usr/lib/python2.6/, we're targetting /usr/bin/python2.6
-# and below /usr/lib/python3.1/, we're targetting /usr/bin/python3.1
+# For example, below /usr/lib/python2.6/, we're targeting /usr/bin/python2.6
+# and below /usr/lib/python3.1/, we're targeting /usr/bin/python3.1
shopt -s nullglob
-for python_libdir in "$RPM_BUILD_ROOT"/usr/lib{,64}/python[0-9].[0-9]/ ;
+for python_libdir in `find "$RPM_BUILD_ROOT" -type d|grep -E "/usr/lib(64)?/python[0-9]\.[0-9]$"`;
do
python_binary=/usr/bin/$(basename $python_libdir)
real_libdir=${python_libdir/$RPM_BUILD_ROOT/}
echo "Bytecompiling .py files below $python_libdir using $python_binary"
# Generate normal (.pyc) byte-compiled files.
- $python_binary -c 'import compileall, sys; sys.exit(not compileall.compile_dir("'"$python_libdir"'", '"$depth"', "'"$real_libdir"'", force=1, quiet=1))'
+ python_bytecompile "" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir"
if [ $? -ne 0 -a 0$errors_terminate -ne 0 ]; then
# One or more of the files had a syntax error
exit 1
fi
# Generate optimized (.pyo) byte-compiled files.
- $python_binary -O -c 'import compileall, sys; sys.exit(not compileall.compile_dir("'"$python_libdir"'", '"$depth"', "'"$real_libdir"'", force=1, quiet=1))'
+ python_bytecompile "-O" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir"
if [ $? -ne 0 -a 0$errors_terminate -ne 0 ]; then
# One or more of the files had a syntax error
exit 1
@@ -57,17 +80,22 @@ done
# Handle other locations in the filesystem using the default python
-# implementation:
+# implementation - if we have a default python interpreter
+
+default_python=${1:-/usr/bin/python}
+if [ ! -x "$default_python" ]; then
+ exit 0
+fi
# Generate normal (.pyc) byte-compiled files.
-$default_python -c 'import compileall, re, sys; sys.exit (not compileall.compile_dir("'"$RPM_BUILD_ROOT"'", '"$depth"', "/", 1, re.compile(r"'"/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]"'"), quiet=1))'
+python_bytecompile "" $default_python "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" "$RPM_BUILD_ROOT" "$depth" "/"
if [ $? -ne 0 -a 0$errors_terminate -ne 0 ]; then
# One or more of the files had a syntax error
exit 1
fi
# Generate optimized (.pyo) byte-compiled files.
-$default_python -O -c 'import compileall, re, sys; sys.exit(not compileall.compile_dir("'"$RPM_BUILD_ROOT"'", '"$depth"', "/", 1, re.compile(r"'"/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]"'"), quiet=1))' > /dev/null
+python_bytecompile "-O" $default_python "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" "$RPM_BUILD_ROOT" "$depth" "/"
if [ $? -ne 0 -a 0$errors_terminate -ne 0 ]; then
# One or more of the files had a syntax error
exit 1
diff --git a/scripts/brp-python-hardlink b/scripts/brp-python-hardlink
index f88719982..949c9c32d 100755
--- a/scripts/brp-python-hardlink
+++ b/scripts/brp-python-hardlink
@@ -5,15 +5,21 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
exit 0
fi
-# Hardlink identical *.pyc and *.pyo, originally from PLD's rpm-build-macros
-# Modified to use sha1sum instead of cmp to avoid a diffutils dependency.
-find "$RPM_BUILD_ROOT" -type f -name "*.pyc" | while read pyc ; do
- pyo="${pyc%c}o"
- if [ -f "$pyo" ] ; then
- csha="$(sha1sum -b "$pyc" | cut -d' ' -f 1)" && \
- osha="$(sha1sum -b "$pyo" | cut -d' ' -f 1)" && \
- if [ "$csha" = "$osha" ] ; then
- ln -f "$pyc" "$pyo"
- fi
- fi
+hardlink_if_same() {
+ if cmp -s "$1" "$2" ; then
+ ln -f "$1" "$2"
+ return 0
+ fi
+ return 1
+}
+
+# Hardlink identical *.pyc, *.pyo, and *.opt-[12].pyc.
+# Originally from PLD's rpm-build-macros
+find "$RPM_BUILD_ROOT" -type f -name "*.pyc" -not -name "*.opt-[12].pyc" | while read pyc ; do
+ hardlink_if_same "$pyc" "${pyc%c}o"
+ o1pyc="${pyc%pyc}opt-1.pyc"
+ hardlink_if_same "$pyc" "$o1pyc"
+ o2pyc="${pyc%pyc}opt-2.pyc"
+ hardlink_if_same "$pyc" "$o2pyc" || hardlink_if_same "$o1pyc" "$o2pyc"
done
+exit 0
diff --git a/scripts/brp-strip b/scripts/brp-strip
index 20e7c508f..e2fdc8d0f 100755
--- a/scripts/brp-strip
+++ b/scripts/brp-strip
@@ -16,6 +16,6 @@ for f in `find "$RPM_BUILD_ROOT" -type f \( -perm -0100 -or -perm -0010 -or -per
grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \
grep -v ' shared object,' | \
grep -v '/lib/modules/' | \
- sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped/\1/p'`; do
+ sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped.*/\1/p'`; do
$STRIP -g "$f" || :
done
diff --git a/scripts/brp-strip-shared b/scripts/brp-strip-shared
index e06ee4bf4..51d10d5b3 100644
--- a/scripts/brp-strip-shared
+++ b/scripts/brp-strip-shared
@@ -20,6 +20,6 @@ esac
for f in `find "$RPM_BUILD_ROOT" -type f -a -exec file {} \; | \
grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \
grep ' shared object,' | \
- sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped/\1/p'`; do
+ sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped.*/\1/p'`; do
$STRIP --strip-unneeded "$f"
done
diff --git a/scripts/check-files b/scripts/check-files
index eb2f478db..a9eeaed90 100755
--- a/scripts/check-files
+++ b/scripts/check-files
@@ -6,26 +6,27 @@
#
# filon@pld.org.pl
-RPM_BUILD_ROOT=$1
+# Get build root
+RPM_BUILD_ROOT="${1}"
-if [ ! -d "$RPM_BUILD_ROOT" ] ; then
+# Handle the case where ${RPM_BUILD_ROOT} is undefined, not a directory, etc.
+if [ ! -d "${RPM_BUILD_ROOT}" ] ; then
cat > /dev/null
+ if [ -e "${RPM_BUILD_ROOT}" ] ; then
+ echo "Error: \`${RPM_BUILD_ROOT}' is not a directory" 1>&2
+ fi
exit 1
fi
-[ "$TMPDIR" ] || TMPDIR=/tmp
-FILES_DISK=`mktemp $TMPDIR/rpmXXXXXX`
-FILES_RPM=`mktemp $TMPDIR/rpmXXXXXX`
-
-find "$RPM_BUILD_ROOT" -type f -o -type l | LC_ALL=C sort > $FILES_DISK
-LC_ALL=C sort > $FILES_RPM
+# Create temporary file listing files in the manifest
+[ -n "$TMPDIR" ] || TMPDIR="/tmp"
+FILES_DISK=`mktemp "${TMPDIR}/rpmXXXXXX"`
-diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3- |
-while read f; do
- if test "$RPM_BUILD_ROOT/usr/share/info/dir" != "$f" ; then
- echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g"
- fi
-done
+# Ensure temporary file is cleaned up when we exit
+trap "rm -f \"${FILES_DISK}\"" 0 2 3 5 10 13 15
-rm -f $FILES_DISK
-rm -f $FILES_RPM
+# Find non-directory files in the build root and compare to the manifest.
+# TODO: regex chars in last sed(1) expression should be escaped
+# Exclude /usr/share/info/dir from check-files.
+find "${RPM_BUILD_ROOT}" -type f -o -type l | LC_ALL=C sort > "${FILES_DISK}"
+LC_ALL=C sort | diff -d "${FILES_DISK}" - | sed -n -e 's|^< '"${RPM_BUILD_ROOT}"'/usr/share/info/dir$||' -e 's|^< '"${RPM_BUILD_ROOT}"'\(.*\)$| \1|gp'
diff --git a/scripts/check-rpaths-worker b/scripts/check-rpaths-worker
index 7ea4fb48a..7ea8643fe 100755
--- a/scripts/check-rpaths-worker
+++ b/scripts/check-rpaths-worker
@@ -59,7 +59,7 @@ function showHint()
*
* Examples:
* - to ignore standard and empty RPATHs, execute 'rpmbuild' like
-* \$ QA_RPATHS=\$[ 0x0001|0x0010 ] rpmbuild my-package.src.rpm
+* \$ QA_RPATHS=\$(( 0x0001|0x0010 )) rpmbuild my-package.src.rpm
* - to check existing files, set \$RPM_BUILD_ROOT and execute check-rpaths like
* \$ RPM_BUILD_ROOT=<top-dir> /usr/lib/rpm/check-rpaths
*
diff --git a/scripts/debuginfo.prov b/scripts/debuginfo.prov
index 4d99257a3..a8636c976 100644..100755
--- a/scripts/debuginfo.prov
+++ b/scripts/debuginfo.prov
@@ -1,12 +1,14 @@
#!/bin/sh
-while read instfile ; do
- case $instfile in
- */usr/lib/debug/.build-id/*.debug)
- if [ -f "$instfile" ] ; then
- BUILDID=$(echo $instfile | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]*\)/\([0-9a-f]*\)\.debug|\1\2|p')
- echo "debuginfo(build-id) = $BUILDID"
- fi
- ;;
- esac
+while read instfile; do
+ case "$instfile" in
+ */usr/lib/debug/.build-id/*.debug)
+ if [ -f "$instfile" ]; then
+ BUILDID=$(echo "$instfile" | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]\+\)/\([0-9a-f]\+\)\.debug|\1\2|p')
+ if [ -n "$BUILDID" ]; then
+ echo "debuginfo(build-id) = $BUILDID"
+ fi
+ fi
+ ;;
+ esac
done
diff --git a/scripts/desktop-file.prov b/scripts/desktop-file.prov
index 5b159ae9a..54b72801a 100755
--- a/scripts/desktop-file.prov
+++ b/scripts/desktop-file.prov
@@ -11,6 +11,8 @@ while read instfile ; do
*.desktop)
if ! grep -q '^Type=Application$' "$instfile"; then continue; fi
if ! grep -q '^Exec=' "$instfile"; then continue; fi
+ echo "application()"
+ echo "application(${instfile##*/applications/})"
mime=`grep '^MimeType=' "$instfile" | cut -d'=' -f2`
IFS=';'
for type in $mime ; do
diff --git a/scripts/find-debuginfo.sh b/scripts/find-debuginfo.sh
index c5bb4196f..3276b6dcf 100755
--- a/scripts/find-debuginfo.sh
+++ b/scripts/find-debuginfo.sh
@@ -2,15 +2,34 @@
#find-debuginfo.sh - automagically generate debug info and file list
#for inclusion in an rpm spec file.
#
-# Usage: find-debuginfo.sh [--strict-build-id] [--strip-disable] [--strip-option] [-g] [-r]
+# Usage: find-debuginfo.sh [--strict-build-id] [--strip-disable] [--strip-option] [-g] [-r] [-m] [-i] [-n]
+# [--keep-section SECTION] [--remove-section SECTION]
+# [-j N]
# [-o debugfiles.list]
+# [-S debugsourcefiles.list]
+# [--run-dwz] [--dwz-low-mem-die-limit N]
+# [--dwz-max-die-limit N]
+# [--build-id-seed SEED]
+# [--unique-debug-suffix SUFFIX]
+# [--unique-debug-src-base BASE]
# [[-l filelist]... [-p 'pattern'] -o debuginfo.list]
# [builddir]
#
-# The -g flag says to use strip -g instead of full strip on DSOs.
+# The -g flag says to use strip -g instead of full strip on DSOs or EXEs.
+# The -r flag says to use eu-strip --reloc-debug-sections.
+# Use --keep-section SECTION or --remove-section SECTION to explicitly
+# keep a (non-allocated) section in the main executable or explicitly
+# remove it into the .debug file. SECTION is an extended wildcard pattern.
+# Both options can be given more than once.
+#
# The --strict-build-id flag says to exit with failure status if
# any ELF binary processed fails to contain a build-id note.
-# The -r flag says to use eu-strip --reloc-debug-sections.
+# The -m flag says to include a .gnu_debugdata section in the main binary.
+# The -i flag says to include a .gdb_index section in the .debug file.
+# The -n flag says to not recompute the build-id.
+#
+# The -j N option will spawn N processes to do the debuginfo extraction
+# in parallel.
#
# A single -o switch before any -l or -p switches simply renames
# the primary output file from debugfiles.list to something else.
@@ -20,15 +39,47 @@
# The -p argument is an grep -E -style regexp matching the a file name,
# and must not use anchors (^ or $).
#
+# The --run-dwz flag instructs find-debuginfo.sh to run the dwz utility
+# if available, and --dwz-low-mem-die-limit and --dwz-max-die-limit
+# provide detailed limits. See dwz(1) -l and -L option for details.
+#
+# If --build-id-seed SEED is given then debugedit is called to
+# update the build-ids it finds adding the SEED as seed to recalculate
+# the build-id hash. This makes sure the build-ids in the ELF files
+# are unique between versions and releases of the same package.
+# (Use --build-id-seed "%{VERSION}-%{RELEASE}".)
+#
+# If --unique-debug-suffix SUFFIX is given then the debug files created
+# for <FILE> will be named <FILE>-<SUFFIX>.debug. This makes sure .debug
+# are unique between package version, release and architecture.
+# (Use --unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}".)
+#
+# If --unique-debug-src-base BASE is given then the source directory
+# will be called /usr/debug/src/<BASE>. This makes sure the debug source
+# directories are unique between package version, release and architecture.
+# (Use --unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}".)
+#
# All file names in switches are relative to builddir (. if not given).
#
-# With -g arg, pass it to strip on libraries.
+# Figure out where we are installed so we can call other helper scripts.
+lib_rpm_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+# With -g arg, pass it to strip on libraries or executables.
strip_g=false
# with -r arg, pass --reloc-debug-sections to eu-strip.
strip_r=false
+# keep or remove arguments to eu-strip.
+keep_remove_args=
+
+# with -m arg, add minimal debuginfo to binary.
+include_minidebug=false
+
+# with -i arg, add GDB index to .debug file.
+include_gdb_index=false
+
# Barf on missing build IDs.
strict=false
@@ -41,14 +92,58 @@ strip_option=
# With --strip-option arg for ko file, this will be used as arg. of eu-strip
strip_ko_option=
+# Do not recompute build IDs.
+no_recompute_build_id=false
+
+# DWZ parameters.
+run_dwz=false
+dwz_low_mem_die_limit=
+dwz_max_die_limit=
+
+# build id seed given by the --build-id-seed option
+build_id_seed=
+
+# Arch given by --unique-debug-arch
+unique_debug_suffix=
+
+# Base given by --unique-debug-src-base
+unique_debug_src_base=
+
+# Number of parallel jobs to spawn
+n_jobs=1
+
BUILDDIR=.
out=debugfiles.list
+srcout=
nout=0
while [ $# -gt 0 ]; do
case "$1" in
--strict-build-id)
strict=true
;;
+ --run-dwz)
+ run_dwz=true
+ ;;
+ --dwz-low-mem-die-limit)
+ dwz_low_mem_die_limit=$2
+ shift
+ ;;
+ --dwz-max-die-limit)
+ dwz_max_die_limit=$2
+ shift
+ ;;
+ --build-id-seed)
+ build_id_seed=$2
+ shift
+ ;;
+ --unique-debug-suffix)
+ unique_debug_suffix=$2
+ shift
+ ;;
+ --unique-debug-src-base)
+ unique_debug_src_base=$2
+ shift
+ ;;
--strip-disable)
strip_disable=true
;;
@@ -61,6 +156,15 @@ while [ $# -gt 0 ]; do
-g)
strip_g=true
;;
+ -m)
+ include_minidebug=true
+ ;;
+ -n)
+ no_recompute_build_id=true
+ ;;
+ -i)
+ include_gdb_index=true
+ ;;
-o)
if [ -z "${lists[$nout]}" -a -z "${ptns[$nout]}" ]; then
out=$2
@@ -81,6 +185,29 @@ while [ $# -gt 0 ]; do
-r)
strip_r=true
;;
+ --keep-section)
+ keep_remove_args="${keep_remove_args} --keep-section $2"
+ shift
+ ;;
+ --remove-section)
+ keep_remove_args="${keep_remove_args} --remove-section $2"
+ shift
+ ;;
+ -j)
+ n_jobs=$2
+ shift
+ ;;
+ -j*)
+ n_jobs=${1#-j}
+ ;;
+ --jobs)
+ n_jobs=$2
+ shift
+ ;;
+ -S)
+ srcout=$2
+ shift
+ ;;
*)
BUILDDIR=$1
shift
@@ -90,6 +217,11 @@ while [ $# -gt 0 ]; do
shift
done
+if test -n "$build_id_seed" -a "$no_recompute_build_id" = "true"; then
+ echo >&2 "*** ERROR: --build-id-seed (unique build-ids) and -n (do not recompute build-id) cannot be used together"
+ exit 2
+fi
+
i=0
while ((i < nout)); do
outs[$i]="$BUILDDIR/${outs[$i]}"
@@ -104,13 +236,14 @@ done
LISTFILE="$BUILDDIR/$out"
SOURCEFILE="$BUILDDIR/debugsources.list"
LINKSFILE="$BUILDDIR/debuglinks.list"
+ELFBINSFILE="$BUILDDIR/elfbins.list"
> "$SOURCEFILE"
> "$LISTFILE"
> "$LINKSFILE"
+> "$ELFBINSFILE"
debugdir="${RPM_BUILD_ROOT}/usr/lib/debug"
-tooldir=$(rpm --eval %{_rpmconfigdir})
strip_to_debug()
{
@@ -124,6 +257,7 @@ strip_to_debug()
$strip_r && r=--reloc-debug-sections
$strip_g && case "$(file -bi "$2")" in
application/x-sharedlib*) g=-g ;;
+ application/x-executable*) g=-g ;;
esac
case $2 in
@@ -147,6 +281,47 @@ strip_to_debug()
chmod 444 "$1" || exit
}
+add_minidebug()
+{
+ local debuginfo="$1"
+ local binary="$2"
+
+ local dynsyms=`mktemp`
+ local funcsyms=`mktemp`
+ local keep_symbols=`mktemp`
+ local mini_debuginfo=`mktemp`
+
+ # In the minisymtab we don't need the .debug_ sections (already removed
+ # by -S) but also not other non-allocated PROGBITS, NOTE or NOBITS sections.
+ # List and remove them explicitly. We do want to keep the allocated,
+ # symbol and NOBITS sections so cannot use --keep-only because that is
+ # too aggressive. Field $2 is the section name, $3 is the section type
+ # and $8 are the section flags.
+ local remove_sections=`readelf -W -S "$debuginfo" \
+ | awk '{ if (index($2,".debug_") != 1 \
+ && ($3 == "PROGBITS" || $3 == "NOTE" || $3 == "NOBITS") \
+ && index($8,"A") == 0) \
+ printf "--remove-section "$2" " }'`
+
+ # Extract the dynamic symbols from the main binary, there is no need to also have these
+ # in the normal symbol table
+ nm -D "$binary" --format=posix --defined-only | awk '{ print $1 }' | sort > "$dynsyms"
+ # Extract all the text (i.e. function) symbols from the debuginfo
+ # Use format sysv to make sure we can match against the actual ELF FUNC
+ # symbol type. The binutils nm posix format symbol type chars are
+ # ambigous for architectures that might use function descriptors.
+ nm "$debuginfo" --format=sysv --defined-only | awk -F \| '{ if ($4 ~ "FUNC") print $1 }' | sort > "$funcsyms"
+ # Keep all the function symbols not already in the dynamic symbol table
+ comm -13 "$dynsyms" "$funcsyms" > "$keep_symbols"
+ # Copy the full debuginfo, keeping only a minumal set of symbols and removing some unnecessary sections
+ objcopy -S $remove_sections --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null
+ #Inject the compressed data into the .gnu_debugdata section of the original binary
+ xz "$mini_debuginfo"
+ mini_debuginfo="${mini_debuginfo}.xz"
+ objcopy --add-section .gnu_debugdata="$mini_debuginfo" "$binary"
+ rm -f "$dynsyms" "$funcsyms" "$keep_symbols" "$mini_debuginfo"
+}
+
# Make a relative symlink to $1 called $3$2
shopt -s extglob
link_relative()
@@ -192,82 +367,10 @@ debug_link()
esac
}
-# Provide .2, .3, ... symlinks to all filename instances of this build-id.
-make_id_dup_link()
-{
- # See https://bugzilla.redhat.com/show_bug.cgi?id=641377 for the reasoning,
- # but it has seveal drawbacks as we would need to split the .1 suffixes into
- # different subpackages and it's about impossible to predict the number
- # -> perhaps later
- return
- local id="$1" file="$2" idfile
-
- local n=1
- while true; do
- idfile=".build-id/${id:0:2}/${id:2}.$n"
- [ $# -eq 3 ] && idfile="${idfile}$3"
- if [ ! -L "$RPM_BUILD_ROOT/usr/lib/debug/$idfile" ]; then
- break
- fi
- n=$[$n+1]
- done
- debug_link "$file" "/$idfile"
-}
-
-# Compare two binaries but ignore the .note.gnu.build-id section
-elfcmp()
-{
- local tmp1=$(mktemp -t ${1##*/}.XXXXXX)
- local tmp2=$(mktemp -t ${2##*/}.XXXXXX)
-
- objcopy -R .note.gnu.build-id -R .gnu_debuglink $1 $tmp1
- objcopy -R .note.gnu.build-id -R .gnu_debuglink $2 $tmp2
- cmp -s $tmp1 $tmp2
- local res=$?
- rm -f $tmp1 $tmp2
- return $res
-}
-
-# Make a build-id symlink for id $1 with suffix $3 to file $2.
-make_id_link()
-{
- local id="$1" file="$2"
- local idfile=".build-id/${id:0:2}/${id:2}"
- [ $# -eq 3 ] && idfile="${idfile}$3"
- local root_idfile="$RPM_BUILD_ROOT/usr/lib/debug/$idfile"
-
- if [ ! -L "$root_idfile" ]; then
- debug_link "$file" "/$idfile"
- return
- fi
-
- make_id_dup_link "$@"
-
- [ $# -eq 3 ] && return 0
-
- local other=$(readlink -m "$root_idfile")
- other=${other#$RPM_BUILD_ROOT}
- if cmp -s "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ||
- elfcmp "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ; then
- # Two copies. Maybe one has to be setuid or something.
- echo >&2 "*** WARNING: identical binaries are copied, not linked:"
- echo >&2 " $file"
- echo >&2 " and $other"
- else
- # This is pathological, break the build.
- echo >&2 "*** ERROR: same build ID in nonidentical files!"
- echo >&2 " $file"
- echo >&2 " and $other"
- exit 2
- fi
-}
-
get_debugfn()
{
dn=$(dirname "${1#$RPM_BUILD_ROOT}")
-# Do not strip existing .debug suffixes
- bn=$(basename "$1").debug
-
+ bn=$(basename "$1")${unique_debug_suffix}.debug
debugdn=${debugdir}${dn}
debugfn=${debugdn}/${bn}
}
@@ -277,65 +380,97 @@ set -o pipefail
strict_error=ERROR
$strict || strict_error=WARNING
+temp=$(mktemp -d ${TMPDIR:-/tmp}/find-debuginfo.XXXXXX)
+trap 'rm -rf "$temp"' EXIT
+
+# Build a list of unstripped ELF files and their hardlinks
+touch "$temp/primary"
# Strip ELF binaries (and no static libraries)
find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm /111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z |
xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' |
while read nlinks inum f; do
- case $(objdump -h $f 2>/dev/null | sed -n '/^Sections:/,$p' | egrep -o '(debug[\.a-z_]*|gnu.version)') in
+ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
*debuglink*) continue ;;
*debug*) ;;
*gnu.version*)
- echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
- continue
- ;;
+ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
+ continue
+ ;;
*) continue ;;
esac
- get_debugfn "$f"
- [ -f "${debugfn}" ] && continue
-
- # If this file has multiple links, keep track and make
- # the corresponding .debug files all links to one file too.
+ # double check that we really have an ELF file,
+ # to handle monodevelop-debugger-gdb and monodevelop-debugger-mdb
+ ftype=`/usr/bin/file $f | cut -d: -f2-`
+ case $ftype in
+ *ELF*) ;;
+ *)
+ echo "$f is not an ELF file, skipping"
+ continue
+ ;;
+ esac
if [ $nlinks -gt 1 ]; then
- eval linked=\$linked_$inum
- if [ -n "$linked" ]; then
- eval id=\$linkedid_$inum
- make_id_dup_link "$id" "$dn/$(basename $f)"
- make_id_dup_link "$id" "/usr/lib/debug$dn/$bn" .debug
- link=$debugfn
- get_debugfn "$linked"
- echo "hard linked $link to $debugfn"
- mkdir -p "$(dirname "$link")" && ln -nf "$debugfn" "$link"
+ var=seen_$inum
+ if test -n "${!var}"; then
+ echo "$inum $f" >>"$temp/linked"
continue
else
- eval linked_$inum=\$f
- echo "file $f has $[$nlinks - 1] other hard links"
+ read "$var" < <(echo 1)
fi
fi
+ echo "$nlinks $inum $f" >>"$temp/primary"
+done
+
+# Strip ELF binaries
+do_file()
+{
+ local nlinks=$1 inum=$2 f=$3 id link linked
+
+ get_debugfn "$f"
+ [ -f "${debugfn}" ] && return
echo "extracting debug info from $f"
- id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \
- echo ${DEBUGEDIT:-${tooldir}/debugedit}) -b "$RPM_BUILD_DIR" \
- -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit
- if [ $nlinks -gt 1 ]; then
- eval linkedid_$inum=\$id
+ # See also cpio SOURCEFILE copy. Directories must match up.
+ debug_base_name="$RPM_BUILD_DIR"
+ debug_dest_name="/usr/src/debug"
+ if [ ! -z "$unique_debug_src_base" ]; then
+ debug_base_name="$BUILDDIR"
+ debug_dest_name="/usr/src/debug/${unique_debug_src_base}"
fi
+ no_recompute=
+ if [ "$no_recompute_build_id" = "true" ]; then
+ no_recompute="-n"
+ fi
+ mode=$(stat -c %a "$f")
+ chmod +w "$f"
+ id=$(${lib_rpm_dir}/debugedit -b "$debug_base_name" -d "$debug_dest_name" \
+ $no_recompute -i \
+ ${build_id_seed:+--build-id-seed="$build_id_seed"} \
+ -l "$SOURCEFILE" "$f") || exit
if [ -z "$id" ]; then
echo >&2 "*** ${strict_error}: No build ID note found in $f"
$strict && exit 2
fi
- [ -x /usr/bin/gdb-add-index ] && /usr/bin/gdb-add-index "$f" > /dev/null 2>&1
+ # Add .gdb_index if requested.
+ if $include_gdb_index; then
+ if type gdb-add-index >/dev/null 2>&1; then
+ gdb-add-index "$f"
+ else
+ echo >&2 "*** ERROR: GDB index requested, but no gdb-add-index installed"
+ exit 2
+ fi
+ fi
# A binary already copied into /usr/lib/debug doesn't get stripped,
# just has its file names collected and adjusted.
case "$dn" in
/usr/lib/debug/*)
- [ -z "$id" ] || make_id_link "$id" "$dn/$(basename $f)"
- continue ;;
+ chmod $mode "$f"
+ return ;;
esac
mkdir -p "${debugdn}"
- if [ -e "${BUILDDIR}/Kconfig" ] ; then
+ if [ -e "${BUILDDIR}/Kconfig" ] ; then
mode=$(stat -c %a "$f")
chmod +w "$f"
objcopy --only-keep-debug $f $debugfn || :
@@ -370,11 +505,124 @@ while read nlinks inum f; do
fi
fi
- if [ -n "$id" ]; then
- make_id_link "$id" "$dn/$(basename $f)"
- make_id_link "$id" "/usr/lib/debug$dn/$bn" .debug
+
+ # strip -g implies we have full symtab, don't add mini symtab in that case.
+ # It only makes sense to add a minisymtab for executables and shared
+ # libraries. Other executable ELF files (like kernel modules) don't need it.
+ if [ "$include_minidebug" = "true" -a "$strip_g" = "false" ]; then
+ skip_mini=true
+ case "$(file -bi "$f")" in
+ application/x-sharedlib*) skip_mini=false ;;
+ application/x-executable*) skip_mini=false ;;
+ esac
+ $skip_mini || add_minidebug "${debugfn}" "$f"
fi
-done || exit
+
+ echo "./${f#$RPM_BUILD_ROOT}" >> "$ELFBINSFILE"
+
+ # If this file has multiple links, make the corresponding .debug files
+ # all links to one file too.
+ if [ $nlinks -gt 1 ]; then
+ grep "^$inum " "$temp/linked" | while read inum linked; do
+ link=$debugfn
+ get_debugfn "$linked"
+ echo "hard linked $link to $debugfn"
+ mkdir -p "$(dirname "$debugfn")" && ln -nf "$link" "$debugfn"
+ done
+ fi
+}
+
+# 16^6 - 1 or about 16 million files
+FILENUM_DIGITS=6
+run_job()
+{
+ local jobid=$1 filenum
+ local SOURCEFILE=$temp/debugsources.$jobid ELFBINSFILE=$temp/elfbins.$jobid
+
+ >"$SOURCEFILE"
+ >"$ELFBINSFILE"
+ # can't use read -n <n>, because it reads bytes one by one, allowing for
+ # races
+ while :; do
+ filenum=$(dd bs=$(( FILENUM_DIGITS + 1 )) count=1)
+ if test -z "$filenum"; then
+ break
+ fi
+ do_file $(sed -n "$(( 0x$filenum )) p" "$temp/primary")
+ done
+ echo 0 >"$temp/res.$jobid"
+}
+
+n_files=$(wc -l <"$temp/primary")
+if [ $n_jobs -gt $n_files ]; then
+ n_jobs=$n_files
+fi
+if [ $n_jobs -le 1 ]; then
+ while read nlinks inum f; do
+ do_file "$nlinks" "$inum" "$f"
+ done <"$temp/primary"
+else
+ for ((i = 1; i <= n_files; i++)); do
+ printf "%0${FILENUM_DIGITS}x\\n" $i
+ done | (
+ exec 3<&0
+ for ((i = 0; i < n_jobs; i++)); do
+ # The shell redirects stdin to /dev/null for background jobs. Work
+ # around this by duplicating fd 0
+ run_job $i <&3 &
+ done
+ wait
+ )
+ for f in "$temp"/res.*; do
+ res=$(< "$f")
+ if [ "$res" != "0" ]; then
+ exit 1
+ fi
+ done
+ cat "$temp"/debugsources.* >"$SOURCEFILE"
+ cat "$temp"/elfbins.* >"$ELFBINSFILE"
+fi
+
+# Invoke the DWARF Compressor utility.
+if $run_dwz \
+ && [ -d "${RPM_BUILD_ROOT}/usr/lib/debug" ]; then
+ readarray dwz_files < <(cd "${RPM_BUILD_ROOT}/usr/lib/debug"; find -type f -name \*.debug)
+ if [ ${#dwz_files[@]} -gt 0 ]; then
+ dwz_multifile_name="${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}-${RPM_PACKAGE_RELEASE}.${RPM_ARCH}"
+ dwz_multifile_suffix=
+ dwz_multifile_idx=0
+ while [ -f "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz/${dwz_multifile_name}${dwz_multifile_suffix}" ]; do
+ let ++dwz_multifile_idx
+ dwz_multifile_suffix=".${dwz_multifile_idx}"
+ done
+ dwz_multfile_name="${dwz_multifile_name}${dwz_multifile_suffix}"
+ dwz_opts="-h -q -r"
+ [ ${#dwz_files[@]} -gt 1 ] \
+ && dwz_opts="${dwz_opts} -m .dwz/${dwz_multifile_name}"
+ mkdir -p "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz"
+ [ -n "${dwz_low_mem_die_limit}" ] \
+ && dwz_opts="${dwz_opts} -l ${dwz_low_mem_die_limit}"
+ [ -n "${dwz_max_die_limit}" ] \
+ && dwz_opts="${dwz_opts} -L ${dwz_max_die_limit}"
+ if type dwz >/dev/null 2>&1; then
+ ( cd "${RPM_BUILD_ROOT}/usr/lib/debug" && dwz $dwz_opts ${dwz_files[@]} )
+ else
+ echo >&2 "*** ERROR: DWARF compression requested, but no dwz installed"
+ exit 2
+ fi
+ # Remove .dwz directory if empty
+ rmdir "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz" 2>/dev/null
+ if [ -f "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz/${dwz_multifile_name}" ]; then
+ id="`readelf -Wn "${RPM_BUILD_ROOT}/usr/lib/debug/.dwz/${dwz_multifile_name}" \
+ 2>/dev/null | sed -n 's/^.* Build ID: \([0-9a-f]\+\)/\1/p'`"
+ fi
+
+ # dwz invalidates .gnu_debuglink CRC32 in the main files.
+ cat "$ELFBINSFILE" |
+ (cd "$RPM_BUILD_ROOT"; \
+ xargs -d '\n' ${lib_rpm_dir}/sepdebugcrcfix usr/lib/debug)
+ fi
+fi
# We used to make a .debug symlink for each symlink whose target
# has a .debug file to that file. This is not necessary because
@@ -382,17 +630,46 @@ done || exit
# Creating those links anyway results in debuginfo packages for
# devel packages just because of the .so symlinks in them.
+## For each symlink whose target has a .debug file,
+## make a .debug symlink to that file.
+#find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*" -type l -print |
+#while read f
+#do
+# t=$(readlink -m "$f").debug
+# f=${f#$RPM_BUILD_ROOT}
+# t=${t#$RPM_BUILD_ROOT}
+# if [ -f "$debugdir$t" ]; then
+# echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug"
+# debug_link "/usr/lib/debug$t" "${f}.debug"
+# fi
+#done
+
+
if [ -s "$SOURCEFILE" ]; then
- mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug"
+ # See also debugedit invocation. Directories must match up.
+ debug_base_name="$RPM_BUILD_DIR"
+ debug_dest_name="/usr/src/debug"
+ if [ ! -z "$unique_debug_src_base" ]; then
+ debug_base_name="$BUILDDIR"
+ debug_dest_name="/usr/src/debug/${unique_debug_src_base}"
+ fi
+
+ mkdir -p "${RPM_BUILD_ROOT}${debug_dest_name}"
+ # Filter out anything compiler generated which isn't a source file.
+ # e.g. <internal>, <built-in>, <__thread_local_inner macros>.
+ # Some compilers generate them as if they are part of the working
+ # directory (which is why we match against ^ or /).
+
# Get package name from directory and then filter out all files not
# starting with this name
pn=$(basename "$BUILDDIR")
- LC_ALL=C sort -z -u "$SOURCEFILE" | grep -E -v -z '(<internal>|<built-in>)$' |
+ LC_ALL=C sort -z -u "$SOURCEFILE" | grep -E -v -z '(^|/)<[a-z _-]+>$' |
grep -E -z "^${pn}" |
- (cd "$RPM_BUILD_DIR"; cpio -pd0mL "${RPM_BUILD_ROOT}/usr/src/debug")
- # stupid cpio creates new directories in mode 0700, fixup
- find "${RPM_BUILD_ROOT}/usr/src/debug" -type d -print0 |
- xargs --no-run-if-empty -0 chmod a+rx
+ (cd "${debug_base_name}"; cpio -pd0mL "${RPM_BUILD_ROOT}${debug_dest_name}")
+ # stupid cpio creates new directories in mode 0700,
+ # and non-standard modes may be inherented from original directories, fixup
+ find "${RPM_BUILD_ROOT}${debug_dest_name}" -type d -print0 |
+ xargs --no-run-if-empty -0 chmod 0755
find "${RPM_BUILD_ROOT}/usr/src/debug" -type f -print0 |
xargs --no-run-if-empty -0 chmod a+r
fi
@@ -405,14 +682,18 @@ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -d "${RPM_BUILD_ROOT}/usr/src" ]; then
(cd "${RPM_BUILD_ROOT}/usr"
test ! -d lib/debug || find lib/debug ! -type d
+ test ! -d src/debug -o -n "$srcout" || find src/debug -mindepth 1 -maxdepth 1
) | sed 's,^,/usr/,' >> "$LISTFILE"
fi
-: > "$SOURCEFILE"
-if [ -d "${RPM_BUILD_ROOT}/usr/src" ]; then
- (cd "${RPM_BUILD_ROOT}/usr"
- test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1
- ) | sed 's,^,/usr/,' >> "$SOURCEFILE"
+if [ -n "$srcout" ]; then
+ srcout="$BUILDDIR/$srcout"
+ > "$srcout"
+ if [ -d "${RPM_BUILD_ROOT}/usr/src/debug" ]; then
+ (cd "${RPM_BUILD_ROOT}/usr"
+ find src/debug -mindepth 1 -maxdepth 1
+ ) | sed 's,^,/usr/,' >> "$srcout"
+ fi
fi
# Append to $1 only the lines from stdin not already in the file.
diff --git a/scripts/find-lang.sh b/scripts/find-lang.sh
index 413fb353a..28c8c47e7 100755
--- a/scripts/find-lang.sh
+++ b/scripts/find-lang.sh
@@ -11,7 +11,7 @@
#in tact and are included with any redistribution of this file or any
#work based on this file.
-# 2004-06-20 Arkadiusz Miśkiewicz <arekm@pld-linux.org>
+# 2004-06-20 Arkadiusz Mi?kiewicz <arekm@pld-linux.org>
# * merge PLD changes, kde, all-name (mkochano,pascalek@PLD)
# 1999-10-19 Artur Frysiak <wiget@pld-linux.org>
# * added support for GNOME help files
diff --git a/scripts/find-php-provides b/scripts/find-php-provides
deleted file mode 100644
index 02e0c42e7..000000000
--- a/scripts/find-php-provides
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-cd `rpm --eval %{_builddir}`
-
-filelist=`sed "s/['\"]/\\\&/g"`
-if [ -f __rpm_noautoprovfiles ] ; then
- for i in `cat __rpm_noautoprovfiles`; do
- filelist=`echo $filelist | sed "s![[:space:]]*$i[[:space:]]*!!g"`
- done
-fi
-
-
-echo $filelist|/usr/lib/rpm/find-provides
-provides_php=`echo $filelist | xargs /usr/lib/rpm/php.prov`
-if [ -f __rpm_noautoprov ] ; then
- for i in `cat __rpm_noautoprov`; do
- provides_php=`echo $provides_php | sed "s!\<$i[[:space:]]*!!g"`
- done
-fi
-
-echo "$provides_php"
diff --git a/scripts/find-php-requires b/scripts/find-php-requires
deleted file mode 100644
index 9d081510b..000000000
--- a/scripts/find-php-requires
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-cd `rpm --eval %{_builddir}`
-
-filelist=`sed "s/['\"]/\\\&/g"`
-if [ -f __rpm_noautoreqfiles ] ; then
- for i in `cat __rpm_noautoreqfiles`; do
- filelist=`echo $filelist | sed "s![[:space:]]*$i[[:space:]]*!!g"`
- done
-fi
-
-requires="`echo $filelist | /usr/lib/rpm/find-requires`"
-requires_php="`echo $filelist | xargs /usr/lib/rpm/php.req`"
-
-if [ -f __rpm_noautoreq ] ; then
- for i in `cat __rpm_noautoreq`; do
- requires_php=`echo $requires_php | sed "s!\<$i[[:space:]]*!!g"`
- done
-fi
-
-requires_php_t="$requires_php"
-if [ -f __rpm_noautoreqdep ] ; then
- for i in `cat __rpm_noautoreqdep`; do
- requires_php_t=`echo $requires_php_t | sed "s!\<$i[[:space:]]*!!g"`
- done
-fi
-
-requires_mod="`LC_ALL=C rpm -q --whatprovides --qf "%{NAME}\n" $requires_php_t 2>/dev/null`"
-echo "$requires
-$requires_php
-$requires_mod"| grep -v "no package provides" | sort -u
diff --git a/scripts/find-provides b/scripts/find-provides
new file mode 100755
index 000000000..817f5ee0d
--- /dev/null
+++ b/scripts/find-provides
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/lib/rpm/rpmdeps --define="_use_internal_dependency_generator 1" --provides
diff --git a/scripts/find-provides.ksyms b/scripts/find-provides.ksyms
new file mode 100755
index 000000000..e485c3bf5
--- /dev/null
+++ b/scripts/find-provides.ksyms
@@ -0,0 +1,81 @@
+#! /bin/bash
+
+IFS=$'\n'
+
+is_opensuse=false
+
+if test "$1" = "--opensuse"; then
+ if test "$2" -gt 0; then
+ is_opensuse=true
+ fi
+ shift 2
+fi
+
+if ! $is_opensuse; then
+ trap 'rm -f "$tmp"' EXIT
+ tmp=$(mktemp)
+fi
+
+
+while read f; do
+ test -e "$f" || continue
+ is_module=""
+ case "$f" in
+ *.debug)
+ continue
+ ;;
+ */boot/vmlinu[xz]-*)
+ flavor=${f##*/vmlinu[xz]-}
+ flavor=${flavor%.gz}
+ echo "kernel-uname-r = $flavor"
+ version=${flavor}
+ flavor=${flavor##*-}
+ ;;
+ */lib/modules/*/*.ko | */lib/modules/*/*.ko.gz | */boot/vmlinu[xz]*)
+ is_module="1"
+ ;;
+ *)
+ continue
+ esac
+ if $is_opensuse; then
+ continue
+ fi
+ unzip=false
+ case "$f" in
+ *.gz | */boot/vmlinuz*)
+ unzip=true
+ esac
+ if $unzip && gzip -cd "$f" >"$tmp"; then
+ f=$tmp
+ fi
+ if test -z "$flavor" -a -n "$is_module" ; then
+ flavor=$(/sbin/modinfo -F vermagic "$f")
+ flavor=${flavor%% *}
+ version=${flavor}
+ flavor=${flavor##*-}
+ fi
+ if test -z "$flavor"; then
+ echo "warning: cannot determine kernel flavor from $(/sbin/modinfo -F vermagic "$f" 2>&1)" >&2
+ continue
+ fi
+ objdir=$(readlink /lib/modules/$version/build)
+ objdir_build=$RPM_BUILD_ROOT$(readlink $RPM_BUILD_ROOT/lib/modules/$version/build)
+ for i in $objdir_build $objdir ; do
+ ksym_provides=$i/scripts/mod/ksym-provides
+ [ -x $ksym_provides ] && break
+ done
+ if [ -x $ksym_provides ] ; then
+ $ksym_provides $flavor $f
+ else
+ major=${version%%.*}
+ sub=${version#*.}
+ sub=${sub%%.*}
+ if [ "$major" -ge 4 -a "$sub" -ge 10 ] ; then
+ echo "error: cannot determine ksym provides of $f - missing ksym-povides tool." >&2
+ else
+ nm "$f" \
+ | sed -r -ne "s/^0*([0-9a-f]+) A __crc_(.+)/ksym($flavor:\\2) = \\1/p"
+ fi
+ fi
+done \
+| sort -u
diff --git a/scripts/find-requires b/scripts/find-requires
new file mode 100755
index 000000000..fa5bc88e9
--- /dev/null
+++ b/scripts/find-requires
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/lib/rpm/rpmdeps --define="_use_internal_dependency_generator 1" --requires
diff --git a/scripts/find-requires.ksyms b/scripts/find-requires.ksyms
new file mode 100755
index 000000000..bc5c9b3fe
--- /dev/null
+++ b/scripts/find-requires.ksyms
@@ -0,0 +1,29 @@
+#! /bin/bash
+
+IFS=$'\n'
+
+is_opensuse=false
+
+if test "$1" = "--opensuse"; then
+ if test "$2" -gt 0; then
+ is_opensuse=true
+ fi
+ shift 2
+fi
+
+if ! $is_opensuse && ! test -e /sbin/modprobe; then
+ cat > /dev/null
+ exit 0
+fi
+
+for f in $(grep -E '/lib/modules/.+\.ko$' | grep -v '/lib/modules/[^/]*/kernel/'); do
+ flavor=${f#*/lib/modules/}
+ flavor=${flavor%%/*}
+ if $is_opensuse; then
+ echo "kernel-uname-r = $flavor"
+ continue
+ fi
+ flavor=${flavor##*-}
+ /sbin/modprobe --dump-modversions "$f" \
+ | sed -r -ne "s/^0x0*([0-9a-f]+)[[:blank:]]+(.+)/ksym($flavor:\\2) = \\1/p"
+done | sort -u
diff --git a/scripts/gendiff b/scripts/gendiff
index d9b0c2148..a8cd1209e 100644
--- a/scripts/gendiff
+++ b/scripts/gendiff
@@ -14,11 +14,8 @@ find $1 \( -name "*$2" -o -name ".*$2" \) -print | sort |
while read f; do
U="${GENDIFF_DIFF_ARGS}"
[ "`basename $f`" = "ChangeLog$2" ] && U="${GENDIFF_DIFF_CHANGELOG_ARGS}"
- diffcmd="${DIFF} ${U} /dev/null ${f%$2}"
-# ${DIFF} ${U} $f `echo $f | sed s/$2\$//`
- if [ -r "$f" ]; then
- diffcmd="${DIFF} ${U} ${f} ${f%$2}"
- fi
- echo "${diffcmd}"
- ${diffcmd}
+ F=/dev/null
+ [ -r "${f}" ] && F="${f}"
+ echo "${DIFF} ${U} ${F} ${f%$2}"
+ ${DIFF} ${U} "${F}" "${f%$2}"
done
diff --git a/scripts/libtooldeps.sh b/scripts/libtooldeps.sh
index d8937c829..af86789c4 100644
--- a/scripts/libtooldeps.sh
+++ b/scripts/libtooldeps.sh
@@ -13,7 +13,7 @@ case $1 in
do
case "$possible" in
*.la)
- if grep -iq '^# Generated by ltmain.sh' "$possible" 2> /dev/null ; then
+ if grep -Eiq '^# Generated by (libtool|ltmain.sh)' "$possible" 2> /dev/null ; then
possible="`echo ${possible} | sed -e s,${RPM_BUILD_ROOT}/,/,`"
echo "libtool($possible)"
fi
diff --git a/scripts/macros.perl b/scripts/macros.perl
index 037041170..bdeb863b7 100644
--- a/scripts/macros.perl
+++ b/scripts/macros.perl
@@ -2,9 +2,6 @@
# To make use of these macros insert the following line into your spec file:
# %include %{_rpmconfigdir}/macros.perl
-%define __find_requires %{_rpmconfigdir}/find-perl-requires
-%define __find_provides %{_rpmconfigdir}/find-perl-provides
-
%define perl_sitelib %(eval "`perl -V:installsitelib`"; echo $installsitelib)
%define perl_sitearch %(eval "`perl -V:installsitearch`"; echo $installsitearch)
%define perl_archlib %(eval "`perl -V:installarchlib`"; echo $installarchlib)
diff --git a/scripts/macros.php b/scripts/macros.php
index cf20728b0..861c6f501 100644
--- a/scripts/macros.php
+++ b/scripts/macros.php
@@ -2,8 +2,5 @@
# To make use of these macros insert the following line into your spec file:
# %include %{_rpmconfigdir}/macros.php
-%define __find_requires %{_rpmconfigdir}/find-php-requires
-%define __find_provides %{_rpmconfigdir}/find-php-provides
-
%define php_pear_dir %{_datadir}/pear
diff --git a/scripts/macros.python b/scripts/macros.python
index ea1f200fc..9f33ad1a3 100644
--- a/scripts/macros.python
+++ b/scripts/macros.python
@@ -7,7 +7,8 @@
# directories
%define py_prefix %(echo `python -c "import sys; sys.stdout.write(sys.prefix)"`)
-%define py_libdir %{py_prefix}/lib/python%{py_ver}
+%define py_lib %(echo `python -c "import sys; sys.stdout.write(sys.lib)"`)
+%define py_libdir %{py_prefix}/%{py_lib}/python%{py_ver}
%define py_incdir /usr/include/python%{py_ver}
%define py_sitedir %{py_libdir}/site-packages
%define py_dyndir %{py_libdir}/lib-dynload
diff --git a/scripts/metainfo.prov b/scripts/metainfo.prov
new file mode 100755
index 000000000..33c41a887
--- /dev/null
+++ b/scripts/metainfo.prov
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# Transform appdata/metainfo xml file into RPM metainfo(filename) provides
+#
+# Author: Michael Schroeder <mls@suse.de>
+# Modified by Neal Gompa <ngompa13@gmail.com> to generate metainfo instead of appdata
+# Based on other provides scripts from RPM
+
+OLD_IFS="$IFS"
+while read instfile ; do
+ case "$instfile" in
+ *.appdata.xml|*.metainfo.xml)
+ echo "metainfo()"
+ echo "metainfo(${instfile##*/})"
+ ;;
+ esac
+done
+IFS=$OLD_IFS
+
diff --git a/scripts/osgideps.pl b/scripts/osgideps.pl
deleted file mode 100644
index ab92b6568..000000000
--- a/scripts/osgideps.pl
+++ /dev/null
@@ -1,388 +0,0 @@
-#!/usr/bin/perl
-#
-# osgideps.pl -- Analyze dependencies of OSGi bundles.
-#
-# Kyu Lee (initial idea)
-# Alphonse Van Assche <alcapcom@fedoraproject.org> (current maintainer)
-#
-# $Id: osgideps.pl,v 1.0 2009/06/08 12:12:12 mej Exp $
-
-use Getopt::Long;
-use File::Temp qw/ tempdir /;
-use threads;
-use Thread::Queue;
-
-$MANIFEST_NAME = "META-INF/MANIFEST.MF";
-
-# parse options
-my ( $show_provides, $show_requires, $show_system_bundles, $debug );
-my $result = GetOptions(
- "provides" => \$show_provides,
- "requires" => \$show_requires,
- "system" => \$show_system_bundles,
- "debug" => \$debug
-);
-exit(1) if ( not $result );
-
-# run selected function
-@allfiles = <STDIN>;
-if ($show_provides) {
- getProvides(@allfiles);
-}
-if ($show_requires) {
- getRequires(@allfiles);
-}
-if ($show_system_bundles) {
- getSystemBundles(@allfiles);
-}
-exit(0);
-
-# this function print provides of OSGi aware files
-sub getProvides {
-
- my $queue = Thread::Queue->new;
- foreach $file (@_) {
- $queue->enqueue($file);
- }
-
- my @workers;
- push @workers, threads->create('getProvidesWorker');
- push @workers, threads->create('getProvidesWorker');
- push @workers, threads->create('getProvidesWorker');
- push @workers, threads->create('getProvidesWorker');
-
- map { $_->join } @workers;
-
- sub getProvidesWorker {
- while ( my $file = $queue->dequeue_nb ) {
- chomp($file);
- # we don't follow symlinks for provides
- next if ( -f $file && -r _ && -l _ );
- $file =~ s/[^[:print:]]//g;
- if ( $file =~ m/$MANIFEST_NAME$/ || $file =~ m/\.jar$/ ) {
- if ( $file =~ m/\.jar$/ ) {
- if ( `zipinfo -1 $file 2> /dev/null | grep -e \^$MANIFEST_NAME` eq "$MANIFEST_NAME\n" ) {
- # extract MANIFEST.MF file from jar to temporary directory
- $tmpdir = tempdir( CLEANUP => 1 );
- `unzip -d $tmpdir -qqo $file $MANIFEST_NAME`;
- open( MANIFEST, "$tmpdir/$MANIFEST_NAME" );
- }
- } else {
- open( MANIFEST, "$file" );
- }
- my $bundleName = "";
- my $version = "";
- # parse Bundle-SymbolicName, Bundle-Version and Export-Package attributes
- while (<MANIFEST>) {
- # get rid of non-print chars (some manifest files contain weird chars)
- s/[^[:print]]//g;
- if ( m/(^(Bundle-SymbolicName): )(.*)$/ ) {
- $bundleName = "$3" . "\n";
- while (<MANIFEST>) {
- if ( m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/ ) {
- $len = length $_;
- seek MANIFEST, $len * -1, 1;
- last;
- }
- $bundleName .= "$_";
- }
- $bundleName =~ s/\s+//g;
- $bundleName =~ s/;.*//g;
- }
- if ( m/(^Bundle-Version: )(.*)/ ) {
- $version = $2;
- }
- if ( m/(^(Export-Package): )(.*)$/ ) {
- my $bunlist = "$3" . "\n";
- while (<MANIFEST>) {
- if ( m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/ ) {
- $len = length $_;
- seek MANIFEST, $len * -1, 1;
- last;
- }
- $bunlist .= "$_";
- }
- push @bundlelist, parsePkgString($bunlist, $file);
- }
- }
-
- # skip this jar if no bundle name exists
- if ( !$bundleName eq "" ) {
- if ( !$version eq "" ) {
- $version = parseVersion($version);
- push @bundlelist, { FILE => "$file", NAME => "$bundleName", VERSION => "$version" };
- } else {
- push @bundlelist, { FILE => "$file", NAME => "$bundleName", VERSION => "" };
- }
- }
- `rm -rf $tmpdir`;
- }
- }
- if ( !$debug ) { @bundlelist = prepareOSGiBundlesList(@bundlelist); }
- $list = "";
- for $bundle (@bundlelist) {
- if ( !$debug ) {
- $list .= "osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
- } else {
- $list .= $bundle->{FILE} . " osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
- }
- }
- print $list;
- }
-}
-
-# this function print requires of OSGi aware files
-sub getRequires {
-
- my $queue = Thread::Queue->new;
- foreach $file (@_) {
- $queue->enqueue($file);
- }
-
- my @workers;
- push @workers, threads->create('getRequiresWorker');
- push @workers, threads->create('getRequiresWorker');
- push @workers, threads->create('getRequiresWorker');
- push @workers, threads->create('getRequiresWorker');
-
- map { $_->join } @workers;
-
- sub getRequiresWorker {
- while ( my $file = $queue->dequeue_nb ) {
- next if ( -f $file && -r _ );
- $file =~ s/[^[:print:]]//g;
- if ( $file =~ m/$MANIFEST_NAME$/ || $file =~ m/\.jar$/ ) {
- # we explicitly requires symlinked jars
- # _that_reside_outside_the_package_
- if (-l $file) {
- $exist = 0;
- $lnksrc = `readlink -qen $file`;
- foreach $exfile ( @allfiles ) {
- $exfile =~ s/[^[:print:]]//g;
- if ( $lnksrc =~ m/$exfile$/ ) {
- $exist = 1;
- last;
- }
- }
- print "$lnksrc\n" if (!$exist);
- next;
- }
-
- if ( $file =~ m/\.jar$/ ) {
- if ( `zipinfo -1 $file 2> /dev/null | grep -e \^$MANIFEST_NAME` eq "$MANIFEST_NAME\n" ) {
- # extract MANIFEST.MF file from jar to temporary directory
- $tmpdir = tempdir( CLEANUP => 1 );
- `unzip -d $tmpdir -qqo $file $MANIFEST_NAME`;
- open( MANIFEST, "$tmpdir/$MANIFEST_NAME" );
- }
- } else {
- open( MANIFEST, "$file" );
- }
- while (<MANIFEST>) {
- if ( m/(^(Require-Bundle|Import-Package): )(.*)$/ ) {
- my $bunlist = "$3" . "\n";
- while (<MANIFEST>) {
- if (m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/ ) {
- $len = length $_;
- seek MANIFEST, $len * -1, 1;
- last;
- }
- $bunlist .= "$_";
- }
- push @bundlelist, parsePkgString($bunlist, $file);
- }
- # we also explicitly require symlinked jars define by
- # Bundle-ClassPath attribut
- if ( m/(^(Bundle-ClassPath): )(.*)$/ ) {
- $bunclp = "$3" . "\n";
- while (<MANIFEST>) {
- if ( m/^[[:upper:]][[:alpha:]]+-[[:upper:]][[:alpha:]]+: .*/ ) {
- $len = length $_;
- seek MANIFEST, $len * -1, 1;
- last;
- }
- $bunclp .= "$_";
- }
- $bunclp =~ s/\ //g;
- $bunclp =~ s/\n//g;
- $bunclp =~ s/[^[:print:]]//g;
- $dir = `dirname $file`;
- $dir =~ s/\n//g;
- @jars = split /,/, $bunclp;
- for $jarfile (@jars) {
- $jarfile = "$dir\/\.\.\/$jarfile";
- $jarfile = readlink $jarfile;
- if ( !$jarfile eq "" ) {
- print "$jarfile" . "\n";
- }
- }
- }
- }
- `rm -rf $tmpdir`;
- }
- }
- if ( !$debug ) { @bundlelist = prepareOSGiBundlesList(@bundlelist); }
- $list = "";
- for $bundle (@bundlelist) {
- # replace '=' by '>=' because qualifiers are set on provides
- # but not on requires.
- $bundle->{VERSION} =~ s/\ =/\ >=/g;
- if ( !$debug ) {
- $list .= "osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
- } else {
- $list .= $bundle->{FILE} . " osgi(" . $bundle->{NAME} . ")" . $bundle->{VERSION} . "\n";
- }
- }
- print $list;
- }
-}
-
-# this function print system bundles of OSGi profile files.
-sub getSystemBundles {
- foreach $file (@_) {
- if ( ! -f $file || ! -r _ ) {
- print "'$file' file not found or cannot be read!";
- next;
- } else {
- open( PROFILE, "$file" );
- while (<PROFILE>) {
- if ( $file =~ m/\.profile$/ ) {
- if (m/(^(org\.osgi\.framework\.system\.packages)[=|\ ]+)(.*)$/) {
- $syspkgs = "$3" . "\n";
- while (<PROFILE>) {
- if (m/^[a-z]/) {
- $len = length $_;
- seek MANIFEST, $len * -1, 1;
- last;
- }
- $syspkgs .= "$_";
- }
- $syspkgs =~ s/\s+//g;
- $syspkgs =~ s/\\//g;
- @bundles = split /,/, $syspkgs;
- foreach $bundle (@bundles) {
- print "osgi(" . $bundle . ")\n";
- }
- }
- }
- }
- }
- }
-}
-
-sub parsePkgString {
- my $bunstr = $_[0];
- my $file = $_[1];
- my @return;
- $bunstr =~ s/ //g;
- $bunstr =~ s/\n//g;
- $bunstr =~ s/[^[:print:]]//g;
- $bunstr =~ s/("[[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+)(,)([[:alnum:]|\-|\_|\.|\(|\)|\[|\]]+")/$1 $3/g;
- # remove uses bundle from Export-Package attribute
- $bunstr =~ s/uses:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g;
- # remove optional dependencies
- $bunstr =~ s/,.*;resolution:=optional//g;
- # remove x-friends
- $bunstr =~ s/;x-friends:="[[:alnum:]|\-|\_|\.|\(|\)|\[|\]|,]+"//g;
- # remove signatures
- $bunstr =~ s/Name:.*SHA1-Digest:.*//g;
- @reqcomp = split /,/, $bunstr;
- foreach $reqelement (@reqcomp) {
- @reqelementfrmnt = split /;/, $reqelement;
- $name = "";
- $version = "";
- $name = $reqelementfrmnt[0];
- $name =~ s/\"//g;
- # ignoring OSGi 'system.bundle'
- next if ( $name =~ m/^system\.bundle$/ );
- for $i ( 1 .. $#reqelementfrmnt ) {
- if ( $reqelementfrmnt[$i] =~ m/(^(bundle-|)version=")(.*)(")/ ) {
- $version = $3;
- last;
- }
- }
- $version = parseVersion($version);
- push @return, { FILE => "$file", NAME => "$name", VERSION => "$version" };
- }
- return @return;
-}
-
-sub parseVersion {
- my $ver = $_[0];
- if ( $ver eq "" ) { return ""; }
- if ( $ver =~ m/(^[\[|\(])(.+)\ (.+)([\]|\)]$)/ ) {
- if ( $1 eq "\[" ) {
- $ver = " >= $2";
- } else {
- $ver = " > $2";
- }
- } else {
- $ver = " = $ver";
- }
- # we always return a full OSGi version to be able to match 1.0
- # and 1.0.0 as equal in RPM.
- ( $major, $minor, $micro, $qualifier ) = split( '\.', $ver );
- if ( !defined($minor) || !$minor ) {
- $minor = 0;
- }
- if ( !defined($micro) || !$micro ) {
- $micro = 0;
- }
- if ( !defined($qualifier) || !$qualifier ) {
- $qualifier = "";
- } else {
- $qualifier = "." . $qualifier;
- }
- $ver = $major . "." . $minor . "." . $micro . $qualifier;
- return $ver;
-}
-
-# this function put the max version on each bundles to be able to remove
-# duplicate deps with 'sort -u' command.
-sub prepareOSGiBundlesList {
- foreach $bundle (@_) {
- foreach $cmp (@_) {
- if ( $bundle->{NAME} eq $cmp->{NAME} ) {
- $result = compareVersion( $bundle->{VERSION}, $cmp->{VERSION} );
- if ( $result < 0 ) {
- $bundle->{VERSION} = $cmp->{VERSION};
- }
- }
- }
- }
- return @_;
-}
-
-# this function returns a negative integer, zero, or a positive integer if
-# $ver1 is less than, equal to, or greater than $ver2.
-#
-# REMEMBER: we mimic org.osgi.framework.Version#compareTo method but
-# *at this time* we don't take care of the qualifier part of the version.
-sub compareVersion {
- my $ver1 = $_[0];
- my $ver2 = $_[1];
-
- $ver1 = "0.0.0" if ( $ver1 eq "" );
- $ver2 = "0.0.0" if ( $ver2 eq "" );
-
- $ver1 =~ m/([0-9]+)(\.)([0-9]+)(\.)([0-9]+)/;
- $major1 = $1;
- $minor1 = $3;
- $micro1 = $5;
-
- $ver2 =~ m/([0-9]+)(\.)([0-9]+)(\.)([0-9]+)/;
- $major2 = $1;
- $minor2 = $3;
- $micro2 = $5;
-
- $result = $major1 - $major2;
- return $result if ( $result != 0 );
-
- $result = $minor1 - $minor2;
- return $result if ( $result != 0 );
-
- $result = $micro1 - $micro2;
- return $result if ( $result != 0 );
-
- return $result;
-}
diff --git a/scripts/perl.prov b/scripts/perl.prov
index a6d8856e8..bcd70185e 100755
--- a/scripts/perl.prov
+++ b/scripts/perl.prov
@@ -19,7 +19,7 @@
# a simple script to print the proper name for perl libraries.
-# To save development time I do not parse the perl grammmar but
+# To save development time I do not parse the perl grammar but
# instead just lex it looking for what I want. I take special care to
# ignore comments and pod's.
@@ -47,6 +47,7 @@
if ("@ARGV") {
foreach (@ARGV) {
+ next if !/\.pm$/;
process_file($_);
}
} else {
@@ -55,6 +56,7 @@ if ("@ARGV") {
# contents of the file.
foreach (<>) {
+ next if !/\.pm$/;
process_file($_);
}
}
@@ -65,7 +67,7 @@ foreach $module (sort keys %require) {
print "perl($module)\n";
} else {
- # I am not using rpm3.0 so I do not want spaces arround my
+ # I am not using rpm3.0 so I do not want spaces around my
# operators. Also I will need to change the processing of the
# $RPM_* variable when I upgrade.
@@ -114,7 +116,7 @@ sub process_file {
$inover = 0;
}
- if ($incomment || $inover) {
+ if ($incomment || $inover || m/^\s*#/) {
next;
}
@@ -127,9 +129,9 @@ sub process_file {
# package name so we report all namespaces except some common
# false positives as if they were provided packages (really ugly).
- if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*;/) {
+ if (m/^\s*package\s+([_:a-zA-Z0-9]+)\s*(?:v?([0-9_.]+)\s*)?[;{]/) {
$package = $1;
- undef $version;
+ $version = $2;
if ($package eq 'main') {
undef $package;
} else {
@@ -137,7 +139,7 @@ sub process_file {
# the package definition is broken up over multiple blocks.
# In that case, don't stomp a previous $VERSION we might have
# found. (See BZ#214496.)
- $require{$package} = undef unless (exists $require{$package});
+ $require{$package} = $version unless (exists $require{$package});
}
}
@@ -164,13 +166,13 @@ sub process_file {
if (m/\$Revision: (\d+[.0-9]+)/) {
$version = $1;
- } elsif (m/['"]?(\d+[.0-9]+)['"]?/) {
+ } elsif (m/=\s*['"]?(\d+[._0-9]+)['"]?/) {
# look for a static number hard coded in the script
$version = $1;
}
- $require{$package} ||= $version;
+ $require{$package} = $version;
}
# Allow someone to have a variable that defines virtual packages
diff --git a/scripts/perl.req b/scripts/perl.req
index cd2cbded4..52bd30196 100755
--- a/scripts/perl.req
+++ b/scripts/perl.req
@@ -104,8 +104,8 @@ sub process_file {
# skip the "= <<" block
- if (m/^\s*\$(?:.*)\s*=\s*<<\s*(["'`])(.+?)\1/ ||
- m/^\s*\$(.*)\s*=\s*<<(\w+)\s*;/) {
+ if (m/^\s*(?:my\s*)?\$(?:.*)\s*=\s*<<\s*(["'`])(.+?)\1/ ||
+ m/^\s*(?:my\s*)?\$(.*)\s*=\s*<<(\w+)\s*;/) {
$tag = $2;
while (<FILE>) {
chomp;
@@ -158,6 +158,36 @@ sub process_file {
my $modver_re = qr/[.0-9]+/;
+ #
+ # The (require|use) match further down in this subroutine will match lines
+ # within a multi-line print or return statements. So, let's skip over such
+ # statements whose content should not be loading modules anyway. -BEF-
+ #
+ if (m/print(?:\s+|\s+\S+\s+)\<\<\s*(["'`])(.+?)\1/ ||
+ m/print(\s+|\s+\S+\s+)\<\<(\w+)/ ||
+ m/return(\s+)\<\<(\w+)/ ) {
+
+ my $tag = $2;
+ while (<FILE>) {
+ chomp;
+ ( $_ eq $tag ) && last;
+ }
+ $_ = <FILE>;
+ }
+
+ # Skip multiline print and assign statements
+ if ( m/\$\S+\s*=\s*(")([^"\\]|(\\.))*$/ ||
+ m/\$\S+\s*=\s*(')([^'\\]|(\\.))*$/ ||
+ m/print\s+(")([^"\\]|(\\.))*$/ ||
+ m/print\s+(')([^'\\]|(\\.))*$/ ) {
+
+ my $quote = $1;
+ while (<FILE>) {
+ m/^([^\\$quote]|(\\.))*$quote/ && last;
+ }
+ $_ = <FILE>;
+ }
+
if (
# ouch could be in a eval, perhaps we do not want these since we catch
diff --git a/scripts/perldeps.pl b/scripts/perldeps.pl
deleted file mode 100755
index bffad674a..000000000
--- a/scripts/perldeps.pl
+++ /dev/null
@@ -1,1116 +0,0 @@
-#!/usr/bin/perl -Tw
-#
-# perldeps.pl -- Analyze dependencies of Perl packages
-#
-# Michael Jennings
-# 7 November 2005
-#
-# $Id: perldeps.pl,v 1.6 2006/04/04 20:12:03 mej Exp $
-#
-
-use strict;
-use Config;
-use File::Basename;
-use File::Find;
-use Getopt::Long;
-use POSIX;
-
-############### Debugging stolen from Mezzanine::Util ###############
-my $DEBUG = 0;
-
-# Debugging output
-sub
-dprintf(@)
-{
- my ($f, $l, $s, $format);
- my @params = @_;
-
- return if (! $DEBUG);
- $format = shift @params;
- if (!scalar(@params)) {
- return dprint($format);
- }
- (undef, undef, undef, $s) = caller(1);
- if (!defined($s)) {
- $s = "MAIN";
- }
- (undef, $f, $l) = caller(0);
- $f =~ s/^.*\/([^\/]+)$/$1/;
- $s =~ s/^\w+:://g;
- $s .= "()" if ($s =~ /^\w+$/);
- $f = "" if (!defined($f));
- $l = "" if (!defined($l));
- $format = "" if (!defined($format));
- for (my $i = 0; $i < scalar(@params); $i++) {
- if (!defined($params[$i])) {
- $params[$i] = "<undef>";
- }
- }
- printf("[$f/$l/$s] $format", @params);
-}
-
-sub
-dprint(@)
-{
- my ($f, $l, $s);
- my @params = @_;
-
- return if (! $DEBUG);
- (undef, undef, undef, $s) = caller(1);
- if (!defined($s)) {
- $s = "MAIN";
- }
- (undef, $f, $l) = caller(0);
- $f =~ s/^.*\/([^\/]+)$/$1/;
- $s =~ s/\w+:://g;
- $s .= "()" if ($s =~ /^\w+$/);
- $f = "" if (!defined($f));
- $l = "" if (!defined($l));
- $s = "" if (!defined($s));
- for (my $i = 0; $i < scalar(@params); $i++) {
- if (!defined($params[$i])) {
- $params[$i] = "<undef>";
- }
- }
- print "[$f/$l/$s] ", @params;
-}
-
-############### Module::ScanDeps Code ###############
-use constant dl_ext => ".$Config{dlext}";
-use constant lib_ext => $Config{lib_ext};
-use constant is_insensitive_fs => (
- -s $0
- and (-s lc($0) || -1) == (-s uc($0) || -1)
- and (-s lc($0) || -1) == -s $0
-);
-
-my $CurrentPackage = '';
-my $SeenTk;
-
-# Pre-loaded module dependencies
-my %Preload = (
- 'AnyDBM_File.pm' => [qw( SDBM_File.pm )],
- 'Authen/SASL.pm' => 'sub',
- 'Bio/AlignIO.pm' => 'sub',
- 'Bio/Assembly/IO.pm' => 'sub',
- 'Bio/Biblio/IO.pm' => 'sub',
- 'Bio/ClusterIO.pm' => 'sub',
- 'Bio/CodonUsage/IO.pm' => 'sub',
- 'Bio/DB/Biblio.pm' => 'sub',
- 'Bio/DB/Flat.pm' => 'sub',
- 'Bio/DB/GFF.pm' => 'sub',
- 'Bio/DB/Taxonomy.pm' => 'sub',
- 'Bio/Graphics/Glyph.pm' => 'sub',
- 'Bio/MapIO.pm' => 'sub',
- 'Bio/Matrix/IO.pm' => 'sub',
- 'Bio/Matrix/PSM/IO.pm' => 'sub',
- 'Bio/OntologyIO.pm' => 'sub',
- 'Bio/PopGen/IO.pm' => 'sub',
- 'Bio/Restriction/IO.pm' => 'sub',
- 'Bio/Root/IO.pm' => 'sub',
- 'Bio/SearchIO.pm' => 'sub',
- 'Bio/SeqIO.pm' => 'sub',
- 'Bio/Structure/IO.pm' => 'sub',
- 'Bio/TreeIO.pm' => 'sub',
- 'Bio/LiveSeq/IO.pm' => 'sub',
- 'Bio/Variation/IO.pm' => 'sub',
- 'Crypt/Random.pm' => sub {
- _glob_in_inc('Crypt/Random/Provider', 1);
- },
- 'Crypt/Random/Generator.pm' => sub {
- _glob_in_inc('Crypt/Random/Provider', 1);
- },
- 'DBI.pm' => sub {
- grep !/\bProxy\b/, _glob_in_inc('DBD', 1);
- },
- 'DBIx/SearchBuilder.pm' => 'sub',
- 'DBIx/ReportBuilder.pm' => 'sub',
- 'Device/ParallelPort.pm' => 'sub',
- 'Device/SerialPort.pm' => [ qw(
- termios.ph asm/termios.ph sys/termiox.ph sys/termios.ph sys/ttycom.ph
- ) ],
- 'ExtUtils/MakeMaker.pm' => sub {
- grep /\bMM_/, _glob_in_inc('ExtUtils', 1);
- },
- 'File/Basename.pm' => [qw( re.pm )],
- 'File/Spec.pm' => sub {
- require File::Spec;
- map { my $name = $_; $name =~ s!::!/!g; "$name.pm" } @File::Spec::ISA;
- },
- 'HTTP/Message.pm' => [ qw(
- URI/URL.pm URI.pm
- ) ],
- 'IO.pm' => [ qw(
- IO/Handle.pm IO/Seekable.pm IO/File.pm
- IO/Pipe.pm IO/Socket.pm IO/Dir.pm
- ) ],
- 'IO/Socket.pm' => [qw( IO/Socket/UNIX.pm )],
- 'LWP/UserAgent.pm' => [ qw(
- URI/URL.pm URI/http.pm LWP/Protocol/http.pm
- LWP/Protocol/https.pm
- ), _glob_in_inc("LWP/Authen", 1) ],
- 'Locale/Maketext/Lexicon.pm' => 'sub',
- 'Locale/Maketext/GutsLoader.pm' => [qw( Locale/Maketext/Guts.pm )],
- 'Mail/Audit.pm' => 'sub',
- 'Math/BigInt.pm' => 'sub',
- 'Math/BigFloat.pm' => 'sub',
- 'Module/Build.pm' => 'sub',
- 'Module/Pluggable.pm' => sub {
- _glob_in_inc("$CurrentPackage/Plugin", 1);
- },
- 'MIME/Decoder.pm' => 'sub',
- 'Net/DNS/RR.pm' => 'sub',
- 'Net/FTP.pm' => 'sub',
- 'Net/SSH/Perl.pm' => 'sub',
- 'PDF/API2/Resource/Font.pm' => 'sub',
- 'PDF/API2/Basic/TTF/Font.pm' => sub {
- _glob_in_inc('PDF/API2/Basic/TTF', 1);
- },
- 'PDF/Writer.pm' => 'sub',
- 'POE' => [ qw(
- POE/Kernel.pm POE/Session.pm
- ) ],
- 'POE/Kernel.pm' => [
- map "POE/Resource/$_.pm", qw(
- Aliases Events Extrefs FileHandles
- SIDs Sessions Signals Statistics
- )
- ],
- 'Parse/AFP.pm' => 'sub',
- 'Parse/Binary.pm' => 'sub',
- 'Regexp/Common.pm' => 'sub',
- 'SOAP/Lite.pm' => sub {
- (($] >= 5.008 ? ('utf8.pm') : ()), _glob_in_inc('SOAP/Transport', 1));
- },
- 'SQL/Parser.pm' => sub {
- _glob_in_inc('SQL/Dialects', 1);
- },
- 'SVN/Core.pm' => sub {
- _glob_in_inc('SVN', 1),
- map "auto/SVN/$_->{name}", _glob_in_inc('auto/SVN'),
- },
- 'SVK/Command.pm' => sub {
- _glob_in_inc('SVK', 1);
- },
- 'SerialJunk.pm' => [ qw(
- termios.ph asm/termios.ph sys/termiox.ph sys/termios.ph sys/ttycom.ph
- ) ],
- 'Template.pm' => 'sub',
- 'Term/ReadLine.pm' => 'sub',
- 'Tk.pm' => sub {
- $SeenTk = 1;
- qw( Tk/FileSelect.pm Encode/Unicode.pm );
- },
- 'Tk/Balloon.pm' => [qw( Tk/balArrow.xbm )],
- 'Tk/BrowseEntry.pm' => [qw( Tk/cbxarrow.xbm Tk/arrowdownwin.xbm )],
- 'Tk/ColorEditor.pm' => [qw( Tk/ColorEdit.xpm )],
- 'Tk/FBox.pm' => [qw( Tk/folder.xpm Tk/file.xpm )],
- 'Tk/Toplevel.pm' => [qw( Tk/Wm.pm )],
- 'URI.pm' => sub {
- grep !/.\b[_A-Z]/, _glob_in_inc('URI', 1);
- },
- 'Win32/EventLog.pm' => [qw( Win32/IPC.pm )],
- 'Win32/Exe.pm' => 'sub',
- 'Win32/TieRegistry.pm' => [qw( Win32API/Registry.pm )],
- 'Win32/SystemInfo.pm' => [qw( Win32/cpuspd.dll )],
- 'XML/Parser.pm' => sub {
- _glob_in_inc('XML/Parser/Style', 1),
- _glob_in_inc('XML/Parser/Encodings', 1),
- },
- 'XML/Parser/Expat.pm' => sub {
- ($] >= 5.008) ? ('utf8.pm') : ();
- },
- 'XML/SAX.pm' => [qw( XML/SAX/ParserDetails.ini ) ],
- 'XMLRPC/Lite.pm' => sub {
- _glob_in_inc('XMLRPC/Transport', 1),;
- },
- 'diagnostics.pm' => sub {
- _find_in_inc('Pod/perldiag.pod')
- ? 'Pod/perldiag.pl'
- : 'pod/perldiag.pod';
- },
- 'utf8.pm' => [
- 'utf8_heavy.pl', do {
- my $dir = 'unicore';
- my @subdirs = qw( To );
- my @files = map "$dir/lib/$_->{name}", _glob_in_inc("$dir/lib");
-
- if (@files) {
- # 5.8.x
- push @files, (map "$dir/$_.pl", qw( Exact Canonical ));
- }
- else {
- # 5.6.x
- $dir = 'unicode';
- @files = map "$dir/Is/$_->{name}", _glob_in_inc("$dir/Is")
- or return;
- push @subdirs, 'In';
- }
-
- foreach my $subdir (@subdirs) {
- foreach (_glob_in_inc("$dir/$subdir")) {
- push @files, "$dir/$subdir/$_->{name}";
- }
- }
- @files;
- }
- ],
- 'charnames.pm' => [
- _find_in_inc('unicore/Name.pl') ? 'unicore/Name.pl' : 'unicode/Name.pl'
- ],
-);
-
-my $Keys = 'files|keys|recurse|rv|skip|first|execute|compile';
-sub scan_deps {
- my %args = (
- rv => {},
- (@_ and $_[0] =~ /^(?:$Keys)$/o) ? @_ : (files => [@_], recurse => 1)
- );
-
- scan_deps_static(\%args);
-
- if ($args{execute} or $args{compile}) {
- scan_deps_runtime(
- rv => $args{rv},
- files => $args{files},
- execute => $args{execute},
- compile => $args{compile},
- skip => $args{skip}
- );
- }
-
- return ($args{rv});
-}
-
-sub scan_deps_static {
- my ($args) = @_;
- my ($files, $keys, $recurse, $rv, $skip, $first, $execute, $compile) =
- @$args{qw( files keys recurse rv skip first execute compile )};
-
- $rv ||= {};
- $skip ||= {};
-
- foreach my $file (@{$files}) {
- my $key = shift @{$keys};
- next if $skip->{$file}++;
- next if is_insensitive_fs()
- and $file ne lc($file) and $skip->{lc($file)}++;
-
- local *FH;
- open FH, $file or die "Cannot open $file: $!";
-
- $SeenTk = 0;
-
- # Line-by-line scanning
- LINE:
- while (<FH>) {
- chomp(my $line = $_);
- foreach my $pm (scan_line($line)) {
- last LINE if $pm eq '__END__';
-
- if ($pm eq '__POD__') {
- while (<FH>) { last if (/^=cut/) }
- next LINE;
- }
-
- $pm = 'CGI/Apache.pm' if /^Apache(?:\.pm)$/;
-
- add_deps(
- used_by => $key,
- rv => $rv,
- modules => [$pm],
- skip => $skip
- );
-
- my $preload = $Preload{$pm} or next;
- if ($preload eq 'sub') {
- $pm =~ s/\.p[mh]$//i;
- $preload = [ _glob_in_inc($pm, 1) ];
- }
- elsif (UNIVERSAL::isa($preload, 'CODE')) {
- $preload = [ $preload->($pm) ];
- }
-
- add_deps(
- used_by => $key,
- rv => $rv,
- modules => $preload,
- skip => $skip
- );
- }
- }
- close FH;
-
- # }}}
- }
-
- # Top-level recursion handling {{{
- while ($recurse) {
- my $count = keys %$rv;
- my @files = sort grep -T $_->{file}, values %$rv;
- scan_deps_static({
- files => [ map $_->{file}, @files ],
- keys => [ map $_->{key}, @files ],
- rv => $rv,
- skip => $skip,
- recurse => 0,
- }) or ($args->{_deep} and return);
- last if $count == keys %$rv;
- }
-
- # }}}
-
- return $rv;
-}
-
-sub scan_deps_runtime {
- my %args = (
- perl => $^X,
- rv => {},
- (@_ and $_[0] =~ /^(?:$Keys)$/o) ? @_ : (files => [@_], recurse => 1)
- );
- my ($files, $rv, $execute, $compile, $skip, $perl) =
- @args{qw( files rv execute compile skip perl )};
-
- $files = (ref($files)) ? $files : [$files];
-
- my ($inchash, $incarray, $dl_shared_objects) = ({}, [], []);
- if ($compile) {
- my $file;
-
- foreach $file (@$files) {
- ($inchash, $dl_shared_objects, $incarray) = ({}, [], []);
- _compile($perl, $file, $inchash, $dl_shared_objects, $incarray);
-
- my $rv_sub = _make_rv($inchash, $dl_shared_objects, $incarray);
- _merge_rv($rv_sub, $rv);
- }
- }
- elsif ($execute) {
- my $excarray = (ref($execute)) ? $execute : [@$files];
- my $exc;
- my $first_flag = 1;
- foreach $exc (@$excarray) {
- ($inchash, $dl_shared_objects, $incarray) = ({}, [], []);
- _execute(
- $perl, $exc, $inchash, $dl_shared_objects, $incarray,
- $first_flag
- );
- $first_flag = 0;
- }
-
- my $rv_sub = _make_rv($inchash, $dl_shared_objects, $incarray);
- _merge_rv($rv_sub, $rv);
- }
-
- return ($rv);
-}
-
-sub scan_line {
- my $line = shift;
- my %found;
-
- return '__END__' if $line =~ /^__(?:END|DATA)__$/;
- return '__POD__' if $line =~ /^=\w/;
-
- $line =~ s/\s*#.*$//;
- $line =~ s/[\\\/]+/\//g;
-
- foreach (split(/;/, $line)) {
- if (/^\s*package\s+(\w+);/) {
- $CurrentPackage = $1;
- $CurrentPackage =~ s{::}{/}g;
- return;
- }
- return if /^\s*(use|require)\s+[\d\._]+/;
-
- if (my ($libs) = /\b(?:use\s+lib\s+|(?:unshift|push)\W+\@INC\W+)(.+)/)
- {
- my $archname =
- defined($Config{archname}) ? $Config{archname} : '';
- my $ver = defined($Config{version}) ? $Config{version} : '';
- foreach (grep(/\w/, split(/["';() ]/, $libs))) {
- unshift(@INC, "$_/$ver") if -d "$_/$ver";
- unshift(@INC, "$_/$archname") if -d "$_/$archname";
- unshift(@INC, "$_/$ver/$archname") if -d "$_/$ver/$archname";
- }
- next;
- }
-
- $found{$_}++ for scan_chunk($_);
- }
-
- return sort keys %found;
-}
-
-sub scan_chunk {
- my $chunk = shift;
-
- # Module name extraction heuristics {{{
- my $module = eval {
- $_ = $chunk;
-
- return [ 'base.pm',
- map { s{::}{/}g; "$_.pm" }
- grep { length and !/^q[qw]?$/ } split(/[^\w:]+/, $1) ]
- if /^\s* use \s+ base \s+ (.*)/sx;
-
- return [ 'Class/Autouse.pm',
- map { s{::}{/}g; "$_.pm" }
- grep { length and !/^:|^q[qw]?$/ } split(/[^\w:]+/, $1) ]
- if /^\s* use \s+ Class::Autouse \s+ (.*)/sx
- or /^\s* Class::Autouse \s* -> \s* autouse \s* (.*)/sx;
-
- return [ 'POE.pm',
- map { s{::}{/}g; "POE/$_.pm" }
- grep { length and !/^q[qw]?$/ } split(/[^\w:]+/, $1) ]
- if /^\s* use \s+ POE \s+ (.*)/sx;
-
- return [ 'encoding.pm',
- map { _find_encoding($_) }
- grep { length and !/^q[qw]?$/ } split(/[^\w:]+/, $1) ]
- if /^\s* use \s+ encoding \s+ (.*)/sx;
-
- return $1 if /(?:^|\s)(?:use|no|require)\s+([\w:\.\-\\\/\"\']+)/;
- return $1
- if /(?:^|\s)(?:use|no|require)\s+\(\s*([\w:\.\-\\\/\"\']+)\s*\)/;
-
- if ( s/(?:^|\s)eval\s+\"([^\"]+)\"/$1/
- or s/(?:^|\s)eval\s*\(\s*\"([^\"]+)\"\s*\)/$1/)
- {
- return $1 if /(?:^|\s)(?:use|no|require)\s+([\w:\.\-\\\/\"\']*)/;
- }
-
- return "File/Glob.pm" if /<[^>]*[^\$\w>][^>]*>/;
- return "DBD/$1.pm" if /\b[Dd][Bb][Ii]:(\w+):/;
- if (/(?:(:encoding)|\b(?:en|de)code)\(\s*['"]?([-\w]+)/) {
- my $mod = _find_encoding($2);
- return [ 'PerlIO.pm', $mod ] if $1 and $mod;
- return $mod if $mod;
- }
- return $1 if /(?:^|\s)(?:do|require)\s+[^"]*"(.*?)"/;
- return $1 if /(?:^|\s)(?:do|require)\s+[^']*'(.*?)'/;
- return $1 if /[^\$]\b([\w:]+)->\w/ and $1 ne 'Tk';
- return $1 if /\b(\w[\w:]*)::\w+\(/;
-
- if ($SeenTk) {
- my @modules;
- while (/->\s*([A-Z]\w+)/g) {
- push @modules, "Tk/$1.pm";
- }
- while (/->\s*Scrolled\W+([A-Z]\w+)/g) {
- push @modules, "Tk/$1.pm";
- push @modules, "Tk/Scrollbar.pm";
- }
- return \@modules;
- }
- return;
- };
-
- # }}}
-
- return unless defined($module);
- return wantarray ? @$module : $module->[0] if ref($module);
-
- $module =~ s/^['"]//;
- return unless $module =~ /^\w/;
-
- $module =~ s/\W+$//;
- $module =~ s/::/\//g;
- return if $module =~ /^(?:[\d\._]+|'.*[^']|".*[^"])$/;
-
- $module .= ".pm" unless $module =~ /\./;
- return $module;
-}
-
-sub _find_encoding {
- return unless $] >= 5.008 and eval { require Encode; %Encode::ExtModule };
-
- my $mod = $Encode::ExtModule{ Encode::find_encoding($_[0])->name }
- or return;
- $mod =~ s{::}{/}g;
- return "$mod.pm";
-}
-
-sub _add_info {
- my ($rv, $module, $file, $used_by, $type) = @_;
- return unless defined($module) and defined($file);
-
- $rv->{$module} ||= {
- file => $file,
- key => $module,
- type => $type,
- };
-
- push @{ $rv->{$module}{used_by} }, $used_by
- if defined($used_by)
- and $used_by ne $module
- and !grep { $_ eq $used_by } @{ $rv->{$module}{used_by} };
-}
-
-sub add_deps {
- my %args =
- ((@_ and $_[0] =~ /^(?:modules|rv|used_by)$/)
- ? @_
- : (rv => (ref($_[0]) ? shift(@_) : undef), modules => [@_]));
-
- my $rv = $args{rv} || {};
- my $skip = $args{skip} || {};
- my $used_by = $args{used_by};
-
- foreach my $module (@{ $args{modules} }) {
- next if exists $rv->{$module};
-
- my $file = _find_in_inc($module) or next;
- next if $skip->{$file};
- next if is_insensitive_fs() and $skip->{lc($file)};
-
- my $type = 'module';
- $type = 'data' unless $file =~ /\.p[mh]$/i;
- _add_info($rv, $module, $file, $used_by, $type);
-
- if ($module =~ /(.*?([^\/]*))\.p[mh]$/i) {
- my ($path, $basename) = ($1, $2);
-
- foreach (_glob_in_inc("auto/$path")) {
- next if $skip->{$_->{file}};
- next if is_insensitive_fs() and $skip->{lc($_->{file})};
- next if $_->{file} =~ m{\bauto/$path/.*/}; # weed out subdirs
- next if $_->{name} =~ m/(?:^|\/)\.(?:exists|packlist)$/;
- my $ext = lc($1) if $_->{name} =~ /(\.[^.]+)$/;
- next if $ext eq lc(lib_ext());
- my $type = 'shared' if $ext eq lc(dl_ext());
- $type = 'autoload' if $ext eq '.ix' or $ext eq '.al';
- $type ||= 'data';
-
- _add_info($rv, "auto/$path/$_->{name}", $_->{file}, $module,
- $type);
- }
- }
- }
-
- return $rv;
-}
-
-sub _find_in_inc {
- my $file = shift;
-
- # absolute file names
- return $file if -f $file;
-
- foreach my $dir (grep !/\bBSDPAN\b/, @INC) {
- return "$dir/$file" if -f "$dir/$file";
- }
- return;
-}
-
-sub _glob_in_inc {
- my $subdir = shift;
- my $pm_only = shift;
- my @files;
-
- require File::Find;
-
- foreach my $dir (map "$_/$subdir", grep !/\bBSDPAN\b/, @INC) {
- next unless -d $dir;
- File::Find::find({
- "wanted" => sub {
- my $name = $File::Find::name;
- $name =~ s!^\Q$dir\E/!!;
- return if $pm_only and lc($name) !~ /\.p[mh]$/i;
- push @files, $pm_only
- ? "$subdir/$name"
- : { file => $File::Find::name,
- name => $name,
- }
- if -f;
- },
- "untaint" => 1,
- "untaint_skip" => 1,
- "untaint_pattern" => qr|^([-+@\w./]+)$|
- }, $dir
- );
- }
-
- return @files;
-}
-
-# App::Packer compatibility functions
-
-sub new {
- my ($class, $self) = @_;
- return bless($self ||= {}, $class);
-}
-
-sub set_file {
- my $self = shift;
- foreach my $script (@_) {
- my $basename = $script;
- $basename =~ s/.*\///;
- $self->{main} = {
- key => $basename,
- file => $script,
- };
- }
-}
-
-sub set_options {
- my $self = shift;
- my %args = @_;
- foreach my $module (@{ $args{add_modules} }) {
- $module =~ s/::/\//g;
- $module .= '.pm' unless $module =~ /\.p[mh]$/i;
- my $file = _find_in_inc($module) or next;
- $self->{files}{$module} = $file;
- }
-}
-
-sub calculate_info {
- my $self = shift;
- my $rv = scan_deps(
- keys => [ $self->{main}{key}, sort keys %{ $self->{files} }, ],
- files => [ $self->{main}{file},
- map { $self->{files}{$_} } sort keys %{ $self->{files} },
- ],
- recurse => 1,
- );
-
- my $info = {
- main => { file => $self->{main}{file},
- store_as => $self->{main}{key},
- },
- };
-
- my %cache = ($self->{main}{key} => $info->{main});
- foreach my $key (sort keys %{ $self->{files} }) {
- my $file = $self->{files}{$key};
-
- $cache{$key} = $info->{modules}{$key} = {
- file => $file,
- store_as => $key,
- used_by => [ $self->{main}{key} ],
- };
- }
-
- foreach my $key (sort keys %{$rv}) {
- my $val = $rv->{$key};
- if ($cache{ $val->{key} }) {
- push @{ $info->{ $val->{type} }->{ $val->{key} }->{used_by} },
- @{ $val->{used_by} };
- }
- else {
- $cache{ $val->{key} } = $info->{ $val->{type} }->{ $val->{key} } =
- { file => $val->{file},
- store_as => $val->{key},
- used_by => $val->{used_by},
- };
- }
- }
-
- $self->{info} = { main => $info->{main} };
-
- foreach my $type (sort keys %{$info}) {
- next if $type eq 'main';
-
- my @val;
- if (UNIVERSAL::isa($info->{$type}, 'HASH')) {
- foreach my $val (sort values %{ $info->{$type} }) {
- @{ $val->{used_by} } = map $cache{$_} || "!!$_!!",
- @{ $val->{used_by} };
- push @val, $val;
- }
- }
-
- $type = 'modules' if $type eq 'module';
- $self->{info}{$type} = \@val;
- }
-}
-
-sub get_files {
- my $self = shift;
- return $self->{info};
-}
-
-# scan_deps_runtime utility functions
-
-sub _compile {
- my ($perl, $file, $inchash, $dl_shared_objects, $incarray) = @_;
-
- my $fname = File::Temp::mktemp("$file.XXXXXX");
- my $fhin = FileHandle->new($file) or die "Couldn't open $file\n";
- my $fhout = FileHandle->new("> $fname") or die "Couldn't open $fname\n";
-
- my $line = do { local $/; <$fhin> };
- $line =~ s/use Module::ScanDeps::DataFeed.*?\n//sg;
- $line =~ s/^(.*?)((?:[\r\n]+__(?:DATA|END)__[\r\n]+)|$)/
-use Module::ScanDeps::DataFeed '$fname.out';
-sub {
-$1
-}
-$2/s;
- $fhout->print($line);
- $fhout->close;
- $fhin->close;
-
- system($perl, $fname);
-
- _extract_info("$fname.out", $inchash, $dl_shared_objects, $incarray);
- unlink("$fname");
- unlink("$fname.out");
-}
-
-sub _execute {
- my ($perl, $file, $inchash, $dl_shared_objects, $incarray, $firstflag) = @_;
-
- $DB::single = $DB::single = 1;
-
- my $fname = _abs_path(File::Temp::mktemp("$file.XXXXXX"));
- my $fhin = FileHandle->new($file) or die "Couldn't open $file";
- my $fhout = FileHandle->new("> $fname") or die "Couldn't open $fname";
-
- my $line = do { local $/; <$fhin> };
- $line =~ s/use Module::ScanDeps::DataFeed.*?\n//sg;
- $line = "use Module::ScanDeps::DataFeed '$fname.out';\n" . $line;
- $fhout->print($line);
- $fhout->close;
- $fhin->close;
-
- File::Path::rmtree( ['_Inline'], 0, 1); # XXX hack
- system($perl, $fname) == 0 or die "SYSTEM ERROR in executing $file: $?";
-
- _extract_info("$fname.out", $inchash, $dl_shared_objects, $incarray);
- unlink("$fname");
- unlink("$fname.out");
-}
-
-sub _make_rv {
- my ($inchash, $dl_shared_objects, $inc_array) = @_;
-
- my $rv = {};
- my @newinc = map(quotemeta($_), @$inc_array);
- my $inc = join('|', sort { length($b) <=> length($a) } @newinc);
-
- require File::Spec;
-
- my $key;
- foreach $key (keys(%$inchash)) {
- my $newkey = $key;
- $newkey =~ s"^(?:(?:$inc)/?)""sg if File::Spec->file_name_is_absolute($newkey);
-
- $rv->{$newkey} = {
- 'used_by' => [],
- 'file' => $inchash->{$key},
- 'type' => _gettype($inchash->{$key}),
- 'key' => $key
- };
- }
-
- my $dl_file;
- foreach $dl_file (@$dl_shared_objects) {
- my $key = $dl_file;
- $key =~ s"^(?:(?:$inc)/?)""s;
-
- $rv->{$key} = {
- 'used_by' => [],
- 'file' => $dl_file,
- 'type' => 'shared',
- 'key' => $key
- };
- }
-
- return $rv;
-}
-
-sub _extract_info {
- my ($fname, $inchash, $dl_shared_objects, $incarray) = @_;
-
- use vars qw(%inchash @dl_shared_objects @incarray);
- my $fh = FileHandle->new($fname) or die "Couldn't open $fname";
- my $line = do { local $/; <$fh> };
- $fh->close;
-
- eval $line;
-
- $inchash->{$_} = $inchash{$_} for keys %inchash;
- @$dl_shared_objects = @dl_shared_objects;
- @$incarray = @incarray;
-}
-
-sub _gettype {
- my $name = shift;
- my $dlext = quotemeta(dl_ext());
-
- return 'autoload' if $name =~ /(?:\.ix|\.al|\.bs)$/i;
- return 'module' if $name =~ /\.p[mh]$/i;
- return 'shared' if $name =~ /\.$dlext$/i;
- return 'data';
-}
-
-sub _merge_rv {
- my ($rv_sub, $rv) = @_;
-
- my $key;
- foreach $key (keys(%$rv_sub)) {
- my %mark;
- if ($rv->{$key} and _not_dup($key, $rv, $rv_sub)) {
- warn "different modules for file: $key: were found" .
- "(using the version) after the '=>': ".
- "$rv->{$key}{file} => $rv_sub->{$key}{file}\n";
-
- $rv->{$key}{used_by} = [
- grep (!$mark{$_}++,
- @{ $rv->{$key}{used_by} },
- @{ $rv_sub->{$key}{used_by} })
- ];
- @{ $rv->{$key}{used_by} } = grep length, @{ $rv->{$key}{used_by} };
- $rv->{$key}{file} = $rv_sub->{$key}{file};
- }
- elsif ($rv->{$key}) {
- $rv->{$key}{used_by} = [
- grep (!$mark{$_}++,
- @{ $rv->{$key}{used_by} },
- @{ $rv_sub->{$key}{used_by} })
- ];
- @{ $rv->{$key}{used_by} } = grep length, @{ $rv->{$key}{used_by} };
- }
- else {
- $rv->{$key} = {
- used_by => [ @{ $rv_sub->{$key}{used_by} } ],
- file => $rv_sub->{$key}{file},
- key => $rv_sub->{$key}{key},
- type => $rv_sub->{$key}{type}
- };
-
- @{ $rv->{$key}{used_by} } = grep length, @{ $rv->{$key}{used_by} };
- }
- }
-}
-
-sub _not_dup {
- my ($key, $rv1, $rv2) = @_;
- (_abs_path($rv1->{$key}{file}) ne _abs_path($rv2->{$key}{file}));
-}
-
-sub _abs_path {
- return join(
- '/',
- Cwd::abs_path(File::Basename::dirname($_[0])),
- File::Basename::basename($_[0]),
- );
-}
-
-#####################################################
-### Actual perldeps.pl code starts here.
-
-# Print usage information
-sub
-print_usage_info($)
-{
- my $code = shift || 0;
- my ($leader, $underbar);
-
- print "\n";
- $leader = "$0 Usage Information";
- $underbar = $leader;
- $underbar =~ s/./-/g;
- print "$leader\n$underbar\n";
- print "\n";
- print " Syntax: $0 [ options ] [ path(s)/file(s) ]\n";
- print "\n";
- print " -h --help Show this usage information\n";
- print " -v --version Show version and copyright\n";
- print " -d --debug Turn on debugging\n";
- print " -p --provides Find things provided by path(s)/file(s)\n";
- print " -r --requires Find things required by path(s)/file(s)\n";
- #print " \n";
- print "\nNOTE: Path(s)/file(s) can also be specified on STDIN. Default is \@INC.\n\n";
- exit($code);
-}
-
-# Locate perl modules (*.pm) in given locations.
-sub
-find_perl_modules(@)
-{
- my @locations = @_;
- my %modules;
-
- foreach my $loc (@locations) {
- if (-f $loc) {
- # It's a file. Assume it's a Perl module.
- #print "Found module: $loc.\n";
- $modules{$loc} = 1;
- } elsif (-d $loc) {
- my @tmp;
-
- # Recurse the directory tree looking for all modules inside it.
- &File::Find::find({
- "wanted" => sub {
- if ((-s _) && (substr($File::Find::fullname, -3, 3) eq ".pm")) {
- push @tmp, $File::Find::fullname;
- }
- },
- "follow_fast" => 1,
- "no_chdir" => 1,
- "untaint" => 1,
- "untaint_skip" => 1,
- "untaint_pattern" => qr|^([-+@\w./]+)$|
- }, $loc);
-
- # @tmp is now a list with all non-empty *.pm files in and under $loc.
- # Untaint and save in %modules hash.
- foreach my $module (@tmp) {
- if ($module =~ /^([-+@\w.\/]+)$/) {
- $modules{$1} = 1;
- #print "Found module: $1\n";
- }
- }
- } else {
- # Something wicked this way comes.
- print STDERR "$0: Error: Don't know what to do with location \"$loc\"\n";
- }
- }
- return keys(%modules);
-}
-
-# Generate an RPM-style "Provides:" list for the given modules.
-sub
-find_provides(@)
-{
- my @modules = @_;
- my @prov;
-
- foreach my $mod (@modules) {
- my (@contents, @pkgs);
- my $mod_path;
- local *MOD;
-
- $mod_path = dirname($mod);
- if (!open(MOD, $mod)) {
- warn "Unable to read module $mod -- $!\n";
- next;
- }
- @contents = <MOD>;
- if (!close(MOD)) {
- warn "Unable to close module $mod -- $!\n";
- }
-
- if (!scalar(grep { $_ eq $mod_path } @INC)) {
- push @INC, $mod_path;
- }
- foreach my $line (grep { $_ =~ /^\s*package\s+/ } @contents) {
- if ($line =~ /^\s*package\s+([^\;\s]+)\s*\;/) {
- push @pkgs, $1;
- }
- }
-
- # Now we have a list of packages. Load up the modules and get their versions.
- foreach my $pkg (@pkgs) {
- my $ret;
- local ($SIG{"__WARN__"}, $SIG{"__DIE__"});
-
- # Make sure eval() can't display warnings/errors.
- $SIG{"__DIE__"} = $SIG{"__WARN__"} = sub {0;};
- $ret = eval("no strict ('vars', 'subs', 'refs'); use $pkg (); return $pkg->VERSION || 0.0;");
- if ($@) {
- dprint "Unable to parse version number from $pkg -- $@. Assuming 0.\n";
- $ret = 0;
- }
-
- if (! $ret) {
- $ret = 0;
- }
- push @prov, "perl($pkg) = $ret";
- }
- }
- printf("Provides: %s\n", join(", ", sort(@prov)));
-}
-
-# Generate an RPM-style "Requires:" list for the given modules.
-sub
-find_requires(@)
-{
- my @modules = @_;
- my @reqs;
- my $reqs;
-
- $reqs = &scan_deps("files" => \@modules, "recurse" => 0);
- foreach my $key (grep { $reqs->{$_}{"type"} eq "module" } sort(keys(%{$reqs}))) {
- if (substr($key, -3, 3) eq ".pm") {
- $key = substr($key, 0, -3);
- }
- $key =~ s!/!::!g;
- push @reqs, "perl($key)";
- }
- printf("Requires: %s\n", join(", ", @reqs));
-}
-
-sub
-main()
-{
- my $VERSION = '1.0';
- my (@locations, @modules);
- my %OPTION;
-
- # For taint checks
- delete @ENV{("IFS", "CDPATH", "ENV", "BASH_ENV")};
- $ENV{"PATH"} = "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/ucb";
- foreach my $shell ("/bin/bash", "/usr/bin/ksh", "/bin/ksh", "/bin/sh", "/sbin/sh") {
- if (-f $shell) {
- $ENV{"SHELL"} = $shell;
- last;
- }
- }
-
- $ENV{"LANG"} = "C" if (! $ENV{"LANG"});
- umask 022;
- select STDERR; $| = 1;
- select STDOUT; $| = 1;
-
- Getopt::Long::Configure("no_getopt_compat", "bundling", "no_ignore_case");
- Getopt::Long::GetOptions(\%OPTION, "debug|d!", "help|h", "version|v", "provides|p", "requires|r");
-
- # Post-parse the options stuff
- select STDOUT; $| = 1;
- if ($OPTION{"version"}) {
- # Do not edit this variable. It is updated automatically by CVS when you commit
- my $rcs_info = 'CVS Revision $Revision: 1.6 $ created on $Date: 2006/04/04 20:12:03 $ by $Author: mej $ ';
-
- $rcs_info =~ s/\$\s*Revision: (\S+) \$/$1/;
- $rcs_info =~ s/\$\s*Date: (\S+) (\S+) \$/$1 at $2/;
- $rcs_info =~ s/\$\s*Author: (\S+) \$ /$1/;
- print "\n";
- print "perldeps.pl $VERSION by Michael Jennings <mej\@eterm.org>\n";
- print "Copyright (c) 2005-2006, Michael Jennings\n";
- print " ($rcs_info)\n";
- print "\n";
- return 0;
- } elsif ($OPTION{"help"}) {
- &print_usage_info(0); # Never returns
- }
-
- push @locations, @ARGV;
- if (!scalar(@ARGV) && !(-t STDIN)) {
- @locations = <STDIN>;
- }
- if (!scalar(@locations)) {
- @locations = @INC;
- }
-
- if (!($OPTION{"provides"} || $OPTION{"requires"})) {
- &print_usage_info(-1); # Never returns
- }
-
- # Catch bogus warning messages like "A thread exited while 2 threads were running"
- $SIG{"__DIE__"} = $SIG{"__WARN__"} = sub {0;};
-
- @modules = &find_perl_modules(@locations);
- if ($OPTION{"provides"}) {
- &find_provides(@modules);
- }
- if ($OPTION{"requires"}) {
- &find_requires(@modules);
- }
- return 0;
-}
-
-exit &main();
diff --git a/scripts/pkgconfigdeps.sh b/scripts/pkgconfigdeps.sh
index 270dd745b..ef4581856 100755
--- a/scripts/pkgconfigdeps.sh
+++ b/scripts/pkgconfigdeps.sh
@@ -16,6 +16,9 @@ $pkgconfig --atleast-pkgconfig-version="0.24" || {
exit 0
}
+# Under pkgconf, disables dependency resolver
+export PKG_CONFIG_MAXIMUM_TRAVERSE_DEPTH=1
+
case $1 in
-P|--provides)
while read filename ; do
diff --git a/scripts/python-macro-helper b/scripts/python-macro-helper
new file mode 100755
index 000000000..4bc8f55b9
--- /dev/null
+++ b/scripts/python-macro-helper
@@ -0,0 +1,27 @@
+
+
+from distutils.sysconfig import get_python_lib
+from platform import python_version_tuple
+import sys
+
+
+if __name__ == "__main__":
+
+ if len(sys.argv) < 2:
+ sys.stderr.write("Usage: %s <command>\n" % sys.argv[0])
+ sys.exit(1)
+
+ if sys.argv[1] == "version":
+ sys.stdout.write(".".join(python_version_tuple()[:2]))
+ sys.exit(0)
+
+ if sys.argv[1] == "sitelib":
+ sys.stdout.write(get_python_lib())
+ sys.exit(0)
+
+ if sys.argv[1] == "sitearch":
+ sys.stdout.write(get_python_lib(1))
+ sys.exit(0)
+
+ sys.stderr.write("Unknown command: %s\n" % sys.argv[1])
+ sys.exit(1)
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
new file mode 100755
index 000000000..b442af1c2
--- /dev/null
+++ b/scripts/pythondistdeps.py
@@ -0,0 +1,240 @@
+
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Per Øyvind Karlsen <proyvind@moondrake.org>
+# Copyright 2015 Neal Gompa <ngompa13@gmail.com>
+#
+# This program is free software. It may be redistributed and/or modified under
+# the terms of the LGPL version 2.1 (or later).
+#
+# RPM python dependency generator, using .egg-info/.egg-link/.dist-info data
+#
+
+from __future__ import print_function
+from getopt import getopt
+from os.path import basename, dirname, isdir, sep
+from sys import argv, stdin, version
+from distutils.sysconfig import get_python_lib
+from warnings import warn
+
+
+opts, args = getopt(
+ argv[1:], 'hPRrCEMmLl:',
+ ['help', 'provides', 'requires', 'recommends', 'conflicts', 'extras', 'majorver-provides', 'majorver-only', 'legacy-provides' , 'legacy'])
+
+Provides = False
+Requires = False
+Recommends = False
+Conflicts = False
+Extras = False
+Provides_PyMajorVer_Variant = False
+PyMajorVer_Deps = False
+legacy_Provides = False
+legacy = False
+
+for o, a in opts:
+ if o in ('-h', '--help'):
+ print('-h, --help\tPrint help')
+ print('-P, --provides\tPrint Provides')
+ print('-R, --requires\tPrint Requires')
+ print('-r, --recommends\tPrint Recommends')
+ print('-C, --conflicts\tPrint Conflicts')
+ print('-E, --extras\tPrint Extras ')
+ print('-M, --majorver-provides\tPrint extra Provides with Python major version only')
+ print('-m, --majorver-only\tPrint Provides/Requires with Python major version only')
+ print('-L, --legacy-provides\tPrint extra legacy pythonegg Provides')
+ print('-l, --legacy\tPrint legacy pythonegg Provides/Requires instead')
+ exit(1)
+ elif o in ('-P', '--provides'):
+ Provides = True
+ elif o in ('-R', '--requires'):
+ Requires = True
+ elif o in ('-r', '--recommends'):
+ Recommends = True
+ elif o in ('-C', '--conflicts'):
+ Conflicts = True
+ elif o in ('-E', '--extras'):
+ Extras = True
+ elif o in ('-M', '--majorver-provides'):
+ Provides_PyMajorVer_Variant = True
+ elif o in ('-m', '--majorver-only'):
+ PyMajorVer_Deps = True
+ elif o in ('-L', '--legacy-provides'):
+ legacy_Provides = True
+ elif o in ('-l', '--legacy'):
+ legacy = True
+
+if Requires:
+ py_abi = True
+else:
+ py_abi = False
+py_deps = {}
+if args:
+ files = args
+else:
+ files = stdin.readlines()
+
+for f in files:
+ f = f.strip()
+ lower = f.lower()
+ name = 'python(abi)'
+ # add dependency based on path, versioned if within versioned python directory
+ if py_abi and (lower.endswith('.py') or lower.endswith('.pyc') or lower.endswith('.pyo')):
+ if name not in py_deps:
+ py_deps[name] = []
+ purelib = get_python_lib(standard_lib=1, plat_specific=0).split(version[:3])[0]
+ platlib = get_python_lib(standard_lib=1, plat_specific=1).split(version[:3])[0]
+ for lib in (purelib, platlib):
+ if lib in f:
+ spec = ('==', f.split(lib)[1].split(sep)[0])
+ if spec not in py_deps[name]:
+ py_deps[name].append(spec)
+
+ # XXX: hack to workaround RPM internal dependency generator not passing directories
+ lower_dir = dirname(lower)
+ if lower_dir.endswith('.egg') or \
+ lower_dir.endswith('.egg-info') or \
+ lower_dir.endswith('.dist-info'):
+ lower = lower_dir
+ f = dirname(f)
+ # Determine provide, requires, conflicts & recommends based on egg/dist metadata
+ if lower.endswith('.egg') or \
+ lower.endswith('.egg-info') or \
+ lower.endswith('.dist-info'):
+ # This import is very slow, so only do it if needed
+ from pkg_resources import Distribution, FileMetadata, PathMetadata
+ dist_name = basename(f)
+ if isdir(f):
+ path_item = dirname(f)
+ metadata = PathMetadata(path_item, f)
+ else:
+ path_item = f
+ metadata = FileMetadata(f)
+ dist = Distribution.from_location(path_item, dist_name, metadata)
+ # Check if py_version is defined in the metadata file/directory name
+ if not dist.py_version:
+ # Try to parse the Python version from the path the metadata
+ # resides at (e.g. /usr/lib/pythonX.Y/site-packages/...)
+ import re
+ res = re.search(r"/python(?P<pyver>\d+\.\d)/", path_item)
+ if res:
+ dist.py_version = res.group('pyver')
+ else:
+ warn("Version for {!r} has not been found".format(dist), RuntimeWarning)
+ continue
+ if Provides_PyMajorVer_Variant or PyMajorVer_Deps or legacy_Provides or legacy:
+ # Get the Python major version
+ pyver_major = dist.py_version.split('.')[0]
+ if Provides:
+ # If egg/dist metadata says package name is python, we provide python(abi)
+ if dist.key == 'python':
+ name = 'python(abi)'
+ if name not in py_deps:
+ py_deps[name] = []
+ py_deps[name].append(('==', dist.py_version))
+ if not legacy or not PyMajorVer_Deps:
+ name = 'python{}dist({})'.format(dist.py_version, dist.key)
+ if name not in py_deps:
+ py_deps[name] = []
+ if Provides_PyMajorVer_Variant or PyMajorVer_Deps:
+ pymajor_name = 'python{}dist({})'.format(pyver_major, dist.key)
+ if pymajor_name not in py_deps:
+ py_deps[pymajor_name] = []
+ if legacy or legacy_Provides:
+ legacy_name = 'pythonegg({})({})'.format(pyver_major, dist.key)
+ if legacy_name not in py_deps:
+ py_deps[legacy_name] = []
+ if dist.version:
+ spec = ('==', dist.version)
+ if spec not in py_deps[name]:
+ if not legacy:
+ py_deps[name].append(spec)
+ if Provides_PyMajorVer_Variant:
+ py_deps[pymajor_name].append(spec)
+ if legacy or legacy_Provides:
+ py_deps[legacy_name].append(spec)
+ if Requires or (Recommends and dist.extras):
+ name = 'python(abi)'
+ # If egg/dist metadata says package name is python, we don't add dependency on python(abi)
+ if dist.key == 'python':
+ py_abi = False
+ if name in py_deps:
+ py_deps.pop(name)
+ elif py_abi and dist.py_version:
+ if name not in py_deps:
+ py_deps[name] = []
+ spec = ('==', dist.py_version)
+ if spec not in py_deps[name]:
+ py_deps[name].append(spec)
+ deps = dist.requires()
+ if Recommends:
+ depsextras = dist.requires(extras=dist.extras)
+ if not Requires:
+ for dep in reversed(depsextras):
+ if dep in deps:
+ depsextras.remove(dep)
+ deps = depsextras
+ # add requires/recommends based on egg/dist metadata
+ for dep in deps:
+ if legacy:
+ name = 'pythonegg({})({})'.format(pyver_major, dep.key)
+ else:
+ if PyMajorVer_Deps:
+ name = 'python{}dist({})'.format(pyver_major, dep.key)
+ else:
+ name = 'python{}dist({})'.format(dist.py_version, dep.key)
+ for spec in dep.specs:
+ if spec[0] != '!=':
+ if name not in py_deps:
+ py_deps[name] = []
+ if spec not in py_deps[name]:
+ py_deps[name].append(spec)
+ if not dep.specs:
+ py_deps[name] = []
+ # Unused, for automatic sub-package generation based on 'extras' from egg/dist metadata
+ # TODO: implement in rpm later, or...?
+ if Extras:
+ deps = dist.requires()
+ extras = dist.extras
+ print(extras)
+ for extra in extras:
+ print('%%package\textras-{}'.format(extra))
+ print('Summary:\t{} extra for {} python package'.format(extra, dist.key))
+ print('Group:\t\tDevelopment/Python')
+ depsextras = dist.requires(extras=[extra])
+ for dep in reversed(depsextras):
+ if dep in deps:
+ depsextras.remove(dep)
+ deps = depsextras
+ for dep in deps:
+ for spec in dep.specs:
+ if spec[0] == '!=':
+ print('Conflicts:\t{} {} {}'.format(dep.key, '==', spec[1]))
+ else:
+ print('Requires:\t{} {} {}'.format(dep.key, spec[0], spec[1]))
+ print('%%description\t{}'.format(extra))
+ print('{} extra for {} python package'.format(extra, dist.key))
+ print('%%files\t\textras-{}\n'.format(extra))
+ if Conflicts:
+ # Should we really add conflicts for extras?
+ # Creating a meta package per extra with recommends on, which has
+ # the requires/conflicts in stead might be a better solution...
+ for dep in dist.requires(extras=dist.extras):
+ name = dep.key
+ for spec in dep.specs:
+ if spec[0] == '!=':
+ if name not in py_deps:
+ py_deps[name] = []
+ spec = ('==', spec[1])
+ if spec not in py_deps[name]:
+ py_deps[name].append(spec)
+names = list(py_deps.keys())
+names.sort()
+for name in names:
+ if py_deps[name]:
+ # Print out versioned provides, requires, recommends, conflicts
+ for spec in py_deps[name]:
+ print('{} {} {}'.format(name, spec[0], spec[1]))
+ else:
+ # Print out unversioned provides, requires, recommends, conflicts
+ print(name)
diff --git a/scripts/rpm2cpio.sh b/scripts/rpm2cpio.sh
index cb93ead8a..a883562ac 100755
--- a/scripts/rpm2cpio.sh
+++ b/scripts/rpm2cpio.sh
@@ -1,41 +1,54 @@
-#!/bin/sh
-
-# Prevent gawk >= 4.0.x from getting funny ideas wrt UTF in printf()
-LANG=C
-
-pkg=$1
-if [ "$pkg" = "" -o ! -e "$pkg" ]; then
- echo "no package supplied" 1>&2
- exit 1
-fi
-
-leadsize=96
-o=`expr $leadsize + 8`
-set `od -j $o -N 8 -t u1 $pkg`
-il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
-dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
-# echo "sig il: $il dl: $dl"
-
-sigsize=`expr 8 + 16 \* $il + $dl`
-o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8`
-set `od -j $o -N 8 -t u1 $pkg`
-il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
-dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
-# echo "hdr il: $il dl: $dl"
-
-hdrsize=`expr 8 + 16 \* $il + $dl`
-o=`expr $o + $hdrsize`
-
-comp=`dd if="$pkg" ibs=$o skip=1 count=1 2>/dev/null \
- | dd bs=3 count=1 2>/dev/null`
-
-gz="`echo . | awk '{ printf("%c%c", 0x1f, 0x8b); }'`"
-lzma="`echo . | awk '{ printf("%cLZ", 0xff); }'`"
-xz="`echo . | awk '{ printf("%c7z", 0xfd); }'`"
-case "$comp" in
- BZh) dd if="$pkg" ibs=$o skip=1 2>/dev/null | bunzip2 ;;
- "$gz"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | gunzip ;;
- "$xz"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | xzcat ;;
- "$lzma"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | unlzma ;;
- *) echo "Unrecognized rpm file: $pkg"; exit 1 ;;
+#!/bin/sh -efu
+
+fatal() {
+ echo "$*" >&2
+ exit 1
+}
+
+pkg="$1"
+[ -n "$pkg" -a -e "$pkg" ] ||
+ fatal "No package supplied"
+
+_dd() {
+ local o="$1"; shift
+ dd if="$pkg" skip="$o" iflag=skip_bytes status=none $*
+}
+
+calcsize() {
+ offset=$(($1 + 8))
+
+ local i b b0 b1 b2 b3 b4 b5 b6 b7
+
+ i=0
+ while [ $i -lt 8 ]; do
+ b="$(_dd $(($offset + $i)) bs=1 count=1)"
+ [ -z "$b" ] &&
+ b="0" ||
+ b="$(exec printf '%u\n' "'$b")"
+ eval "b$i=\$b"
+ i=$(($i + 1))
+ done
+
+ rsize=$((8 + ((($b0 << 24) + ($b1 << 16) + ($b2 << 8) + $b3) << 4) + ($b4 << 24) + ($b5 << 16) + ($b6 << 8) + $b7))
+ offset=$(($offset + $rsize))
+}
+
+case "$(_dd 0 bs=8 count=1)" in
+ "$(printf '\355\253\356\333')"*) ;; # '\xed\xab\xee\xdb'
+ *) fatal "File doesn't look like rpm: $pkg" ;;
+esac
+
+calcsize 96
+sigsize=$rsize
+
+calcsize $(($offset + (8 - ($sigsize % 8)) % 8))
+hdrsize=$rsize
+
+case "$(_dd $offset bs=3 count=1)" in
+ "$(printf '\102\132')"*) _dd $offset | bunzip2 ;; # '\x42\x5a'
+ "$(printf '\037\213')"*) _dd $offset | gunzip ;; # '\x1f\x8b'
+ "$(printf '\375\067')"*) _dd $offset | xzcat ;; # '\xfd\x37'
+ "$(printf '\135\000')"*) _dd $offset | unlzma ;; # '\x5d\x00'
+ "$(printf '\050\265')"*) _dd $offset | unzstd ;; # '\x28\xb5'
+ *) fatal "Unrecognized rpm file: $pkg" ;;
esac
diff --git a/scripts/rpm_fulldb_update b/scripts/rpm_fulldb_update
deleted file mode 100644
index eb49836a3..000000000
--- a/scripts/rpm_fulldb_update
+++ /dev/null
@@ -1,386 +0,0 @@
-#!/usr/bin/perl
-
-# A perl script to be run from cron which creates an rpm database of
-# all your binary RPMS. This database contains the most recent
-# version of every branch of each package found in the package
-# repositories. The database is useful for querying since it is as if
-# you have installed all these packages into your system. You can
-# find which packages hold a file or which packages satify a
-# dependency. We are only load the information from the packages and
-# do not save the contents of the packages into the file system.
-
-# Branch is a Version Control concept and is coded into the packages
-# rpm version by convention. We build the same packages for many
-# different projects. Each project works on its own branch and may
-# have different source code for the same rpm. The branch name is
-# encouded in the version number of the package followed by a '.'.
-# The full database needs to have the most recent copy of each package
-# on each branch. For example rpm package version "3.43" would be the
-# "43" release of the branch "3" and rpm package version "potato.91"
-# would be the "91" release of the "potato" branch.
-
-# written by Ken Estes kestes@staff.mail.com
-
-
-use File::Basename;
-use File::stat;
-
-
-
-# An rpm_package is a hash of:
-# $package{'fqn'}="perl-5.00502-3"
-# $package{'rpm_file'}="$RPMS_DIR/".
-# "./sparc/perl-5.00502-3.solaris2.6-sparc.rpm"
-# $package{'srpm_file'}="$SRPMS_DIR/".
-# "./perl-5.00502-3.src.rpm"
-# $package{'name'}="perl"
-# $package{'version'}="5.00502"
-# $package{'release'}="3"
-
-# fqn is "fully qualified name"
-
-# the packages are stored in the datastructure
-# $BY_NAME{$name}{$branch}{$version}{$release};
-
-
-
-sub set_static_vars {
-
-# This functions sets all the static variables which are often
-# configuration parameters. Since it only sets variables to static
-# quantites it can not fail at run time. Some of these variables are
-# adjusted by parse_args() but asside from that none of these
-# variables are ever written to. All global variables are defined here
-# so we have a list of them and a comment of what they are for.
-
- $VERSION = ( qw$Revision: 1.2 $ )[1];
-
- @ORIG_ARGV = @ARGV;
-
- # The pattern for parsing fqn into ($name, $version, $release).
- # This is difficult to parse since some hyphens are significant and
- # others are not, some packages have alphabetic characters in the
- # version number.
-
- $PACKAGE_PAT ='(.*)-([^-]+)-([^-]+).solaris2.6-\w*.rpm';
-
- # packages which will end up in the database match this pattern
- # currently we are not retricting the packages which go into the
- # database.
-
- $PICKLIST_PAT = '.';
-
- # the list of directories where rpms are stored
- @RPM_ARCHIVES = ('/export/rpms/redhat',);
-
- # the full path name of the database we are creating.
-
- $RPM_DB_DIR = "/export/rpms/redhat/repository.rpmdb";
-
- # set a known path.
-
- # the correct path has not been finalized yet, but this is close.
-
- $ENV{'PATH'}= (
- '/usr/local/bin'.
- ':/usr/bin'.
- ':/bin'.
- '');
-
- # taint perl requires we clean up these bad environmental
- # variables.
-
- delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
-
- return 1;
-} #set_static_vars
-
-
-
-
-sub get_env {
-
-# this function sets variables similar to set_static variables. This
-# function may fail only if the OS is in a very strange state. after
-# we leave this function we should be all set up to give good error
-# handling, should things fail.
-
- $| = 1;
- $PID = $$;
- $PROGRAM = basename($0);
- $TIME = time();
- $LOCALTIME = localtime($main::TIME);
- $START_TIME = $TIME;
-
- {
- my ($sec,$min,$hour,$mday,$mon,
- $year,$wday,$yday,$isdst) =
- localtime(time());
-
- # convert confusing perl time vars to what users expect
-
- $year += 1900;
- $mon++;
-
- $DATE_STR = sprintf("%02u%02u%02u", $year, $mon, $mday, );
- $TIME_STR = sprintf("%02u%02u", $hour, $min);
- }
- # a unique id for cache file generation
- $UID = "$DATE_STR.$TIME_STR.$PID";
-
- return 1;
-} # get_env
-
-
-
-sub parse_fqn {
-
- # This is difficult to parse since some hyphens are significant and
- # others are not, some packages have alphabetic characters in the
- # version number.
-
- # Also remember that the format of the file is dependent on how RPM
- # is configured so this may not be portable to all RPM users.
-
- (!("@_" =~ m/^$PACKAGE_PAT$/)) &&
- die("rpm_package_name: '@_' is not in a valid format");
-
- return ($1, $2, $3);
-}
-
-
-sub new_rpm_package {
-
-# An rpm_package is a hash of:
-# $package{'fqn'}="perl-5.00502-3"
-# $package{'rpm_file'}="$RPMS_DIR/".
-# "./sparc/perl-5.00502-3.solaris2.6-sparc.rpm"
-# $package{'srpm_file'}="$SRPMS_DIR/".
-# "./perl-5.00502-3.src.rpm"
-# $package{'name'}="perl"
-# $package{'version'}="5.00502"
-# $package{'release'}="3"
-
- my ($rpm_file) = @_;
- my $error = '';
- my($name, $version, $release) = main::parse_fqn(basename($rpm_file));
-
- my ($package) = ();
-
- $package->{'fqn'}="$name-$version-$release";
- $package->{'name'}=$name;
- $package->{'version'}=$version;
- $package->{'release'}=$release;
- $package->{'rpm_file'}=$rpm_file;
-
- # these are needed to do proper sorting of major/minor numbers in
- # the version of the package
-
- $package->{'version_cmp'}=[split(/\./, $version)];
- $package->{'release_cmp'}=[split(/\./, $release)];
-
- # our packages have a naming convention where then branch name is
- # the first part of the version.
-
- $package->{'branch'}= @{ $package->{'version_cmp'} }[0];
-
- return $package;
-}
-
-
-# return the most recent version of package for a given package name/branch pair
-
-sub get_latest_fqn {
- my ($name, $branch) =(@_);
-
- my @out = ();
-
- foreach $version ( keys %{ $BY_NAME{$name}{$branch} }) {
- foreach $release ( keys %{ $BY_NAME{$name}{$branch}{$version} }) {
-
- push @out, $BY_NAME{$name}{$branch}{$version}{$release};
-
- }
- }
-
- # the $BY_NAME datastructure is fairly good but the list can not be
- # sorted right. Sort again using the Schwartzian Transform as
- # discribed in perlfaq4
-
- my @sorted = sort {
-
- # compare the versions but make no assumptions
- # about how many elements there are
-
- my $i=0;
- my @a_version = @{ $a->{'version_cmp'} };
- my @b_version = @{ $b->{'version_cmp'} };
- while (
- ($#a_version > $i) &&
- ($#b_version > $i) &&
- ($a_version[$i] == $b_version[$i])
- ) {
- $i++;
- }
-
- my $j = 0;
- my @a_release = @{ $a->{'release_cmp'} };
- my @b_release = @{ $b->{'release_cmp'} };
- while (
- ($#a_release > $j) &&
- ($#b_release > $j) &&
- ($a_release[$j] == $b_release[$j])
- ) {
- $j++;
- }
-
- return (
- ($b_version[$i] <=> $a_version[$i])
- ||
- ($b_release[$j] <=> $a_release[$j])
- );
- }
- @out;
-
- return @sorted[0];
-}
-
-
-# traverse the package repositories and create a data structure of all
-# the packages we find.
-
-sub parse_package_names {
- my $db_dir = basename($RPM_DB_DIR);
- foreach $archive (@RPM_ARCHIVES) {
-
- open(FILES, "-|") ||
- exec("find", $archive, "-print") ||
- die("Could not run find. $!\n");
-
- while ($filename = <FILES>) {
-
- # we want only the binary rpm files of interest
-
- ($filename =~ m/\.rpm$/) || next;
- ($filename =~ m/\.src\.rpm$/) && next;
- ($filename =~ m/$PICKLIST_PAT/) || next;
-
- # do not mistake database files for packages
-
- ($filename =~ m!/$db_dir/!) && next;
-
- chomp $filename;
-
- $pkg = new_rpm_package($filename);
- $BY_NAME{$pkg->{'name'}}{$pkg->{'branch'}}{$pkg->{'version'}}{$pkg->{'release'}} = $pkg;
-
- }
-
- close(FILES) ||
- die("Could not close find. $!\n");
-
- }
-
- return %BY_NAME;
-}
-
-
-
-# traverse the data structure of all the packages and load the most
-# recent version from each branch into the database. We are only
-# loading the information from the package not saving the files into
-# the file system.
-
-sub create_new_db {
-
-
- my $uid = $<;
-
- # eventually there will be a builder id who will run this code but
- # for now.
-
- ($uid == 0 ) &&
- die("Must not run this program as root\n");
-
- # set up to load the database
-
- {
-
- my $tmp_db = "$RPM_DB_DIR.$UID";
-
- system("mkdir", "-p", $tmp_db, );
- ($?) &&
- die("$0: System error: $! \n");
-
- system("rpm", "--initdb",
- "--dbpath", $tmp_db, );
- ($?) &&
- die("$0: System error: $! \n");
-
- open(README, ">$tmp_db/README") ||
- die("Could not open $tmp_db/README. $! \n");
- print README <<EOF;
-#
-# This directory is updated daily by a cron job.
-# program: $0
-# version: $VERSION
-# updated ran at: $LOCALTIME
-
-# This directory contains an rpm database which has been loaded with
-# the most recent version of every package in our archive. It is
-# intended to be used for queries to find packages. Example:
-
-# rpm --dbpath /net/master-mm/export/rpms/redhat/rpmfulldb
-# -q --whatprovides 'java(com.iname.site.context.LoginContext)'
-
-
-# rpm --dbpath /net/master-mm/export/rpms/redhat/rpmfulldb
-# -qf /usr/local/bin/rpmdiff
-
-
-EOF
- close(README) ||
- die("Could not close $tmp_db/README. $! \n");
- }
-
- # load the database with the packages we want.
-
- foreach $pkg_name (keys %BY_NAME) {
- foreach $branch (keys %{ $BY_NAME{$pkg_name} }) {
- $pkg_file = get_latest_fqn($pkg_name, $branch)->{'rpm_file'};
-
- system("rpm", "-i", "--nodeps", "--noscripts", "--justdb",
- "--dbpath", $tmp_db,
- $pkg_file);
- ($?) &&
- die("$0: System error: $! \n");
- }
- }
-
- # do the update as close to atomically as is practicale.
-
- system("rm", "-rf", $RPM_DB_DIR,);
- ($?) &&
- die("$0: System error: $! \n");
-
- rename($tmp_db, $RPM_DB_DIR,) ||
- die("Could not rename file: $tmp_db => $RPM_DB_DIR. $! \n");
-
- return ;
-}
-
-
-
-
-
-# Main
-{
- set_static_vars();
- get_env();
-
- my %by_name=parse_package_names();
- create_new_db(%by_name);
-
- exit 0;
-}
-
diff --git a/scripts/rpmsync b/scripts/rpmsync
deleted file mode 100644
index 528c15eb9..000000000
--- a/scripts/rpmsync
+++ /dev/null
@@ -1,1625 +0,0 @@
-#!/usr/bin/perl
-
-
-# rpmsync - written by Ken Estes kestes@staff.mail.com
-
-# $Revision: 1.2 $
-# $Date: 2001/09/15 13:49:39 $
-# $Author: jbj $
-# $Source: /home/boston/jkeating/rpmcvs/cvs/devel/rpm/scripts/rpmsync,v $
-# $Name: $
-
-use Fcntl;
-use File::Basename;
-use Getopt::Long;
-use IO::Socket;
-use IPC::Open3;
-use POSIX;
-use Symbol;
-use Sys::Hostname;
-use Sys::Syslog;
-
-
-# An rpm_package is a hash of:
-# $package{'fqn'}="perl-5.00502-3"
-# $package{'rpm_file'}="$RPMS_DIR/".
-# "./sparc/perl-5.00502-3.solaris2.6-sparc.rpm"
-# $package{'srpm_file'}="$SRPMS_DIR/".
-# "./perl-5.00502-3.src.rpm"
-# $package{'name'}="perl"
-# $package{'version'}="5.00502"
-# $package{'release'}="3"
-
-# fqn is "fully qualified name"
-
-# The state of the system is a orderd list (topologically sorted by
-# dependendencies) of fqn's. The list may contain additional RPM flags
-# to be used on a particular list entry.
-
-# we are going to compare two states the actual state of the machine
-# %INSTALLED_BY_NAME this is indexed by package names and gives a list
-# of rpm_package objects which are installed currently on the machine.
-# Each entry is a list of the packages with the given name which are
-# installed.
-
-# The keys of the hash %LISTED_BY_FQN are the fqn's which are listed
-# in the manifest package list.
-
-
-# Here are a bunch of interesting RPM error messages:
-# rpm: --oldpackage may only be used during upgrades
-
-sub usage {
-my $usage = <<"EOF";
-Usage:
- $PROGRAM --update | --force |--force_and_verify | --rollback | --test
- [--log_file file] [--manifest_file file]
- [--script_file file]
- [--skip_check] [--verbose] [--silent]
- [--help] [--version]
-
-
-Required Aguments:
-
-
---test test what an update would change. Compare the installed
- packges with the packages listed in the manifest file.
- This option will show what commands would be executed if
- we were to run an update without actually changing anything.
- When an --update finishes it automatically runs --test
- and exits with error if there is any work not
- completed. This command has nothing to do with the
- '--verify' (-V) option to rpm.
-
---update Update the packages installed on the system with the newer
- versions listed in the manifest file. This will not reinstall
- packages which are listed and already installed but are
- corrupted or were installed with the wrong set of arguments.
- It will erase packages which are installed on the system but
- not listed in the package list. All packages must have a
- later version number then the previous packages.
-
---rollback Rollback a previously installed update. This command
- requires that the pervious manfest file be reinstalled. All
- update commands are run in the reverse order from the --update,
- this ensures that the packages are undone exactly as they were
- installed.
-
---force Ensure that the packages installed on the machine are
- exactly those packages listed in the manifest file and that no
- installed files are currpted. First each package in the
- manifest file is installed using --force (even if it is already
- installed) then each package which is installed but not listed
- in the manifest list is removed from the machine.
-
---force_and_verify This command behaves as if you ran this program first with
- --force then ran rpm -Va. The program will exit with
- error if either of these steps fail. This allows you to
- perform unsafe operations (changing the name of a package
- in a manifest list via a force) in a relatively safe
- manner.
-
-
-Optional Aguments:
-
-
---rpm_args Specify additional arguments to pass to rpm for all package
- operations. This option is used by both the update and erase
- commands. This option can appear more then once on the
- command line and the concatination of all options will be sent
- to rpm. This option should not be need somtimes it is useful,
- in an emergency, to install packges with broken dependencies
- or packages with duplicate files. This is a quick way of
- getting the --nodeps and --force and any other needed
- arguments to rpm.
-
---log_file specify a log file different from the default:
- $LOG_FILE
-
---manifest_file specify a manifest file different from the default:
- $MANIFEST_FILE
-
---skip_check turn off internal sanity checks used by this script. This
- is not related to the --check option or to rpm -V.
-
---script_file do not run any commands on this machine instead create a
- shell file which can be used to install all the packages
- in the manifest. This script is useful during machine
- creation. To use this option you must specify
- --update or --force.
-
---verbose provide verbose output, only useful for debugging
- this program.
-
---silent Do not send any output to stdout/stderr messages will
- still go to $LOG_FILE or syslog
-
---help show this usage page.
-
---version print the version number of this program.
-
-
-This program is used to ensure that the RPM packages installed on a
-system match the list of packages in a manifest. The package list
-looks like the output of 'rpm -qa' but is required to be in a
-tolological order. If special flags are needed for particular
-packages (like --nodeps or --force or --oldpackage or --noscriopts or
---root <dir> or --relocate oldpath=newpath or --rcfile <file>) they
-can be added on the line after package name with a space separating
-the two. Shell style comments (starting with \# and lasting till the
-next \\n) are legal in the package list. The default package list
-file is $MANIFEST_FILE.
-
-It is expected that most updates will use the --update command with
---force saved for those rare situations where the machine is known to
-be in a very bad state or there are installed packages which are
-currupted.
-
-
-
-Examples:
-
-
-rpmsync --help
-rpmsync --version
-rpmsync --update
-rpmsync --force
-rpmsync --test
-
-rpmsync --force --rpm_args nodeps
-
-rpmsync --update --rpm_args nodeps --rpm_args noscripts \\
- --skip_check --verbose
-
-rpmsync --update --script_file /tmp/rpmpkg.bootstrap.sh
-
-EOF
-
-print $usage;
-exit 0;
-}
-
-
-
-
-
-sub new_rpm_package {
-
-# An rpm_package is a hash of:
-# $package{'fqn'}="perl-5.00502-3"
-# $package{'rpm_file'}="$RPMS_DIR/".
-# "./sparc/perl-5.00502-3.solaris2.6-sparc.rpm"
-# $package{'srpm_file'}="$SRPMS_DIR/".
-# "./perl-5.00502-3.src.rpm"
-# $package{'name'}="perl"
-# $package{'version'}="5.00502"
-# $package{'release'}="3"
-
- my ($fqn, $error_context) = @_;
- my $error = '';
- my($name, $version, $release) = main::parse_fqn($fqn, $error_context);
-
- my ($rpm_file, $install_script_file) =
- main::which_binary_package_path($name, $version, $release);
- ($rpm_file) ||
- ($error .= "Could not find binary file for package: '$fqn'\n");
-
-# my ($srpm_file) = main::which_source_package_path($name, $version, $release);
-# ($srpm_file) ||
-# ($error .= "Could not find source file for package: '$fqn'\n");
-
- if ($error) {
- if (!$SKIP_CHECK) {
- die($error);
- } else {
- warn($error);
- }
- }
-
- my ($package) = ();
-
- $package->{'fqn'}=$fqn;
- $package->{'name'}=$name;
- $package->{'version'}=$version;
- $package->{'release'}=$release;
- $package->{'rpm_file'}=$rpm_file;
- $package->{'install_script_file'}=$install_script_file;
- $package->{'srpm_file'}=$srpm_file;
-
- return bless($package, $class);
-}
-
-
-sub is_installed {
-
-# returns true iff the package passed in is in fact installed on the
-# machine.
-
- my ($required_pkg) = @_;
- my $installed_pkgs = $INSTALLED_BY_NAME{$required_pkg->{'name'}};
- # look for the right version/release of this package
- foreach $installed_pkg ( @{ $installed_pkgs } ) {
- ($installed_pkg->{'fqn'} eq $required_pkg->{'fqn'}) &&
- return 1;
- }
-
- return 0;
-}
-
-
-
-sub clean_up {
-
-# any cleanup actions to be performed on exit should go here
-
- closelog();
- close(STDERR);
- close(STDOUT);
-
- return 1;
-} # clean_up
-
-
-
-sub fatal_error {
- my @error = @_;
-
- foreach $_ (split("\n",join('',@error))) {
- (!$SILENT) && print STDERR ("$PROGRAM (fatal): $_\n");
- print LOG ("[$LOCALTIME] (fatal): $_\n");
- }
- syslog('crit', "fatal error at: ".localtime(time()));
- clean_up();
- die("[$LOCALTIME] $PROGRAM: fatal error at: ".localtime(time()) );
-}
-
-
-sub log_error {
- my @error = @_;
-
- foreach $_ (split("\n",join('',@error))) {
- (!$SILENT) && print STDERR ("$PROGRAM (warn): $_\n");
- print LOG ("[$LOCALTIME] (warn): $_\n");
- }
-
-}
-
-
-sub info_error {
- my @error = @_;
-
- foreach $_ (split("\n",join('',@error))) {
- (!$SILENT) && print STDERR ("$PROGRAM (info): $_\n");
- print LOG ("[$LOCALTIME] (info): $_\n");
- }
-
-}
-
-
-sub which_binary_package_path {
-
-# this line will depend on the 'rpmfilename: ' in the rpmrc file in
-# the future we will need to try 'noos' as well as noarch, it is not
-# implemented in our RPM version.
-
- my ($name, $version, $release) = @_;
-
- foreach $dir ( split(':', $SEARCH_PATH) ) {
- foreach $arch ($ARCH, 'noarch', '') {
- foreach $os ($OS, 'noos', '') {
-
- my $filename = '';
- my $install_script_filename = '';
-
- $filename = eval "return \"$BINARY_PACKAGE_FILE_PAT\";";
- $install_script_filename = $filename;
- $install_script_filename =~ s/^$dir/\$REPOSITORY/;
- ( -f $filename ) && ( -s $filename ) && ( -r $filename )
- && return ($filename, $install_script_filename);
- ;
- }
- }
- }
- return ;
-}
-
-
-sub which_source_package_path {
-
-# Each binary rpm package encodes the name of the source file which it
-# came from. This is important since some sources generate several
-# binary packages (emacs, vim, perl), given one of those packages it
-# would be hard to find the source file name just doing regular
-# expressions on the name. We extract this information using an rpm
-# query.
-
- my ($name, $version, $release) = @_;
-
- $binary_package_file = (which_binary_package_path(@_))[0];
-
- $binary_package_file || return ;
-
- # this command would be better
- # rpm -qp --queryformat '[%{SOURCERPM}\n]'
-
- my ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => [$SYS_CMDS{'rpm'}, '-qip', $binary_package_file],);
-
- my ($source_rpm_file) = grep (/Source RPM: /, split(/\n+/, $log_out ));
-
- ( $source_rpm_file =~ m/Source RPM:\s([-.\w]+)/ ) ||
- return ;
-
- $source_rpm_file = $1;
-
- foreach $dir ( split(':', $SEARCH_PATH) ) {
- my $filename = '';
-
- $filename = eval "return \"$SOURCE_PACKAGE_FILE_PAT\";";
- ( -f $filename ) && ( -s $filename ) && ( -r $filename )
- && return $filename;
- }
-
- return ;
-}
-
-
-sub parse_fqn {
-
- # This is difficult to parse since some hyphens are significant and
- # others are not, some packages have alphabetic characters in the
- # version number.
-
- # Also remember that the format of the file is dependent on how RPM
- # is configured so this may not be portable to all RPM users.
- my ($fqn, $error_context) = @_;
-
- (!("$fqn" =~ m/^$PACKAGE_PAT$/)) &&
- die("package name '$fqn' is not in a valid format, $error_context");
-
- return ($1, $2, $3);
-}
-
-
-
-sub system3 {
-
-# Lanuch a new child and wait for it to die. This is like a call to
-# system but we get the stdout and stderr in addition to $?.
-
-# call the function like this
-
-# my ($wait_status, $log_out, $log_err) =
-# open3(
-# 'cmd_vec' => [],
-# 'stdin_str' => '',
-# 'log_cmds'=> '';
-# 'ingore_error' => ''
-# );
-
-# cmd_vec is a command to run in execv format. It is a list not a
-# string since we want the safe version of exec
-
-# stdin_str is a string to pass on the standard in to the child program.
-
-# If log_cmds is set then the command will be sent to syslog and the
-# log file. All output from the command is also sent to the log file.
-
-# open3 signals all errors through a die so will I. If the command
-# exits with nonzero wait_status then system3 calls die. This feature
-# can be turned of fby setting ignore_errors.
-
-# the system3 function returns:
-
-# wait_status: the wait_status of the child process
-
-# log_out: the stdout that the child process wrote.
-
-# log_err: the stderr the child process wrote.
-
- my (%args) = @_;
-
- my ($log_cmds, $ignore_error, $cmd_ref, $stdin) = @_;
-
-# if ( ! ( (-x $args{'cmd_vec'}->[0]) && (-f $args{'cmd_vec'}->[0]) ) ) {
-# die ("Command not exectuable: '$args{'cmd_vec'}->[0]',\n");
-# }
-
- my $info ="executing: '@{ $args{'cmd_vec'} }',\n";
-
- if ($args{'log_cmds'} || ($VERBOSE) ) {
- warn($info);
- }
-
- # start the process
-
- my $fh_in = gensym();
- my $fh_out = gensym();
- my $fh_err = gensym();
-
- ($fh_in && $fh_out && $fh_err) ||
- die ("Could not create new symbol, 'gensym()' object.\n");
-
- my $child_pid = IPC::Open3::open3(
- $fh_in,
- $fh_out,
- $fh_err,
- @{$args{'cmd_vec'}}
- );
-
- # this check should be redundant but better safe then sorry
-
- ($child_pid) ||
- die ("Open3() did not start: '@{$cmd}'. $!\n");
-
- if ($args{'stdin_str'}) {
-
- # we should not have a deadlock with this syswrite since this
- # process writes and then the child reads. It is hard to
- # imagine how this could fail and the machine still be in a
- # reasonable shape.
-
- my $write_len = length($args{'stdin_str'})+1;
- my $rc = syswrite ($fh_in,
- $args{'stdin_str'}."\n", $write_len);
-
- (defined ($rc) && ( $rc == $write_len ) ) ||
- die("Syswrite to child stdin failed. ".
- "Could not write: '$write_len' ".
- "only wrote: '$rc' characters. ".
- "Trying to write to stdin: '$stdin'. ".
- ": $!\n");
- }
-
-
- close($fh_in) ||
- die("Could not close child stdin: $!\n");
-
- main::nonblock($fh_out);
- main::nonblock($fh_err);
-
- my $log_out = undef;
- my $log_err = undef;
-
- my $reaped_pid = -1;
- my $wait_status = 0;
-
- # wait for child to die, but keep clearing out stdout and stderr
- # buffers for process so we do not deadlock.
-
- # WE seem to be loosing childrens signals occasionally, so actively
- # check if the child is alive.
-
- while ($reaped_pid != $child_pid) {
-
- sleep(1);
-
- $reaped_pid = waitpid(-1, &WNOHANG | POSIX::WUNTRACED);
-
- if ($reaped_pid == $child_pid) {
-
- ($wait_status = $?);
-
- # child signaled but did not exit
- # set to the same pid as 'no child waiting'
-
- (WIFSTOPPED($wait_status)) &&
- ($reaped_pid = -1);
- }
-
- my $data_out = '';
- my $data_err = '';
- my $rc = '';
-
- # do the reading after reaping so we are sure that we exit the
- # loop only after draining the sockets.
-
- # I do not think we need to log $rc errors as they happen
- # frequently and nothing seems wrong:
- # Resource temporarily unavailable file_handle
-
- do {
- $rc = sysread($fh_out, $data_out, POSIX::BUFSIZ, 0);
- $log_out .= $data_out;
- } until ($rc <= 0);
-
- do {
- $rc = sysread($fh_err, $data_err, POSIX::BUFSIZ, 0);
- $log_err .= $data_err;
- } until ($rc <= 0);
-
- ($data_err) && warn($data_err);
-
- } # while pid
-
- # the reads are at the bottom of the loop so we do not need to do
- # any more reading of the filehandles.
-
- close($fh_out) ||
- &$log_error("Could not close child stdout: $!\n");
-
- close($fh_err) ||
- &$log_error("Could not close child stderr: $!\n");
-
- my @info = (
- "command results: \n",
- " wait_status: $wait_status\n",
- " stdout: '\n",
- # turn string into a list and indent each element
- (map {" $_\n"} (split /\n+/, $log_out)),
- " stdout: '\n",
- " stderr: '\n",
- # turn string into a list and indent each element
- (map {" $_\n"} (split /\n+/, $log_err)),
- " stderr: '\n",
- );
-
- if ( (!$args{'ignore_error'}) && ($wait_status) ) {
- print "\n\n";
- die("Cmd exited with error:\n",
- "\t@{$args{'cmd_vec'}}\n",
- @info);
- }
-
- if ( ($VERBOSE) ||
- ( ($args{'log_cmds'}) &&
- ($wait_status || $log_out || $log_err) ) ) {
- warn(@info);
- }
-
- return ($wait_status, $log_out, $log_err);
-} # system3
-
-
-sub get_rpm_info {
- my (@rpm_args) = @_;
-
- update_time();
- my (@rpm_info) = '';
-
- my ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => [$SYS_CMDS{'rpm'}, '-qa'],);
-
- (@rpm_info) = split(/\n+/, $log_out);
-
- %INSTALLED_BY_NAME=();
- my $lineno =0;
- foreach $fqn (@rpm_info) {
- $lineno++;
- chomp $fqn;
- my ($pkg) = new_rpm_package($fqn, "System Info lineno: $lineno");
- push @{ $INSTALLED_BY_NAME{$pkg->{'name'}} }, $pkg;
- }
-
- return ;
-}
-
-
-sub remove_extra_packages {
-
- # arguments are not used but allowed for symetry with other
- # functions
-
- my(@pkg_list) = @_;
-
- get_rpm_info();
-
- # Remove packages installed on the machine but not not in the
- # manifest. This is important as we sometimes change the package
- # names while upgrading them and if we did not remove all packages
- # which are not listed these packages would remain.
-
- # We also need to remove old versions of just upgraded packages.
- # Currently we have a problem, some old packages are not being
- # removed when we do an rpm update. Since we are currently only
- # installing one version of each package, remove all other versions
- # then what was required.
-
-
- # We would like to remove all packages in reverse topological order.
- # I have no way of finding out what that order is, so I use a single
- # command which removes all pacakges. RPM will figure out the
- # correct order at run time. This will cause us to reach the
- # command line limit if the list of packages to remove is large
- # enough.
-
- my @extra_packages = ();
-
- foreach $pkgname ( keys %INSTALLED_BY_NAME ) {
- foreach $pkg (@{ $INSTALLED_BY_NAME{$pkgname} }) {
-
- ($LISTED_BY_FQN{$pkg->{'fqn'}}) && next;
-
- push @extra_packages, $pkg->{'fqn'};
- }
- }
-
- if (@extra_packages) {
- my ($wait_status, $log_out, $log_err) =
- system3(
- 'cmd_vec' => [$SYS_CMDS{'rpm'}, '-e', @RPM_ARGS,
- @extra_packages],
- 'log_cmds'=> 1,
- );
- }
-
- return ;
-}
-
-
-# update the installation with packages
-
-sub update_packages {
- my(@pkg_list) = @_;
-
- get_rpm_info();
-
-
- # first just test and see if this upgrade could work.
- # this may blowup some OS maximal argument size limit
-
-# my ($wait_status, $log_out, $log_err) =
-# system3(
-# 'cmd_vec' => [$SYS_CMDS{'rpm'}, "--test", '-U',
-# @RPM_ARGS,
-# @upgrade_list],
-# 'log_cmds'=> 1,
-# );
-
-
- foreach $pkg (@pkg_list) {
-
- (is_installed($pkg)) && next;
-
- my ($wait_status, $log_out, $log_err) =
- system3(
- 'cmd_vec' => [
- $SYS_CMDS{'rpm'}, '-U',
- @{ $pkg->{'rpm_flags'} }, @RPM_ARGS,
- $pkg->{'rpm_file'} ],
- 'log_cmds'=> 1,
- );
- } # each $fqn
-
- return ;
-} # update
-
-
-
-# rollback the previous update installation
-
-sub rollback_packages {
- my(@pkg_list) = @_;
-
- get_rpm_info();
-
-
- # first just test and see if this upgrade could work.
- # this may blowup some OS maximal argument size limit
-
-# my ($wait_status, $log_out, $log_err) =
-# system3(
-# 'cmd_vec' => [$SYS_CMDS{'rpm'}, "--test", '-U',
-# @RPM_ARGS,
-# @upgrade_list],
-# 'log_cmds'=> 1,
-# );
-
-
- foreach $pkg (reverse @pkg_list) {
-
- (is_installed($pkg)) && next;
-
- my ($wait_status, $log_out, $log_err) =
- system3(
- 'cmd_vec' => [
- $SYS_CMDS{'rpm'}, '-U', '--oldpackage',
- @{ $pkg->{'rpm_flags'} }, @RPM_ARGS,
- $pkg->{'rpm_file'}
- ],
- 'log_cmds'=> 1,
- );
-
- } # each $fqn
-
- return ;
-} # rollback
-
-
-# force ALL the packages to be reinstalled
-
-sub force_packages {
- my(@pkg_list) = @_;
-
- # force all the packages in the list to be reinstalled
-
- # first just test and see if this upgrade could work.
- # this may blowup some maximal argument size
-
-# my ($wait_status, $log_out, $log_err) =
-# system3(
-# 'cmd_vec' => [$SYS_CMDS{'rpm'}, "--test", '-U', '--force',
-# @pkg_list],
-# 'log_cmds'=> 1,
-# );
-
-
- foreach $pkg (@pkg_list) {
- my ($wait_status, $log_out, $log_err) =
- system3(
- 'cmd_vec' => [
- $SYS_CMDS{'rpm'}, '-U', '--force', '--oldpackage',
- @{ $pkg->{'rpm_flags'} }, @RPM_ARGS,
- $pkg->{rpm_file}
- ],
- 'log_cmds'=> 1,
- );
- }
-
- return ;
-} # force
-
-
-
-# check that the verify command exits without error.
-
-sub verify_packages {
-
- my ($wait_status, $log_out, $log_err) =
- system3(
- 'cmd_vec' => [
- $SYS_CMDS{'rpm'}, '-Va',
- ],
- 'log_cmds'=> 1,
- );
-
- return ;
-} # verify
-
-
-
-sub create_scriptfile {
- my(@pkg_list) = @_;
-
- my $num_pkgs = scalar(@pkg_list);
-
- if ($FORCE) {
- @args = ('-U', '--force');
- } elsif ($UPDATE) {
- @args = ('-U', );
- } else {
- die("Scripts can only be created for --update or --force")
- }
-
- my $out = '';
-
- $out =<<EOF
-
-# This file automatically generated by program: $0
-# version: $main::VERSION
-# on host: $main::HOSTNAME
-# localtime: $main::LOCALTIME
-#
-# This install file automatically installs
-# manifest file $MANIFEST_FILE
-
- $SYS_CMDS{'rpm'} --rebuilddb
-
-EOF
-;
-
- foreach $pkg (@pkg_list) {
- my @cmd = (
- $SYS_CMDS{'rpm'}, @args,
- @{ $pkg->{'rpm_flags'} }, @RPM_ARGS,
- $pkg->{install_script_file}
- );
-
- $out .=<<EOF;
-
- @cmd
- if [ \$\? \-ne 0 ]; then
- echo \>\&2 "\$0: Error running: @cmd"
- exit 1;
- fi
-
-EOF
-
- }
-
-
- $out .=<<EOF;
-
- # check that the install for accuracy
-
- $SYS_CMDS{'rpm'} --rebuilddb;
-
- $SYS_CMDS{'rpm'} -Va;
- if [ \$\? \-ne 0 ]; then
- echo \>\&2 "\$0: Error installing Packages";
- echo \>\&2 "\$0: 'rpm -Va' reports errors";
- exit 1;
- fi
-
- num_installed_pkgs=\` $SYS_CMDS{'rpm'} -qa | wc \-\l | sed "s/[^0-9]//g" \`;
- if [ \$num_installed_pkgs \-ne $num_pkgs ]; then
- echo \>\&2 "\$0: Error installing Packages";
- echo \>\&2 "\$0: rpm -qa gives \$num_installed_pkgs packages installed";
- echo \>\&2 "\$0: expected $num_pkgs installed";
- exit 1;
- fi
-
- exit 0;
-
-EOF
-
- return $out;
-} # create_script
-
-
-
-
-# check what running with --update would do. If I were to write a
-# check_rollback_packages the output would be similar but the packge
-# update order would be reversed.
-
-sub test_update {
- my(@pkg_list) = @_;
-
- get_rpm_info();
-
- # find what we will upgrade
-
- foreach $pkg (@pkg_list) {
- is_installed($pkg) && next;
- push @out, "out of sync, must update: $pkg->{'fqn'}\n";
- } # each $fqn
-
-
- # remove old versions of what we installed.
-
- foreach $pkgname ( keys %INSTALLED_BY_NAME ) {
- foreach $pkg (@{ $INSTALLED_BY_NAME{$pkgname} }) {
-
- ($LISTED_BY_FQN{$pkg->{'fqn'}}) && next;
-
- push @out, "out of sync, must delete: $pkg->{'fqn'}\n";
- }
- }
-
- return @out;
-} # test_update
-
-
-
-sub nonblock {
-
- # unbuffer a fh so we can select on it
-
- my ($fh) = shift;
- my $rc = '';
- my $flags = '';
-
- $flags = fcntl($fh, F_GETFL, 0) ||
- fatal_error("Could not get flags of socket: $fh : $!\n");
-
- $flags |= O_NONBLOCK;
-
- $rc = fcntl($fh, F_SETFL, $flags) ||
- fatal_error("Could not set flags of socket: $fh : $!\n");
-
- return 1;
-}
-
-
-
-sub mkdir_R {
-# a recusive mkdir function
-
- my ($dir, $mode) = @_;
- my @dir = split('/', $dir);
-
- foreach $i (0..$#dir) {
-
- my ($dir) = join('/', @dir[0..$i]);
- ($dir) || next;
-
- (-d $dir) ||
- mkdir($dir, $mode) ||
- die("Could not mkdir: $dir, for writing: $!\n");
- }
-
- return ;
-}
-
-
-sub chk_system_config {
- # refuse to start if the system is in a dangerous state
-
-
- @problem = ();
-
- # this is just a placeholder for now
- # checks go here and failures add to @problem
-
- return @problem;
-}
-
-
-# park a bunch of unused function here for future scripts
-
-
-sub run_local_rcscripts {
- my @script_args = @_;
-
- (-d $LOCAL_RC2_DIR) || return ;
-
- my @rc_files = ();
-
- opendir(DIR, "$LOCAL_RC2_DIR") ||
- die("Could not opendir: '$LOCAL_RC2_DIR': $!\n");
-
- @rc_files = grep(/^S/, readdir(DIR));
-
- closedir(DIR) ||
- die("Could not closedir : '$LOCAL_RC2_DIR': $!\n");
-
- ( scalar(@rc_files) > 0 ) || return ;
-
- if ($script_args[0] eq 'start') {
- @rc_files = sort @rc_files;
- }else{
- @rc_files = reverse sort @rc_files;
- }
-
- foreach $script (@rc_file) {
- my ($wait_status, $log_out, $log_err) =
- system3(
- 'cmd_vec' => ["$LOCAL_RC2_DIR/$script", @script_args],
- 'log_cmds'=> 1,
- );
- }
-
- return ;
-}
-
-
-sub update_package_list {
-
- my $update_script = '';
-
- # learn what updates we wish to make
-
- {
- open(FILELIST, "<$BUILD_FILE") ||
- die("Could not open build file: '$BUILD_FILE': $!\n");
-
- my $lineno = 0;
- while ($fqn=<FILELIST>) {
- $lineno++;
- $fqn =~ s/\#.*$//;
- $fqn =~ s/\s+//g;
-
- # untaint the input. As a security precaution only allow a few
- # "good characters" in the package name, or our eval of the
- # update_script might do some really unexpected things.
-
- if ($fqn =~ m/([-_.a-zA-Z0-9]+)/) {
- my $pkg = new_rpm_package($1, "file: $BUILD_FILE lineno: $lineno");
- $update_script .= "\$fqn =~ s/^$pkg->{'name'}-\\d.*\$/$pkg->{'fqn'}/;\n"
- }
- }
-
- close(FILELIST) ||
- die("Could not close build file: '$BUILD_FILE': $!\n");
- }
-
- # Perform the modifications to the file list
-
- {
-
-# co -l $MANIFEST_FILE
-
- rename($MANIFEST_FILE, $MANIFEST_FILE.".bak") ||
- die("Could not rename ".
- "file: $MANIFEST_FILE, ${PACKAGE_FILE}.bak: $!\n");
-
- open(FILELIST_IN, "<${PACKAGE_FILE}.bak") ||
- die("Could not open for writing ".
- "packagefile: '${PACKAGE_FILE}.bak': $!\n");
-
- open(FILELIST_OUT, ">$MANIFEST_FILE") ||
- die("Could not read from packagefile: '${PACKAGE_FILE}.bak': $!\n");
-
- while ($fqn=<FILELIST_IN>) {
- eval $update_script;
- print FILELIST_OUT $fqn;
- }
-
- close(FILELIST_OUT) ||
- die("Could not close packagefile: '$MANIFEST_FILE': $!\n");
-
- close(FILELIST_IN) ||
- die("Could not close packagefile: '${PACKAGE_FILE}.bak': $!\n");
-
-# ci -u $MANIFEST_FILE
-
- }
-
- return ;
-}
-
-
-sub include_file {
- my ($filename) = @_;
- my (@inc) = ();
- my $fh = gensym();
-
- (-f "$INCLUDE_DIR/$filename") ||
- die("include file: $INCLUDE_DIR/$filename, \n".
- "found while expanding: $BUILD_FILE, does not exist.\n");
-
- open($fh, ">$INCLUDE_DIR/$filename") ||
- die("Could not open include file: '$INCLUDE_DIR/$filename': $!\n");
-
- while (defined($line = <$fh>) ) {
-
- if ($line =~ m/\w*\$([-_.a-zA-Z0-9]+)/) {
- push @inc, include_file($line);
- } else {
- push @inc, $line;
- }
-
- }
-
- close($fh) ||
- die("Could not close include file: '$INCLUDE_DIR/$filename': $!\n");
-
- return @inc;
-}
-
-
-sub expand_package_list {
-
- my $update_script = '';
-
- # learn what updates we wish to make
-
- open(INFILE, "<$BUILD_FILE") ||
- die("Could not open build file: '$BUILD_FILE': $!\n");
-
- open(OUTFILE, ">$TMP_FILE") ||
- die("Could not open tmp file: '$TMP_FILE': $!\n");
-
- while ($line=<INFILE>) {
-
- # untaint the input. As a security precaution only allow a few
- # "good characters" in the package name.
-
- if ($line =~ m/\w*\$([-_.a-zA-Z0-9]+)/) {
- print include_file($1);
- } else {
- print $line;
- }
-
- }
-
- close(INFILE) ||
- die("Could not close build file: '$BUILD_FILE': $!\n");
-
- close(OUTFILE) ||
- die("Could not close tmp file: '$TMP_FILE': $!\n");
-
- return ;
-}
-
-
-sub update_time {
-
- $TIME = time();
- $LOCALTIME = localtime($main::TIME);
-
- return ;
-}
-
-
-
-sub set_static_vars {
-
-# This functions sets all the static variables which are often
-# configuration parameters. Since it only sets variables to static
-# quantites it can not fail at run time. Some of these variables are
-# adjusted by parse_args() but asside from that none of these
-# variables are ever written to. All global variables are defined here
-# so we have a list of them and a comment of what they are for.
-
- @ORIG_ARGV = @ARGV;
-
- $INCLUDE_DIR = "";
- $TMP_FILE = "";
-
- $LOG_FILE="/var/log/rpmsync/log";
- $LOCK_FILE="/var/lock/rpmsync";
- $MANIFEST_FILE="/usr/local/etc/rpmpkg.manifest";
-
- $FTP_PATH='ftp://machine.iname.net/pub/redhat';
- $SEARCH_PATH = (
- # the old hard mounted master-mm package repository
- '/net/master-mm/export/rpms/redhat'.
-
- # the new auto mounted master-mm package repository
- ':/network/master-mm.mail.com/export/rpms/redhat'.
-
- # look in obvious places on the machine for packages
- ':/tmp'.
-
- ':/usr/local/src/redhat/noarch'.
- ':/usr/local/src/redhat/sparc'.
- ':/usr/local/src/redhat/i386'.
-
- # for testing: this is how the current build machine
- # is set up.
-
- ':/data1/archive/redhat');
-
- $VERSION = ( qw$Revision: 1.2 $ )[1];
-
- $VERBOSE=0;
- $SKIP_CHECK=0;
-
- # The pattern for fqn. remember that the format of the file is
- # dependent on how RPM is configured so this may not be portable to
- # all RPM users.
-
- $BINARY_PACKAGE_FILE_PAT = ('$dir/RPMS/$arch/'.
- '$name-$version-$release.$os-$arch.rpm');
- $SOURCE_PACKAGE_FILE_PAT = '$dir/SRPMS/$source_rpm_file';
-
- # The pattern for parsing fqn into ($name, $version, $release).
- # This is difficult to parse since some hyphens are significant and
- # others are not, some packages have alphabetic characters in the
- # version number.
-
- $PACKAGE_PAT ='(.*)-([^-]+)-([^-]+)';
-
- # set a known path
-
- $ENV{'PATH'}= (
- '/usr/bin'.
- ':/data/gnu/bin'.
- ':/data/local/bin'.
- ':/data/devel/bin'.
- ':/usr/local/bin'.
- ':/bin'.
- '');
-
-
- # taint perl requires we clean up these bad environmental variables.
-
- delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
-
- %SYS_CMDS = (
- 'hostname' => 'hostname',
- 'rpm' => 'rpm',
- 'uname' => 'uname',
- );
-
- $SIG{'CHLD'} = 'DEFAULT';
-
- return ;
-}
-
-
-sub get_env {
-
-# this function sets variables similar to set_static variables. This
-# function may fail only if the OS is in a very strange state. after
-# we leave this function we should be all set up to give good error
-# handling, should things fail.
-
- $| = 1;
- $PROGRAM = basename($0);
- $PID = $$;
- $TIME = time();
- $LOCALTIME = localtime($main::TIME);
-
- $START_TIME = $TIME;
- $UID = $<;
-
- update_time();
- my ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => ['hostname'],);
-
- $HOSTNAME = $log_out;
- chomp $HOSTNAME;
-
- my ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => ['uname', '-a'],);
- $uname = $log_out;
-
- ( $uname =~ m/sparc/ ) && ( $ARCH="sparc");
- ( $uname =~ m/i\d86/ ) && ( $ARCH="i386" );
-
- $osname = $^O;
- ( $osname =~ m/solaris/ ) && ( $OS="solaris2.6" );
- ( $osname =~ m/linux/ ) && ( $OS="linux" );
-
- return ;
-} # get_env
-
-
-sub parse_args {
-
- Getopt::Long::config('require_order', 'auto_abbrev', 'ignore_case');
-
- my ($help, $version, $force_and_verify);
-
- %option_linkage = (
- "version" => \$version,
- "verbose" => \$VERBOSE,
- "silent" => \$SILENT,
- "help" => \$help,
- "skip_check" => \$SKIP_CHECK,
- "log_file" => \$LOG_FILE,
- "manifest_file" => \$MANIFEST_FILE,
- "update"=>\$UPDATE,
- "force"=>\$FORCE,
- "force_and_verify"=>\$force_and_verify,
- "rollback"=>\$ROLLBACK,
- "test"=>\$TEST,
- "rpm_args" =>\@RPM_ARGS,
- "script_file" =>\$SCRIPT_FILE,
- );
-
-
- GetOptions (\%option_linkage, qw(
- silent! verbose! version! help! skip_check!
- update! force! force_and_verify! rollback! test!
- manifest_file=s script_file=s
- log_file=s manifest_file=s
- rpm_args=s@
- )) ||
- die("Illegal options in \@ARGV: '@ARGV',");
-
- if ($force_and_verify) {
- $FORCE = 1;
- $VERIFY = 1;
- }
-
- if ($version) {
- print "$0: Version: $VERSION\n";
- exit 0;
- }
-
- if ($help) {
- usage();
- }
-
- $Process::VERBOSE = $VERBOSE;
-
- {
-
- my $args=0;
-
- ($UPDATE) &&
- $args++;
-
- ($FORCE) &&
- $args++;
-
- ($TEST) &&
- $args++;
-
- ($ROLLBACK) &&
- $args++;
-
- ($args == 0) &&
- die("Must have: 'update', 'force', 'test', 'rollback', argument.\n");
-
- ($args > 1) &&
- die("Can not choice more then one: ".
- "'update', 'force', 'test', 'rollback', arguments.\n");
- }
-
- return 1;
-} # parse_args
-
-
-sub set_logging {
-
-# setup the logging facilities to send errors to syslog/log file.
-
-# this needs to come after parse_args() so that we send usage and argv
-# errors to the stderr.
-
- {
- my $logopt = 'cons,ndelay';
- my $facility = 'daemon';
-
- # no need to test if this succeeds. It calls croak so we will
- # die if there is a problem.
-
- openlog($PROGRAM, $logopt, $facility);
- }
-
- $SIG{'__WARN__'} = \&log_error;
- $SIG{'__DIE__'} = \&fatal_error;
-
- my @sys_errors = chk_system_config();
-
- if (@sys_errors) {
- if ($SKIP_CHECK) {
-
- # even though we are skipping the test put a record of the
- # problems in the log
-
- warn(
- "Warning Error list:\n",
- @sys_errors,
- "End Warning Error list\n",
- "These Errors would be fatal, ".
- "if run without '--skip_check'\n"
- );
-
- } else {
-
- # should not start with these problems
-
- die("Fatal Error list:\n",
- @sys_errors,
- "End Fatal Error list\n");
- }
- }
-
- if ($LOG_FILE) {
- # redirect error log
- mkdir_R(dirname($LOG_FILE), 0755);
-
- open (LOG, ">>$LOG_FILE") ||
- die("Could not open log_file: $LOG_FILE, ".
- "for writing: $!\n");
-
- print LOG "\n";
- chmod 0744, $LOG_FILE;
- LOG->autoflush(1);
- }
-
- STDERR->autoflush(1);
-
-}
-
-
-sub get_package_list {
-
-# load the $package_file into memory
-
-# this fucntion must follow get_env() since we need $skip_check to be
-# respected, if set.
-
- my ($package_file) = @_;
- my @pkg_list = ();
-
- (%LISTED_BY_FQN) = ();
-
- my %package_count = ();
- open(FILELIST, "<$package_file") ||
- die("Could not open packagefile: '$package_file': $!\n");
-
- my $fqn;
- my $lineno = 0;
-
- while ($fqn=<FILELIST>) {
- $lineno++;
- my $new_package = '';
- my $pkg_flags = '';
-
- chomp $fqn;
- $fqn =~ s/\#.*$//;
- if ($fqn =~ s/\s+(.*)$// ) {
- $pkg_flags = $1;
- }
- ($fqn) || next;
-
- $new_package = new_rpm_package($fqn, "file: BUILD_FILE lineno: $lineno");
- ($pkg_flags) &&
- ($new_package->{'rpm_flags'} = [ split(/\s+/, $pkg_flags) ] );
- $package_count{ $new_package->{'name'} }++;
- $LISTED_BY_FQN{$new_package->{'fqn'}} = 1;
- push @pkg_list, $new_package ;
- }
-
- close(FILELIST) ||
- die("Could not close packagefile: '$package_file': $!\n");
-
- foreach $pkg_name (sort keys %package_count) {
- ($package_count{ $pkg_name } > 1) &&
- die("Package: $pkg_name is listed ".
- "$package_count{ $pkg_name } times ".
- "in file: $package_file\n");
- }
-
- return (@pkg_list);
-}
-
-
-sub get_package_hash {
-
-# load the $package_file into memory
-
-# this fucntion must follow get_env() since we need $skip_check to be
-# respected, if set.
-
- my $package_file = @_;
- my $pkg_hash = ();
-
- open(FILELIST, "<$package_file") ||
- die("Could not open packagefile: '$package_file': $!\n");
- my $lineno = 0;
-
- while ($fqn=<FILELIST>) {
- $lineno++;
- $fqn =~ s/\#.*$//;
- $fqn =~ s/\s+//g;
- chomp $fqn;
- ($fqn) || next;
-
- my ($pkg) = new_rpm_package($fqn, "file: $package_file lineno: $lineno");
- push @{ $pkg_hash{$pkg->{'name'}} }, $pkg;
- }
-
-
- close(FILELIST) ||
- die("Could not close packagefile: '$package_file': $!\n");
-
- return ($pkg_hash);
-}
-
-
-
-sub pkg_diff {
-
- $hash0=get_package_hash($file0);
- $hash1=get_package_hash($file1);
-
- my ($pkg_out, $file_out);
- my @warnings = ();
- my %seen = ();
-
- foreach $pkg_name ( keys %{$hash0}, keys %{$hash1} ) {
-
- $seen{$pkg_name} && next;
- $seen{$pkg_name} = 1;
- if (
- ( scalar($hash0->{$pkg_name}) > 1) ||
- ( scalar($hash1->{$pkg_name} > 1 ) )
- ) {
- push @warnings, $pkg_name;
- }
-
- if ( ($hash0->{$pkg_name}) &&
- (!($hash1->{$pkg_name}) ) ) {
- $pkg_out .= "missing $hash0->{$pkg_name}->{'fqn'}\n";
- next;
- } elsif ( (!($hash0->{$pkg_name})) &&
- ($hash1->{$pkg_name}) ) {
- $pkg_out .= "added $hash1->{$pkg_name}->{'fqn'}\n";
- next;
- } else {
-
- my ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => [
- 'rpmdiff',
- ($hash0->{$pkg_name}->{'name'}),
- ($hash1->{$pkg_name}->{'name'}),
- ],);
- $file_out .= $log_out;
- }
-
- } # each $pkg_name
-
- print ("Package Differences:\n\n".
- sort( split(/\n+/, $pkg_out) ).
- "\n\nFile Differences:\n\n".
- sort( split(/\n+/, $file_out) ) );
-
- if (@warnings) {
- print STDERR ("The following packages have more then one version\n".
- " mentioned in the pkglist: ".
- join(", ", @warnings)."\n".
- "The diff algorithm assumes only single versions\n".
- "in pkglist file.\n");
- }
-
- return ;
-}
-
-
-
-# -----------------------main--------------------------
-
-{
- set_static_vars();
- get_env();
-
- parse_args();
- set_logging();
- @MANIFEST = get_package_list($MANIFEST_FILE);
-
- # Learn the state of the machine and ensure that we have the srpms
- # and rpms for this state. This must be done after parsing the
- # arguments since we may have set '--skip_check'
-
- get_rpm_info('-qa');
-
- info_error("starting argv: '@ORIG_ARGV' \n");
- syslog('info', "starting argv: '@ORIG_ARGV' \n");
-
- my ($exit_with_error) = 0;
-
- my ($wait_status, $log_out, $log_err) = ();
-
- ($UID == 0 ) &&
- ( ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => [$SYS_CMDS{'rpm'}, '--rebuilddb'],));
-
- if ($TEST) {
-
- my (@todo) = test_update(@MANIFEST);
-
- if (@todo) {
- warn(@todo);
- $exit_with_error = 1;
- }
-
- } elsif ($SCRIPT_FILE) {
-
- open(SCRIPT_FILE, ">$SCRIPT_FILE") ||
- die("Could not write to file: $SCRIPT_FILE. $!\n");
-
- my $script = create_scriptfile(@MANIFEST);
- print SCRIPT_FILE $script;
-
- close(SCRIPT_FILE) ||
- die("Could not close file: $SCRIPT_FILE. $!\n");
-
- } else {
-
- # eventually there will be a installer id who will run this code but
- # for now rpm must be run as root.
-
- ($UID == 0 ) ||
- die("Must run this program as root\n");
-
- ($FORCE) &&
- force_packages(@MANIFEST);
-
- ($UPDATE) &&
- update_packages(@MANIFEST);
-
- ($ROLLBACK) &&
- rollback_packages(@MANIFEST);
-
- remove_extra_packages(@MANIFEST);
-
- my ($wait_status, $log_out, $log_err) =
- system3('cmd_vec' => [$SYS_CMDS{'rpm'}, '--rebuilddb'],);
-
- my @problems = test_update(@MANIFEST);
-
- (@problems) && die("@problems");
-
- ($VERIFY) &&
- verify_packages(@MANIFEST);
- }
-
- info_error("finished argv: '@ORIG_ARGV' \n");
- syslog('info', "finished argv: '@ORIG_ARGV' \n");
-
- clean_up();
-
- ($exit_with_error) &&
- exit 9;
-
- exit 0;
-}
-
diff --git a/scripts/sysvinitdeps.sh b/scripts/sysvinitdeps.sh
new file mode 100755
index 000000000..ea9138389
--- /dev/null
+++ b/scripts/sysvinitdeps.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+[ "$1" = '-P' -o "$1" = '--provides' ] || {
+ cat > /dev/null
+ exit 0
+}
+
+while read file; do
+ case $file in
+ */etc/init.d/*)
+ provs=`grep '^# *Provides:' $file | sed 's,^.*:,,'`
+ for p in $provs; do
+ echo "sysvinit($p)"
+ done
+ ;;
+ esac
+done
diff --git a/scripts/tcl.req b/scripts/tcl.req
deleted file mode 100644
index 43c5920c9..000000000
--- a/scripts/tcl.req
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/perl
-
-# tcl.req - a simple makedepends like script for tcl.
-
-# I plan to rewrite this in C so that perl is not required by RPM at
-# build time.
-
-# by Ken Estes Mail.com kestes@staff.mail.com
-
-use File::Basename;
-
-if ("@ARGV") {
- foreach (@ARGV) {
- process_file($_);
- }
-} else {
-
- # notice we are passed a list of filenames NOT as common in unix the
- # contents of the file.
-
- foreach (<>) {
- process_file($_);
- }
-}
-
-
-foreach $module (sort keys %require) {
- print "tcl($module)\n";
-}
-
-exit 0;
-
-
-
-sub process_file {
-
- my ($file) = @_;
- chomp $file;
-
- open(FILE, "<$file")||
- die("$0: Could not open file: '$file' : $!\n");
-
- while (<FILE>) {
-
- # Each keyword can appear multiple times. Don't
- # bother with datastructures to store these strings,
- # if we need to print it print it now.
-
- if ( m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i) {
- foreach $_ (spit(/\s+/, $1)) {
- print "$_\n";
- }
- }
-
- s/\#.*//;
-
- # Each keyword can appear multiple times. Don't
- # bother with datastructures to store these strings,
- # if we need to print it print it now.
-
- if ( m/^\s*\$RPM_Requires\s*=\s*["'](.*)['"]/i) {
- foreach $_ (spit(/\s+/, $1))
- print "$_\n";
- }
-
-
-# we wish to capture these source statements:
-
-# source "$PATH/lib/util.tcl"
-# source "comconf.tcl"
-# if {[catch {source $env(CONTROL_PANEL_LIB_DIR)/bindings.tcl}] != 0} {
-
- # quick check to see if the complex regexps could possibly match.
- # This should speed things up.
-
- (m/source/) || next;
-
- # note we include parethesis and '$' and '\' in the pattern
-
- if (
- (m!source\s+([\'\"])?([0-9A-Za-z/._\-\\\(\)\$]+)!)
- ) {
-
- my ($module) = $2;
-
- # If there is some interpolation of variables,
- # see if taking the basename will give us the filename.
-
- ($module =~ m/\$/) &&
- ($module = basename($module));
-
- ($module =~ m/\$/) ||
- ($require{$module}=1);
- }
- }
-
- close(FILE)||
- die("$0: Could not close file: '$file' : $!\n");
-
- return ;
-}
diff --git a/scripts/vpkg-provides.sh b/scripts/vpkg-provides.sh
index c15f080f1..0b86d4b05 100755
--- a/scripts/vpkg-provides.sh
+++ b/scripts/vpkg-provides.sh
@@ -51,7 +51,7 @@ usage="$usage\t[--find_provides '/path/to/find-provides']\n"
usage="$usage\t[--shlib_dirs 'dirs:which:contain:shared:libs']\n"
usage="$usage\t[--ignore_dirs 'grep-E|pattern|of|paths|to|ignore']\n"
-# these two should be unnessary as the regular dependency analysis
+# these two should be unnecessary as the regular dependency analysis
# should take care of interpreters as well as shared libraries.
usage="$usage\t[--interp_dirs 'dirs:which:contain:interpreters']\n"
@@ -67,10 +67,10 @@ sum_cmd="xargs cksum"
date=`date`
hostname=`uname -n`
-# if some subdirectories of the system directories needs to be ignored
+# if some subdirectories of the system directories need to be ignored
# (eg /usr/local is a subdirectory of /usr but should not be part of
# the virtual package) then call this script with ignore_dirs set to a
-# valid grep -E pattern which discribes the directories to ignored.
+# valid grep -E pattern which describes the directories to ignore.
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb:/usr/bsd
export PATH
@@ -207,7 +207,7 @@ do
done
-# consistancy checks on the arguments
+# consistency checks on the arguments
if [ ! -f $spec_header ]; then
echo "You must pass me the full path to the partial spec file"
@@ -294,7 +294,7 @@ cat $spec_header
} | sed -e 's/%/%%/g'
#
-# Output the discription of the spec file
+# Output the description of the spec file
#
cat <<_EIEIO_
diff --git a/sign/Makefile.am b/sign/Makefile.am
index db82702bc..db774de0e 100644
--- a/sign/Makefile.am
+++ b/sign/Makefile.am
@@ -1,8 +1,10 @@
# Makefile for rpm library.
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
AM_CPPFLAGS += @WITH_NSS_INCLUDE@
AM_CPPFLAGS += @WITH_POPT_INCLUDE@
AM_CPPFLAGS += -I$(top_srcdir)/misc
@@ -11,9 +13,14 @@ usrlibdir = $(libdir)
usrlib_LTLIBRARIES = librpmsign.la
librpmsign_la_SOURCES = rpmgensig.c
-librpmsign_la_LDFLAGS = -version-info 2:0:1
+librpmsign_la_LDFLAGS = -version-info $(rpm_version_info)
librpmsign_la_LIBADD = \
$(top_builddir)/lib/librpm.la \
$(top_builddir)/rpmio/librpmio.la \
@WITH_POPT_LIB@ \
@LIBINTL@
+
+if WITH_IMAEVM
+librpmsign_la_SOURCES += rpmsignfiles.c rpmsignfiles.h
+librpmsign_la_LIBADD += @WITH_IMAEVM_LIB@
+endif
diff --git a/sign/rpmgensig.c b/sign/rpmgensig.c
index 7695ffad7..d29c17837 100644
--- a/sign/rpmgensig.c
+++ b/sign/rpmgensig.c
@@ -8,6 +8,7 @@
#include <errno.h>
#include <sys/wait.h>
#include <popt.h>
+#include <libgen.h>
#include <rpm/rpmlib.h> /* RPMSIGTAG & related */
#include <rpm/rpmmacro.h>
@@ -16,15 +17,82 @@
#include <rpm/rpmfileutil.h> /* rpmMkTemp() */
#include <rpm/rpmlog.h>
#include <rpm/rpmstring.h>
+#include <rpmio/rpmio_internal.h>
#include "lib/rpmlead.h"
#include "lib/signature.h"
+#include "sign/rpmsignfiles.h"
#include "debug.h"
-#if !defined(__GLIBC__) && !defined(__APPLE__)
-char ** environ = NULL;
-#endif
+typedef struct sigTarget_s {
+ FD_t fd;
+ const char *fileName;
+ off_t start;
+ rpm_loff_t size;
+} *sigTarget;
+
+/*
+ * There is no function for creating unique temporary fifos so create
+ * unique temporary directory and then create fifo in it.
+ */
+static char *mkTempFifo(void)
+{
+ char *tmppath = NULL, *tmpdir = NULL, *fifofn = NULL;
+ mode_t mode;
+
+ tmppath = rpmExpand("%{_tmppath}", NULL);
+ if (rpmioMkpath(tmppath, 0755, (uid_t) -1, (gid_t) -1))
+ goto exit;
+
+
+ tmpdir = rpmGetPath(tmppath, "/rpm-tmp.XXXXXX", NULL);
+ mode = umask(0077);
+ tmpdir = mkdtemp(tmpdir);
+ umask(mode);
+ if (tmpdir == NULL) {
+ rpmlog(RPMLOG_ERR, _("error creating temp directory %s: %m\n"),
+ tmpdir);
+ tmpdir = _free(tmpdir);
+ goto exit;
+ }
+
+ fifofn = rpmGetPath(tmpdir, "/fifo", NULL);
+ if (mkfifo(fifofn, 0600) == -1) {
+ rpmlog(RPMLOG_ERR, _("error creating fifo %s: %m\n"), fifofn);
+ fifofn = _free(fifofn);
+ }
+
+exit:
+ if (fifofn == NULL && tmpdir != NULL)
+ unlink(tmpdir);
+
+ free(tmppath);
+ free(tmpdir);
+
+ return fifofn;
+}
+
+/* Delete fifo and then temporary directory in which it was located */
+static int rpmRmTempFifo(const char *fn)
+{
+ int rc = 0;
+ char *dfn = NULL, *dir = NULL;
+
+ if ((rc = unlink(fn)) != 0) {
+ rpmlog(RPMLOG_ERR, _("error delete fifo %s: %m\n"), fn);
+ return rc;
+ }
+
+ dfn = xstrdup(fn);
+ dir = dirname(dfn);
+
+ if ((rc = rmdir(dir)) != 0)
+ rpmlog(RPMLOG_ERR, _("error delete directory %s: %m\n"), dir);
+ free(dfn);
+
+ return rc;
+}
static int closeFile(FD_t *fdp)
{
@@ -42,13 +110,26 @@ static int closeFile(FD_t *fdp)
static int manageFile(FD_t *fdp, const char *fn, int flags)
{
FD_t fd;
+ const char *fmode;
if (fdp == NULL || fn == NULL) /* programmer error */
return 1;
/* open a file and set *fdp */
if (*fdp == NULL && fn != NULL) {
- fd = Fopen(fn, (flags & O_ACCMODE) == O_WRONLY ? "w.ufdio" : "r.ufdio");
+ switch (flags & O_ACCMODE) {
+ case O_WRONLY:
+ fmode = "w.ufdio";
+ break;
+ case O_RDONLY:
+ fmode = "r.ufdio";
+ break;
+ default:
+ case O_RDWR:
+ fmode = "r+.ufdio";
+ break;
+ }
+ fd = Fopen(fn, fmode);
if (fd == NULL || Ferror(fd)) {
rpmlog(RPMLOG_ERR, _("%s: open failed: %s\n"), fn,
Fstrerror(fd));
@@ -68,6 +149,10 @@ static int manageFile(FD_t *fdp, const char *fn, int flags)
/**
* Copy header+payload, calculating digest(s) on the fly.
+ * @param sfdp source file
+ * @param sfnp source path
+ * @param tfdp destination file
+ * @param tfnp destination path
*/
static int copyFile(FD_t *sfdp, const char *sfnp,
FD_t *tfdp, const char *tfnp)
@@ -76,11 +161,6 @@ static int copyFile(FD_t *sfdp, const char *sfnp,
ssize_t count;
int rc = 1;
- if (manageFile(sfdp, sfnp, O_RDONLY))
- goto exit;
- if (manageFile(tfdp, tfnp, O_WRONLY|O_CREAT|O_TRUNC))
- goto exit;
-
while ((count = Fread(buf, sizeof(buf[0]), sizeof(buf), *sfdp)) > 0)
{
if (Fwrite(buf, sizeof(buf[0]), count, *tfdp) != count) {
@@ -101,8 +181,6 @@ static int copyFile(FD_t *sfdp, const char *sfnp,
rc = 0;
exit:
- if (*sfdp) (void) closeFile(sfdp);
- if (*tfdp) (void) closeFile(tfdp);
return rc;
}
@@ -110,14 +188,13 @@ exit:
* Validate generated signature and insert to header if it looks sane.
* NSS doesn't support everything GPG does. Basic tests to see if the
* generated signature is something we can use.
- * Return 0 on success, 1 on failure.
+ * Return generated signature tag data on success, NULL on failure.
*/
-static int putSignature(Header sigh, int ishdr, uint8_t *pkt, size_t pktlen)
+static rpmtd makeSigTag(Header sigh, int ishdr, uint8_t *pkt, size_t pktlen)
{
pgpDigParams sigp = NULL;
rpmTagVal sigtag;
- struct rpmtd_s sigtd;
- int rc = 1; /* assume failure */
+ rpmtd sigtd = NULL;
unsigned int hash_algo;
unsigned int pubkey_algo;
@@ -147,48 +224,42 @@ static int putSignature(Header sigh, int ishdr, uint8_t *pkt, size_t pktlen)
break;
}
- /* Looks sane, insert into header */
- rpmtdReset(&sigtd);
- sigtd.count = pktlen;
- sigtd.data = pkt;
- sigtd.type = RPM_BIN_TYPE;
- sigtd.tag = sigtag;
-
- /* Argh, reversed return codes */
- rc = (headerPut(sigh, &sigtd, HEADERPUT_DEFAULT) == 0);
+ /* Looks sane, create the tag data */
+ sigtd = rpmtdNew();
+ sigtd->count = pktlen;
+ sigtd->data = memcpy(xmalloc(pktlen), pkt, pktlen);;
+ sigtd->type = RPM_BIN_TYPE;
+ sigtd->tag = sigtag;
+ sigtd->flags |= RPMTD_ALLOCED;
exit:
pgpDigParamsFree(sigp);
- return rc;
+ return sigtd;
}
-static int runGPG(const char *file, const char *sigfile, const char * passPhrase)
+static int runGPG(sigTarget sigt, const char *sigfile)
{
- int pid, status;
- int inpipe[2];
- FILE * fpipe;
+ int pid = 0, status;
+ FD_t fnamedPipe = NULL;
+ char *namedPipeName = NULL;
+ unsigned char buf[BUFSIZ];
+ ssize_t count;
+ ssize_t wantCount;
+ rpm_loff_t size;
int rc = 1; /* assume failure */
- inpipe[0] = inpipe[1] = 0;
- if (pipe(inpipe) < 0) {
- rpmlog(RPMLOG_ERR, _("Couldn't create pipe for signing: %m"));
- goto exit;
- }
+ namedPipeName = mkTempFifo();
- addMacro(NULL, "__plaintext_filename", NULL, file, -1);
- addMacro(NULL, "__signature_filename", NULL, sigfile, -1);
+ rpmPushMacro(NULL, "__plaintext_filename", NULL, namedPipeName, -1);
+ rpmPushMacro(NULL, "__signature_filename", NULL, sigfile, -1);
if (!(pid = fork())) {
char *const *av;
char *cmd = NULL;
const char *gpg_path = rpmExpand("%{?_gpg_path}", NULL);
- (void) dup2(inpipe[0], 3);
- (void) close(inpipe[1]);
-
if (gpg_path && *gpg_path != '\0')
(void) setenv("GNUPGHOME", gpg_path, 1);
- (void) setenv("LC_ALL", "C", 1);
unsetenv("MALLOC_CHECK_");
cmd = rpmExpand("%{?__gpg_sign_cmd}", NULL);
@@ -201,23 +272,61 @@ static int runGPG(const char *file, const char *sigfile, const char * passPhrase
_exit(EXIT_FAILURE);
}
- delMacro(NULL, "__plaintext_filename");
- delMacro(NULL, "__signature_filename");
+ rpmPopMacro(NULL, "__plaintext_filename");
+ rpmPopMacro(NULL, "__signature_filename");
- fpipe = fdopen(inpipe[1], "w");
- (void) close(inpipe[0]);
- if (fpipe) {
- fprintf(fpipe, "%s\n", (passPhrase ? passPhrase : ""));
- (void) fclose(fpipe);
+ fnamedPipe = Fopen(namedPipeName, "w");
+ if (!fnamedPipe) {
+ rpmlog(RPMLOG_ERR, _("Fopen failed\n"));
+ goto exit;
+ }
+
+ if (Fseek(sigt->fd, sigt->start, SEEK_SET) < 0) {
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ sigt->fileName, Fstrerror(sigt->fd));
+ goto exit;
}
+ size = sigt->size;
+ wantCount = size < sizeof(buf) ? size : sizeof(buf);
+ while ((count = Fread(buf, sizeof(buf[0]), wantCount, sigt->fd)) > 0) {
+ Fwrite(buf, sizeof(buf[0]), count, fnamedPipe);
+ if (Ferror(fnamedPipe)) {
+ rpmlog(RPMLOG_ERR, _("Could not write to pipe\n"));
+ goto exit;
+ }
+ size -= count;
+ wantCount = size < sizeof(buf) ? size : sizeof(buf);
+ }
+ if (count < 0) {
+ rpmlog(RPMLOG_ERR, _("Could not read from file %s: %s\n"),
+ sigt->fileName, Fstrerror(sigt->fd));
+ goto exit;
+ }
+ Fclose(fnamedPipe);
+ fnamedPipe = NULL;
+
(void) waitpid(pid, &status, 0);
+ pid = 0;
if (!WIFEXITED(status) || WEXITSTATUS(status)) {
rpmlog(RPMLOG_ERR, _("gpg exec failed (%d)\n"), WEXITSTATUS(status));
} else {
rc = 0;
}
+
exit:
+
+ if (fnamedPipe)
+ Fclose(fnamedPipe);
+
+ if (pid)
+ waitpid(pid, &status, 0);
+
+ if (namedPipeName) {
+ rpmRmTempFifo(namedPipeName);
+ free(namedPipeName);
+ }
+
return rc;
}
@@ -225,20 +334,19 @@ exit:
* Generate GPG signature(s) for a header+payload file.
* @param sigh signature header
* @param ishdr header-only signature?
- * @param file header+payload file name
+ * @param sigt signature target
* @param passPhrase private key pass phrase
- * @return 0 on success, 1 on failure
+ * @return generated sigtag on success, 0 on failure
*/
-static int makeGPGSignature(Header sigh, int ishdr,
- const char * file, const char * passPhrase)
+static rpmtd makeGPGSignature(Header sigh, int ishdr, sigTarget sigt)
{
- char * sigfile = rstrscat(NULL, file, ".sig", NULL);
+ char * sigfile = rstrscat(NULL, sigt->fileName, ".sig", NULL);
struct stat st;
uint8_t * pkt = NULL;
size_t pktlen = 0;
- int rc = 1; /* assume failure */
+ rpmtd sigtd = NULL;
- if (runGPG(file, sigfile, passPhrase))
+ if (runGPG(sigt, sigfile))
goto exit;
if (stat(sigfile, &st)) {
@@ -253,7 +361,7 @@ static int makeGPGSignature(Header sigh, int ishdr,
{ FD_t fd;
- rc = 0;
+ int rc = 0;
fd = Fopen(sigfile, "r.ufdio");
if (fd != NULL && !Ferror(fd)) {
rc = Fread(pkt, sizeof(*pkt), pktlen, fd);
@@ -268,233 +376,346 @@ static int makeGPGSignature(Header sigh, int ishdr,
rpmlog(RPMLOG_DEBUG, "Got %zd bytes of GPG sig\n", pktlen);
/* Parse the signature, change signature tag as appropriate. */
- rc = putSignature(sigh, ishdr, pkt, pktlen);
+ sigtd = makeSigTag(sigh, ishdr, pkt, pktlen);
exit:
(void) unlink(sigfile);
free(sigfile);
free(pkt);
- return rc;
+ return sigtd;
}
-/**
- * Generate header only signature(s) from a header+payload file.
- * @param sigh signature header
- * @param file header+payload file name
- * @param passPhrase private key pass phrase
- * @return 0 on success, -1 on failure
- */
-static int makeHDRSignature(Header sigh, const char * file,
- const char * passPhrase)
+static void deleteSigs(Header sigh)
{
- Header h = NULL;
- FD_t fd = NULL;
- char * fn = NULL;
- int ret = -1; /* assume failure. */
+ headerDel(sigh, RPMSIGTAG_GPG);
+ headerDel(sigh, RPMSIGTAG_PGP);
+ headerDel(sigh, RPMSIGTAG_DSA);
+ headerDel(sigh, RPMSIGTAG_RSA);
+ headerDel(sigh, RPMSIGTAG_PGP5);
+}
+
+static int haveSignature(rpmtd sigtd, Header h)
+{
+ pgpDigParams sig1 = NULL;
+ pgpDigParams sig2 = NULL;
+ struct rpmtd_s oldtd;
+ int rc = 0; /* assume no */
+
+ if (!headerGet(h, rpmtdTag(sigtd), &oldtd, HEADERGET_DEFAULT))
+ return rc;
+
+ pgpPrtParams(sigtd->data, sigtd->count, PGPTAG_SIGNATURE, &sig1);
+ while (rpmtdNext(&oldtd) >= 0 && rc == 0) {
+ pgpPrtParams(oldtd.data, oldtd.count, PGPTAG_SIGNATURE, &sig2);
+ if (pgpDigParamsCmp(sig1, sig2) == 0)
+ rc = 1;
+ pgpDigParamsFree(sig2);
+ }
+ pgpDigParamsFree(sig1);
+ rpmtdFreeData(&oldtd);
+
+ return rc;
+}
- fd = Fopen(file, "r.fdio");
- if (fd == NULL || Ferror(fd))
+static int replaceSignature(Header sigh, sigTarget sigt_v3, sigTarget sigt_v4)
+{
+ int rc = -1;
+ rpmtd sigtd = NULL;
+
+ /* Make the cheaper v4 signature first */
+ if ((sigtd = makeGPGSignature(sigh, 1, sigt_v4)) == NULL)
goto exit;
- h = headerRead(fd, HEADER_MAGIC_YES);
- if (h == NULL)
+
+ /* See if we already have a signature by the same key and parameters */
+ if (haveSignature(sigtd, sigh)) {
+ rc = 1;
goto exit;
- (void) Fclose(fd);
+ }
+ /* Nuke all signature tags */
+ deleteSigs(sigh);
- fd = rpmMkTempFile(NULL, &fn);
- if (fd == NULL || Ferror(fd))
+ if (headerPut(sigh, sigtd, HEADERPUT_DEFAULT) == 0)
goto exit;
- if (headerWrite(fd, h, HEADER_MAGIC_YES))
+ rpmtdFree(sigtd);
+
+ /* Assume the same signature test holds for v3 signature too */
+ if ((sigtd = makeGPGSignature(sigh, 0, sigt_v3)) == NULL)
goto exit;
- ret = makeGPGSignature(sigh, 1, fn, passPhrase);
+ if (headerPut(sigh, sigtd, HEADERPUT_DEFAULT) == 0)
+ goto exit;
+ rc = 0;
exit:
- if (fn) {
- (void) unlink(fn);
- free(fn);
+ rpmtdFree(sigtd);
+ return rc;
+}
+
+static void unloadImmutableRegion(Header *hdrp, rpmTagVal tag)
+{
+ struct rpmtd_s td;
+ rpmtd utd = &td;
+ Header nh;
+ Header oh;
+
+ if (headerGet(*hdrp, tag, utd, HEADERGET_DEFAULT)) {
+ oh = headerCopyLoad(utd->data);
+ nh = headerCopy(oh);
+ headerFree(oh);
+ rpmtdFreeData(utd);
+ headerFree(*hdrp);
+ *hdrp = headerLink(nh);
+ headerFree(nh);
}
- headerFree(h);
- if (fd != NULL) (void) Fclose(fd);
- return ret;
}
-static int rpmGenSignature(Header sigh, const char * file,
- const char * passPhrase)
+#ifdef WITH_IMAEVM
+static rpmRC replaceSigDigests(FD_t fd, const char *rpm, Header *sigp,
+ off_t sigStart, off_t sigTargetSize,
+ char *SHA256, char *SHA1, uint8_t *MD5)
{
- int ret = -1; /* assume failure. */
+ off_t archiveSize;
+ rpmRC rc = RPMRC_OK;
- if (makeGPGSignature(sigh, 0, file, passPhrase) == 0) {
- /* XXX Piggyback a header-only DSA/RSA signature as well. */
- ret = makeHDRSignature(sigh, file, passPhrase);
+ if (Fseek(fd, sigStart, SEEK_SET) < 0) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ rpm, Fstrerror(fd));
+ goto exit;
}
- return ret;
-}
+ /* Get payload size from signature tag */
+ archiveSize = headerGetNumber(*sigp, RPMSIGTAG_PAYLOADSIZE);
+ if (!archiveSize) {
+ archiveSize = headerGetNumber(*sigp, RPMSIGTAG_LONGARCHIVESIZE);
+ }
-/**
- * Retrieve signature from header tag
- * @param sigh signature header
- * @param sigtag signature tag
- * @return parsed pgp dig or NULL
- */
-static pgpDigParams getSig(Header sigh, rpmTagVal sigtag)
-{
- struct rpmtd_s pkt;
- pgpDigParams sig = NULL;
+ /* Set reserved space to 0 */
+ rpmPushMacro(NULL, "__gpg_reserved_space", NULL, 0, RMIL_GLOBAL);
- if (headerGet(sigh, sigtag, &pkt, HEADERGET_DEFAULT) && pkt.data != NULL) {
- pgpPrtParams(pkt.data, pkt.count, PGPTAG_SIGNATURE, &sig);
- rpmtdFreeData(&pkt);
+ /* Replace old digests in sigh */
+ rc = rpmGenerateSignature(SHA256, SHA1, MD5, sigTargetSize, archiveSize, fd);
+ if (rc != RPMRC_OK) {
+ rpmlog(RPMLOG_ERR, _("generateSignature failed\n"));
+ goto exit;
}
- return sig;
-}
-static void deleteSigs(Header sigh)
-{
- headerDel(sigh, RPMSIGTAG_GPG);
- headerDel(sigh, RPMSIGTAG_PGP);
- headerDel(sigh, RPMSIGTAG_DSA);
- headerDel(sigh, RPMSIGTAG_RSA);
- headerDel(sigh, RPMSIGTAG_PGP5);
+ if (Fseek(fd, sigStart, SEEK_SET) < 0) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ rpm, Fstrerror(fd));
+ goto exit;
+ }
+
+ headerFree(*sigp);
+ rc = rpmReadSignature(fd, sigp, NULL);
+ if (rc != RPMRC_OK) {
+ rpmlog(RPMLOG_ERR, _("rpmReadSignature failed\n"));
+ goto exit;
+ }
+
+exit:
+ return rc;
}
+#endif
-static int sameSignature(rpmTagVal sigtag, Header h1, Header h2)
+static rpmRC includeFileSignatures(FD_t fd, const char *rpm,
+ Header *sigp, Header *hdrp,
+ off_t sigStart, off_t headerStart)
{
- pgpDigParams sig1 = getSig(h1, sigtag);
- pgpDigParams sig2 = getSig(h2, sigtag);;
+#ifdef WITH_IMAEVM
+ FD_t ofd = NULL;
+ char *trpm = NULL;
+ char *key;
+ char *keypass;
+ char *SHA1 = NULL;
+ char *SHA256 = NULL;
+ uint8_t *MD5 = NULL;
+ off_t sigTargetSize;
+ rpmRC rc = RPMRC_OK;
+ struct rpmtd_s osigtd;
+ char *o_sha1 = NULL;
+
+ unloadImmutableRegion(hdrp, RPMTAG_HEADERIMMUTABLE);
+
+ key = rpmExpand("%{?_file_signing_key}", NULL);
+
+ keypass = rpmExpand("%{?_file_signing_key_password}", NULL);
+ if (rstreq(keypass, "")) {
+ free(keypass);
+ keypass = NULL;
+ }
- int rc = pgpDigParamsCmp(sig1, sig2);
+ rc = rpmSignFiles(*hdrp, key, keypass);
+ if (rc != RPMRC_OK) {
+ goto exit;
+ }
- pgpDigParamsFree(sig1);
- pgpDigParamsFree(sig2);
- return (rc == 0);
-}
+ *hdrp = headerReload(*hdrp, RPMTAG_HEADERIMMUTABLE);
+ if (*hdrp == NULL) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("headerReload failed\n"));
+ goto exit;
+ }
-static int replaceSignature(Header sigh, const char *sigtarget,
- const char *passPhrase)
-{
- /* Grab a copy of the header so we can compare the result */
- Header oldsigh = headerCopy(sigh);
- int rc = -1;
-
- /* Nuke all signature tags */
- deleteSigs(sigh);
+ ofd = rpmMkTempFile(NULL, &trpm);
+ if (ofd == NULL || Ferror(ofd)) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("rpmMkTemp failed\n"));
+ goto exit;
+ }
+
+ /* Copy archive to temp file */
+ if (copyFile(&fd, rpm, &ofd, trpm)) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("copyFile failed\n"));
+ goto exit;
+ }
+
+ if (Fseek(fd, headerStart, SEEK_SET) < 0) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ rpm, Fstrerror(fd));
+ goto exit;
+ }
- /*
- * rpmGenSignature() internals parse the actual signing result and
- * adds appropriate tags for DSA/RSA.
- */
- if (rpmGenSignature(sigh, sigtarget, passPhrase) == 0) {
- /* Lets see what we got and whether its the same signature as before */
- rpmTagVal sigtag = headerIsEntry(sigh, RPMSIGTAG_DSA) ?
- RPMSIGTAG_DSA : RPMSIGTAG_RSA;
+ /* Start MD5 calculation */
+ fdInitDigestID(fd, PGPHASHALGO_MD5, RPMSIGTAG_MD5, 0);
- rc = sameSignature(sigtag, sigh, oldsigh);
+ /* Write header to rpm and recalculate digests */
+ fdInitDigestID(fd, PGPHASHALGO_SHA1, RPMSIGTAG_SHA1, 0);
+ fdInitDigestID(fd, PGPHASHALGO_SHA256, RPMSIGTAG_SHA256, 0);
+ rc = headerWrite(fd, *hdrp, HEADER_MAGIC_YES);
+ if (rc != RPMRC_OK) {
+ rpmlog(RPMLOG_ERR, _("headerWrite failed\n"));
+ goto exit;
+ }
+ fdFiniDigest(fd, RPMSIGTAG_SHA1, (void **)&SHA1, NULL, 1);
+ /* Only add SHA256 if it was there to begin with */
+ if (headerIsEntry(*sigp, RPMSIGTAG_SHA256))
+ fdFiniDigest(fd, RPMSIGTAG_SHA256, (void **)&SHA256, NULL, 1);
+
+ /* Copy archive from temp file */
+ if (Fseek(ofd, 0, SEEK_SET) < 0) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ rpm, Fstrerror(fd));
+ goto exit;
+ }
+ if (copyFile(&ofd, trpm, &fd, rpm)) {
+ rc = RPMRC_FAIL;
+ rpmlog(RPMLOG_ERR, _("copyFile failed\n"));
+ goto exit;
+ }
+ unlink(trpm);
+
+ sigTargetSize = Ftell(fd) - headerStart;
+ fdFiniDigest(fd, RPMSIGTAG_MD5, (void **)&MD5, NULL, 0);
+ if (headerGet(*sigp, RPMSIGTAG_SHA1, &osigtd, HEADERGET_DEFAULT)) {
+ o_sha1 = xstrdup(osigtd.data);
+ rpmtdFreeData(&osigtd);
}
- headerFree(oldsigh);
+ if (strcmp(SHA1, o_sha1) == 0)
+ rpmlog(RPMLOG_WARNING,
+ _("%s already contains identical file signatures\n"),
+ rpm);
+ else
+ replaceSigDigests(fd, rpm, sigp, sigStart, sigTargetSize, SHA256, SHA1, MD5);
+
+exit:
+ free(trpm);
+ free(MD5);
+ free(SHA1);
+ free(SHA256);
+ free(o_sha1);
+ free(keypass);
+ free(key);
+ if (ofd)
+ (void) closeFile(&ofd);
return rc;
+#else
+ rpmlog(RPMLOG_ERR, _("file signing support not built in\n"));
+ return RPMRC_FAIL;
+#endif
}
/** \ingroup rpmcli
* Create/modify elements in signature header.
* @param rpm path to package
* @param deleting adding or deleting signature?
- * @param passPhrase passPhrase (ignored when deleting)
+ * @param signfiles sign files if non-zero
* @return 0 on success, -1 on error
*/
-static int rpmSign(const char *rpm, int deleting, const char *passPhrase)
+static int rpmSign(const char *rpm, int deleting, int signfiles)
{
FD_t fd = NULL;
FD_t ofd = NULL;
- rpmlead lead = NULL;
- char *sigtarget = NULL, *trpm = NULL;
+ char *trpm = NULL;
Header sigh = NULL;
- char * msg = NULL;
+ Header h = NULL;
+ char *msg = NULL;
int res = -1; /* assume failure */
rpmRC rc;
struct rpmtd_s utd;
+ off_t headerStart;
+ off_t sigStart;
+ struct sigTarget_s sigt_v3;
+ struct sigTarget_s sigt_v4;
+ unsigned int origSigSize;
+ int insSig = 0;
fprintf(stdout, "%s:\n", rpm);
- if (manageFile(&fd, rpm, O_RDONLY))
+ if (manageFile(&fd, rpm, O_RDWR))
goto exit;
- if ((rc = rpmLeadRead(fd, &lead, NULL, &msg)) != RPMRC_OK) {
+ if ((rc = rpmLeadRead(fd, NULL, &msg)) != RPMRC_OK) {
rpmlog(RPMLOG_ERR, "%s: %s\n", rpm, msg);
- free(msg);
goto exit;
}
- rc = rpmReadSignature(fd, &sigh, RPMSIGTYPE_HEADERSIG, &msg);
- switch (rc) {
- default:
+ sigStart = Ftell(fd);
+ rc = rpmReadSignature(fd, &sigh, &msg);
+ if (rc != RPMRC_OK) {
rpmlog(RPMLOG_ERR, _("%s: rpmReadSignature failed: %s"), rpm,
(msg && *msg ? msg : "\n"));
- msg = _free(msg);
goto exit;
- break;
- case RPMRC_OK:
- if (sigh == NULL) {
- rpmlog(RPMLOG_ERR, _("%s: No signature available\n"), rpm);
- goto exit;
- }
- break;
}
- msg = _free(msg);
- ofd = rpmMkTempFile(NULL, &sigtarget);
- if (ofd == NULL || Ferror(ofd)) {
- rpmlog(RPMLOG_ERR, _("rpmMkTemp failed\n"));
+ headerStart = Ftell(fd);
+ if (rpmReadHeader(NULL, fd, &h, &msg) != RPMRC_OK) {
+ rpmlog(RPMLOG_ERR, _("%s: headerRead failed: %s\n"), rpm, msg);
goto exit;
}
- /* Write the header and archive to a temp file */
- if (copyFile(&fd, rpm, &ofd, sigtarget))
- goto exit;
- /* Both fd and ofd are now closed. sigtarget contains tempfile name. */
-
- /* Dump the immutable region (if present). */
- if (headerGet(sigh, RPMTAG_HEADERSIGNATURES, &utd, HEADERGET_DEFAULT)) {
- struct rpmtd_s copytd;
- Header nh = headerNew();
- Header oh = headerCopyLoad(utd.data);
- HeaderIterator hi = headerInitIterator(oh);
- while (headerNext(hi, &copytd)) {
- if (copytd.data)
- headerPut(nh, &copytd, HEADERPUT_DEFAULT);
- rpmtdFreeData(&copytd);
- }
- headerFreeIterator(hi);
- headerFree(oh);
- headerFree(sigh);
- sigh = headerLink(nh);
- headerFree(nh);
+ if (!headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) {
+ rpmlog(RPMLOG_ERR, _("Cannot sign RPM v3 packages\n"));
+ goto exit;
}
- /* Eliminate broken digest values. */
- headerDel(sigh, RPMSIGTAG_BADSHA1_1);
- headerDel(sigh, RPMSIGTAG_BADSHA1_2);
-
- /* Toss and recalculate header+payload size and digests. */
- {
- rpmTagVal const sigs[] = { RPMSIGTAG_SIZE,
- RPMSIGTAG_MD5,
- RPMSIGTAG_SHA1,
- };
- int nsigs = sizeof(sigs) / sizeof(rpmTagVal);
- for (int i = 0; i < nsigs; i++) {
- (void) headerDel(sigh, sigs[i]);
- if (rpmGenDigest(sigh, sigtarget, sigs[i]))
- goto exit;
- }
+ if (signfiles) {
+ includeFileSignatures(fd, rpm, &sigh, &h, sigStart, headerStart);
}
+ unloadImmutableRegion(&sigh, RPMTAG_HEADERSIGNATURES);
+ origSigSize = headerSizeof(sigh, HEADER_MAGIC_YES);
+
if (deleting) { /* Nuke all the signature tags. */
deleteSigs(sigh);
} else {
- res = replaceSignature(sigh, sigtarget, passPhrase);
+ /* Signature target containing header + payload */
+ sigt_v3.fd = fd;
+ sigt_v3.start = headerStart;
+ sigt_v3.fileName = rpm;
+ sigt_v3.size = fdSize(fd) - headerStart;
+
+ /* Signature target containing only header */
+ sigt_v4 = sigt_v3;
+ sigt_v4.size = headerSizeof(h, HEADER_MAGIC_YES);
+
+ res = replaceSignature(sigh, &sigt_v3, &sigt_v4);
if (res != 0) {
if (res == 1) {
rpmlog(RPMLOG_WARNING,
@@ -505,6 +726,31 @@ static int rpmSign(const char *rpm, int deleting, const char *passPhrase)
}
goto exit;
}
+ res = -1;
+ }
+
+ /* Try to make new signature smaller to have size of original signature */
+ rpmtdReset(&utd);
+ if (headerGet(sigh, RPMSIGTAG_RESERVEDSPACE, &utd, HEADERGET_MINMEM)) {
+ int diff;
+ int count;
+ char *reservedSpace = NULL;
+
+ count = utd.count;
+ diff = headerSizeof(sigh, HEADER_MAGIC_YES) - origSigSize;
+
+ if (diff < count) {
+ reservedSpace = xcalloc(count - diff, sizeof(char));
+ headerDel(sigh, RPMSIGTAG_RESERVEDSPACE);
+ rpmtdReset(&utd);
+ utd.tag = RPMSIGTAG_RESERVEDSPACE;
+ utd.count = count - diff;
+ utd.type = RPM_BIN_TYPE;
+ utd.data = reservedSpace;
+ headerPut(sigh, &utd, HEADERPUT_DEFAULT);
+ free(reservedSpace);
+ insSig = 1;
+ }
}
/* Reallocate the signature into one contiguous region. */
@@ -512,38 +758,60 @@ static int rpmSign(const char *rpm, int deleting, const char *passPhrase)
if (sigh == NULL) /* XXX can't happen */
goto exit;
- rasprintf(&trpm, "%s.XXXXXX", rpm);
- ofd = rpmMkTemp(trpm);
- if (ofd == NULL || Ferror(ofd)) {
- rpmlog(RPMLOG_ERR, _("rpmMkTemp failed\n"));
- goto exit;
- }
+ if (insSig) {
+ /* Insert new signature into original rpm */
+ if (Fseek(fd, sigStart, SEEK_SET) < 0) {
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ rpm, Fstrerror(fd));
+ goto exit;
+ }
- /* Write the lead/signature of the output rpm */
- rc = rpmLeadWrite(ofd, lead);
- if (rc != RPMRC_OK) {
- rpmlog(RPMLOG_ERR, _("%s: writeLead failed: %s\n"), trpm,
- Fstrerror(ofd));
- goto exit;
- }
+ if (rpmWriteSignature(fd, sigh)) {
+ rpmlog(RPMLOG_ERR, _("%s: rpmWriteSignature failed: %s\n"), rpm,
+ Fstrerror(fd));
+ goto exit;
+ }
+ res = 0;
+ } else {
+ /* Replace orignal rpm with new rpm containing new signature */
+ rasprintf(&trpm, "%s.XXXXXX", rpm);
+ ofd = rpmMkTemp(trpm);
+ if (ofd == NULL || Ferror(ofd)) {
+ rpmlog(RPMLOG_ERR, _("rpmMkTemp failed\n"));
+ goto exit;
+ }
- if (rpmWriteSignature(ofd, sigh)) {
- rpmlog(RPMLOG_ERR, _("%s: rpmWriteSignature failed: %s\n"), trpm,
- Fstrerror(ofd));
- goto exit;
- }
+ /* Write the lead/signature of the output rpm */
+ rc = rpmLeadWrite(ofd, h);
+ if (rc != RPMRC_OK) {
+ rpmlog(RPMLOG_ERR, _("%s: writeLead failed: %s\n"), trpm,
+ Fstrerror(ofd));
+ goto exit;
+ }
- /* Append the header and archive from the temp file */
- if (copyFile(&fd, sigtarget, &ofd, trpm) == 0) {
- struct stat st;
+ if (rpmWriteSignature(ofd, sigh)) {
+ rpmlog(RPMLOG_ERR, _("%s: rpmWriteSignature failed: %s\n"), trpm,
+ Fstrerror(ofd));
+ goto exit;
+ }
- /* Move final target into place, restore file permissions. */
- if (stat(rpm, &st) == 0 && unlink(rpm) == 0 &&
- rename(trpm, rpm) == 0 && chmod(rpm, st.st_mode) == 0) {
- res = 0;
- } else {
- rpmlog(RPMLOG_ERR, _("replacing %s failed: %s\n"),
- rpm, strerror(errno));
+ if (Fseek(fd, headerStart, SEEK_SET) < 0) {
+ rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"),
+ rpm, Fstrerror(fd));
+ goto exit;
+ }
+ /* Append the header and archive from the temp file */
+ if (copyFile(&fd, rpm, &ofd, trpm) == 0) {
+ struct stat st;
+
+ /* Move final target into place, restore file permissions. */
+ if (stat(rpm, &st) == 0 && unlink(rpm) == 0 &&
+ rename(trpm, rpm) == 0 && chmod(rpm, st.st_mode) == 0) {
+ res = 0;
+ } else {
+ rpmlog(RPMLOG_ERR, _("replacing %s failed: %s\n"),
+ rpm, strerror(errno));
+ }
}
}
@@ -551,14 +819,11 @@ exit:
if (fd) (void) closeFile(&fd);
if (ofd) (void) closeFile(&ofd);
- rpmFreeSignature(sigh);
- rpmLeadFree(lead);
+ headerFree(sigh);
+ headerFree(h);
+ free(msg);
/* Clean up intermediate target */
- if (sigtarget) {
- unlink(sigtarget);
- free(sigtarget);
- }
if (trpm) {
(void) unlink(trpm);
free(trpm);
@@ -567,8 +832,7 @@ exit:
return res;
}
-int rpmPkgSign(const char *path,
- const struct rpmSignArgs * args, const char *passPhrase)
+int rpmPkgSign(const char *path, const struct rpmSignArgs * args)
{
int rc;
@@ -576,29 +840,29 @@ int rpmPkgSign(const char *path,
if (args->hashalgo) {
char *algo = NULL;
rasprintf(&algo, "%d", args->hashalgo);
- addMacro(NULL, "_gpg_digest_algo", NULL, algo, RMIL_GLOBAL);
+ rpmPushMacro(NULL, "_gpg_digest_algo", NULL, algo, RMIL_GLOBAL);
free(algo);
}
if (args->keyid) {
- addMacro(NULL, "_gpg_name", NULL, args->keyid, RMIL_GLOBAL);
+ rpmPushMacro(NULL, "_gpg_name", NULL, args->keyid, RMIL_GLOBAL);
}
}
- rc = rpmSign(path, 0, passPhrase);
+ rc = rpmSign(path, 0, args ? args->signfiles : 0);
if (args) {
if (args->hashalgo) {
- delMacro(NULL, "_gpg_digest_algo");
+ rpmPopMacro(NULL, "_gpg_digest_algo");
}
if (args->keyid) {
- delMacro(NULL, "_gpg_name");
+ rpmPopMacro(NULL, "_gpg_name");
}
}
return rc;
}
-int rpmPkgDelSign(const char *path)
+int rpmPkgDelSign(const char *path, const struct rpmSignArgs * args)
{
- return rpmSign(path, 1, NULL);
+ return rpmSign(path, 1, 0);
}
diff --git a/sign/rpmsign.h b/sign/rpmsign.h
index 15b3e0fe8..bed8d6245 100644
--- a/sign/rpmsign.h
+++ b/sign/rpmsign.h
@@ -1,6 +1,11 @@
#ifndef _RPMSIGN_H
#define _RPMSIGN_H
+/** \file sign/rpmsign.h
+ *
+ * Signature API
+ */
+
#include <rpm/argv.h>
#include <rpm/rpmpgp.h>
@@ -11,6 +16,7 @@ extern "C" {
struct rpmSignArgs {
char *keyid;
pgpHashAlgo hashalgo;
+ int signfiles;
/* ... what else? */
};
@@ -18,18 +24,17 @@ struct rpmSignArgs {
* Sign a package
* @param path path to package
* @param args signing parameters (or NULL for defaults)
- * @param passPhrase passphrase for the signing key
* @return 0 on success
*/
-int rpmPkgSign(const char *path,
- const struct rpmSignArgs * args, const char *passPhrase);
+int rpmPkgSign(const char *path, const struct rpmSignArgs * args);
/** \ingroup rpmsign
* Delete signature(s) from a package
* @param path path to package
+ * @param args signing parameters (or NULL for defaults)
* @return 0 on success
*/
-int rpmPkgDelSign(const char *path);
+int rpmPkgDelSign(const char *path, const struct rpmSignArgs * args);
#ifdef __cplusplus
}
diff --git a/sign/rpmsignfiles.c b/sign/rpmsignfiles.c
new file mode 100644
index 000000000..61b73bd40
--- /dev/null
+++ b/sign/rpmsignfiles.c
@@ -0,0 +1,135 @@
+/**
+ * Copyright (C) 2014 IBM Corporation
+ *
+ * Author: Fionnuala Gunter <fin@linux.vnet.ibm.com>
+ */
+
+#include "system.h"
+#include "imaevm.h"
+
+#include <rpm/rpmlog.h> /* rpmlog */
+#include <rpm/rpmstring.h> /* rnibble */
+#include <rpm/rpmpgp.h> /* rpmDigestLength */
+#include "lib/header.h" /* HEADERGET_MINMEM */
+#include "lib/rpmtypes.h" /* rpmRC */
+
+#include "sign/rpmsignfiles.h"
+
+#define MAX_SIGNATURE_LENGTH 1024
+
+static const char *hash_algo_name[] = {
+ [PGPHASHALGO_MD5] = "md5",
+ [PGPHASHALGO_SHA1] = "sha1",
+ [PGPHASHALGO_RIPEMD160] = "rmd160",
+ [PGPHASHALGO_MD2] = "md2",
+ [PGPHASHALGO_TIGER192] = "tgr192",
+ [PGPHASHALGO_HAVAL_5_160] = "haval5160",
+ [PGPHASHALGO_SHA256] = "sha256",
+ [PGPHASHALGO_SHA384] = "sha384",
+ [PGPHASHALGO_SHA512] = "sha512",
+ [PGPHASHALGO_SHA224] = "sha224",
+};
+
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+
+static char *signFile(const char *algo, const char *fdigest, int diglen,
+const char *key, char *keypass)
+{
+ char *fsignature;
+ unsigned char digest[diglen];
+ unsigned char signature[MAX_SIGNATURE_LENGTH];
+ int siglen;
+
+ /* convert file digest hex to binary */
+ memset(digest, 0, diglen);
+ /* some entries don't have a digest - we return an empty signature */
+ if (strlen(fdigest) != diglen * 2)
+ return strdup("");
+
+ for (int i = 0; i < diglen; ++i, fdigest += 2)
+ digest[i] = (rnibble(fdigest[0]) << 4) | rnibble(fdigest[1]);
+
+ /* prepare file signature */
+ memset(signature, 0, MAX_SIGNATURE_LENGTH);
+ signature[0] = '\x03';
+
+ /* calculate file signature */
+ siglen = sign_hash(algo, digest, diglen, key, keypass, signature+1);
+ if (siglen < 0) {
+ rpmlog(RPMLOG_ERR, _("sign_hash failed\n"));
+ return NULL;
+ }
+
+ /* convert file signature binary to hex */
+ fsignature = pgpHexStr(signature, siglen+1);
+ return fsignature;
+}
+
+static uint32_t signatureLength(const char *algo, int diglen, const char *key,
+char *keypass)
+{
+ unsigned char digest[diglen];
+ unsigned char signature[MAX_SIGNATURE_LENGTH];
+
+ memset(digest, 0, diglen);
+ memset(signature, 0, MAX_SIGNATURE_LENGTH);
+ signature[0] = '\x03';
+
+ uint32_t siglen = sign_hash(algo, digest, diglen, key, keypass,
+ signature+1);
+ return siglen + 1;
+}
+
+rpmRC rpmSignFiles(Header h, const char *key, char *keypass)
+{
+ struct rpmtd_s digests;
+ int algo;
+ int diglen;
+ uint32_t siglen;
+ const char *algoname;
+ const char *digest;
+ char *signature;
+ rpmRC rc = RPMRC_OK;
+
+ algo = headerGetNumber(h, RPMTAG_FILEDIGESTALGO);
+ if (!algo) {
+ /* use default algorithm */
+ algo = PGPHASHALGO_MD5;
+ } else if (algo < 0 || algo >= ARRAY_SIZE(hash_algo_name)) {
+ rpmlog(RPMLOG_ERR, _("File digest algorithm id is invalid"));
+ return RPMRC_FAIL;
+ }
+
+ diglen = rpmDigestLength(algo);
+ algoname = hash_algo_name[algo];
+ if (!algoname) {
+ rpmlog(RPMLOG_ERR, _("hash_algo_name failed\n"));
+ return RPMRC_FAIL;
+ }
+
+ headerDel(h, RPMTAG_FILESIGNATURELENGTH);
+ headerDel(h, RPMTAG_FILESIGNATURES);
+ siglen = signatureLength(algoname, diglen, key, keypass);
+ headerPutUint32(h, RPMTAG_FILESIGNATURELENGTH, &siglen, 1);
+
+ headerGet(h, RPMTAG_FILEDIGESTS, &digests, HEADERGET_MINMEM);
+ while ((digest = rpmtdNextString(&digests))) {
+ signature = signFile(algoname, digest, diglen, key, keypass);
+ if (!signature) {
+ rpmlog(RPMLOG_ERR, _("signFile failed\n"));
+ rc = RPMRC_FAIL;
+ goto exit;
+ }
+ if (!headerPutString(h, RPMTAG_FILESIGNATURES, signature)) {
+ free(signature);
+ rpmlog(RPMLOG_ERR, _("headerPutString failed\n"));
+ rc = RPMRC_FAIL;
+ goto exit;
+ }
+ free(signature);
+ }
+
+exit:
+ rpmtdFreeData(&digests);
+ return rc;
+}
diff --git a/sign/rpmsignfiles.h b/sign/rpmsignfiles.h
new file mode 100644
index 000000000..4163fafde
--- /dev/null
+++ b/sign/rpmsignfiles.h
@@ -0,0 +1,25 @@
+#ifndef H_RPMSIGNFILES
+#define H_RPMSIGNFILES
+
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmutil.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Sign file digests in header and store the signatures in header
+ * @param h package header
+ * @param key signing key
+ * @param keypass signing key password
+ * @return RPMRC_OK on success
+ */
+RPM_GNUC_INTERNAL
+rpmRC rpmSignFiles(Header h, const char *key, char *keypass);
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif /* H_RPMSIGNFILES */
diff --git a/system.h b/system.h
index f3b1bab32..570cef13a 100644
--- a/system.h
+++ b/system.h
@@ -1,5 +1,7 @@
/**
* \file system.h
+ *
+ * Some misc low-level API
*/
#ifndef H_SYSTEM
@@ -78,29 +80,8 @@ char * stpncpy(char * dest, const char * src, size_t n);
#endif
#endif
-#if WITH_SELINUX
-#include <selinux/selinux.h>
-#include <selinux/label.h>
-#include <selinux/avc.h>
-#else
-typedef char * security_context_t;
-
-#define freecon(_c)
-
-#define setfilecon(_fn, _c) (-1)
-#define lsetfilecon(_fn, _c) (-1)
-
-#define is_selinux_enabled() (0)
-
-#define matchpathcon_init(_fn) (-1)
-#define matchpathcon_fini() (0)
-#define matchpathcon(_fn, _fm, _c) (-1)
-
-#define selabel_lookup_raw(_hnd, _scon, _key,_type) (-1)
-
-#define selinux_file_context_path() (0)
-
-#define rpm_execcon(_v, _fn, _av, _envp) (0)
+#if defined(HAVE_FDATASYNC) && !HAVE_DECL_FDATASYNC
+extern int fdatasync(int fildes);
#endif
#include "rpmio/rpmutil.h"
@@ -111,20 +92,23 @@ typedef char * security_context_t;
#define xstrdup(_str) rstrdup((_str))
#define _free(_ptr) rfree((_ptr))
-/* Retrofit glibc __progname */
-#if defined __GLIBC__ && __GLIBC__ >= 2
-#if __GLIBC_MINOR__ >= 1
-#define __progname __assert_program_name
-#endif
-#define setprogname(pn)
+/* To extract program's name: use calls (reimplemented or shipped with system):
+ - void setprogname(const char *pn)
+ - const char *getprogname(void)
+
+ setprogname(*pn) must be the first call in main() in order to set the name
+ as soon as possible. */
+#if defined(HAVE_SETPROGNAME) /* BSD'ish systems */
+# include <stdlib.h> /* Make sure this header is included */
+# define xsetprogname(pn) setprogname(pn)
+# define xgetprogname(pn) getprogname(pn)
+#elif defined(HAVE___PROGNAME) /* glibc and others */
+# define xsetprogname(pn)
+ extern const char *__progname;
+# define xgetprogname(pn) __progname
#else
-#define __progname program_name
-#define setprogname(pn) \
- { if ((__progname = strrchr(pn, '/')) != NULL) __progname++; \
- else __progname = pn; \
- }
+# error "Did not find any sutable implementation of xsetprogname/xgetprogname"
#endif
-extern const char *__progname;
/* Take care of NLS matters. */
#if ENABLE_NLS
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 61c18afcb..f2bdb7bae 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,13 +1,11 @@
## Process this file with automake to produce Makefile.in.
include $(top_srcdir)/rpm.am
+AM_CFLAGS = @RPMCFLAGS@
EXTRA_DIST =
CLEANFILES =
-# HACK: This should not be here.
-rpmbindir = `echo $(bindir) | sed -e s,usr/bin,bin,`
-
##
TESTSUITE = $(srcdir)/rpmtests
EXTRA_DIST += local.at $(TESTSUITE)
@@ -19,6 +17,7 @@ TESTSUITE_AT += rpmquery.at
TESTSUITE_AT += rpmverify.at
TESTSUITE_AT += rpmdb.at
TESTSUITE_AT += rpmbuild.at
+TESTSUITE_AT += rpmbuildid.at
TESTSUITE_AT += rpmi.at
TESTSUITE_AT += rpmvercmp.at
TESTSUITE_AT += rpmdeps.at
@@ -31,17 +30,26 @@ TESTSUITE_AT += rpmmacro.at
TESTSUITE_AT += rpmpython.at
TESTSUITE_AT += rpmdepmatch.at
TESTSUITE_AT += rpmscript.at
+TESTSUITE_AT += rpmsigdig.at
+TESTSUITE_AT += rpmio.at
+TESTSUITE_AT += rpmorder.at
EXTRA_DIST += $(TESTSUITE_AT)
## testsuite data
EXTRA_DIST += data/SPECS/attrtest.spec
EXTRA_DIST += data/SPECS/hello.spec
+EXTRA_DIST += data/SPECS/hello-r2.spec
EXTRA_DIST += data/SPECS/hello-script.spec
+EXTRA_DIST += data/SPECS/hello2.spec
+EXTRA_DIST += data/SPECS/hello2cp.spec
+EXTRA_DIST += data/SPECS/hello2ln.spec
+EXTRA_DIST += data/SPECS/hello2-suid.spec
EXTRA_DIST += data/SPECS/foo.spec
EXTRA_DIST += data/SPECS/globtest.spec
EXTRA_DIST += data/SPECS/versiontest.spec
EXTRA_DIST += data/SPECS/conflicttest.spec
EXTRA_DIST += data/SPECS/configtest.spec
+EXTRA_DIST += data/SPECS/filedep.spec
EXTRA_DIST += data/SPECS/flangtest.spec
EXTRA_DIST += data/SPECS/hlinktest.spec
EXTRA_DIST += data/SPECS/symlinktest.spec
@@ -51,6 +59,16 @@ EXTRA_DIST += data/SPECS/fakeshell.spec
EXTRA_DIST += data/SPECS/scripts.spec
EXTRA_DIST += data/SPECS/selfconflict.spec
EXTRA_DIST += data/SPECS/replacetest.spec
+EXTRA_DIST += data/SPECS/triggers.spec
+EXTRA_DIST += data/SPECS/filetriggers.spec
+EXTRA_DIST += data/SPECS/parallel.spec
+EXTRA_DIST += data/SPECS/prefixtest.spec
+EXTRA_DIST += data/SPECS/testdoc.spec
+EXTRA_DIST += data/SPECS/sigpipe.spec
+EXTRA_DIST += data/SPECS/test-subpackages.spec
+EXTRA_DIST += data/SPECS/test-subpackages-exclude.spec
+EXTRA_DIST += data/SPECS/test-subpackages-pathpostfixes.spec
+EXTRA_DIST += data/SPECS/vattrtest.spec
EXTRA_DIST += data/SOURCES/hello-1.0-modernize.patch
EXTRA_DIST += data/SOURCES/hello-1.0.tar.gz
EXTRA_DIST += data/SOURCES/hello-2.0.tar.gz
@@ -59,8 +77,15 @@ EXTRA_DIST += data/RPMS/hello-1.0-1.i386.rpm
EXTRA_DIST += data/RPMS/hello-1.0-1.ppc64.rpm
EXTRA_DIST += data/RPMS/hello-2.0-1.i686.rpm
EXTRA_DIST += data/RPMS/hello-2.0-1.x86_64.rpm
+EXTRA_DIST += data/RPMS/hello-2.0-1.x86_64-signed.rpm
EXTRA_DIST += data/SRPMS/foo-1.0-1.src.rpm
EXTRA_DIST += data/SRPMS/hello-1.0-1.src.rpm
+EXTRA_DIST += data/SOURCES/hello.c
+EXTRA_DIST += data/SPECS/hello-attr-buildid.spec
+EXTRA_DIST += data/SPECS/hello-config-buildid.spec
+EXTRA_DIST += data/SPECS/hello-cd.spec
+EXTRA_DIST += data/keys/rpm.org-rsa-2048-test.pub
+EXTRA_DIST += data/keys/rpm.org-rsa-2048-test.secret
# testsuite voodoo
AUTOTEST = $(AUTOM4TE) --language=autotest
@@ -86,35 +111,41 @@ CLEANFILES += atconfig
atlocal: atlocal.in Makefile
@sed \
- -e "s,[@]rpmbindir[@],$(rpmbindir)," \
-e "s,[@]usrbindir[@],$(bindir)," \
-e "s,[@]usrlibdir[@],$(libdir)," \
+ -e "s,[@]execprefix[@],$(exec_prefix)," \
-e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir)," \
< $(srcdir)/atlocal.in > atlocal
DISTCLEANFILES = atlocal
EXTRA_DIST += atlocal.in
# Hack: Abusing testing$(bindir)/rpmbuild as stamp file
+# The chmod is needed when copying from read-only sources (eg in distcheck)
testing$(bindir)/rpmbuild: ../rpmbuild
+ HOME=$(abs_builddir)/testing gpg-connect-agent --no-autostart killagent bye ||:
rm -rf testing
mkdir -p testing/$(bindir)
ln -s ./$(bindir) testing/bin
+ mkdir -p testing/usr
+ ln -s ../bin testing/usr/bin
(cd ${top_builddir} && \
$(MAKE) DESTDIR=`pwd`/${subdir}/testing install)
- cp -r data/ testing/
- mkdir testing/{dev,etc,magic,tmp}
- for node in stdin stderr stdout null; do ln -s /dev/$${node} testing/dev/$${node}; done
- for cf in hosts resolv.conf passwd shadow group gshadow mtab fstab; do [ -f /etc/$${cf} ] && ln -s /etc/$${cf} testing/etc/$${cf}; done
- for prog in gzip cat patch tar sh ln chmod rm mkdir uname grep sed find file mktemp cut sort diff; do p=`which $${prog}`; ln -s $${p} testing/$${p}; done
+ cp -r ${srcdir}/data/ testing/
+ chmod -R u+w testing/data/
+ for d in dev etc magic tmp var; do if [ ! -d testing/$${d} ]; then mkdir testing/$${d}; fi; done
+ for node in urandom stdin stderr stdout null; do ln -s /dev/$${node} testing/dev/$${node}; done
+ for cf in hosts resolv.conf passwd shadow group gshadow mtab ; do [ -f /etc/$${cf} ] && ln -s /etc/$${cf} testing/etc/$${cf}; done
+ for prog in gzip cat patch tar sh ln chmod rm mkdir uname grep sed find file ionice mktemp nice cut sort diff touch install wc; do p=`which $${prog}`; ln -s $${p} testing/$(bindir)/; done
for d in /proc /sys /selinux /etc/selinux; do if [ -d $${d} ]; then ln -s $${d} testing/$${d}; fi; done
(cd testing/magic && file -C)
+ HOME=$(abs_builddir)/testing gpg2 --import ${abs_srcdir}/data/keys/*.secret || HOME=$(abs_builddir)/testing gpg --import ${abs_srcdir}/data/keys/*.secret
check_DATA = atconfig atlocal $(TESTSUITE)
check_DATA += testing$(bindir)/rpmbuild
if HAVE_FAKECHROOT
check-local: $(check_DATA)
- $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS) ||:
+ $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
else
check-local:
echo "you need to have fakechroot installed"
diff --git a/tests/atlocal.in b/tests/atlocal.in
index 5ce6f4f93..d7d837f45 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -3,7 +3,7 @@ export LD_LIBRARY_PATH
PATH="${abs_builddir}/testing@rpmbindir@:${abs_builddir}/testing@usrbindir@:$PATH"
export PATH
-PYLIBDIR=`python -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))"`
+PYLIBDIR=`python -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1,0,'@execprefix@'))"`
PYTHONPATH="${abs_builddir}/testing${PYLIBDIR}"
export PYTHONPATH
@@ -18,18 +18,35 @@ export RPM_CONFIGDIR RPM_POPTEXEC_PATH
HOME="${RPMTEST}"
export HOME
+TZ=UTC
+export TZ
+
TOPDIR="${RPMTEST}/build"
RPM_XFAIL=${RPM_XFAIL-1}
function run()
{
- "$@" --define "_topdir ${TOPDIR}" --dbpath="${RPMTEST}/var/lib/rpm/"
+ "$@" --define "_tmppath ${RPMTEST}/tmp" --define "_topdir ${TOPDIR}" --dbpath="${RPMTEST}/var/lib/rpm/"
+}
+
+function rundebug()
+{
+ cp ${top_srcdir}/macros.debug ${RPM_CONFIGDIR}/macros.d/
+ "$@" --define "_tmppath ${RPMTEST}/tmp" --define "_topdir ${TOPDIR}" --dbpath="${RPMTEST}/var/lib/rpm/"
+ rm -f ${RPM_CONFIGDIR}/macros.d/macros.debug
}
function runroot()
{
- (cd ${RPMTEST} && \
- MAGIC="/magic/magic" FAKECHROOT_BASE="${RPMTEST}" fakechroot "$@" --define "_topdir /build"
+ (unset RPM_CONFIGDIR RPM_POPTEXEC_PATH; cd ${RPMTEST} && \
+ MAGIC="/magic/magic" FAKECHROOT_BASE="${RPMTEST}" fakechroot "$@" --define "_topdir /build" --noplugins
+ )
+}
+
+function runroot_other()
+{
+ (unset RPM_CONFIGDIR RPM_POPTEXEC_PATH; cd ${RPMTEST} && \
+ FAKECHROOT_BASE="${RPMTEST}" fakechroot "$@"
)
}
diff --git a/tests/data/RPMS/hello-2.0-1.i686.rpm b/tests/data/RPMS/hello-2.0-1.i686.rpm
index 46c60b1f9..ecb7c96d7 100644
--- a/tests/data/RPMS/hello-2.0-1.i686.rpm
+++ b/tests/data/RPMS/hello-2.0-1.i686.rpm
Binary files differ
diff --git a/tests/data/RPMS/hello-2.0-1.x86_64-signed.rpm b/tests/data/RPMS/hello-2.0-1.x86_64-signed.rpm
new file mode 100644
index 000000000..be627a782
--- /dev/null
+++ b/tests/data/RPMS/hello-2.0-1.x86_64-signed.rpm
Binary files differ
diff --git a/tests/data/RPMS/hello-2.0-1.x86_64.rpm b/tests/data/RPMS/hello-2.0-1.x86_64.rpm
index 50e39ddd9..003e93093 100644
--- a/tests/data/RPMS/hello-2.0-1.x86_64.rpm
+++ b/tests/data/RPMS/hello-2.0-1.x86_64.rpm
Binary files differ
diff --git a/tests/data/SOURCES/hello.c b/tests/data/SOURCES/hello.c
new file mode 100644
index 000000000..020484eed
--- /dev/null
+++ b/tests/data/SOURCES/hello.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int
+main (void)
+{
+ printf ("Hello, world!\n");
+ return 0;
+}
diff --git a/tests/data/SOURCES/poltest-1.0.tar.bz2 b/tests/data/SOURCES/poltest-1.0.tar.bz2
deleted file mode 100644
index 37dcc2356..000000000
--- a/tests/data/SOURCES/poltest-1.0.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/data/SOURCES/poltest-policy-1.0.tar.bz2 b/tests/data/SOURCES/poltest-policy-1.0.tar.bz2
deleted file mode 100644
index 76f4e14f8..000000000
--- a/tests/data/SOURCES/poltest-policy-1.0.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/tests/data/SPECS/attrtest.spec b/tests/data/SPECS/attrtest.spec
index 6f787b19e..1d7e4bfe2 100644
--- a/tests/data/SPECS/attrtest.spec
+++ b/tests/data/SPECS/attrtest.spec
@@ -20,7 +20,7 @@ for x in a b c d e f g h i j; do
chmod 400 $RPM_BUILD_ROOT/${x}/file
done
-%files
+%files -n %{name}
/a/dir
/a/file
@@ -56,3 +56,7 @@ done
%defattr(640,zoot,zoot,750)
%attr(777,-,-) /j/dir
%attr(222,-,-) /j/file
+
+%changelog
+* Tue Jun 28 2011 Panu Matilainen <pmatilai@redhat.com>
+- Initial package
diff --git a/tests/data/SPECS/configtest.spec b/tests/data/SPECS/configtest.spec
index 5f15c349f..17dd7c901 100644
--- a/tests/data/SPECS/configtest.spec
+++ b/tests/data/SPECS/configtest.spec
@@ -1,3 +1,6 @@
+# avoid depending on rpm configuration
+%define _sysconfdir /etc
+
%{!?filetype: %global filetype file}
Name: configtest%{?sub:-%{sub}}
diff --git a/tests/data/SPECS/conflicttest.spec b/tests/data/SPECS/conflicttest.spec
index bd1dd1c5f..46fbb29a1 100644
--- a/tests/data/SPECS/conflicttest.spec
+++ b/tests/data/SPECS/conflicttest.spec
@@ -1,3 +1,6 @@
+# avoid depending on rpm configuration
+%define _datadir /usr/share
+
Name: conflict%{pkg}
Version: 1.0
Release: 1
diff --git a/tests/data/SPECS/deptest.spec b/tests/data/SPECS/deptest.spec
index 7f2228f11..68b0fcbcc 100644
--- a/tests/data/SPECS/deptest.spec
+++ b/tests/data/SPECS/deptest.spec
@@ -10,9 +10,20 @@ BuildArch: noarch
%{?provs:Provides: %{provs}}
%{?cfls:Conflicts: %{cfls}}
%{?obs:Obsoletes: %{obs}}
+%{?recs:Recommends: %{recs}}
+%{?sugs:Suggests: %{sugs}}
+%{?sups:Supplements: %{sups}}
+%{?ens:Enhances: %{ens}}
+%{?buildreqs:BuildRequires: %{buildreqs}}
+%{?buildcfls:BuildConflicts: %{buildcfls}}
%description
%{summary}
+%install
+mkdir -p %{buildroot}/opt/
+echo FOO > %{buildroot}/opt/bar
+
%files
%defattr(-,root,root,-)
+/opt/bar
diff --git a/tests/data/SPECS/filedep.spec b/tests/data/SPECS/filedep.spec
new file mode 100644
index 000000000..d40305881
--- /dev/null
+++ b/tests/data/SPECS/filedep.spec
@@ -0,0 +1,49 @@
+Name: filedep
+Version: 1.0
+Release: 1
+Summary: Testing file dependencies
+License: GPL
+BuildArch: noarch
+
+%description
+%{summary}
+
+%prep
+%setup -q -T -c %{name}-%{version}
+
+
+%build
+cat << EOF >> foo
+#!/bin/sh
+cat /etc/foo.conf
+EOF
+
+cat << EOF >> bar
+#!/bin/f00f
+echo BUG
+EOF
+
+cat << EOF >> foo.conf
+hello there
+EOF
+
+cat << EOF >> README
+Some stuff, huh?
+EOF
+
+%install
+mkdir -p %{buildroot}/etc
+mkdir -p %{buildroot}/usr/bin
+mkdir -p %{buildroot}/usr/share/doc/filedep
+install -D -m 644 foo.conf %{buildroot}/etc
+install -D -m 755 foo bar %{buildroot}/usr/bin/
+install -D -m 644 README %{buildroot}/usr/share/doc/filedep
+
+%files
+/etc/*
+/usr/bin/*
+/usr/share/doc/filedep/
+
+
+%changelog
+
diff --git a/tests/data/SPECS/filetriggers.spec b/tests/data/SPECS/filetriggers.spec
new file mode 100644
index 000000000..b1dc3d5d9
--- /dev/null
+++ b/tests/data/SPECS/filetriggers.spec
@@ -0,0 +1,95 @@
+Name: filetriggers
+Version: 1.0
+Release: 1
+Summary: Testing file triggers
+
+Group: testing
+License: GPL
+BuildArch: noarch
+
+
+%description
+%{summary}
+
+
+%filetriggerin -- /usr/bin
+echo "filetriggerin(/usr/bin*):"
+cat
+echo
+
+%filetriggerun -- /usr/bin
+echo "filetriggerun(/usr/bin*):"
+cat
+echo
+
+%filetriggerpostun -- /usr/bin
+echo "filetriggerpostun(/usr/bin*):"
+cat
+echo
+
+%transfiletriggerin -- /usr/bin
+echo "transfiletriggerin(/usr/bin*):"
+cat
+echo
+
+%transfiletriggerun -- /usr/bin
+echo "transfiletriggerun(/usr/bin*):"
+cat
+echo
+
+%transfiletriggerpostun -- /usr/bin
+echo "transfiletriggerpostun(/usr/bin*):"
+cat
+echo
+
+%filetriggerin -p <lua> -- /usr/bin
+print("filetriggerin(/usr/bin*)<lua>:")
+a = rpm.next_file()
+while a do
+ print(a)
+ a = rpm.next_file()
+end
+print("")
+io.flush()
+
+%filetriggerin -- /foo
+echo "filetriggerin(/foo*):"
+cat
+echo
+
+%filetriggerun -- /foo
+echo "filetriggerun(/foo*):"
+cat
+echo
+
+%filetriggerpostun -- /foo
+echo "filetriggerpostun(/foo*):"
+cat
+echo
+
+%transfiletriggerin -- /foo
+echo "transfiletriggerin(/foo*):"
+cat
+echo
+
+%transfiletriggerun -- /foo
+echo "transfiletriggerun(/foo*):"
+cat
+echo
+
+%transfiletriggerpostun -- /foo
+echo "transfiletriggerpostun(/foo*):"
+cat
+echo
+
+%filetriggerin -p <lua> -- /foo
+print("filetriggerin(/foo*)<lua>:")
+a = rpm.next_file()
+while a do
+ print(a)
+ a = rpm.next_file()
+end
+print("")
+io.flush()
+
+%files
diff --git a/tests/data/SPECS/flangtest.spec b/tests/data/SPECS/flangtest.spec
index 3f3679588..a361bcdc9 100644
--- a/tests/data/SPECS/flangtest.spec
+++ b/tests/data/SPECS/flangtest.spec
@@ -1,3 +1,6 @@
+# avoid depending on rpm configuration
+%define _datadir /usr/share
+
Name: flangtest
Version: 1.0
Release: 1
@@ -16,6 +19,7 @@ mkdir -p $RPM_BUILD_ROOT/%{_datadir}/%{name}
for f in fi de en pl none; do
echo "This is $f language" > $RPM_BUILD_ROOT/%{_datadir}/%{name}/$f.txt
done
+touch $RPM_BUILD_ROOT/%{_datadir}/%{name}/empty.txt
%clean
rm -rf $RPM_BUILD_ROOT
@@ -27,3 +31,4 @@ rm -rf $RPM_BUILD_ROOT
%lang(en) %{_datadir}/%{name}/en.txt
%lang(pl) %{_datadir}/%{name}/pl.txt
%{_datadir}/%{name}/none.txt
+%{_datadir}/%{name}/empty.txt
diff --git a/tests/data/SPECS/hello-attr-buildid.spec b/tests/data/SPECS/hello-attr-buildid.spec
new file mode 100644
index 000000000..cdab95fff
--- /dev/null
+++ b/tests/data/SPECS/hello-attr-buildid.spec
@@ -0,0 +1,27 @@
+Name: test
+Version: 1.0
+Release: 1
+Summary: Test
+
+License: Public Domain
+URL: https://fedoraproject.org
+Source: hello.c
+
+%description
+%{summary}.
+
+%prep
+%autosetup -c -D -T
+cp -a %{S:0} .
+
+%build
+gcc -g hello.c -o hello
+
+%install
+mkdir -p %{buildroot}%{_bindir}
+install -D -p -m 0755 -t %{buildroot}%{_bindir} hello
+
+%files
+%attr(644,root,root) %{_bindir}/hello
+
+%changelog
diff --git a/tests/data/SPECS/hello-cd.spec b/tests/data/SPECS/hello-cd.spec
new file mode 100644
index 000000000..ab1e3008b
--- /dev/null
+++ b/tests/data/SPECS/hello-cd.spec
@@ -0,0 +1,29 @@
+Name: test
+Version: 1.0
+Release: 1
+Summary: Test
+
+License: Public Domain
+URL: https://fedoraproject.org
+Source: hello.c
+
+%description
+%{summary}.
+
+%prep
+%autosetup -c -D -T
+cp -a %{S:0} .
+
+%build
+gcc -g hello.c -o hello
+
+%install
+mkdir -p %{buildroot}/bin
+install -D -p -m 0755 -t %{buildroot}/bin hello
+# Pretend we need to do something in /tmp
+cd /tmp
+
+%files
+%attr(644,root,root) /bin/hello
+
+%changelog
diff --git a/tests/data/SPECS/hello-config-buildid.spec b/tests/data/SPECS/hello-config-buildid.spec
new file mode 100644
index 000000000..ca2d30db3
--- /dev/null
+++ b/tests/data/SPECS/hello-config-buildid.spec
@@ -0,0 +1,30 @@
+Name: test
+Version: 1.0
+Release: 1
+Summary: Test
+
+License: Public Domain
+URL: https://fedoraproject.org
+Source: hello.c
+
+%description
+%{summary}.
+
+%prep
+%autosetup -c -D -T
+cp -a %{S:0} .
+
+%build
+gcc -g hello.c -o hello
+
+%install
+mkdir -p %{buildroot}/bin
+install -D -p -m 0755 -t %{buildroot}/bin hello
+mkdir -p %{buildroot}/etc
+echo "settings" > %{buildroot}/etc/config.file
+
+%files
+%attr(644,root,root) /bin/hello
+%config(noreplace) /etc/config.file
+
+%changelog
diff --git a/tests/data/SPECS/hello-r2.spec b/tests/data/SPECS/hello-r2.spec
new file mode 100644
index 000000000..ca5091d10
--- /dev/null
+++ b/tests/data/SPECS/hello-r2.spec
@@ -0,0 +1,58 @@
+Summary: hello -- hello, world rpm
+Name: hello
+Version: 1.0
+Release: 2
+Group: Utilities
+License: GPL
+Distribution: RPM test suite.
+Vendor: Red Hat Software
+Packager: Red Hat Software <bugs@redhat.com>
+URL: http://www.redhat.com
+Source0: hello-1.0.tar.gz
+Patch0: hello-1.0-modernize.patch
+Excludearch: lsi
+Excludeos: cpm
+Provides: hi
+Conflicts: goodbye
+Obsoletes: howdy
+Prefix: /usr
+
+%description
+Simple rpm demonstration.
+
+%prep
+%setup -q
+%patch0 -p1 -b .modernize
+
+%build
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/local/bin
+make DESTDIR=$RPM_BUILD_ROOT install
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%pre
+
+%post
+
+%preun
+
+%postun
+
+%files
+%defattr(-,root,root)
+%doc FAQ
+#%readme README
+#%license COPYING
+%attr(0751,root,root) /usr/local/bin/hello
+
+%changelog
+* Wed Jun 8 2016 Mark Wielaard <mjw@redhat.com>
+- Update release for unique build-id generation tests.
+
+* Tue Oct 20 1998 Jeff Johnson <jbj@redhat.com>
+- create.
diff --git a/tests/data/SPECS/hello-script.spec b/tests/data/SPECS/hello-script.spec
index 567519e33..a28c446f6 100644
--- a/tests/data/SPECS/hello-script.spec
+++ b/tests/data/SPECS/hello-script.spec
@@ -13,6 +13,7 @@ BuildArch: noarch
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
+mkdir -p $RPM_BUILD_ROOT/zoot
cat << EOF > $RPM_BUILD_ROOT/usr/bin/hello
echo "Hello world!"
EOF
@@ -20,3 +21,4 @@ EOF
%files
%defattr(-,root,root,-)
/usr/bin/hello
+/zoot
diff --git a/tests/data/SPECS/hello2-suid.spec b/tests/data/SPECS/hello2-suid.spec
new file mode 100644
index 000000000..32bdce1f9
--- /dev/null
+++ b/tests/data/SPECS/hello2-suid.spec
@@ -0,0 +1,67 @@
+Summary: hello2 -- double hello, world rpm
+Name: hello2
+Version: 1.0
+Release: 1
+Group: Utilities
+License: GPL
+Distribution: RPM test suite.
+Vendor: Red Hat Software
+Packager: Red Hat Software <bugs@redhat.com>
+URL: http://www.redhat.com
+Source0: hello-1.0.tar.gz
+Patch0: hello-1.0-modernize.patch
+Excludearch: lsi
+Excludeos: cpm
+Provides: hi
+Conflicts: goodbye
+Obsoletes: howdy
+Prefix: /usr
+
+%description
+Simple rpm demonstration.
+
+%prep
+%setup -q -n hello-1.0
+%patch0 -p1 -b .modernize
+
+%build
+make CFLAGS="-g -O1"
+mv hello hello2
+make CFLAGS="-g -O2 -D_FORTIFY_SOURCE=2"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/local/bin
+# Note explicit install hello as suid
+install -m 4755 hello $RPM_BUILD_ROOT/usr/local/bin
+install -m 755 hello2 $RPM_BUILD_ROOT/usr/local/bin
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%pre
+
+%post
+
+%preun
+
+%postun
+
+%files
+# Note we don't set any attrs. We expect the suid flag to have been picked up.
+/usr/local/bin/hello
+/usr/local/bin/hello2
+%defattr(-,root,root)
+%doc FAQ
+#%readme README
+#%license COPYING
+
+%changelog
+* Tue Jun 14 2016 Mark Wielaard <mjw@redhat.com>
+- Make hello (implicit) suid
+
+* Wed May 18 2016 Mark Wielaard <mjw@redhat.com>
+- Add hello2 for dwz testing support.
+
+* Tue Oct 20 1998 Jeff Johnson <jbj@redhat.com>
+- create.
diff --git a/tests/data/SPECS/hello2.spec b/tests/data/SPECS/hello2.spec
new file mode 100644
index 000000000..01777af5b
--- /dev/null
+++ b/tests/data/SPECS/hello2.spec
@@ -0,0 +1,62 @@
+Summary: hello2 -- double hello, world rpm
+Name: hello2
+Version: 1.0
+Release: 1
+Group: Utilities
+License: GPL
+Distribution: RPM test suite.
+Vendor: Red Hat Software
+Packager: Red Hat Software <bugs@redhat.com>
+URL: http://www.redhat.com
+Source0: hello-1.0.tar.gz
+Patch0: hello-1.0-modernize.patch
+Excludearch: lsi
+Excludeos: cpm
+Provides: hi
+Conflicts: goodbye
+Obsoletes: howdy
+Prefix: /usr
+
+%description
+Simple rpm demonstration.
+
+%prep
+%setup -q -n hello-1.0
+%patch0 -p1 -b .modernize
+
+%build
+make CFLAGS="-g -O1"
+mv hello hello2
+make CFLAGS="-g -O2 -D_FORTIFY_SOURCE=2"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/local/bin
+make DESTDIR=$RPM_BUILD_ROOT install
+cp hello2 $RPM_BUILD_ROOT/usr/local/bin/
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%pre
+
+%post
+
+%preun
+
+%postun
+
+%files
+%defattr(-,root,root)
+%doc FAQ
+#%readme README
+#%license COPYING
+%attr(0751,root,root) /usr/local/bin/hello
+%attr(0751,root,root) /usr/local/bin/hello2
+
+%changelog
+* Wed May 18 2016 Mark Wielaard <mjw@redhat.com>
+- Add hello2 for dwz testing support.
+
+* Tue Oct 20 1998 Jeff Johnson <jbj@redhat.com>
+- create.
diff --git a/tests/data/SPECS/hello2cp.spec b/tests/data/SPECS/hello2cp.spec
new file mode 100644
index 000000000..33d8dc260
--- /dev/null
+++ b/tests/data/SPECS/hello2cp.spec
@@ -0,0 +1,64 @@
+Summary: hello2 -- double hello, world rpm
+Name: hello2
+Version: 1.0
+Release: 1
+Group: Utilities
+License: GPL
+Distribution: RPM test suite.
+Vendor: Red Hat Software
+Packager: Red Hat Software <bugs@redhat.com>
+URL: http://www.redhat.com
+Source0: hello-1.0.tar.gz
+Patch0: hello-1.0-modernize.patch
+Excludearch: lsi
+Excludeos: cpm
+Provides: hi
+Conflicts: goodbye
+Obsoletes: howdy
+Prefix: /usr
+
+%description
+Simple rpm demonstration.
+
+%prep
+%setup -q -n hello-1.0
+%patch0 -p1 -b .modernize
+
+%build
+make CFLAGS="-g -O1"
+cp hello hello2
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/local/bin
+make DESTDIR=$RPM_BUILD_ROOT install
+cp hello2 $RPM_BUILD_ROOT/usr/local/bin/
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%pre
+
+%post
+
+%preun
+
+%postun
+
+%files
+%defattr(-,root,root)
+%doc FAQ
+#%readme README
+#%license COPYING
+%attr(0751,root,root) /usr/local/bin/hello
+%attr(0751,root,root) /usr/local/bin/hello2
+
+%changelog
+* Mon Jun 6 2016 Mark Wielaard <mjw@redhat.com>
+- Copy hello to hello2 for duplicate build-id testing.
+
+* Wed May 18 2016 Mark Wielaard <mjw@redhat.com>
+- Add hello2 for dwz testing support.
+
+* Tue Oct 20 1998 Jeff Johnson <jbj@redhat.com>
+- create.
diff --git a/tests/data/SPECS/hello2ln.spec b/tests/data/SPECS/hello2ln.spec
new file mode 100644
index 000000000..2c40dcc32
--- /dev/null
+++ b/tests/data/SPECS/hello2ln.spec
@@ -0,0 +1,63 @@
+Summary: hello2 -- double hello, world rpm
+Name: hello2
+Version: 1.0
+Release: 1
+Group: Utilities
+License: GPL
+Distribution: RPM test suite.
+Vendor: Red Hat Software
+Packager: Red Hat Software <bugs@redhat.com>
+URL: http://www.redhat.com
+Source0: hello-1.0.tar.gz
+Patch0: hello-1.0-modernize.patch
+Excludearch: lsi
+Excludeos: cpm
+Provides: hi
+Conflicts: goodbye
+Obsoletes: howdy
+Prefix: /usr
+
+%description
+Simple rpm demonstration.
+
+%prep
+%setup -q -n hello-1.0
+%patch0 -p1 -b .modernize
+
+%build
+make CFLAGS="-g -O1"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/local/bin
+make DESTDIR=$RPM_BUILD_ROOT install
+ln $RPM_BUILD_ROOT/usr/local/bin/hello $RPM_BUILD_ROOT/usr/local/bin/hello2
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%pre
+
+%post
+
+%preun
+
+%postun
+
+%files
+%defattr(-,root,root)
+%doc FAQ
+#%readme README
+#%license COPYING
+%attr(0751,root,root) /usr/local/bin/hello
+%attr(0751,root,root) /usr/local/bin/hello2
+
+%changelog
+* Mon Jun 6 2016 Mark Wielaard <mjw@redhat.com>
+- Hard link hello to hello2 for duplicate build-id testing.
+
+* Wed May 18 2016 Mark Wielaard <mjw@redhat.com>
+- Add hello2 for dwz testing support.
+
+* Tue Oct 20 1998 Jeff Johnson <jbj@redhat.com>
+- create.
diff --git a/tests/data/SPECS/hlinktest.spec b/tests/data/SPECS/hlinktest.spec
index 7c22d29ae..b3b8866fc 100644
--- a/tests/data/SPECS/hlinktest.spec
+++ b/tests/data/SPECS/hlinktest.spec
@@ -1,3 +1,6 @@
+%bcond_with unpackaged_dirs
+%bcond_with unpackaged_files
+
Summary: Testing hard link behavior
Name: hlinktest
Version: 1.0
@@ -5,6 +8,7 @@ Release: 1
License: Testing
Group: Testing
BuildArch: noarch
+Provides: /bin/sh
%description
%install
@@ -12,16 +16,26 @@ rm -rf %{buildroot}
mkdir -p $RPM_BUILD_ROOT/foo
cat << EOF >> $RPM_BUILD_ROOT/foo/hello
#!/bin/sh
-echo $0
+echo %{name}-%{version}
EOF
cd $RPM_BUILD_ROOT/foo
cat hello > copyllo
+cat hello > aaaa
+ln aaaa zzzz
chmod a+x hello copyllo
for f in foo bar world; do
ln hello hello-${f}
done
+%if %{with unpackaged_dirs}
+mkdir -p $RPM_BUILD_ROOT/zoo/
+%endif
+
+%if %{with unpackaged_files}
+touch $RPM_BUILD_ROOT/toot
+%endif
+
%files
%defattr(-,root,root)
/foo/*
diff --git a/tests/data/SPECS/parallel.spec b/tests/data/SPECS/parallel.spec
new file mode 100644
index 000000000..41896726e
--- /dev/null
+++ b/tests/data/SPECS/parallel.spec
@@ -0,0 +1,50 @@
+Name: parallel
+Version: %{ver}
+Release: 1%{?dist}
+Summary: Testing parallel install behavior
+BuildArch: noarch
+License: GPL
+
+%description
+%{summary}
+
+%package trigger
+Summary: %{summary}
+
+%description trigger
+%{summary}
+
+%transfiletriggerin trigger -- /opt/parallel
+echo %transfiletriggerin: $*
+cat | wc -l
+
+%transfiletriggerun trigger -- /opt/parallel
+echo %transfiletriggerun: $*
+cat | wc -l
+
+%transfiletriggerpostun trigger -- /opt/parallel
+echo %transfiletriggerpostun: $*
+cat | wc -l
+
+%filetriggerin trigger -- /opt/parallel
+echo %filetriggerin: $*
+cat | wc -l
+
+%filetriggerpostun trigger -- /opt/parallel
+echo %filetriggerpostun: $*
+cat | wc -l
+
+
+%install
+for d in mydir yourdir; do
+ datadir=%{buildroot}/opt/parallel/%{version}/${d}
+ mkdir -p ${datadir}
+ for f in 1 2 3 4; do
+ echo ${f} > ${datadir}/${f}
+ done
+done
+
+%files
+/opt/%{name}
+
+%files trigger
diff --git a/tests/data/SPECS/poltest.spec b/tests/data/SPECS/poltest.spec
deleted file mode 100644
index 233c33bc3..000000000
--- a/tests/data/SPECS/poltest.spec
+++ /dev/null
@@ -1,52 +0,0 @@
-%define debug_package %{nil}
-
-Summary: Policy in rpm example
-Name: poltest
-Version: 1.0
-Release: 2
-Group: Utilities
-License: GPL
-Requires: poltest-policy
-Source0: poltest-%{version}.tar.bz2
-Source1: poltest-policy-%{version}.tar.bz2
-Buildroot: %{_tmppath}/%{name}-%{version}-root
-%description
-Example for installing policy included in a package header
-
-%prep
-%setup -q
-%setup -q -T -D -a 1
-
-%build
-make CFLAGS="$RPM_OPT_FLAGS"
-make -f /usr/share/selinux/devel/Makefile -C poltest-policy-%{version}
-
-%install
-rm -rf $RPM_BUILD_ROOT
-make DESTDIR=%{buildroot} prefix=%{_prefix} install
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-%{_bindir}/foo
-%{_bindir}/bar
-
-
-%package policy
-Summary: Policy for the poltest package
-Group: System/Policy
-Collections: sepolicy
-%description policy
-Policy for the poltest package
-
-%sepolicy policy
-%semodule -n foo -t default poltest-policy-%{version}/foo.pp
-%semodule -n bar -t mls,targeted poltest-policy-%{version}/bar.pp
-
-%files policy
-
-%changelog
-* Wed Jul 1 2009 Steve Lawrence <slawrence@tresys.com>
-- create
diff --git a/tests/data/SPECS/prefixtest.spec b/tests/data/SPECS/prefixtest.spec
new file mode 100644
index 000000000..004e353f7
--- /dev/null
+++ b/tests/data/SPECS/prefixtest.spec
@@ -0,0 +1,42 @@
+Name: prefixtest
+Version: 1.0
+Release: 1
+Summary: Testing file glob behavior
+Group: Testing
+License: GPL
+BuildArch: noarch
+RemovePathPostfixes: g:f
+
+%description
+%{summary}
+
+%define testdir /opt/%{name}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+mkdir -p $RPM_BUILD_ROOT/%{testdir}
+echo "foo" > $RPM_BUILD_ROOT/%{testdir}/weird%%name
+for f in bif baf zab zeb zib; do
+ echo "$f" > $RPM_BUILD_ROOT/%{testdir}/$f
+done
+for f in bing bang bong; do
+ mkdir -p $RPM_BUILD_ROOT/%{testdir}/$f
+done
+mkdir -p $RPM_BUILD_ROOT/%{testdir}/foo
+for f in one two three; do
+ echo "$f" > $RPM_BUILD_ROOT/%{testdir}/foo/$f
+done
+
+ln -s %{testdir}/zab $RPM_BUILD_ROOT/%{testdir}/linkgood
+ln -s %{testdir}/zub $RPM_BUILD_ROOT/%{testdir}/linkbad
+
+%files
+%defattr(-,root,root,-)
+%{testdir}/b??
+%{testdir}/weird?name
+%{testdir}/z*
+%{testdir}/l*
+%{testdir}/b*g/
+%dir %{testdir}/foo
+%{testdir}/foo/*
diff --git a/tests/data/SPECS/replacetest.spec b/tests/data/SPECS/replacetest.spec
index e8a64e803..54974567b 100644
--- a/tests/data/SPECS/replacetest.spec
+++ b/tests/data/SPECS/replacetest.spec
@@ -1,5 +1,7 @@
%{!?filetype: %global filetype file}
%{?fixit: %global havepretrans 1}
+%{!?user: %global user root}
+%{!?grp: %global grp root}
Name: replacetest%{?sub:-%{sub}}
Version: %{ver}
@@ -43,5 +45,5 @@ rm -rf $RPM_BUILD_ROOT
%endif
%files
-%defattr(-,root,root,-)
+%defattr(-,%{user},%{grp},-)
/opt/*
diff --git a/tests/data/SPECS/scripts.spec b/tests/data/SPECS/scripts.spec
index fbb9bc989..581a56f5c 100644
--- a/tests/data/SPECS/scripts.spec
+++ b/tests/data/SPECS/scripts.spec
@@ -29,3 +29,7 @@ echo %{name}-%{version}-%{release} POSTUN $*
%posttrans
echo %{name}-%{version}-%{release} POSTTRANS $*
+
+%verifyscript
+echo %{name}-%{version}-%{release} VERIFY $*
+
diff --git a/tests/data/SPECS/sigpipe.spec b/tests/data/SPECS/sigpipe.spec
new file mode 100644
index 000000000..c9db67934
--- /dev/null
+++ b/tests/data/SPECS/sigpipe.spec
@@ -0,0 +1,47 @@
+%bcond_with buildpipe
+%bcond_with manyfiles
+
+Name: sigpipe
+Version: 1.0
+Release: 1%{?dist}
+Summary: Testing SIGPIPE behavior
+
+Group: Testing
+License: GPLv2
+BuildArch: noarch
+
+%description
+%{summary}
+%end
+
+%define datadir /opt/%{name}/data
+
+# Reproducer for https://bugzilla.redhat.com/show_bug.cgi?id=651463
+%if %{with buildpipe}
+%prep
+bash -c 's=$SECONDS
+set -o pipefail
+for ((i=0; i < 30; i++))
+do printf hello 2>/dev/null
+ sleep .1
+done | /bin/sleep 1
+(( (SECONDS-s) < 2 )) || exit 1'
+%endif
+
+%install
+mkdir -p %{buildroot}/%{datadir}
+%if %{with manyfiles}
+for i in {1..32}; do
+ mkdir %{buildroot}/%{datadir}/${i}
+ for j in {a..z}; do
+ touch %{buildroot}/%{datadir}/${i}/${j}
+ done
+done
+%endif
+
+# For simulating https://bugzilla.redhat.com/show_bug.cgi?id=1264198
+%post
+kill -PIPE ${PPID}
+
+%files
+%{datadir}
diff --git a/tests/data/SPECS/test-subpackages-exclude.spec b/tests/data/SPECS/test-subpackages-exclude.spec
new file mode 100644
index 000000000..e93b10b70
--- /dev/null
+++ b/tests/data/SPECS/test-subpackages-exclude.spec
@@ -0,0 +1,42 @@
+Name: test
+Version: 1.0
+Release: 1
+Summary: Test
+
+License: Public Domain
+URL: https://fedoraproject.org
+Source: hello.c
+
+%description
+%{summary}.
+
+%package test2
+Summary: Test2.
+%description test2
+
+%prep
+%autosetup -c -D -T
+cp -a %{S:0} .
+
+%build
+gcc -g hello.c -o hello
+cp hello.c hello2.c
+gcc -g hello2.c -o hello2
+cp hello.c hello3.c
+gcc -g hello3.c -o hello3
+
+%install
+mkdir -p %{buildroot}/bin
+install -D -p -m 0755 -t %{buildroot}/bin hello
+install -D -p -m 0755 -t %{buildroot}/bin hello2
+# Install it, but then exclude it...
+install -D -p -m 0755 -t %{buildroot}/bin hello3
+
+%files
+/bin/hello
+
+%files test2
+/bin/hello2
+%exclude /bin/hello3
+
+%changelog
diff --git a/tests/data/SPECS/test-subpackages-pathpostfixes.spec b/tests/data/SPECS/test-subpackages-pathpostfixes.spec
new file mode 100644
index 000000000..19b3b9e97
--- /dev/null
+++ b/tests/data/SPECS/test-subpackages-pathpostfixes.spec
@@ -0,0 +1,39 @@
+Name: test
+Version: 1.0
+Release: 1
+Summary: Test
+
+License: Public Domain
+URL: https://fedoraproject.org
+Source: hello.c
+
+%description
+%{summary}.
+
+%package test2
+RemovePathPostfixes: .foobar
+Summary: Test2.
+%description test2
+
+%prep
+%autosetup -c -D -T
+cp -a %{S:0} .
+
+%build
+gcc -g hello.c -o hello
+cp hello.c hello2.c
+gcc -g hello2.c -o hello.foobar
+
+%install
+mkdir -p %{buildroot}/bin
+install -D -p -m 0755 -t %{buildroot}/bin hello
+# Install as hello.foobar, but we want the postfix removed in the package...
+install -D -p -m 0755 -t %{buildroot}/bin hello.foobar
+
+%files
+/bin/hello
+
+%files test2
+/bin/hello.foobar
+
+%changelog
diff --git a/tests/data/SPECS/test-subpackages.spec b/tests/data/SPECS/test-subpackages.spec
new file mode 100644
index 000000000..830660082
--- /dev/null
+++ b/tests/data/SPECS/test-subpackages.spec
@@ -0,0 +1,47 @@
+Name: test
+Version: 1.0
+Release: 1
+Summary: Test
+
+License: Public Domain
+URL: https://fedoraproject.org
+Source: hello.c
+
+%description
+%{summary}.
+
+%package test2
+Summary: Test2.
+%description test2
+
+%package test3
+Summary: Test3.
+%description test3
+
+%prep
+%autosetup -c -D -T
+cp -a %{S:0} .
+
+%build
+gcc -g hello.c -o hello
+cp hello.c hello2.c
+gcc -g hello2.c -o hello2
+cp hello.c hello3.c
+gcc -g hello3.c -o hello3
+
+%install
+mkdir -p %{buildroot}/bin
+install -D -p -m 0755 -t %{buildroot}/bin hello
+install -D -p -m 0755 -t %{buildroot}/bin hello2
+install -D -p -m 0755 -t %{buildroot}/bin hello3
+
+%files
+/bin/hello
+
+%files test2
+/bin/hello2
+
+%files test3
+/bin/hello3
+
+%changelog
diff --git a/tests/data/SPECS/testdoc.spec b/tests/data/SPECS/testdoc.spec
new file mode 100644
index 000000000..7cdfb7433
--- /dev/null
+++ b/tests/data/SPECS/testdoc.spec
@@ -0,0 +1,32 @@
+Summary: testdoc
+Name: testdoc
+Version: 1.0
+Release: 1
+Group: Utilities
+License: GPLv2+
+Distribution: RPM test suite.
+BuildArch: noarch
+
+%description
+Package for testing rpm install option "--excludedocs".
+
+%install
+mkdir -p %{buildroot}%{_datadir}/testdoc
+echo "nodoc" > %{buildroot}%{_datadir}/testdoc/nodoc
+
+mkdir -p %{buildroot}%{_docdir}/testdoc
+echo "doc1" > %{buildroot}%{_docdir}/testdoc/documentation1
+echo "doc2" > %{buildroot}%{_docdir}/testdoc/documentation2
+
+mkdir -p %{buildroot}%{_docdir}/testdoc/examples
+echo "example1" > %{buildroot}%{_docdir}/testdoc/examples/example1
+echo "example2" > %{buildroot}%{_docdir}/testdoc/examples/example2
+
+%files
+%{_datadir}/testdoc/nodoc
+%dir %{_docdir}/testdoc
+%doc %{_docdir}/testdoc/documentation1
+%doc %{_docdir}/testdoc/documentation2
+%dir %{_docdir}/testdoc/examples
+%doc %{_docdir}/testdoc/examples/example1
+%doc %{_docdir}/testdoc/examples/example2
diff --git a/tests/data/SPECS/triggers.spec b/tests/data/SPECS/triggers.spec
new file mode 100644
index 000000000..ae447b60b
--- /dev/null
+++ b/tests/data/SPECS/triggers.spec
@@ -0,0 +1,26 @@
+Name: triggers
+Version: 1.0
+Release: %{rel}
+Summary: Testing trigger behavior
+Group: Testing
+License: GPL
+BuildArch: noarch
+
+%description
+%{summary}
+
+%files
+%defattr(-,root,root,-)
+
+%triggerprein -- %{trigpkg}
+echo %{name}-%{version}-%{release} TRIGGERPREIN $*
+
+%triggerin -- %{trigpkg}
+echo %{name}-%{version}-%{release} TRIGGERIN $*
+
+%triggerun -- %{trigpkg}
+echo %{name}-%{version}-%{release} TRIGGERUN $*
+
+%triggerpostun -- %{trigpkg}
+echo %{name}-%{version}-%{release} TRIGGERPOSTUN $*
+
diff --git a/tests/data/SPECS/vattrtest.spec b/tests/data/SPECS/vattrtest.spec
new file mode 100644
index 000000000..130f0407d
--- /dev/null
+++ b/tests/data/SPECS/vattrtest.spec
@@ -0,0 +1,29 @@
+Name: vattrtest
+Version: 1.0
+Release: 1
+Summary: Testing virtual file attribute behavior
+Group: Testing
+License: GPL
+BuildArch: noarch
+
+%description
+%{summary}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+mkdir -p $RPM_BUILD_ROOT/opt/%{name}
+for x in a c cn d g l m r; do
+ echo ${x} > $RPM_BUILD_ROOT/opt/%{name}/${x}
+done
+
+%files
+%dir /opt/%{name}
+%artifact /opt/%{name}/a
+%config /opt/%{name}/c
+%config(noreplace) /opt/%{name}/cn
+%doc /opt/%{name}/d
+%ghost /opt/%{name}/g
+%license /opt/%{name}/l
+%missingok /opt/%{name}/m
+%readme /opt/%{name}/r
diff --git a/tests/data/keys/rpm.org-rsa-2048-test.pub b/tests/data/keys/rpm.org-rsa-2048-test.pub
new file mode 100644
index 000000000..6e38a5dbb
--- /dev/null
+++ b/tests/data/keys/rpm.org-rsa-2048-test.pub
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v2
+
+mQENBFjmORgBCAC7TMEk6wnjSs8Dr4yqSScWdU2pjcqrkTxuzdWvowcIUPZI0w/g
+HkRqGd4apjvY2V15kjL10gk3QhFP3pZ/9p7zh8o8NHX7aGdSGDK7NOq1eFaErPRY
+91LW9RiZ0lbOjXEzIL0KHxUiTQEmdXJT43DJMFPyW9fkCWg0OltiX618FUdWWfI8
+eySdLur1utnqBvdEbCUvWK2RX3vQZQdvEBODnNk2pxqTyV0w6VPQ96W++lF/5Aas
+7rUv3HIyIXxIggc8FRrnH+y9XvvHDonhTIlGnYZN4ubm9i4y3gOkrZlGTrEw7elQ
+1QeMyG2QQEbze8YjpTm4iLABCBrRfPRaQpwrABEBAAG0IXJwbS5vcmcgUlNBIHRl
+c3RrZXkgPHJzYUBycG0ub3JnPokBNwQTAQgAIQUCWOY5GAIbAwULCQgHAgYVCAkK
+CwIEFgIDAQIeAQIXgAAKCRBDRFkeGWTF/MxxCACnjqFL+MmPh9W9JQKT2DcLbBzf
+Cqo6wcEBoCOcwgRSk8dSikhARoteoa55JRJhuMyeKhhEAogE9HRmCPFdjezFTwgB
+BDVBpO2dZ023mLXDVCYX3S8pShOgCP6Tn4wqCnYeAdLcGg106N4xcmgtcssJE+Pr
+XzTZksbZsrTVEmL/Ym+R5w5jBfFnGk7Yw7ndwfQsfNXQb5AZynClFxnX546lcyZX
+fEx3/e6ezw57WNOUK6WT+8b+EGovPkbetK/rGxNXuWaP6X4A/QUm8O98nCuHYFQq
++mvNdsCBqGf7mhaRGtpHk/JgCn5rFvArMDqLVrR9hX0LdCSsH7EGE+bR3r7wuQEN
+BFjmORgBCACk+vDZrIXQuFXEYToZVwb2attzbbJJCqD71vmZTLsW0QxuPKRgbcYY
+zp4K4lVBnHhFrF8MOUOxJ7kQWIJZMZFt+BDcptCYurbD2H4W2xvnWViiC+LzCMzz
+iMJT6165uefL4JHTDPxC2fFiM9yrc72LmylJNkM/vepT128J5Qv0gRUaQbHiQuS6
+Dm/+WRnUfx3i89SV4mnBxb/Ta93GVqoOciWwzWSnwEnWYAvOb95JL4U7c5J5f/+c
+KnQDHsW7sIiIdscsWzvgf6qs2Ra1Zrt7Fdk4+ZS2f/adagLhDO1C24sXf5XfMk5m
+L0OGwZSr9m5s17VXxfspgU5ugc8kBJfzABEBAAGJAR8EGAEIAAkFAljmORgCGwwA
+CgkQQ0RZHhlkxfzwDQf/Y5on5o+s/xD3tDyRYa6SErfT44lEArdCD7Yi+cygJFox
+3jyM8ovtJAkwRegwyxcaLN7zeG1p1Sk9ZAYWQEJT6qSU4Ppu+CVGHgxgnTcfUiu6
+EZZQE6srvua53IMY1lT50M7vx0T5VicHFRWBFV2C/Mc32p7cEE6nn45nEZgUXQNl
+ySEyvoRlsAJq6gFsfqucVz2vMJDTMVczUtq1CjvUqFbif8JVL36EoZCf1SeRw6d6
+s1Kp3AA33Rjd+Uw87HJ4EIB75zMFQX2H0ggAVdYTQcqGXHP5MZK1jJrHfxJyMi3d
+UNW2iqnN3BA7guhOv6OMiROF1+I7Q5nWT63mQC7IgQ==
+=Z6nu
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/data/keys/rpm.org-rsa-2048-test.secret b/tests/data/keys/rpm.org-rsa-2048-test.secret
new file mode 100644
index 000000000..1d2890e9a
--- /dev/null
+++ b/tests/data/keys/rpm.org-rsa-2048-test.secret
@@ -0,0 +1,57 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v2
+
+lQOYBFjmORgBCAC7TMEk6wnjSs8Dr4yqSScWdU2pjcqrkTxuzdWvowcIUPZI0w/g
+HkRqGd4apjvY2V15kjL10gk3QhFP3pZ/9p7zh8o8NHX7aGdSGDK7NOq1eFaErPRY
+91LW9RiZ0lbOjXEzIL0KHxUiTQEmdXJT43DJMFPyW9fkCWg0OltiX618FUdWWfI8
+eySdLur1utnqBvdEbCUvWK2RX3vQZQdvEBODnNk2pxqTyV0w6VPQ96W++lF/5Aas
+7rUv3HIyIXxIggc8FRrnH+y9XvvHDonhTIlGnYZN4ubm9i4y3gOkrZlGTrEw7elQ
+1QeMyG2QQEbze8YjpTm4iLABCBrRfPRaQpwrABEBAAEAB/wMHvWkNHuxfwlc6ohB
+YDY3MK8uc6kefOnQHTegw/2erv1JODN0+bB2vKbQIFrgzSxMmPFS/DKG0MU7Cc4W
+iONqIisBxhQD3uf00EZphrf7t3EYk/LE1niWGvVqcEoYLYoaWMTdufuNpTXCWI5m
+BGLWT5oseyoXrU4rjG1BNVeOSdvkizW4g3r9HeylbKrmffhJ6121B/Rmbt3d//2Y
+M+B7dWFAfzpzkiyJr6Hyw3yllIDlh3J1jgZP+OFG/9Fey+G5v8/36a9COWLElqwg
+0kYyOcL6K79/lu73+YAkAcpFPzgoAwXzAEUmKpl42+TyMi5h8mHHA3MsK2YE/sxh
+pWVdBADYaV18rl113k9zEvR9d94MjYNrf8fX4tjccrF1h7bU420YVHkxPlixnzXS
+6XvusOCngwi9q4lM18SJazOPkUOQHq7DZH2qM9qmZM5cp0GheVZVLJoRG459LWlp
+8bbTFu9flKrsIuhkMpa85ol3zdmovRzXQUnhzebkoSr3R5p0dQQA3ZATIPnrDML7
+kgqNw2v7DlBbXOW9ZSfs5+MwEX6iblIWikZHXd9OerScDioqah8K4IWNjSHr5jyY
+9zNU4Lecb4L0VmFJC+LSbkYqms/iTT+IkgsUChjNPCDSJHz0kHY0z3+4Zy50Uetg
+ez8GRAe3ggtaGDK+Bk7SKvz5bTn8Oh8EAMp6FBRhdd9rtXNszkPfWQ+YC25pVJFm
+dWtezTyotonh/qyV1mM3uVbkF1nf24Uy5mpb9ysN2ux81j3Fvmb05Isdx3UpZgku
+YOKwLGvjYAMJhCC0wVwINE2Hf1AgqLGYqjGLLe+x3QwvrZh0mu6z7D5MHOOzobBT
+PPGl3K5O/4xfRxC0IXJwbS5vcmcgUlNBIHRlc3RrZXkgPHJzYUBycG0ub3JnPokB
+NwQTAQgAIQUCWOY5GAIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBDRFke
+GWTF/MxxCACnjqFL+MmPh9W9JQKT2DcLbBzfCqo6wcEBoCOcwgRSk8dSikhARote
+oa55JRJhuMyeKhhEAogE9HRmCPFdjezFTwgBBDVBpO2dZ023mLXDVCYX3S8pShOg
+CP6Tn4wqCnYeAdLcGg106N4xcmgtcssJE+PrXzTZksbZsrTVEmL/Ym+R5w5jBfFn
+Gk7Yw7ndwfQsfNXQb5AZynClFxnX546lcyZXfEx3/e6ezw57WNOUK6WT+8b+EGov
+PkbetK/rGxNXuWaP6X4A/QUm8O98nCuHYFQq+mvNdsCBqGf7mhaRGtpHk/JgCn5r
+FvArMDqLVrR9hX0LdCSsH7EGE+bR3r7wnQOYBFjmORgBCACk+vDZrIXQuFXEYToZ
+Vwb2attzbbJJCqD71vmZTLsW0QxuPKRgbcYYzp4K4lVBnHhFrF8MOUOxJ7kQWIJZ
+MZFt+BDcptCYurbD2H4W2xvnWViiC+LzCMzziMJT6165uefL4JHTDPxC2fFiM9yr
+c72LmylJNkM/vepT128J5Qv0gRUaQbHiQuS6Dm/+WRnUfx3i89SV4mnBxb/Ta93G
+VqoOciWwzWSnwEnWYAvOb95JL4U7c5J5f/+cKnQDHsW7sIiIdscsWzvgf6qs2Ra1
+Zrt7Fdk4+ZS2f/adagLhDO1C24sXf5XfMk5mL0OGwZSr9m5s17VXxfspgU5ugc8k
+BJfzABEBAAEAB/4w+VcO3uJYS6gWJCCJjiaAdscPNFSUzyVrrOyqH7d39fWBMdo/
+z8Za7dbHd1mEoQyo7hrG96bLC3YpzoRfMtIveVCUF6bbd62yZG1FnqRhYEnpzKqB
+p66jaoj5PWkArBmNkWvoYTXvKGA53RhYAwMU0qoGVCfRX7CUU+Lf5pDOcxrWQI0J
+8qdNludySOYgQB9OvKUGltkf2HFuYGZNXazg1txWN5hgfTSfWuaru9/ltDwd7cx1
+kZ38Wp44Vx3ogpt++rolDYEhsVCeiENVSA2EX/XHkF56QWwNedkSsS1OtFwmwu7J
+o+svs1V1BrGb4+649zByzp6p+VwAleuH2nDRBADB1Muwz2tVewnM3/oQcpzWoa/R
+Iba3mk0ASkjr9brKdXpMY/KMCFeeMW+PAXvvw9en2xDUWzERPbQ1VZsSYp5KXr+x
+1n7f4LfflKIaS2wEIsUjMwhGFx34UJRWjzjfh5GknIyR6fRMq/a0LpnO+CEuIjMj
+VR1L4wnucdDpcOoewwQA2eU7ODI/89RlNA/A9AlhYSWek4OzKgDDi96edwTeqjLP
++Zq0MM5WyupnrIoSdWsb9GBJww4CkAvbAGq94SH31uJU7D42VmrLxRHfrauk0UaL
+YnNewXwtbREMaC6qGLHMhH2orh1oNauvyL7QBuJPSr23+xqj4B6xdWx1DIw2bxED
+/iutL4RSkEagJgut+oM8xLoCBP2T4avue9chzo/S6GL308HpesBDeITBMndPg/Tw
+6z2Rn0rA7e9xuOmeUpvnqmAUNOMgiuGFoCfHZCHAZ0jIpjBx8sjyPKGZ/V6Qa1UA
+UNso1LQgageYiyksmuJjyI0yP2E9P9Hd2SBRTLoFB3b4SSmJAR8EGAEIAAkFAljm
+ORgCGwwACgkQQ0RZHhlkxfzwDQf/Y5on5o+s/xD3tDyRYa6SErfT44lEArdCD7Yi
++cygJFox3jyM8ovtJAkwRegwyxcaLN7zeG1p1Sk9ZAYWQEJT6qSU4Ppu+CVGHgxg
+nTcfUiu6EZZQE6srvua53IMY1lT50M7vx0T5VicHFRWBFV2C/Mc32p7cEE6nn45n
+EZgUXQNlySEyvoRlsAJq6gFsfqucVz2vMJDTMVczUtq1CjvUqFbif8JVL36EoZCf
+1SeRw6d6s1Kp3AA33Rjd+Uw87HJ4EIB75zMFQX2H0ggAVdYTQcqGXHP5MZK1jJrH
+fxJyMi3dUNW2iqnN3BA7guhOv6OMiROF1+I7Q5nWT63mQC7IgQ==
+=phzS
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/package.m4 b/tests/package.m4
new file mode 100644
index 000000000..6862204f8
--- /dev/null
+++ b/tests/package.m4
@@ -0,0 +1,6 @@
+# Signature of the current package.
+m4_define([AT_PACKAGE_NAME], [rpm])
+m4_define([AT_PACKAGE_TARNAME], [rpm])
+m4_define([AT_PACKAGE_VERSION], [4.14.1])
+m4_define([AT_PACKAGE_STRING], [rpm 4.14.1])
+m4_define([AT_PACKAGE_BUGREPORT], [rpm-maint@lists.rpm.org])
diff --git a/tests/rpmbuild.at b/tests/rpmbuild.at
index 7661e35f5..5e0b0d492 100644
--- a/tests/rpmbuild.at
+++ b/tests/rpmbuild.at
@@ -51,6 +51,22 @@ run rpmbuild \
[ignore])
AT_CLEANUP
+AT_SETUP([rpmbuild --short-circuit -bl])
+AT_KEYWORDS([build])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+run rpmbuild -bi "${abs_srcdir}"/data/SPECS/hello.spec &> /dev/null
+run rpmbuild --quiet -bl --short-circuit "${abs_srcdir}"/data/SPECS/hello.spec
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
# ------------------------------
# Check if tar unpacking works
AT_SETUP([rpmbuild -tb <tar with bad spec>])
@@ -95,7 +111,7 @@ runroot rpmbuild \
runroot rpm -qp --qf \
"\n[%{filemodes:perms} %-8{fileusername} %-8{filegroupname} %{filenames}\n]"\
- "${TOPDIR}"/RPMS/noarch/attrtest-1.0-1.noarch.rpm
+ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
]],
[0],
[
@@ -135,7 +151,7 @@ rm -rf ${TOPDIR}
runroot rpmbuild \
-bb --quiet /data/SPECS/hlinktest.spec
-runroot rpm -i "${TOPDIR}"/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
+runroot rpm -i /build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
runroot rpm -q --qf "[[%{filenlinks} %{filenames}\n]]%{longsize}\n" hlinktest
runroot rpm -V --nouser --nogroup hlinktest
@@ -143,17 +159,59 @@ ls -i "${RPMTEST}"/foo/hello* | awk {'print $1'} | sort -u | wc -l
],
[0],
-[1 /foo/copyllo
+[2 /foo/aaaa
+1 /foo/copyllo
4 /foo/hello
4 /foo/hello-bar
4 /foo/hello-foo
4 /foo/hello-world
-78
+2 /foo/zzzz
+87
1
],
[])
AT_CLEANUP
+AT_SETUP([rpmbuild unpackaged files])
+AT_KEYWORDS([build])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet --with unpackaged_files /data/SPECS/hlinktest.spec
+],
+[1],
+[],
+[error: Installed (but unpackaged) file(s) found:
+ /toot
+ Installed (but unpackaged) file(s) found:
+ /toot
+])
+AT_CLEANUP
+
+# rpm doesn't detect unpackaged directories but should, really
+AT_SETUP([rpmbuild unpackaged directories])
+AT_KEYWORDS([build])
+AT_XFAIL_IF([test $RPM_XFAIL -ne 0])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet --with unpackaged_dirs /data/SPECS/hlinktest.spec
+],
+[1],
+[],
+[error: Installed (but unpackaged) file(s) found:
+ /zoo
+ Installed (but unpackaged) file(s) found:
+ /zoo
+])
+AT_CLEANUP
+
AT_SETUP([rpmbuild glob])
AT_KEYWORDS([build])
AT_CHECK([
@@ -164,7 +222,7 @@ rm -rf ${TOPDIR}
runroot rpmbuild -bb --quiet /data/SPECS/globtest.spec
runroot rpm -qp \
--qf "[[%{filemodes:perms} %{filenames}\n]]" \
- "${TOPDIR}"/RPMS/noarch/globtest-1.0-1.noarch.rpm
+ /build/RPMS/noarch/globtest-1.0-1.noarch.rpm
],
[0],
[-rw-r--r-- /opt/globtest/baf
@@ -185,3 +243,1111 @@ lrwxrwxrwx /opt/globtest/linkgood
],
[])
AT_CLEANUP
+
+AT_SETUP([rpmbuild prefixpostfix])
+AT_KEYWORDS([build])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf ${TOPDIR}
+
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/prefixtest.spec
+runroot rpm -qp \
+ --qf "[[%{filemodes:perms} %{filenames}\n]]" \
+ /build/RPMS/noarch/prefixtest-1.0-1.noarch.rpm
+],
+[0],
+[-rw-r--r-- /opt/prefixtest/ba
+drwxr-xr-x /opt/prefixtest/ban
+-rw-r--r-- /opt/prefixtest/bi
+drwxr-xr-x /opt/prefixtest/bin
+drwxr-xr-x /opt/prefixtest/bon
+drwxr-xr-x /opt/prefixtest/foo
+-rw-r--r-- /opt/prefixtest/foo/one
+-rw-r--r-- /opt/prefixtest/foo/three
+-rw-r--r-- /opt/prefixtest/foo/two
+lrwxrwxrwx /opt/prefixtest/linkbad
+lrwxrwxrwx /opt/prefixtest/linkgood
+-rw-r--r-- /opt/prefixtest/weird%name
+-rw-r--r-- /opt/prefixtest/zab
+-rw-r--r-- /opt/prefixtest/zeb
+-rw-r--r-- /opt/prefixtest/zib
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check if weak and reverse requires can be built
+AT_SETUP([Weak and reverse requires])
+AT_KEYWORDS([build])
+AT_CHECK([
+
+runroot rpmbuild -bb --quiet \
+ --define "pkg weakdeps" \
+ --define "recs foo > 1.2.3" \
+ --define "sugs bar >= 0.1.2" \
+ --define "sups baz" \
+ --define "ens zap = 3" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -qp --recommends /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --suggests /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --supplements /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --enhances /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+],
+[0],
+[foo > 1.2.3
+bar >= 0.1.2
+baz
+zap = 3
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Test BuildRequire functionality
+AT_SETUP([Build requires])
+AT_KEYWORDS([build])
+AT_CHECK([
+
+runroot rpmbuild -bb --quiet \
+ --define "pkg buildreq" \
+ --define "buildreqs foo > 1.2.3" \
+ /data/SPECS/deptest.spec
+],
+[1],
+[],
+[error: Failed build dependencies:
+ foo > 1.2.3 is needed by deptest-buildreq-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([Dependency generation])
+AT_KEYWORDS([build])
+AT_CHECK([
+
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/filedep.spec
+echo Requires:
+runroot rpm -qp --requires /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Provides:
+runroot rpm -qp --provides /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Filerequires:
+runroot rpm -qp --qf '[["%{FILENAMES}\t%{FILEREQUIRE}"\n]]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Fileprovides:
+runroot rpm -qp --qf '[["%{FILENAMES}\t%{FILEPROVIDE}"\n]]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+],
+[0],
+[Requires:
+/bin/f00f
+/bin/sh
+rpmlib(CompressedFileNames) <= 3.0.4-1
+rpmlib(FileDigests) <= 4.6.0-1
+rpmlib(PayloadFilesHavePrefix) <= 4.0-1
+Provides:
+filedep = 1.0-1
+Filerequires:
+"/etc/foo.conf "
+"/usr/bin/bar /bin/f00f"
+"/usr/bin/foo /bin/sh"
+"/usr/share/doc/filedep "
+"/usr/share/doc/filedep/README "
+Fileprovides:
+"/etc/foo.conf "
+"/usr/bin/bar "
+"/usr/bin/foo "
+"/usr/share/doc/filedep "
+"/usr/share/doc/filedep/README "
+],
+[])
+AT_CLEANUP
+
+
+# ------------------------------
+# Test spec query functionality
+AT_SETUP([rpmspec query 1])
+AT_KEYWORDS([build])
+AT_CHECK([
+
+runroot rpmspec -q \
+ --define "pkg dep" \
+ --define "reqs foo > 1.2.3 bar <= 2.3" \
+ --requires \
+ /data/SPECS/deptest.spec
+],
+[0],
+[bar <= 2.3
+foo > 1.2.3
+],
+[])
+
+AT_CLEANUP
+
+# ------------------------------
+# archive sanity check
+AT_SETUP([rpmbuild archive sanity])
+AT_KEYWORDS([build])
+AT_CHECK([
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet /data/SPECS/attrtest.spec
+
+runroot rpm2cpio \
+ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm > /tmp/attrtest.cpio
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild creates the minisymtab section in the main hello binary
+AT_SETUP([rpmbuild debuginfo minisymtab])
+AT_KEYWORDS([build] [debuginfo])
+AT_CHECK([
+rm -rf ${TOPDIR}
+
+# Use macros.debug to generate a debuginfo package.
+export CFLAGS="-g"
+rundebug rpmbuild --quiet \
+ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm
+
+# Extract the main package and inspect the hello binary
+# It should contain .gnu_debugdata, but not the full .symtab
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu
+test -f ./usr/local/bin/hello || exit 1
+readelf -S ./usr/local/bin/hello |\
+ grep -q .gnu_debugdata; test $? == 0 || exit 1
+readelf -S ./usr/local/bin/hello \
+ | grep -q .symtab; test $? == 1 || exit 1
+
+# And the opposite for the debuginfo package
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep -q .gnu_debugdata; test $? == 1 || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep -q .symtab; test $? == 0 || exit 1
+],
+[0],
+[],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild doesn't create the minisymtab section if we keep symtab
+# Some package might want to use strip -g to keep the symbol table and only
+# but the debug symbols/info in the debuginfo package.
+AT_SETUP([rpmbuild debuginfo minisymtab strip -g])
+AT_KEYWORDS([build] [debuginfo])
+AT_CHECK([
+rm -rf ${TOPDIR}
+
+# Use macros.debug to generate a debuginfo package.
+export CFLAGS="-g"
+rundebug rpmbuild --quiet \
+ --define="_find_debuginfo_opts -g" \
+ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm
+
+# Extract the main package and inspect the hello binary
+# It should contain .symtab (because of strip -g), so doesn't .gnu_debugdata.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu
+test -f ./usr/local/bin/hello || exit 1
+readelf -S ./usr/local/bin/hello \
+ | grep -q .gnu_debugdata; test $? == 1 || exit 1
+readelf -S ./usr/local/bin/hello \
+ | grep -q .symtab; test $? == 0 || exit 1
+
+# The debuginfo package should contain neither. The .symtab is NOBITS.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep -q .gnu_debugdata; test $? == 1 || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep .symtab | grep -q NOBITS; test $? == 0 || exit 1
+],
+[0],
+[],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild runs dwz and generates a multi file that with shared
+# debuginfo. This is simply the hello example with one binary build twice
+# so dwz has enough slightly similar debug data.
+# Test the case without unique debug file names.
+AT_SETUP([rpmbuild debuginfo dwz])
+AT_KEYWORDS([build] [debuginfo] [dwz])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# The debuginfo package should contain a .debug file for each binary
+# and a dwz multi file that contains the shared debuginfo between them.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+hello_file_debug=./usr/lib/debug/usr/local/bin/hello.debug
+hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2.debug
+hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.*
+test -f $hello_file_debug || echo "no hello debug file: $hello_file_debug"
+test -f $hello2_file_debug || echo "no hello2 debug file: $hello2_file_debug"
+test -f $hello_multi_file || echo "no dwz multi file: $hello_multi_file"
+
+# Make sure the main package binaries contain the correct build-ids
+# linking them to the debug packages.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu
+hello_file=./usr/local/bin/hello
+hello2_file=./usr/local/bin/hello2
+test -f $hello_file || echo "no hello file: $hello_file"
+test -f $hello2_file || echo "no hello2 file: $hello2_file"
+
+id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+id2=$(file $hello2_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+id1debug=$(file $hello_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+id2debug=$(file $hello2_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+idmulti=$(file $hello_multi_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test "$id1" = "$id1debug" || echo "id1: $id1 != id1debug: $id1debug"
+test "$id2" = "$id2debug" || echo "id2: $id2 != id2debug: $id2debug"
+
+# The build-id files should link to the .debug files.
+id1file="./usr/lib/debug/.build-id/${id1:0:2}/${id1:2}"
+canonid1file=$(readlink -f ${id1file})
+canonfile1=$(readlink -f $hello_file)
+canonid1debug=$(readlink -f ${id1file}.debug)
+canondebug1=$(readlink -f $hello_file_debug)
+
+test "$canonid1file" = "$canonfile1" \
+ || echo "canonid1file: $canonid1file != $canonfile1"
+test "$canonid1debug" = "$canondebug1" \
+ || echo "canonid1debug: $canonid1debug != $canondebug1"
+
+id2file="./usr/lib/debug/.build-id/${id2:0:2}/${id2:2}"
+canonid2file=$(readlink -f ${id2file})
+canonfile2=$(readlink -f $hello2_file)
+canonid2debug=$(readlink -f ${id2file}.debug)
+canondebug2=$(readlink -f $hello2_file_debug)
+
+test "$canonid2file" = "$canonfile2" \
+ || echo "canonid2: $canonid2file != $canonfile2"
+test "$canonid2debug" = "$canondebug2" \
+ || echo "canonid2debug: $canonid2debug" != "$canondebug2"
+
+# Both .debug files should point to the dwz multi file.
+# It would be nice to also test that they contain the correct dwz build-id
+# but that is a bit hard to grep out of the section data.
+multiref1=$(readelf --string-dump=.gnu_debugaltlink $hello_file_debug \
+ | grep '[ 0]' | cut -c13-)
+multiref2=$(readelf --string-dump=.gnu_debugaltlink $hello2_file_debug \
+ | grep '[ 0]' | cut -c13-)
+
+test "$multiref1" = "$multiref2" || echo "multiref: $multiref1 != $multiref2"
+
+canonmultiref=$(readlink -f $(dirname $canondebug1)/$multiref1)
+canonmultifile=$(readlink -f $hello_multi_file)
+
+test "$canonmultiref" = "$canonmultifile" \
+ || echo "canonmultiref: $canonmultiref" != "$canonmultifile"
+],
+[0],
+[],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild runs dwz and generates a multi file that with shared
+# debuginfo. This is simply the hello example with one binary build twice
+# so dwz has enough slightly similar debug data.
+# Test with unique debug file names.
+AT_SETUP([rpmbuild debuginfo dwz unique debug names])
+AT_KEYWORDS([build] [debuginfo] [dwz])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# The debuginfo package should contain a .debug file for each binary
+# and a dwz multi file that contains the shared debuginfo between them.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+hello_file_debug=./usr/lib/debug/usr/local/bin/hello-*.debug
+hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2-*.debug
+hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.*
+test -f $hello_file_debug || echo "no hello debug file: $hello_file_debug"
+test -f $hello2_file_debug || echo "no hello2 debug file: $hello2_file_debug"
+test -f $hello_multi_file || echo "no dwz multi file: $hello_multi_file"
+
+# Make sure the main package binaries contain the correct build-ids
+# linking them to the debug packages.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu
+hello_file=./usr/local/bin/hello
+hello2_file=./usr/local/bin/hello2
+test -f $hello_file || echo "no hello file: $hello_file"
+test -f $hello2_file || echo "no hello2 file: $hello2_file"
+
+id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+id2=$(file $hello2_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+id1debug=$(file $hello_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+id2debug=$(file $hello2_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+idmulti=$(file $hello_multi_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test "$id1" = "$id1debug" || echo "id1: $id1 != id1debug: $id1debug"
+test "$id2" = "$id2debug" || echo "id2: $id2 != id2debug: $id2debug"
+
+# The build-id files should link to the .debug files.
+id1file="./usr/lib/debug/.build-id/${id1:0:2}/${id1:2}"
+canonid1file=$(readlink -f ${id1file})
+canonfile1=$(readlink -f $hello_file)
+canonid1debug=$(readlink -f ${id1file}.debug)
+canondebug1=$(readlink -f $hello_file_debug)
+
+test "$canonid1file" = "$canonfile1" \
+ || echo "canonid1file: $canonid1file != $canonfile1"
+test "$canonid1debug" = "$canondebug1" \
+ || echo "canonid1debug: $canonid1debug != $canondebug1"
+
+id2file="./usr/lib/debug/.build-id/${id2:0:2}/${id2:2}"
+canonid2file=$(readlink -f ${id2file})
+canonfile2=$(readlink -f $hello2_file)
+canonid2debug=$(readlink -f ${id2file}.debug)
+canondebug2=$(readlink -f $hello2_file_debug)
+
+test "$canonid2file" = "$canonfile2" \
+ || echo "canonid2: $canonid2file != $canonfile2"
+test "$canonid2debug" = "$canondebug2" \
+ || echo "canonid2debug: $canonid2debug" != "$canondebug2"
+
+# Both .debug files should point to the dwz multi file.
+# It would be nice to also test that they contain the correct dwz build-id
+# but that is a bit hard to grep out of the section data.
+multiref1=$(readelf --string-dump=.gnu_debugaltlink $hello_file_debug \
+ | grep '[ 0]' | cut -c13-)
+multiref2=$(readelf --string-dump=.gnu_debugaltlink $hello2_file_debug \
+ | grep '[ 0]' | cut -c13-)
+
+test "$multiref1" = "$multiref2" || echo "multiref: $multiref1 != $multiref2"
+
+canonmultiref=$(readlink -f $(dirname $canondebug1)/$multiref1)
+canonmultifile=$(readlink -f $hello_multi_file)
+
+test "$canonmultiref" = "$canonmultifile" \
+ || echo "canonmultiref: $canonmultiref" != "$canonmultifile"
+],
+[0],
+[],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that old style gnu_debuglink CRC checksums are correct even after
+# using dwz to compress the debuginfo files.
+AT_SETUP([rpmbuild debuginfo dwz gnu_debuglink crc])
+AT_KEYWORDS([build] [debuginfo])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the main and debuginfo rpms so we can check binaries and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check that dwz has ran and a multi file has been produced
+test -f ./usr/lib/debug/.dwz/hello2-1.0-1.* || exit 1
+
+# Run sepdbugcrcfix on the binaries, both should have correct CRC already.
+${abs_top_builddir}/sepdebugcrcfix ./usr/lib/debug \
+ ./usr/local/bin/hello ./usr/local/bin/hello2 | grep CRC32 | cut -f2 -d:
+],
+[0],
+[ Updated 0 CRC32s, 2 CRC32s did match.
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that an implicit suid binary get included with the suid bit set.
+# We explicitly build with all debug.macros to test those helpers.
+AT_SETUP([rpmbuild implicit suid binary])
+AT_KEYWORDS([build] [debuginfo] [dwz] [suid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ -ba "${abs_srcdir}"/data/SPECS/hello2-suid.spec
+
+# Unpack rpm so we can check the included binaries.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# List all binaries with suid bit set (should be one, hello).
+echo "suid:"
+find usr -executable -type f -perm /4000
+# List all binaries without suid bit set (should also be one, hello2).
+echo "no-suid:"
+find usr -executable -type f \! -perm /4000
+],
+[0],
+[suid:
+usr/local/bin/hello
+no-suid:
+usr/local/bin/hello2
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that a GDB index is included when requested.
+AT_SETUP([rpmbuild debuginfo gdb index included])
+AT_KEYWORDS([build] [debuginfo] [gdb])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_include_gdb_index 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that gdb-add-index has ran and a .gdb_index section has been added
+readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep gdb_index | cut -c8-17
+],
+[0],
+[.gdb_index
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that a GDB index is NOT included when not requested.
+AT_SETUP([rpmbuild debuginfo no gdb index included])
+AT_KEYWORDS([build] [debuginfo] [gdb])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_include_gdb_index" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that gdb-add-index has not ran and no .gdb_index section has been added
+readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep gdb_index | cut -c8-17
+],
+[0],
+[],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that a debug source is in a "unique" directory when requested.
+AT_SETUP([rpmbuild debuginfo unique debug src dir])
+AT_KEYWORDS([build] [debuginfo])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Note that the spec defines hello2 as name, but the source is hello-1.0.
+# Disable dwz to make debuginfo path rewrite checking easier.
+rundebug rpmbuild --quiet \
+ --undefine "_find_debuginfo_dwz_opts" \
+ --define "_unique_debug_srcs 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that the source path is "unique"
+# Drop the final arch prefix to make the test arch-independent.
+ls ./usr/src/debug/ | cut -f1,2 -d\.
+
+# Check that the source path has been rewritten in the .debug file.
+# Drop the final arch prefix to make the test arch-independent.
+readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep comp_dir | sed -e 's/\t$//' | cut -f5- -d/ | cut -f1,2 -d\.
+],
+[0],
+[hello2-1.0-1
+hello2-1.0-1
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that a debug source is NOT in a "unique" directory when not requested.
+# It will be in the "build directory" name under /usr/src/debug.
+AT_SETUP([rpmbuild debuginfo no unique debug src dir])
+AT_KEYWORDS([build] [debuginfo])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Note that the spec defines hello2 as name, but the source is hello-1.0.
+# Disable dwz to make debuginfo path rewrite checking easier.
+rundebug rpmbuild --quiet \
+ --undefine "_find_debuginfo_dwz_opts" \
+ --undefine "_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that the source path is "unique"
+ls ./usr/src/debug/
+
+# Check that the source path has been rewritten in the .debug file.
+readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep comp_dir | sed -e 's/\t$//' | cut -f5- -d/
+],
+[0],
+[hello-1.0
+hello-1.0
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that defining _debugsource_packages creates -debugsource package
+AT_SETUP([rpmbuild debugsource])
+AT_KEYWORDS([build] [debuginfo] [debugsource])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_debugsource_packages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debugsource rpm so we can check the sources are there.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debugsource-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that hello.c is there.
+ls ./usr/src/debug/hello2-1.0*/
+
+# The debuginfo package should recommend the debugsource package (ignore arch).
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+],
+[0],
+[hello.c
+Recommends: hello2-debugsource(ignore-arch) = 1.0-1
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that defining _debugsource_packages creates -debugsource package
+# even if %install changes the working directory (debugsources.list
+# should be in expected build dir).
+AT_SETUP([rpmbuild debugsource debugsources.list path])
+AT_KEYWORDS([build] [debuginfo] [debugsource])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_debugsource_packages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-cd.spec
+
+# Unpack the debuginfo rpms so we can check the sources are there.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debugsource-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that hello.c is there.
+ls ./usr/src/debug/test-1.0*/
+],
+[0],
+[hello.c
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that undefining _debuginfo_subpackages creates one single -debuginfo.
+AT_SETUP([rpmbuild debuginfo subpackages single])
+AT_KEYWORDS([build] [debuginfo] [debugsubpackage])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --undefine "_debugsource_packages" \
+ --undefine "_debuginfo_subpackages" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there is just one debuginfo package.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# Which contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+],
+[0],
+[1
+hello debug exists
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that defining _debuginfo_subpackages creates multiple -debuginfos.
+AT_SETUP([rpmbuild debuginfo subpackages multiple])
+AT_KEYWORDS([build] [debuginfo] [debugsubpackage])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --undefine "_debugsource_packages" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Second contains hello2.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+
+# Third contains hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+],
+[0],
+[3
+hello debug exists
+hello2 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+hello3 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+],
+[ignore])
+AT_CLEANUP
+# ------------------------------
+# Check that defining _debuginfo_subpackages creates multiple -debuginfos.
+# With unique debug and source names
+AT_SETUP([rpmbuild debuginfo subpackages multiple unique])
+AT_KEYWORDS([build] [debuginfo] [debugsubpackage])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --undefine "_debugsource_packages" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Second contains hello2.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+
+# Third contains hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+],
+[0],
+[3
+hello debug exists
+hello2 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+hello3 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+],
+[ignore])
+AT_CLEANUP
+# ------------------------------
+# Check that defining _debuginfo_subpackages creates multiple -debuginfos.
+# Unique with debugsources.
+AT_SETUP([rpmbuild debuginfo subpackages multiple unique debugsource])
+AT_KEYWORDS([build] [debuginfo] [debugsubpackage] [debugsource])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --define "_debugsource_packages 1" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+
+# Second contains hello2.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+
+# Third contains hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3: $debug_name"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/'
+],
+[0],
+[3
+hello debug exists
+Recommends: test-debugsource(ignore-arch) = 1.0-1
+hello2 debug exists
+Recommends: test-debugsource(ignore-arch) = 1.0-1
+hello3 debug exists
+Recommends: test-debugsource(ignore-arch) = 1.0-1
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that defining _debuginfo_subpackages works with excluded files.
+AT_SETUP([rpmbuild debuginfo subpackages multiple excluded])
+AT_KEYWORDS([build] [debuginfo] [debugsubpackage] [debugsource])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --define "_debugsource_packages 1" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages-exclude.spec
+
+# Check that there are 2 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Second contains hello2.debug but NOT hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+if test -f ./usr/lib/debug/bin/hello3*; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3 debug"
+fi
+],
+[0],
+[2
+hello debug exists
+hello2 debug exists
+No hello3 debug
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that defining _debuginfo_subpackages works with RemovePathPostfixes.
+AT_SETUP([rpmbuild debuginfo subpackages multiple excluded])
+AT_KEYWORDS([build] [debuginfo] [debugsubpackage] [debugsource])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --define "_debugsource_packages 1" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages-pathpostfixes.spec
+
+# Check that there are 2 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# remove it, we are going to check the other debuginfo package.
+rm ./bin/hello
+rm ./usr/lib/debug/bin/$debug_name
+orig_debugname=$debugname
+
+# Second contains hello.foobar.debug but NOT hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello.foobar debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+if test -f ./usr/lib/debug/bin/$orig_debugname; then
+ echo "$orig_debugname exists"
+else
+ echo "No hello.debug"
+fi
+],
+[0],
+[2
+hello debug exists
+hello.foobar debug exists
+No hello.debug
+],
+[ignore])
+AT_CLEANUP
diff --git a/tests/rpmbuildid.at b/tests/rpmbuildid.at
new file mode 100644
index 000000000..5ecefb2b2
--- /dev/null
+++ b/tests/rpmbuildid.at
@@ -0,0 +1,1312 @@
+# rpmbuildid.at: test rpmbuild buildid symlink support
+#
+# This file is part of RPM, the RPM Package Manager.
+# Copyright (C) 2016 Mark J. Wielaard <mjw@redhat.com>
+#
+# This file 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.
+#
+# RPM 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, see <http://www.gnu.org/licenses/>.
+
+AT_BANNER([RPM buildid tests])
+
+# ------------------------------
+# Check if rpmbuild "none" doesn't generates buildid symlinks for hello program
+AT_SETUP([rpmbuild buildid none])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links none" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be zero build-id files in both the main and debuginfo package
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+],
+[0],
+[hello build-id files: 0
+hello debuginfo build-id files: 0
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild "alldebug" generates debuginfo buildid symlinks.
+# Without unique debug file names.
+AT_SETUP([rpmbuild buildid alldebug])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links alldebug" \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be zero build-id files in the main package
+# Main and debug should be in the debuginfo package,
+# plus the .build-id/xx subdir, 3 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+id_main_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+],
+[0],
+[hello build-id files: 0
+hello debuginfo build-id files: 3
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild "alldebug" generates debuginfo buildid symlinks.
+# With unique debug file names.
+AT_SETUP([rpmbuild buildid alldebug unique debug names])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links alldebug" \
+ --define="_unique_debug_names 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be zero build-id files in the main package
+# Main and debug should be in the debuginfo package,
+# plus the .build-id/xx subdir, 3 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+id_main_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+],
+[0],
+[hello build-id files: 0
+hello debuginfo build-id files: 3
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild "separate" generates main and debuginfo buildid symlinks
+# Without unique debug file names
+AT_SETUP([rpmbuild buildid separate])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links separate" \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package
+# plus the .build-id/xx subdir, 2 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+],
+[0],
+[hello build-id files: 2
+hello debuginfo build-id files: 2
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild "separate" generates main and debuginfo buildid symlinks
+# With unique debug file names
+AT_SETUP([rpmbuild buildid separate unique debug names])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links separate" \
+ --define="_unique_debug_names 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package
+# plus the .build-id/xx subdir, 2 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+],
+[0],
+[hello build-id files: 2
+hello debuginfo build-id files: 2
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild "compat" generates main and debuginfo buildid symlinks
+# Without unique debug file names
+AT_SETUP([rpmbuild buildid compat])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package.
+# the debuginfo package has one extra main build-id compat symlink
+# plus the .build-id/xx subdir, 2 in total in main, 3 in total in debug
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+# The compat link should also point to the same (indirectly).
+id_compat_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_compat_file" || echo "No build-id compat file $id_compat_file"
+
+canon_compat_file=$(readlink -f ${id_compat_file})
+
+test -f "$canon_compat_file" \
+ || echo "Cannot resolve compat file ${id_compat_file} -> ${canon_compat_file}"
+
+test "$canon_compat_file" = "$canon_main_file" \
+ || echo "compat and build-id not linked"
+],
+[0],
+[hello build-id files: 2
+hello debuginfo build-id files: 3
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check if rpmbuild "compat" generates main and debuginfo buildid symlinks
+# With unique debug file names
+AT_SETUP([rpmbuild buildid compat unique debug names])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --define="_unique_debug_names 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package.
+# the debuginfo package has one extra main build-id compat symlink
+# plus the .build-id/xx subdir, 2 in total in main, 3 in total in debug
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+# The compat link should also point to the same (indirectly).
+id_compat_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_compat_file" || echo "No build-id compat file $id_compat_file"
+
+canon_compat_file=$(readlink -f ${id_compat_file})
+
+test -f "$canon_compat_file" \
+ || echo "Cannot resolve compat file ${id_compat_file} -> ${canon_compat_file}"
+
+test "$canon_compat_file" = "$canon_main_file" \
+ || echo "compat and build-id not linked"
+],
+[0],
+[hello build-id files: 2
+hello debuginfo build-id files: 3
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that (copied) files with duplicate build-ids are handled correctly.
+# This should create "numbered" build-id files.
+# This is simply the hello example with one binary copied.
+AT_SETUP([rpmbuild buildid duplicate alldebug])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \
+ --define="_build_id_links alldebug" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2cp.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# alldebug not here...
+id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# alldebug, so they are all here
+test -L "$id_file" && echo "main id in debug package"
+test -L "$id_dup_file" && echo "main dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+],
+[0],
+[warning: Duplicate build-ids
+warning: Duplicate build-ids
+main id in debug package
+main dup id in debug package
+debug id in debug package
+debug dup id in debug package
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check that hard linked files are handled correctly.
+# Since the hard linked files have duplicate build-ids,
+# it should create "numbered" build-id files.
+# This is simply the hello example with one binary hard linked.
+AT_SETUP([rpmbuild buildid hardlink alldebug])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_build_id_links alldebug" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2ln.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# alldebug not here...
+id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# alldebug, so they are all here
+test -L "$id_file" && echo "main id in debug package"
+test -L "$id_dup_file" && echo "main dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+],
+[0],
+[main id in debug package
+main dup id in debug package
+debug id in debug package
+debug dup id in debug package
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check that (copied) files with duplicate build-ids are handled correctly.
+# This should create "numbered" build-id files.
+# This is simply the hello example with one binary copied.
+AT_SETUP([rpmbuild buildid duplicate separate])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \
+ --define="_build_id_links separate" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2cp.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# separate build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# separate, so debug ids are here
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+],
+[0],
+[warning: Duplicate build-ids
+warning: Duplicate build-ids
+main id in main package
+main dup id in main package
+debug id in debug package
+debug dup id in debug package
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check that hard linked files are handled correctly.
+# Since the hard linked files have duplicate build-ids,
+# it should create "numbered" build-id files.
+# This is simply the hello example with one binary hard linked.
+AT_SETUP([rpmbuild buildid hardlink separate])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_build_id_links separate" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2ln.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# separate build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# separate, so debug ids are here
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+],
+[0],
+[main id in main package
+main dup id in main package
+debug id in debug package
+debug dup id in debug package
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check that (copied) files with duplicate build-ids are handled correctly.
+# This should create "numbered" build-id files.
+# This is simply the hello example with one binary copied.
+AT_SETUP([rpmbuild buildid duplicate compat])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \
+ --define="_build_id_links compat" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2cp.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# compat build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# compat, so main (and debug) ids are (also) here
+compat_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$compat_file" && echo "compat id in debug package"
+compat_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$compat_dup_file" && echo "compat dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+canon_compat_file=$(readlink -f ${compat_file})
+canon_compat_dup_file=$(readlink -f ${compat_dup_file})
+test "$canon_compat_file" != "$canon_compat_dup_file" \
+ || echo "compat id and dup same"
+],
+[0],
+[warning: Duplicate build-ids
+warning: Duplicate build-ids
+main id in main package
+main dup id in main package
+compat id in debug package
+compat dup id in debug package
+debug id in debug package
+debug dup id in debug package
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check that hard linked files are handled correctly.
+# Since the hard linked files have duplicate build-ids,
+# it should create "numbered" build-id files.
+# This is simply the hello example with one binary hard linked.
+AT_SETUP([rpmbuild buildid hardlink compat])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_build_id_links compat" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2ln.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# compat build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# compat, so main (and debug) ids are (also) here
+compat_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$compat_file" && echo "compat id in debug package"
+compat_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$compat_dup_file" && echo "compat dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+canon_compat_file=$(readlink -f ${compat_file})
+canon_compat_dup_file=$(readlink -f ${compat_dup_file})
+test "$canon_compat_file" != "$canon_compat_dup_file" \
+ || echo "compat id and dup same"
+],
+[0],
+[main id in main package
+main dup id in main package
+compat id in debug package
+compat dup id in debug package
+debug id in debug package
+debug dup id in debug package
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Check build-ids are recomputed with unique_build_ids,
+# but not with _no_recompute_build_ids
+AT_SETUP([rpmbuild buildid recompute])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Make sure we get debuginfo
+export CFLAGS="-g"
+
+# Unique 1
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ --undefine="_no_recompute_build_ids" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# Make sure we generate a new one
+rm $hello_file
+
+# Unique 2
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ --undefine="_no_recompute_build_ids" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id2=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# Two unique builds should not be equal
+if test "$id1" == "$id2"; then
+ echo "uniques equal";
+else
+ echo "uniques unequal";
+fi
+
+# Make sure we generate a new one
+rm $hello_file
+
+# no-recompute 1
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ --define="_no_recompute_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id3=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# An unique and no-recompute build should be unequal
+if test "$id2" == "$id3"; then
+ echo "no-recompute unique equal";
+else
+ echo "no-recompute unique unequal";
+fi
+
+# Make sure we generate a new one
+rm $hello_file
+
+# no-recompute 2
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ --define="_no_recompute_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id4=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# Two no-recompute builds should be equal. Even for different "releases".
+if test "$id3" == "$id4"; then
+ echo "no-recomputes equal";
+else
+ echo "no-recomputes unequal";
+fi
+],
+[0],
+[uniques unequal
+no-recompute unique unequal
+no-recomputes equal
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check build-ids are unique between versions/releases
+# with _unique_build_ids defined.
+AT_SETUP([rpmbuild buildid unique r1 r2])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# Make sure we generate a new one
+rm $hello_file
+
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id2=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+if test "$id1" == "$id2"; then echo "equal $id1"; else echo "unequal"; fi
+],
+[0],
+[unequal
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check build-ids are non-unique between versions/releases
+# with _unique_build_ids undefined (and exact same sources).
+AT_SETUP([rpmbuild buildid non-unique r1 r2])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+# Make sure we generate a new one
+rm $hello_file
+
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id2=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/')
+
+if test "$id1" == "$id2"; then echo "equal"; else echo "unequal $id1 $id2"; fi
+],
+[0],
+[equal
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that build-id directories are created with the right permissions
+# even if the spec file sets attrs explicitly.
+AT_SETUP([rpmbuild buildid attrs])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-attr-buildid.spec
+
+run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \
+ ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm \
+ | grep "build-id d"
+
+run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \
+ ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm \
+ | grep "build-id d"
+],
+[0],
+[/usr/lib/.build-id drwxr-xr-x
+/usr/lib/debug/.build-id drwxr-xr-x
+],
+[ignore])
+AT_CLEANUP
+
+# ------------------------------
+# Check that build-id directories are created with the right attributes
+# even if the spec file sets config explicitly.
+AT_SETUP([rpmbuild buildid config attrs])
+AT_KEYWORDS([build] [debuginfo] [buildid])
+AT_CHECK([
+rm -rf ${TOPDIR}
+AS_MKDIR_P(${TOPDIR}/SOURCES)
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-config-buildid.spec
+
+# Should contain one config file.
+run rpm -c -qp ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm
+# Should not contain config files.
+run rpm -c -qp ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm
+],
+[0],
+[/etc/config.file
+],
+[ignore])
+AT_CLEANUP
diff --git a/tests/rpmconfig.at b/tests/rpmconfig.at
index 91c03ba57..87e9310dd 100644
--- a/tests/rpmconfig.at
+++ b/tests/rpmconfig.at
@@ -18,7 +18,7 @@ runroot rpmbuild --quiet -bb \
/data/SPECS/configtest.spec
echo "otherstuff" > "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
runroot rpm -e configtest
cat "${cf}.rpmorig"
@@ -32,7 +32,7 @@ otherstuff
AT_CLEANUP
# Install over existing config file
-AT_SETUP([install config(noreplace) on existiting file])
+AT_SETUP([install config(noreplace) on existing file])
AT_KEYWORDS([install])
AT_CHECK([
RPMDB_CLEAR
@@ -44,19 +44,25 @@ rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb \
--define "ver 1.0" \
--define "filedata foo" \
+ --define "noreplace 1" \
/data/SPECS/configtest.spec
echo "otherstuff" > "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
+cat "${cf}.rpmnew"
runroot rpm -e configtest
-cat "${cf}.rpmorig"
+cat "${cf}.rpmsave"
+cat "${cf}.rpmnew"
],
[0],
-[foo
+[otherstuff
+foo
otherstuff
+foo
],
-[warning: /etc/my.conf saved as /etc/my.conf.rpmorig]
+[warning: /etc/my.conf created as /etc/my.conf.rpmnew
+warning: /etc/my.conf saved as /etc/my.conf.rpmsave]
)
AT_CLEANUP
@@ -76,7 +82,7 @@ runroot rpmbuild --quiet -bb \
/data/SPECS/configtest.spec
echo "foo" > "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
runroot rpm -e configtest
test ! -f "${cf}"
@@ -102,7 +108,7 @@ runroot rpmbuild --quiet -bb \
--define "filedata foo" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
runroot rpm -e configtest
test ! -f "${cf}"
@@ -128,7 +134,7 @@ runroot rpmbuild --quiet -bb \
--define "filedata foo" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
runroot rpm -e configtest
@@ -159,7 +165,7 @@ runroot rpmbuild --quiet -bb \
--define "noreplace 1" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
runroot rpm -e configtest
@@ -192,9 +198,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -203,6 +209,34 @@ foo
],
[])
AT_CLEANUP
+
+# ------------------------------
+# (Build and) upgrade package with config file, no backup here
+AT_SETUP([upgrade unchanged config - touching test])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -Uvv --fsmdebug /build/RPMS/noarch/configtest-2.0-1.noarch.rpm > output.txt 2>&1
+grep -c "touch" output.txt
+],
+[0],
+[1
+],
+[])
+AT_CLEANUP
#
# ------------------------------
# Upgrade package with locally modified config file, unchanged in pkg
@@ -222,11 +256,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -255,9 +289,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -285,11 +319,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
cat "${cf}.rpmsave"
],
@@ -321,11 +355,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -357,9 +391,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -389,11 +423,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -423,9 +457,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -454,11 +488,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
cat "${cf}.rpmnew"
],
@@ -491,11 +525,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -529,12 +563,12 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -567,14 +601,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -607,12 +641,12 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -644,14 +678,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
cat "${cf}.rpmsave"
],
@@ -687,14 +721,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -729,14 +763,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
cat "${cf}.rpmnew"
],
@@ -773,14 +807,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
cat "${cf}"
echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
cat "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -815,18 +849,18 @@ done
test ! -f "${cf}" && echo OK1
echo "keaton" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
runroot rpm -e configtest
cat "${cf}"
rm -f "${cf}"
# post-install config, upgrade, erase
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
test ! -f "${cf}" && echo OK2
echo "buster" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
runroot rpm -e configtest
cat "${cf}"
diff --git a/tests/rpmconfig2.at b/tests/rpmconfig2.at
index 04053a1af..5974cb932 100644
--- a/tests/rpmconfig2.at
+++ b/tests/rpmconfig2.at
@@ -19,7 +19,7 @@ runroot rpmbuild --quiet -bb \
/data/SPECS/configtest.spec
ln -s "otherstuff" "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
runroot rpm -e configtest
readlink "${cf}.rpmorig"
@@ -50,7 +50,7 @@ runroot rpmbuild --quiet -bb \
ln -s "foo" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
runroot rpm -e configtest
test ! -L "${cf}"
@@ -78,7 +78,7 @@ runroot rpmbuild --quiet -bb \
--define "filetype link" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
runroot rpm -e configtest
test ! -L "${cf}"
@@ -105,7 +105,7 @@ runroot rpmbuild --quiet -bb \
--define "filetype link" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
runroot rpm -e configtest
@@ -138,9 +138,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -151,6 +151,35 @@ foo
AT_CLEANUP
#
+# (Build and) upgrade package with config link, no backup here
+AT_SETUP([upgrade unchanged config link - touching test])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -Uvv --fsmdebug /build/RPMS/noarch/configtest-2.0-1.noarch.rpm > output.txt 2>&1
+grep -c "touch" output.txt
+],
+[0],
+[1
+],
+[])
+AT_CLEANUP
+
+#
# ------------------------------
# Upgrade package with modified config link, unchanged in pkg. No backup.
AT_SETUP([upgrade modified config link])
@@ -170,11 +199,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -204,9 +233,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -235,11 +264,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
readlink "${cf}.rpmsave"
],
@@ -272,11 +301,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "foo-2.0" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -309,9 +338,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -342,11 +371,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -377,9 +406,9 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -409,11 +438,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
readlink "${cf}.rpmnew"
],
@@ -447,11 +476,11 @@ for v in "1.0" "2.0"; do
/data/SPECS/configtest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "foo-2.0" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
test ! -L "${cf}.rpmnew"
],
@@ -487,12 +516,12 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -526,14 +555,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -567,12 +596,12 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -605,14 +634,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
readlink "${cf}.rpmsave"
],
@@ -649,14 +678,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "foo-2.0" "${cf}"
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
],
[0],
@@ -692,14 +721,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
readlink "${cf}.rpmnew"
],
@@ -737,14 +766,14 @@ for s in "A" "B"; do
done
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "foo-2.0" "${cf}"
readlink "${cf}"
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
readlink "${cf}"
test ! -L "${cf}.rpmnew"
],
diff --git a/tests/rpmconfig3.at b/tests/rpmconfig3.at
index 5a32c0c34..db2e44e17 100644
--- a/tests/rpmconfig3.at
+++ b/tests/rpmconfig3.at
@@ -25,11 +25,11 @@ runroot rpmbuild --quiet -bb \
--define "noconfig 1" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -63,14 +63,14 @@ runroot rpmbuild --quiet -bb \
--define "noconfig 1" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
cat "${cf}.rpmsave"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -107,13 +107,13 @@ runroot rpmbuild --quiet -bb \
--define "noconfig 1" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "bar" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -147,11 +147,11 @@ runroot rpmbuild --quiet -bb \
--define "filedata bar" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
],
[0],
@@ -184,11 +184,11 @@ runroot rpmbuild --quiet -bb \
--define "filedata bar" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
readlink "${cf}"
cat "${cf}.rpmsave"
],
@@ -224,11 +224,11 @@ runroot rpmbuild --quiet -bb \
--define "filedata bar" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
readlink "${cf}"
ln -sf "otherstuff" "${cf}"
readlink "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
cat "${cf}"
readlink "${cf}.rpmsave"
],
@@ -263,9 +263,9 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
test -d "${cf}"
],
[0],
@@ -295,11 +295,11 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/configtest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
cat "${cf}"
echo "otherstuff" > "${cf}"
cat "${cf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/configtest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
test -d "${cf}"
cat "${cf}.rpmsave"
],
diff --git a/tests/rpmconflict.at b/tests/rpmconflict.at
index 90d077d61..ba6b41aab 100644
--- a/tests/rpmconflict.at
+++ b/tests/rpmconflict.at
@@ -1,6 +1,6 @@
# rpmconflict.at: rpm file conflict tests
-AT_BANNER([RPM file conflicts])
+AT_BANNER([RPM implicit file conflicts])
# ------------------------------
# (Build and) install conflicting package (should fail)
@@ -18,8 +18,8 @@ for p in "one" "two"; do
/data/SPECS/conflicttest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
],
[1],
[ignore],
@@ -35,8 +35,8 @@ RPMDB_CLEAR
RPMDB_INIT
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
],
[2],
[ignore],
@@ -59,8 +59,8 @@ for p in "one" "two"; do
/data/SPECS/conflicttest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
],
[0],
[ignore],
@@ -76,8 +76,8 @@ RPMDB_CLEAR
RPMDB_INIT
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
],
[0],
[ignore],
@@ -95,7 +95,7 @@ rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
rm -rf "${RPMTEST}"/opt/mydir
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
],
[0],
[],
@@ -115,7 +115,7 @@ runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
rm -rf "${RPMTEST}"/opt/mydir
mkdir -p "${RPMTEST}"/opt/mydir/one
ln -s one "${RPMTEST}"/opt/mydir/two
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
],
[1],
[],
@@ -288,7 +288,7 @@ runroot rpm -U --ignoreos --ignorearch --nodeps \
--define "_transaction_color 3" \
--define "_prefer_color 2" \
/data/RPMS/hello-2.0-1.x86_64.rpm \
- "${TOPDIR}"/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
],
[2],
[],
@@ -313,7 +313,7 @@ runroot rpm -U --ignoreos --ignorearch --nodeps \
runroot rpm -U --ignoreos --ignorearch --nodeps \
--define "_transaction_color 3" \
--define "_prefer_color 2" \
- "${TOPDIR}"/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
],
[1],
[],
@@ -333,7 +333,7 @@ runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
runroot rpm -U --ignoreos --ignorearch --nodeps \
--define "_transaction_color 3" \
--define "_prefer_color 2" \
- "${TOPDIR}"/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
runroot rpm -U --ignoreos --ignorearch --nodeps \
--define "_transaction_color 3" \
@@ -361,8 +361,8 @@ runroot rpmbuild --quiet -bb \
runroot rpmbuild --quiet -bb \
--define "rel 2" --with symlink /data/SPECS/symlinktest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
],
[2],
[],
@@ -385,8 +385,8 @@ runroot rpmbuild --quiet -bb \
runroot rpmbuild --quiet -bb \
--define "rel 2" --without symlink /data/SPECS/symlinktest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
],
[2],
[],
@@ -414,8 +414,8 @@ runroot rpmbuild --quiet -bb \
test ! -f "${fn}" && echo OK
runroot rpm -U \
- "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
cat "${fn}"
runroot rpm -e conflicttwo
cat "${fn}"
diff --git a/tests/rpmdb.at b/tests/rpmdb.at
index 5b10ac67a..e1893c7cd 100644
--- a/tests/rpmdb.at
+++ b/tests/rpmdb.at
@@ -103,7 +103,7 @@ AT_CLEANUP
# ------------------------------
# reinstall a noarch package (with no files)
-AT_SETUP([rpm -U --replacepkgs])
+AT_SETUP([rpm -U --replacepkgs 1])
AT_KEYWORDS([rpmdb install])
AT_CHECK([
@@ -124,6 +124,49 @@ runroot rpm -i "${tpkg}" &&
AT_CLEANUP
# ------------------------------
+# reinstall a package with different file policies
+AT_SETUP([rpm -U --replacepkgs 2])
+AT_KEYWORDS([rpmdb install])
+
+AT_CHECK([
+AT_XFAIL_IF([test $RPM_XFAIL -ne 0])
+RPMDB_CLEAR
+RPMDB_INIT
+
+tpkg="/data/RPMS/hello-2.0-1.i686.rpm"
+
+runroot rpm -U --nodeps --ignorearch "${tpkg}" &&
+ runroot rpm -U --nodeps --ignorearch --nodocs --replacepkgs "${tpkg}" &&
+ runroot rpm -e hello
+test -d "${RPMTEST}"/usr/share/doc/hello-2.0
+],
+[1],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# reinstall a package with different file policies
+AT_SETUP([rpm --reinstall 1])
+AT_KEYWORDS([rpmdb install])
+
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+tpkg="/data/RPMS/hello-2.0-1.i686.rpm"
+
+runroot rpm -U --nodeps --ignorearch "${tpkg}" &&
+ runroot rpm --reinstall --nodeps --ignorearch --nodocs "${tpkg}" &&
+ runroot rpm -e hello
+test -d "${RPMTEST}"/usr/share/doc/hello-2.0
+],
+[1],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
# install a package into a local rpmdb
# * Shall only work with relocation
# * Use --ignorearch because we don't know the arch
@@ -162,6 +205,44 @@ runroot rpm -i \
AT_CLEANUP
+AT_SETUP([rpmdb --rebuilddb])
+AT_KEYWORDS([rpmdb])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpm -U --noscripts --nodeps --ignorearch \
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -qa --qf "%{nevra} %{dbinstance}\n"
+runroot rpm -U --noscripts --nodeps --ignorearch \
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -qa --qf "%{nevra} %{dbinstance}\n"
+runroot rpmdb --rebuilddb
+runroot rpm -qa --qf "%{nevra} %{dbinstance}\n"
+],
+[],
+[hello-1.0-1.i386 1
+hello-2.0-1.i686 2
+hello-2.0-1.i686 1
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Attempt to initialize, rebuild and verify a db
+AT_SETUP([rpmdb --rebuilddb and verify empty database])
+AT_KEYWORDS([rpmdb])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+runroot rpmdb --rebuilddb
+runroot rpmdb --verifydb
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
# ------------------------------
# Install and verify status
AT_SETUP([rpm -U and verify status])
@@ -176,7 +257,7 @@ runroot rpmbuild --quiet -bb \
--define "filedata same_stuff" \
/data/SPECS/conflicttest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/conflictstatus-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflictstatus-1.0-1.noarch.rpm
runroot rpm -qls conflictstatus
],
[0],
@@ -197,11 +278,12 @@ rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb \
/data/SPECS/flangtest.spec
-runroot rpm -U --define "_install_langs de:fi" "${TOPDIR}"/RPMS/noarch/flangtest-1.0-1.noarch.rpm
+runroot rpm -U --define "_install_langs de:fi" /build/RPMS/noarch/flangtest-1.0-1.noarch.rpm
runroot rpm -qls flangtest
],
[0],
[normal /usr/share/flangtest/de.txt
+normal /usr/share/flangtest/empty.txt
not installed /usr/share/flangtest/en.txt
normal /usr/share/flangtest/fi.txt
normal /usr/share/flangtest/none.txt
@@ -221,7 +303,7 @@ rm -rf "${TOPDIR}"
rm -rf "${RPMTEST}"/opt/*
runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
find "${RPMTEST}"/opt | wc -l
],
[0],
@@ -242,7 +324,7 @@ rm -rf "${TOPDIR}"
rm -rf "${RPMTEST}"/opt/*
runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
runroot rpm -e selfconflict
find "${RPMTEST}"/opt | wc -l
],
diff --git a/tests/rpmdeps.at b/tests/rpmdeps.at
index 5e828c273..c7f3f91f4 100644
--- a/tests/rpmdeps.at
+++ b/tests/rpmdeps.at
@@ -16,7 +16,7 @@ runroot rpmbuild --quiet -bb \
--define "reqs deptest-two" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
],
[1],
[],
@@ -44,7 +44,7 @@ runroot rpmbuild --quiet -bb \
--define "reqs deptest-one" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
],
[0],
[],
@@ -70,7 +70,7 @@ runroot rpmbuild --quiet -bb \
--define "provs deptest-foo = 1.0" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
],
[2],
[],
@@ -98,7 +98,7 @@ runroot rpmbuild --quiet -bb \
--define "provs deptest-foo = 2.0" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
],
[0],
[],
@@ -123,7 +123,7 @@ runroot rpmbuild --quiet -bb \
--define "pkg two" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
],
[2],
[],
@@ -150,8 +150,8 @@ runroot rpmbuild --quiet -bb \
--define "pkg two" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
],
[1],
[],
@@ -159,6 +159,66 @@ runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
deptest-two < 2.0 conflicts with (installed) deptest-one-1.0-1.noarch
])
AT_CLEANUP
+
+AT_SETUP([install and verify self-conflicting package])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "provs something" \
+ --define "cfls something" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -V --nofiles deptest-one
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# explicit file conflicts
+AT_SETUP([explicit file conflicts])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "cfls /opt/bar" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --test \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -e deptest-one
+# XXX FIXME: rpm's problem message for this case is higly bogus.
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -e deptest-two
+],
+[],
+[],
+[error: Failed dependencies:
+ /opt/bar conflicts with deptest-one-1.0-1.noarch
+error: Failed dependencies:
+ /opt/bar conflicts with (installed) deptest-one-1.0-1.noarch
+error: Failed dependencies:
+ /opt/bar conflicts with deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
# ------------------------------
#
AT_SETUP([erase to break dependencies])
@@ -178,7 +238,7 @@ runroot rpmbuild --quiet -bb \
--define "provs deptest-foo = 2.0" \
/data/SPECS/deptest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
runroot rpm -e deptest-two
],
[1],
@@ -206,7 +266,7 @@ runroot rpm -U --ignoreos --ignorearch --nodeps \
--define "_prefer_color 2" \
/data/RPMS/hello-2.0-1.i686.rpm \
/data/RPMS/hello-2.0-1.x86_64.rpm \
- "${TOPDIR}"/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
+ /build/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
runroot rpm -e hello.x86_64
],
@@ -235,7 +295,7 @@ runroot rpm -U --ignoreos --ignorearch --nodeps \
--define "_prefer_color 2" \
/data/RPMS/hello-2.0-1.i686.rpm \
/data/RPMS/hello-2.0-1.x86_64.rpm \
- "${TOPDIR}"/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
+ /build/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
runroot rpm -e hello.i686
],
@@ -243,3 +303,654 @@ runroot rpm -e hello.i686
[],
[])
AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([unsatisfied WITH require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = dekstop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[3],
+[],
+[error: Failed dependencies:
+ (deptest-two with flavor = dekstop) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([unsatisfied WITH require (rpmdb)])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = dekstop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[1],
+[],
+[error: Failed dependencies:
+ (deptest-two with flavor = dekstop) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied WITH require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = desktop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([satisfied WITH require (rpmdb)])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = desktop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([unsatisfied WITHOUT require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[2],
+[],
+[error: Failed dependencies:
+ (deptest-two without flavor) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([unsatisfied WITHOUT require (rpmdb)])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[1],
+[],
+[error: Failed dependencies:
+ (deptest-two without flavor) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied WITHOUT require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([satisfied WITHOUT require (rpmdb)])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([unsatisfied AND require - all missing])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[1],
+[],
+[error: Failed dependencies:
+ (deptest-two and deptest-three) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([unsatisfied AND require - first is missing])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[2],
+[],
+[error: Failed dependencies:
+ (deptest-two and deptest-three) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([unsatisfied AND require - second is missing])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[2],
+[],
+[error: Failed dependencies:
+ (deptest-two and deptest-three) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied AND require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([unsatisfied OR require - all missing])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[1],
+[],
+[error: Failed dependencies:
+ (deptest-two or deptest-three) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied OR require - first is missing])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([satisfied OR require - second is missing])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([satisfied OR require - both present])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([unsatisfied IF require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[2],
+[],
+[error: Failed dependencies:
+ (deptest-two if deptest-three) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied IF require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([unsatisfied IF-ELSE require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three else deptest-four)" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+],
+[1],
+[],
+[error: Failed dependencies:
+ (deptest-two if deptest-three else deptest-four) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied IF-ELSE require - right clause])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three else deptest-four)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg four" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([satisfied IF-ELSE require - left clause])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three else deptest-four)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([unsatisfied nested AND-OR require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three or deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[2],
+[],
+[error: Failed dependencies:
+ (deptest-two and (deptest-three or deptest-four)) is needed by deptest-one-1.0-1.noarch
+])
+AT_CLEANUP
+
+AT_SETUP([satisfied nested AND-OR require])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three or deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# ------------------------------
+#
+AT_SETUP([satisfied nested AND-IF require - without right clause])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three if deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([satisfied nested AND-IF require - with right clause])
+AT_KEYWORDS([install, boolean])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three if deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg four" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
diff --git a/tests/rpmgeneral.at b/tests/rpmgeneral.at
index eb0d86dda..509277f2c 100644
--- a/tests/rpmgeneral.at
+++ b/tests/rpmgeneral.at
@@ -62,7 +62,6 @@ CHANGELOGNAME
CHANGELOGTEXT
CHANGELOGTIME
CLASSDICT
-COLLECTIONS
CONFLICTFLAGS
CONFLICTNAME
CONFLICTNEVRS
@@ -79,10 +78,12 @@ DISTTAG
DISTURL
DSAHEADER
E
+ENCODING
+ENHANCEFLAGS
+ENHANCENAME
+ENHANCENEVRS
ENHANCES
-ENHANCESFLAGS
-ENHANCESNAME
-ENHANCESVERSION
+ENHANCEVERSION
EPOCH
EPOCHNUM
EVR
@@ -112,8 +113,20 @@ FILENLINKS
FILEPROVIDE
FILERDEVS
FILEREQUIRE
+FILESIGNATURELENGTH
+FILESIGNATURES
FILESIZES
FILESTATES
+FILETRIGGERCONDS
+FILETRIGGERFLAGS
+FILETRIGGERINDEX
+FILETRIGGERNAME
+FILETRIGGERPRIORITIES
+FILETRIGGERSCRIPTFLAGS
+FILETRIGGERSCRIPTPROG
+FILETRIGGERSCRIPTS
+FILETRIGGERTYPE
+FILETRIGGERVERSION
FILEUSERNAME
FILEVERIFYFLAGS
FSCONTEXTS
@@ -151,7 +164,15 @@ OBSOLETENAME
OBSOLETENEVRS
OBSOLETES
OBSOLETEVERSION
+OLDENHANCES
+OLDENHANCESFLAGS
+OLDENHANCESNAME
+OLDENHANCESVERSION
OLDFILENAMES
+OLDSUGGESTS
+OLDSUGGESTSFLAGS
+OLDSUGGESTSNAME
+OLDSUGGESTSVERSION
OPTFLAGS
ORDERFLAGS
ORDERNAME
@@ -168,6 +189,8 @@ PATCHESFLAGS
PATCHESNAME
PATCHESVERSION
PAYLOADCOMPRESSOR
+PAYLOADDIGEST
+PAYLOADDIGESTALGO
PAYLOADFLAGS
PAYLOADFORMAT
PKGID
@@ -203,6 +226,11 @@ PROVIDES
PROVIDEVERSION
PUBKEYS
R
+RECOMMENDFLAGS
+RECOMMENDNAME
+RECOMMENDNEVRS
+RECOMMENDS
+RECOMMENDVERSION
RECONTEXTS
RELEASE
REMOVETID
@@ -214,6 +242,7 @@ REQUIREVERSION
RPMVERSION
RSAHEADER
SHA1HEADER
+SHA256HEADER
SIGGPG
SIGMD5
SIGPGP
@@ -223,11 +252,27 @@ SOURCE
SOURCEPACKAGE
SOURCEPKGID
SOURCERPM
+SUGGESTFLAGS
+SUGGESTNAME
+SUGGESTNEVRS
SUGGESTS
-SUGGESTSFLAGS
-SUGGESTSNAME
-SUGGESTSVERSION
+SUGGESTVERSION
SUMMARY
+SUPPLEMENTFLAGS
+SUPPLEMENTNAME
+SUPPLEMENTNEVRS
+SUPPLEMENTS
+SUPPLEMENTVERSION
+TRANSFILETRIGGERCONDS
+TRANSFILETRIGGERFLAGS
+TRANSFILETRIGGERINDEX
+TRANSFILETRIGGERNAME
+TRANSFILETRIGGERPRIORITIES
+TRANSFILETRIGGERSCRIPTFLAGS
+TRANSFILETRIGGERSCRIPTPROG
+TRANSFILETRIGGERSCRIPTS
+TRANSFILETRIGGERTYPE
+TRANSFILETRIGGERVERSION
TRIGGERCONDS
TRIGGERFLAGS
TRIGGERINDEX
diff --git a/tests/rpmi.at b/tests/rpmi.at
index 04491c841..8357a8cb3 100644
--- a/tests/rpmi.at
+++ b/tests/rpmi.at
@@ -18,6 +18,180 @@
AT_BANNER([RPM install tests])
+AT_SETUP([rpm -U <manifest>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+echo /data/RPMS/hello-2.0-1.x86_64.rpm > ${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/test.mft
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <manifest notfound 1>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+echo /data/RPMS/hello-2.0-1.x86_64.rpm > ${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/test-not-there.mft
+],
+[1],
+[],
+[error: open of /tmp/test-not-there.mft failed: No such file or directory
+])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <manifest notfound 2>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+echo /data/RPMS/hello-not-there-2.0-1.x86_64.rpm > ${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/test.mft
+],
+[1],
+[],
+[error: open of /data/RPMS/hello-not-there-2.0-1.x86_64.rpm failed: No such file or directory
+])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <notfound>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-not-there-2.0-1.x86_64.rpm
+],
+[1],
+[],
+[error: open of /data/RPMS/hello-not-there-2.0-1.x86_64.rpm failed: No such file or directory
+])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <unsigned>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <signed nokey>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+],
+[0],
+[],
+[warning: /data/RPMS/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <signed>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <corrupted signed 1>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=264 count=2 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/${pkg}
+],
+[1],
+[],
+[error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header signature: BAD (package tag 268: invalid OpenPGP signature)
+error: /tmp/hello-2.0-1.x86_64-signed.rpm cannot be installed
+])
+AT_CLEANUP
+
+AT_SETUP([rpm -U <corrupted signed 2>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/${pkg}
+],
+[1],
+[],
+[error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+error: /tmp/hello-2.0-1.x86_64-signed.rpm cannot be installed
+])
+AT_CLEANUP
+
+# This is more about documenting current behavior than what it *should* do
+# when encountering corrupted payload.
+AT_SETUP([rpm -U <corrupted signed 3>])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=7788 count=6 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/${pkg}
+],
+[1],
+[],
+[warning: /tmp/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+error: unpacking of archive failed: cpio: Bad magic
+error: hello-2.0-1.x86_64: install failed
+])
+AT_CLEANUP
+
# ------------------------------
# Check if rpm -U *.src.rpm works
AT_SETUP([rpm -U *.src.rpm])
@@ -111,8 +285,8 @@ for v in "1.0" "2.0"; do
/data/SPECS/versiontest.spec
done
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
runroot rpm -q versiontest
],
[0],
@@ -127,8 +301,8 @@ AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/versiontest-2.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
],
[2],
[],
@@ -142,8 +316,8 @@ AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/versiontest-2.0-1.noarch.rpm
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
runroot rpm -q versiontest
],
[0],
@@ -159,8 +333,8 @@ RPMDB_CLEAR
RPMDB_INIT
runroot rpm -Uv \
- "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
runroot rpm -q versiontest
],
[0],
@@ -179,8 +353,8 @@ RPMDB_CLEAR
RPMDB_INIT
runroot rpm -Uv \
- "${TOPDIR}"/RPMS/noarch/versiontest-2.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
runroot rpm -q versiontest
],
[0],
@@ -208,8 +382,8 @@ runroot rpmbuild --quiet -bb \
runroot rpm -Uv \
- "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
runroot rpm -q deptest-one
],
[0],
@@ -237,8 +411,8 @@ runroot rpmbuild --quiet -bb \
runroot rpm -Uv \
- "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
runroot rpm -q deptest-one
],
[0],
@@ -257,8 +431,8 @@ RPMDB_CLEAR
RPMDB_INIT
runroot rpm -i \
- "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
runroot rpm -q versiontest
],
[0],
@@ -276,8 +450,8 @@ RPMDB_CLEAR
RPMDB_INIT
runroot rpm -i \
- "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
- "${TOPDIR}"/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
runroot rpm -q versiontest
],
[0],
@@ -297,7 +471,7 @@ RPMDB_INIT
runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
runroot rpm -U --test --ignoreos --relocate /usr=/opt \
- "${TOPDIR}"/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
],
[1],
[],
@@ -314,9 +488,44 @@ RPMDB_INIT
runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
runroot rpm -U --test --ignoreos --badreloc --relocate /usr=/opt \
- "${TOPDIR}"/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+AT_SETUP([rpm -i with/without --excludedocs])
+AT_KEYWORDS([install excludedocs])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpmbuild --quiet -bb /data/SPECS/testdoc.spec
+
+runroot rpm -i --excludedocs \
+ /build/RPMS/noarch/testdoc-1.0-1.noarch.rpm
+
+RPM_DOCDIR=$(runroot rpm --eval '%_defaultdocdir')
+RPM_DATADIR=$(runroot rpm --eval '%_datadir')
+
+test ! -e ${RPMTEST}${RPM_DOCDIR}/testdoc || exit 1
+test -e ${RPMTEST}${RPM_DATADIR}/testdoc/nodoc || exit 1
+
+runroot rpm -e testdoc
+
+runroot rpm -i \
+ /build/RPMS/noarch/testdoc-1.0-1.noarch.rpm
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/documentation1 || exit 1
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/documentation2 || exit 1
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/examples/example1 || exit 1
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/examples/example2 || exit 1
+test -e ${RPMTEST}${RPM_DATADIR}/testdoc/nodoc || exit 1
+
+runroot rpm -e testdoc
],
[0],
[],
[])
AT_CLEANUP
+
diff --git a/tests/rpmio.at b/tests/rpmio.at
new file mode 100644
index 000000000..46d713b4c
--- /dev/null
+++ b/tests/rpmio.at
@@ -0,0 +1,50 @@
+# rpmio.at: Misc (librpm)io tests
+
+AT_BANNER([I/O])
+
+# test too unstable for production
+#AT_SETUP([SIGPIPE from --pipe])
+#AT_KEYWORDS([signals])
+#AT_CHECK([
+#RPMDB_CLEAR
+#RPMDB_INIT
+#
+#runroot rpmbuild --quiet --with manyfiles -bb /data/SPECS/sigpipe.spec
+#runroot rpm -qpl /build/RPMS/noarch/sigpipe-1.0-1.noarch.rpm --pipe "cat" | head -1
+#],
+#[0],
+#[/opt/sigpipe/data
+#],
+#[])
+#AT_CLEANUP
+
+AT_SETUP([SIGPIPE from install scriptlet])
+AT_KEYWORDS([signals])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpmbuild --quiet -bb /data/SPECS/sigpipe.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/sigpipe-1.0-1.noarch.rpm
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
+# XXX TODO: test for RhBug:471591 too, but needs a simpler reproducer
+
+# test too unstable for production
+#AT_SETUP([SIGPIPE in build scriptlet])
+#AT_KEYWORDS([signals])
+#AT_CHECK([
+#RPMDB_CLEAR
+#RPMDB_INIT
+#
+#run rpmbuild --quiet --with buildpipe -bb "${RPMDATA}/SPECS/sigpipe.spec"
+#],
+#[0],
+#[],
+#[])
+#AT_CLEANUP
+
diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at
index 50545a17a..6352a28bc 100644
--- a/tests/rpmmacro.at
+++ b/tests/rpmmacro.at
@@ -13,6 +13,45 @@ runroot rpm --define "this that" --eval '%{this}'
])
AT_CLEANUP
+# ------------------------------
+AT_SETUP([invalid rpm --eval])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm --eval '%define _ that'
+],
+[1],
+[],
+[error: Macro %_ has illegal name (%define)
+])
+AT_CLEANUP
+
+# ------------------------------
+AT_SETUP([invalid rpm --define])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm --define "_ that"
+],
+[1],
+[],
+[error: Macro %_ has illegal name (%define)
+])
+AT_CLEANUP
+
+AT_SETUP([rpm --undefine])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm --define "this that" --eval '1. %{this}' --undefine 'this' --eval '2. %{this'}
+runroot rpm --eval '1. %{this}' --define "this that" --eval '2. %{this}' --undefine 'this' --eval '3. %{this'}
+],
+[0],
+[1. that
+2. %{this}
+1. %{this}
+2. that
+3. %{this}
+])
+AT_CLEANUP
+
AT_SETUP([simple true conditional rpm --eval])
AT_KEYWORDS([macros])
AT_CHECK([
@@ -33,6 +72,121 @@ runroot rpm --define "this that" --eval '%{?that}'
])
AT_CLEANUP
+AT_SETUP([nested macro in name])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm --define "this that" --define "that_that foo" --eval '%{expand:%{%{this}_that}}'
+],
+[0],
+[foo
+])
+AT_CLEANUP
+
+AT_SETUP([parametrized macro 1])
+AT_KEYWORDS([macros])
+AT_CHECK([
+cat << EOF > ${abs_builddir}/testing/mtest
+%bar() bar
+%foo()\\
+%bar\\
+foo 1\\
+%{bar}\\
+foo 2\\
+%bar x\\
+foo 3\\
+%{bar x}\\
+foo 4\\
+%bar \\
+foo 5
+EOF
+
+runroot rpm --eval '%{load:mtest}%{foo}'
+],
+[0],
+[
+bar
+foo 1
+bar
+foo 2
+bar
+foo 3
+bar
+foo 4
+bar
+foo 5
+],
+[])
+AT_CLEANUP
+
+AT_SETUP([parametrized macro 2])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm \
+ --define '%bar() "Bar %#: %{?1} %{?2}"' \
+ --define '%foo() "Foo %#: %{?1} %{?2}" %bar a' \
+ --eval '%foo 1 2'
+],
+[0],
+["Foo 2: 1 2" "Bar 1: a "
+])
+AT_CLEANUP
+
+AT_SETUP([parametrized macro 3])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm \
+ --define '%foo() 1:%1 2:%2' \
+ --eval '%foo %nil bar'
+],
+[0],
+[1:bar 2:%2
+])
+AT_CLEANUP
+
+AT_SETUP([parametrized macro 4])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm \
+ --define '%bar yyy' \
+ --define '%foo() %1' \
+ --eval '%foo %bar' \
+ --eval '%foo %%bar'
+],
+[0],
+[yyy
+%bar
+])
+AT_CLEANUP
+
+AT_SETUP([parametrized macro 5])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm \
+ --define '%foo() %#:%{?1:"%1"}%{?2: "%2"}' \
+ --define 'bar zzz' \
+ --eval '%foo 1' \
+ --eval '%foo 2 ' \
+ --eval '%foo 1 2' \
+ --eval '%foo %{nil}' \
+ --eval '%foo %{nil} xx' \
+ --eval '%foo %{bar} xx' \
+ --eval '%foo %{quote: 2 3 5} %{quote:%{nil}}' \
+ --eval '%foo x%{quote:y}z 123' \
+ --eval '%foo x%{quote:%{nil}}z' \
+],
+[0],
+[1:"1"
+1:"2"
+2:"1" "2"
+0:
+1:"xx"
+2:"zzz" "xx"
+2:" 2 3 5" ""
+2:"xyz" "123"
+1:"xz"
+])
+AT_CLEANUP
+
AT_SETUP([uncompress macro])
AT_KEYWORDS([macros])
AT_CHECK([
@@ -56,6 +210,17 @@ runroot rpm \
])
AT_CLEANUP
+AT_SETUP([shrink macro])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm \
+ --eval "%{shrink: h e l lo }"
+],
+[0],
+[h e l lo
+])
+AT_CLEANUP
+
AT_SETUP([suffix macro])
AT_KEYWORDS([macros])
AT_CHECK([
@@ -126,9 +291,133 @@ AT_CHECK([
runroot rpm \
--eval '%{lua: os.exit()}))}'
],
+[1],
+[],
+[error: lua script failed: [[string "<lua>"]]:1: exit not permitted in this context]
+)
+AT_CLEANUP
+
+AT_SETUP([%define + %undefine in nested levels 1])
+AT_KEYWORDS([macros define undefine])
+AT_CHECK([
+# basic %define in nested scoping level
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand:%undefine xxx} %{echo:%xxx}' \
+ --eval .'%foo'.
+],
+[0],
+[1
+%xxx
+. .
+])
+AT_CLEANUP
+
+AT_SETUP([%define + %undefine in nested levels 2])
+AT_KEYWORDS([macros define])
+AT_CHECK([
+# %define macro once in a nested scope
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx}' \
+ --eval .'%foo'. \
+ --eval '%xxx'
+],
+[0],
+[1
+. .
+%xxx
+])
+AT_CLEANUP
+
+AT_SETUP([%define + %undefine in nested levels 3])
+AT_KEYWORDS([macros define])
+AT_CHECK([
+AT_XFAIL_IF([test $RPM_XFAIL -ne 0])
+# %define macro twice in a nested scope
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand: %define xxx 2} %{echo:%xxx}' \
+ --eval .'%foo'. \
+ --eval '%xxx'
+],
+[0],
+[1
+2
+. .
+%xxx
+])
+AT_CLEANUP
+
+AT_SETUP([%define + %undefine in nested levels 4])
+AT_KEYWORDS([macros define global])
+AT_CHECK([
+AT_XFAIL_IF([test $RPM_XFAIL -ne 0])
+# %define in a nested level covered by %global
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand: %global xxx 2} %{echo:%xxx}' \
+ --eval .'%foo'. \
+ --eval '%xxx' \
+ --eval .'%undefine xxx'. \
+ --eval '%xxx'
+],
+[0],
+[1
+2
+. .
+2
+..
+%xxx
+])
+AT_CLEANUP
+
+AT_SETUP([%define in conditional macro])
+AT_KEYWORDS([macros])
+AT_CHECK([
+runroot rpm \
+ --define 'dofoo() true'\
+ --eval '.%{!?foo: %define foo bar}.'\
+ --eval '%foo' \
+ --eval '%dofoo'\
+ --eval '%foo'
+],
+[0],
+[. .
+bar
+true
+bar
+])
+AT_CLEANUP
+
+AT_SETUP([%verbose negative test])
+AT_KEYWORDS([macros verbose])
+AT_CHECK([
+runroot rpm \
+ --eval '%{verbose:%{echo:is verbose}}' \
+ --eval '%{verbose:is verbose text}'\
+ --eval '%{!verbose:%{echo:is not verbose}}'\
+ --eval '%{!verbose:is not verbose text}'
+],
[0],
[
+
+is not verbose
+
+is not verbose text
+])
+AT_CLEANUP
+
+AT_SETUP([%verbose positive test])
+AT_KEYWORDS([macros verbose])
+AT_CHECK([
+runroot rpm -v \
+ --eval '%{!verbose:%{echo:is not verbose}}' \
+ --eval '%{!verbose:is not verbose text}'\
+ --eval '%{verbose:%{echo:is verbose}}'\
+ --eval '%{verbose:is verbose text}'
],
-[error: lua script failed: [[string "<lua>"]]:1: exit not permitted in this context]
-)
+[0],
+[
+
+is verbose
+
+is verbose text
+])
AT_CLEANUP
diff --git a/tests/rpmorder.at b/tests/rpmorder.at
new file mode 100644
index 000000000..5eadc279f
--- /dev/null
+++ b/tests/rpmorder.at
@@ -0,0 +1,45 @@
+AT_BANNER([RPM install/erase ordering])
+
+AT_SETUP([basic install/erase order 1])
+AT_KEYWORDS([install erase order])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-two" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "reqs deptest-three" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+echo INSTALL:
+runroot rpm -Uv --justdb \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -ev --justdb \
+ deptest-three \
+ deptest-one \
+ deptest-two
+],
+[0],
+[INSTALL:
+Preparing packages...
+deptest-three-1.0-1.noarch
+deptest-two-1.0-1.noarch
+deptest-one-1.0-1.noarch
+ERASE:
+Preparing packages...
+deptest-one-1.0-1.noarch
+deptest-two-1.0-1.noarch
+deptest-three-1.0-1.noarch
+],
+[])
+AT_CLEANUP
diff --git a/tests/rpmpython.at b/tests/rpmpython.at
index 1ccbb7070..3a974eaf8 100644
--- a/tests/rpmpython.at
+++ b/tests/rpmpython.at
@@ -53,8 +53,8 @@ for iot in [ 'fpio', 'fdio', 'ufdio', 'gzdio' ]:
fd = rpm.fd(fn, 'r', iot)
rdata = fd.read()
if rdata != data:
- myprint('%s read fail (got %d bytes)' % (iot, len(rdata), rdata))
- # compressed io types cant seek
+ myprint('%s read fail (got %d bytes)\n%s' % (iot, len(rdata), rdata))
+ # compressed io types can't seek
if iot == 'ufdio':
fd.seek(0)
else:
@@ -134,6 +134,39 @@ myprint(h['arch'])
[ppc64]
)
+RPMPY_TEST([reading a signed package file 1],[
+ts = rpm.ts()
+# avoid rpmlog spew with absolute path to package
+sink = open('/dev/null', 'w')
+rpm.setLogFile(sink)
+try:
+ h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.x86_64-signed.rpm')
+ myprint(h['arch'])
+except rpm.error, e:
+ myprint(e)
+],
+[public key not available
+],
+)
+
+RPMPY_TEST([reading a signed package file 2],[
+
+keydata = open('${RPMDATA}/keys/rpm.org-rsa-2048-test.pub').read()
+pubkey = rpm.pubkey(keydata)
+keyring = rpm.keyring()
+keyring.addKey(pubkey)
+
+ts = rpm.ts()
+ts.setKeyring(keyring)
+try:
+ h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.x86_64-signed.rpm')
+ myprint(h['arch'])
+except rpm.error, e:
+ myprint(e)
+],
+[x86_64]
+)
+
RPMPY_TEST([add package to transaction],[
ts = rpm.ts()
ts.addInstall('${RPMDATA}/RPMS/foo-1.0-1.noarch.rpm', 'u')
@@ -197,6 +230,33 @@ runroot rpm -i \
RPMPY_CHECK([
ts = rpm.ts()
+ix = 0
+mi = ts.dbMatch()
+mi.pattern('name', rpm.RPMMIRE_STRCMP, 'hello')
+for h in mi:
+ ix = h['dbinstance']
+ break
+del mi
+for h in ts.dbMatch('packages', ix):
+ myprint(h['nevra'])
+],
+[hello-2.0-1.i686
+],
+[])
+
+RPMPY_CHECK([
+ts = rpm.ts()
+mi = ts.dbMatch()
+mi.pattern('name', rpm.RPMMIRE_DEFAULT, 'f*')
+for h in mi:
+ myprint(h['nevra'])
+],
+[foo-1.0-1.noarch
+],
+[])
+
+RPMPY_CHECK([
+ts = rpm.ts()
for h in ts.dbMatch('name'):
myprint(h['nevra'])
],
@@ -233,7 +293,7 @@ for h in ts.dbMatch('basenames', '/usr/share/doc/hello-2.0/FAQ'):
[])
RPMPY_CHECK([
ts = rpm.ts()
-for di in ts.dbIndex('obsoletes'):
+for di in sorted(ts.dbIndex('obsoletes')):
myprint(di)
],
[howdy
@@ -242,7 +302,7 @@ for di in ts.dbIndex('obsoletes'):
RPMPY_CHECK([
ts = rpm.ts()
-for di in ts.dbIndex('provides'):
+for di in sorted(ts.dbIndex('provides')):
myprint(di)
],
[foo
@@ -297,3 +357,73 @@ for f in fi:
],
[])
+RPMPY_TEST([string pool 1],[
+p = rpm.strpool()
+for s in ['foo', 'bar', 'foo', 'zoo']:
+ p.str2id(s)
+myprint('%s' % len(p))
+for i in range(1, len(p)+1):
+ myprint('%s: %s' % (i, p[i]))
+],
+[3
+1: foo
+2: bar
+3: zoo
+],
+[])
+
+RPMPY_TEST([string pool 2],[
+p = rpm.strpool()
+d1 = rpm.ds(('foo', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+d2 = rpm.ds(('bar', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+d3 = rpm.ds(('bar', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+myprint('%s' % len(p))
+del p
+myprint(d1.DNEVR())
+myprint(d2.DNEVR())
+myprint(d3.DNEVR())
+],
+[3
+P foo = 2.0
+P bar = 2.0
+P bar = 2.0
+],
+[])
+
+RPMPY_TEST([archive 1],[
+import hashlib
+ts = rpm.ts()
+fd = rpm.fd.open('${RPMDATA}/SRPMS/hello-1.0-1.src.rpm')
+h = ts.hdrFromFdno(fd)
+payload = rpm.fd.open(fd, flags=h['payloadcompressor'])
+files = rpm.files(h)
+archive = files.archive(payload)
+for f in archive:
+ if not f.fflags & rpm.RPMFILE_SPECFILE:
+ continue
+ spec = archive.read()
+ hash = hashlib.md5(spec)
+ if f.digest != hash.hexdigest():
+ myprint('%s should be %s' % (hash.hexdigest(), f.digest))
+ break
+],
+[],
+[])
+
+RPMPY_TEST([header unload],[
+ts = rpm.ts()
+h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+# Add some garbage to header to make it non-sorted
+h['installtime'] = 0
+# RhBug:1061730 causes export of non-sorted header to be larger than it should
+len1 = len(h.unload())
+# Accessing the header before export forces sorting to take place even on
+# buggy versions
+t = h['installtime']
+len2 = len(h.unload())
+myprint(len1 == len2)
+],
+[True
+],
+[])
+
diff --git a/tests/rpmquery.at b/tests/rpmquery.at
index 5a7470f7e..1ca8adf00 100644
--- a/tests/rpmquery.at
+++ b/tests/rpmquery.at
@@ -238,6 +238,19 @@ runroot rpm \
[])
AT_CLEANUP
+AT_SETUP([pgpsig extension query])
+AT_KEYWORDS([query signature])
+AT_CHECK([
+runroot rpm \
+ --queryformat="%{rsaheader:pgpsig}" \
+ -qp /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+],
+[0],
+[RSA/SHA256, Thu Apr 6 13:02:33 2017, Key ID 4344591e1964c5fc],
+[warning: /data/RPMS/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+])
+AT_CLEANUP
+
# ------------------------------
AT_SETUP([integer array perms format query])
AT_KEYWORDS([query])
@@ -307,11 +320,41 @@ runroot rpm \
AT_CLEANUP
# ------------------------------
-AT_SETUP([different sizes arrays query])
+AT_SETUP([different sizes arrays query 1])
+AT_KEYWORDS([query])
+AT_CHECK([
+runroot rpm \
+ --queryformat="[[%{basenames} %{changelogname}]\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+],
+[0],
+[],
+[error: incorrect format: array iterator used with different sized arrays
+])
+AT_CLEANUP
+
+# ------------------------------
+# This is succeeds because there happens to be exactly one changelog entry
+# so the size matches with name.
+AT_SETUP([different sizes arrays query 2])
+AT_KEYWORDS([query])
+AT_CHECK([
+runroot rpm \
+ --queryformat="[[%{name} %{changelogtime}]\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+],
+[0],
+[hello 908877600
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+AT_SETUP([different sizes arrays query 3])
AT_KEYWORDS([query])
AT_CHECK([
runroot rpm \
- --queryformat="[[%{basenames} %{changelogname}]]" \
+ --queryformat="[[%{name} %{basenames}]\n]" \
-qp /data/RPMS/hello-1.0-1.i386.rpm
],
[0],
@@ -321,6 +364,22 @@ runroot rpm \
AT_CLEANUP
# ------------------------------
+AT_SETUP([different sizes arrays query 4])
+AT_KEYWORDS([query])
+AT_CHECK([
+runroot rpm \
+ --queryformat="[[%{=name} %{basenames}\n]]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+],
+[0],
+[hello hello
+hello hello-1.0
+hello FAQ
+],
+[])
+
+AT_CLEANUP
+# ------------------------------
AT_SETUP([non-existent string tag])
AT_KEYWORDS([query])
AT_CHECK([
@@ -369,7 +428,7 @@ runroot rpm \
],
[0],
[],
-[error: incorrect format: unknown tag
+[error: incorrect format: unknown tag: "notag"
])
AT_CLEANUP
@@ -399,3 +458,355 @@ runroot rpm \
[error: incorrect format: invalid field width
])
AT_CLEANUP
+
+AT_SETUP([xml format])
+AT_KEYWORDS([query])
+AT_CHECK([
+runroot rpm -qp --xml data/RPMS/hello-2.0-1.x86_64.rpm
+],
+[0],
+[<rpmHeader>
+ <rpmTag name="Headeri18ntable">
+ <string>C</string>
+ </rpmTag>
+ <rpmTag name="Sigsize">
+ <integer>5411</integer>
+ </rpmTag>
+ <rpmTag name="Sigmd5">
+ <base64>E3yh2LNcygKhhUujAcVDLg==
+</base64>
+ </rpmTag>
+ <rpmTag name="Sha1header">
+ <string>5cd9874c510b67b44483f9e382a1649ef7743bac</string>
+ </rpmTag>
+ <rpmTag name="Sha256header">
+ <string>ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9</string>
+ </rpmTag>
+ <rpmTag name="Name">
+ <string>hello</string>
+ </rpmTag>
+ <rpmTag name="Version">
+ <string>2.0</string>
+ </rpmTag>
+ <rpmTag name="Release">
+ <string>1</string>
+ </rpmTag>
+ <rpmTag name="Summary">
+ <string>hello -- hello, world rpm</string>
+ </rpmTag>
+ <rpmTag name="Description">
+ <string>Simple rpm demonstration.</string>
+ </rpmTag>
+ <rpmTag name="Buildtime">
+ <integer>1227355200</integer>
+ </rpmTag>
+ <rpmTag name="Buildhost">
+ <string>localhost</string>
+ </rpmTag>
+ <rpmTag name="Size">
+ <integer>7243</integer>
+ </rpmTag>
+ <rpmTag name="License">
+ <string>GPL</string>
+ </rpmTag>
+ <rpmTag name="Group">
+ <string>Testing</string>
+ </rpmTag>
+ <rpmTag name="Os">
+ <string>linux</string>
+ </rpmTag>
+ <rpmTag name="Arch">
+ <string>x86_64</string>
+ </rpmTag>
+ <rpmTag name="Filesizes">
+ <integer>7120</integer>
+ <integer>4096</integer>
+ <integer>48</integer>
+ <integer>36</integer>
+ <integer>39</integer>
+ </rpmTag>
+ <rpmTag name="Filemodes">
+ <integer>33257</integer>
+ <integer>16877</integer>
+ <integer>33188</integer>
+ <integer>33188</integer>
+ <integer>33188</integer>
+ </rpmTag>
+ <rpmTag name="Filerdevs">
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name="Filemtimes">
+ <integer>1489670606</integer>
+ <integer>1489670606</integer>
+ <integer>908894882</integer>
+ <integer>908895030</integer>
+ <integer>908884468</integer>
+ </rpmTag>
+ <rpmTag name="Filedigests">
+ <string>c89fa87aeb1143969c0b6be9334b21d932f77f74e8f60120b5de316406369cf0</string>
+ <string/>
+ <string>fac3b28492ecdc16da172a6f1a432ceed356ca4d9248157b2a962b395e37b3b0</string>
+ <string>678b87e217a415f05e43460e2c7b668245b412e2b4f18a75aa7399d9774ed0b4</string>
+ <string>d63fdc6c986106f57230f217d36b2395d83ecf491d2b7187af714dc8db9629e9</string>
+ </rpmTag>
+ <rpmTag name="Filelinktos">
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ </rpmTag>
+ <rpmTag name="Fileflags">
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ </rpmTag>
+ <rpmTag name="Fileusername">
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ </rpmTag>
+ <rpmTag name="Filegroupname">
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ </rpmTag>
+ <rpmTag name="Sourcerpm">
+ <string>hello-2.0-1.src.rpm</string>
+ </rpmTag>
+ <rpmTag name="Fileverifyflags">
+ <integer>4294967295</integer>
+ <integer>0</integer>
+ <integer>4294967295</integer>
+ <integer>4294967295</integer>
+ <integer>4294967295</integer>
+ </rpmTag>
+ <rpmTag name="Archivesize">
+ <integer>8060</integer>
+ </rpmTag>
+ <rpmTag name="Providename">
+ <string>hello</string>
+ <string>hello(x86-64)</string>
+ </rpmTag>
+ <rpmTag name="Requireflags">
+ <integer>16384</integer>
+ <integer>16384</integer>
+ <integer>16777226</integer>
+ <integer>16777226</integer>
+ <integer>16777226</integer>
+ <integer>16384</integer>
+ </rpmTag>
+ <rpmTag name="Requirename">
+ <string>libc.so.6()(64bit)</string>
+ <string>libc.so.6(GLIBC_2.2.5)(64bit)</string>
+ <string>rpmlib(CompressedFileNames)</string>
+ <string>rpmlib(FileDigests)</string>
+ <string>rpmlib(PayloadFilesHavePrefix)</string>
+ <string>rtld(GNU_HASH)</string>
+ </rpmTag>
+ <rpmTag name="Requireversion">
+ <string/>
+ <string/>
+ <string>3.0.4-1</string>
+ <string>4.6.0-1</string>
+ <string>4.0-1</string>
+ <string/>
+ </rpmTag>
+ <rpmTag name="Rpmversion">
+ <string>4.13.90</string>
+ </rpmTag>
+ <rpmTag name="Changelogtime">
+ <integer>1227355200</integer>
+ <integer>908884800</integer>
+ </rpmTag>
+ <rpmTag name="Changelogname">
+ <string>Panu Matilainen &lt;pmatilai@redhat.com&gt;</string>
+ <string>Jeff Johnson &lt;jbj@redhat.com&gt;</string>
+ </rpmTag>
+ <rpmTag name="Changelogtext">
+ <string>- updated version</string>
+ <string>- create.</string>
+ </rpmTag>
+ <rpmTag name="Filedevices">
+ <integer>1</integer>
+ <integer>1</integer>
+ <integer>1</integer>
+ <integer>1</integer>
+ <integer>1</integer>
+ </rpmTag>
+ <rpmTag name="Fileinodes">
+ <integer>1</integer>
+ <integer>2</integer>
+ <integer>3</integer>
+ <integer>4</integer>
+ <integer>5</integer>
+ </rpmTag>
+ <rpmTag name="Filelangs">
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ </rpmTag>
+ <rpmTag name="Prefixes">
+ <string>/usr</string>
+ </rpmTag>
+ <rpmTag name="Provideflags">
+ <integer>8</integer>
+ <integer>8</integer>
+ </rpmTag>
+ <rpmTag name="Provideversion">
+ <string>2.0-1</string>
+ <string>2.0-1</string>
+ </rpmTag>
+ <rpmTag name="Dirindexes">
+ <integer>0</integer>
+ <integer>1</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ </rpmTag>
+ <rpmTag name="Basenames">
+ <string>hello</string>
+ <string>hello-2.0</string>
+ <string>COPYING</string>
+ <string>FAQ</string>
+ <string>README</string>
+ </rpmTag>
+ <rpmTag name="Dirnames">
+ <string>/usr/bin/</string>
+ <string>/usr/share/doc/</string>
+ <string>/usr/share/doc/hello-2.0/</string>
+ </rpmTag>
+ <rpmTag name="Optflags">
+ <string>-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic</string>
+ </rpmTag>
+ <rpmTag name="Payloadformat">
+ <string>cpio</string>
+ </rpmTag>
+ <rpmTag name="Payloadcompressor">
+ <string>gzip</string>
+ </rpmTag>
+ <rpmTag name="Payloadflags">
+ <string>9</string>
+ </rpmTag>
+ <rpmTag name="Platform">
+ <string>x86_64-redhat-linux-gnu</string>
+ </rpmTag>
+ <rpmTag name="Filecolors">
+ <integer>2</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name="Fileclass">
+ <integer>0</integer>
+ <integer>1</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ </rpmTag>
+ <rpmTag name="Classdict">
+ <string>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[[sha1]]=775fdcb927e4300adbe83cfacec3cfeb1f63fe17, stripped</string>
+ <string>directory</string>
+ <string>ASCII text</string>
+ </rpmTag>
+ <rpmTag name="Filedependsx">
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name="Filedependsn">
+ <integer>3</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name="Dependsdict">
+ <integer>1375731713</integer>
+ <integer>1375731712</integer>
+ <integer>1375731717</integer>
+ </rpmTag>
+ <rpmTag name="Filedigestalgo">
+ <integer>8</integer>
+ </rpmTag>
+ <rpmTag name="Encoding">
+ <string>utf-8</string>
+ </rpmTag>
+ <rpmTag name="Payloaddigest">
+ <string>84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c</string>
+ </rpmTag>
+ <rpmTag name="Payloaddigestalgo">
+ <integer>8</integer>
+ </rpmTag>
+</rpmHeader>
+],
+[])
+AT_CLEANUP
+
+AT_SETUP([query file attribute filtering])
+AT_KEYWORDS([query])
+AT_CHECK([
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/vattrtest.spec
+
+pkg="/build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm"
+cmd="rpm -qpl"
+for filter in --noconfig --noghost --noartifact -A -c -d -L; do
+ echo ${filter}
+ runroot ${cmd} ${filter} ${pkg}
+done
+],
+[0],
+[--noconfig
+/opt/vattrtest
+/opt/vattrtest/a
+/opt/vattrtest/d
+/opt/vattrtest/g
+/opt/vattrtest/l
+/opt/vattrtest/m
+/opt/vattrtest/r
+--noghost
+/opt/vattrtest
+/opt/vattrtest/a
+/opt/vattrtest/c
+/opt/vattrtest/cn
+/opt/vattrtest/d
+/opt/vattrtest/l
+/opt/vattrtest/m
+/opt/vattrtest/r
+--noartifact
+/opt/vattrtest
+/opt/vattrtest/c
+/opt/vattrtest/cn
+/opt/vattrtest/d
+/opt/vattrtest/g
+/opt/vattrtest/l
+/opt/vattrtest/m
+/opt/vattrtest/r
+-A
+/opt/vattrtest/a
+-c
+/opt/vattrtest/c
+/opt/vattrtest/cn
+-d
+/opt/vattrtest/d
+-L
+/opt/vattrtest/l
+],
+[])
+AT_CLEANUP
diff --git a/tests/rpmreplace.at b/tests/rpmreplace.at
index cdc8d03d9..6f0444bb7 100644
--- a/tests/rpmreplace.at
+++ b/tests/rpmreplace.at
@@ -22,11 +22,11 @@ runroot rpmbuild --quiet -bb \
--define "filedata bar" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
cat "${tf}"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
],
[0],
@@ -58,11 +58,11 @@ runroot rpmbuild --quiet -bb \
--define "filedata stuff" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
],
[0],
@@ -94,11 +94,11 @@ runroot rpmbuild --quiet -bb \
--define "filedata goo" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U --oldpackage "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
],
[0],
@@ -130,9 +130,9 @@ runroot rpmbuild --quiet -bb \
--define "filedata stuff" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
],
[0],
@@ -163,9 +163,9 @@ runroot rpmbuild --quiet -bb \
--define "filedata goo" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
],
[0],
@@ -196,9 +196,9 @@ runroot rpmbuild --quiet -bb \
--define "filedata zoo" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
],
[0],
@@ -228,9 +228,9 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
cat "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
test -d "${tf}"
],
[0],
@@ -259,9 +259,9 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
test -d "${tf}"
],
[0],
@@ -290,9 +290,9 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
test -d "${tf}"
],
[0],
@@ -321,9 +321,9 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
readlink "${tf}"
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
],
[2],
[zoo
@@ -351,8 +351,8 @@ runroot rpmbuild --quiet -bb \
--define "filetype dir" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
test -d "${tf}"
],
[0],
@@ -380,8 +380,8 @@ runroot rpmbuild --quiet -bb \
--define "filedata woot" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
],
[2],
[],
@@ -402,18 +402,22 @@ runroot rpmbuild --quiet -bb \
--define "ver 1.0" \
--define "filetype datadir" \
--define "filedata README1" \
+ --define "user $(id -u -n)" \
+ --define "grp $(id -g -n)" \
/data/SPECS/replacetest.spec
runroot rpmbuild --quiet -bb \
--define "ver 2.0" \
--define "filetype datadir" \
--define "filedata README2" \
+ --define "user $(id -u -n)" \
+ --define "grp $(id -g -n)" \
/data/SPECS/replacetest.spec
mkdir "${RPMTEST}"/opt/f00f
ln -s f00f "${RPMTEST}"/opt/foo
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -L "${tf}" && test -d "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -L "${tf}" && test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
test -L "${tf}" && test -d "${tf}"
],
[0],
@@ -421,6 +425,38 @@ test -L "${tf}" && test -d "${tf}"
[])
AT_CLEANUP
+AT_SETUP([upgrade invalid locally symlinked directory])
+AT_KEYWORDS([install])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype datadir" \
+ --define "filedata README2" \
+ /data/SPECS/replacetest.spec
+
+mkdir "${RPMTEST}"/opt/f00f
+ln -s f00f "${RPMTEST}"/opt/foo
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -L "${tf}" && test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d "${tf}"
+],
+[0],
+[],
+[])
+AT_CLEANUP
+
AT_SETUP([upgrade empty directory to broken link])
AT_KEYWORDS([install])
AT_CHECK([
@@ -441,8 +477,8 @@ runroot rpmbuild --quiet -bb \
--define "filedata woot" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
],
[2],
[],
@@ -470,8 +506,8 @@ runroot rpmbuild --quiet -bb \
--define "filedata woot" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
],
[2],
[],
@@ -499,8 +535,8 @@ runroot rpmbuild --quiet -bb \
--define "filedata goo" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && rmdir "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && rmdir "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
],
[0],
@@ -529,8 +565,8 @@ runroot rpmbuild --quiet -bb \
--define "filedata goo" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && rmdir "${tf}" && ln -sf goo "${tf}" && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && rmdir "${tf}" && ln -sf goo "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
],
[0],
@@ -560,8 +596,8 @@ runroot rpmbuild --quiet -bb \
--define "fixit posix.rmdir('/opt/foo')" \
/data/SPECS/replacetest.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-1.0-1.noarch.rpm
-test -d "${tf}" && runroot rpm -U --test "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm && runroot rpm -U "${TOPDIR}"/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U --test /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
readlink "${tf}"
],
[0],
diff --git a/tests/rpmscript.at b/tests/rpmscript.at
index ab4478504..b93fcad02 100644
--- a/tests/rpmscript.at
+++ b/tests/rpmscript.at
@@ -15,25 +15,236 @@ runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
runroot rpmbuild --quiet -bb --define "rel 1" /data/SPECS/scripts.spec
runroot rpmbuild --quiet -bb --define "rel 2" /data/SPECS/scripts.spec
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/scripts-1.0-1.noarch.rpm
-runroot rpm -U "${TOPDIR}"/RPMS/noarch/scripts-1.0-2.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -Vvp /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-2.noarch.rpm
+runroot rpm -Vv scripts
runroot rpm -e scripts
],
[0],
-[scripts-1.0-1 PRETRANS 0
+[scripts-1.0-1 VERIFY 0
+scripts-1.0-1 PRETRANS 1
scripts-1.0-1 PRE 1
scripts-1.0-1 POST 1
-scripts-1.0-1 POSTTRANS 0
-scripts-1.0-2 PRETRANS 0
+scripts-1.0-1 POSTTRANS 1
+scripts-1.0-2 PRETRANS 2
scripts-1.0-2 PRE 2
scripts-1.0-2 POST 2
scripts-1.0-1 PREUN 1
scripts-1.0-1 POSTUN 1
-scripts-1.0-2 POSTTRANS 0
+scripts-1.0-2 POSTTRANS 1
+scripts-1.0-2 VERIFY 1
scripts-1.0-2 PREUN 0
scripts-1.0-2 POSTUN 0
],
[])
AT_CLEANUP
+AT_SETUP([basic trigger scripts and arguments])
+AT_KEYWORDS([trigger script])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb --define "rel 1" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define "rel 2" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define "rel 1" --define "trigpkg scripts" /data/SPECS/triggers.spec
+runroot rpmbuild --quiet -bb --define "rel 2" --define "trigpkg scripts" /data/SPECS/triggers.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+echo TRIGGERS 1
+runroot rpm -U /build/RPMS/noarch/triggers-1.0-1.noarch.rpm
+echo SCRIPTS 1
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+echo SCRIPTS 2
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-2.noarch.rpm
+echo TRIGGERS 2
+runroot rpm -U /build/RPMS/noarch/triggers-1.0-2.noarch.rpm
+echo ERASE
+runroot rpm -e scripts
+],
+[0],
+[TRIGGERS 1
+SCRIPTS 1
+scripts-1.0-1 PRETRANS 1
+triggers-1.0-1 TRIGGERPREIN 1 0
+scripts-1.0-1 PRE 1
+scripts-1.0-1 POST 1
+triggers-1.0-1 TRIGGERIN 1 1
+scripts-1.0-1 POSTTRANS 1
+SCRIPTS 2
+scripts-1.0-2 PRETRANS 2
+triggers-1.0-1 TRIGGERPREIN 1 1
+scripts-1.0-2 PRE 2
+scripts-1.0-2 POST 2
+triggers-1.0-1 TRIGGERIN 1 2
+triggers-1.0-1 TRIGGERUN 1 1
+scripts-1.0-1 PREUN 1
+scripts-1.0-1 POSTUN 1
+triggers-1.0-1 TRIGGERPOSTUN 1 1
+scripts-1.0-2 POSTTRANS 1
+TRIGGERS 2
+triggers-1.0-2 TRIGGERPREIN 1 1
+triggers-1.0-2 TRIGGERIN 2 1
+triggers-1.0-1 TRIGGERUN 1 1
+ERASE
+triggers-1.0-2 TRIGGERUN 1 0
+scripts-1.0-2 PREUN 0
+scripts-1.0-2 POSTUN 0
+triggers-1.0-2 TRIGGERPOSTUN 1 0
+],
+[])
+AT_CLEANUP
+
+AT_SETUP([basic file trigger scripts])
+AT_KEYWORDS([file trigger script])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+runroot rpmbuild --quiet -bb /data/SPECS/hlinktest.spec
+runroot rpmbuild --quiet -bb /data/SPECS/filetriggers.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/filetriggers-1.0-1.noarch.rpm
+echo INSTALLATION
+runroot rpm -U /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm \
+/build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
+echo ERASE
+runroot rpm -e hello-script hlinktest
+],
+[0],
+[INSTALLATION
+filetriggerin(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerin(/foo*)<lua>:
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerin(/usr/bin*):
+/usr/bin/hello
+
+filetriggerin(/usr/bin*)<lua>:
+/usr/bin/hello
+
+transfiletriggerin(/usr/bin*):
+/usr/bin/hello
+
+transfiletriggerin(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+ERASE
+transfiletriggerun(/usr/bin*):
+/usr/bin/hello
+
+transfiletriggerun(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerun(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerpostun(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerun(/usr/bin*):
+/usr/bin/hello
+
+filetriggerpostun(/usr/bin*):
+/usr/bin/hello
+
+transfiletriggerpostun(/usr/bin*):
+
+transfiletriggerpostun(/foo*):
+
+],
+[])
+AT_CLEANUP
+
+AT_SETUP([basic file triggers 2])
+AT_KEYWORDS([filetrigger script])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+for v in 1.0 2.0 3.0; do
+ runroot rpmbuild --quiet -bb --define "ver ${v}" /data/SPECS/parallel.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -i \
+ /build/RPMS/noarch/parallel-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/parallel-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/parallel-3.0-1.noarch.rpm
+
+echo INSTALL:
+runroot rpm -U /build/RPMS/noarch/parallel-trigger-1.0-1.noarch.rpm
+echo UPGRADE:
+runroot rpm -U /build/RPMS/noarch/parallel-trigger-2.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -e parallel-trigger
+
+],
+[0],
+[INSTALL:
+%filetriggerin: 0 0
+36
+%transfiletriggerin: 0 0
+36
+UPGRADE:
+%transfiletriggerun: 0 0
+36
+%filetriggerin: 0 0
+36
+%transfiletriggerin: 0 0
+36
+ERASE:
+%transfiletriggerun: 0 0
+36
+],
+[])
+AT_CLEANUP
+
diff --git a/tests/rpmsigdig.at b/tests/rpmsigdig.at
new file mode 100644
index 000000000..9df3c5bd8
--- /dev/null
+++ b/tests/rpmsigdig.at
@@ -0,0 +1,443 @@
+# rpmsigdig.at: rpm signature and digest tests
+
+AT_BANNER([RPM signatures and digests])
+
+# ------------------------------
+# Test pre-built package verification
+AT_SETUP([rpmkeys -Kv <unsigned> 1])
+AT_KEYWORDS([rpmkeys digest])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64.rpm /data/RPMS/hello-1.0-1.i386.rpm
+],
+[0],
+[/data/RPMS/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: OK
+/data/RPMS/hello-1.0-1.i386.rpm:
+ Header SHA1 digest: OK
+ MD5 digest: OK
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test corrupted package verification (corrupted signature)
+AT_SETUP([rpmkeys -Kv <corrupted unsigned> 1])
+AT_KEYWORDS([rpmkeys digest])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+# conv=notrunc bs=1 seek=261 count=6 2> /dev/null
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=333 count=4 2> /dev/null
+runroot rpmkeys -Kv /tmp/${pkg}
+],
+[1],
+[/tmp/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: BAD (Expected 007ca1d8b35cca02a1854ba301c5432e != 137ca1d8b35cca02a1854ba301c5432e)
+],
+[])
+AT_CLEANUP
+# ------------------------------
+# Test corrupted package verification (corrupted header)
+AT_SETUP([rpmkeys -Kv <corrupted unsigned> 2])
+AT_KEYWORDS([rpmkeys digest])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+runroot rpmkeys -Kv /tmp/${pkg}
+],
+[1],
+[/tmp/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+ Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+ Payload SHA256 digest: OK
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != de65519eeb4ab52eb076ec054d42e34e)
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test corrupted package verification (corrupted payload)
+AT_SETUP([rpmkeys -Kv <corrupted unsigned> 3])
+AT_KEYWORDS([rpmkeys digest])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=7777 count=6 2> /dev/null
+runroot rpmkeys -Kv /tmp/${pkg}
+],
+[1],
+[/tmp/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: BAD (Expected 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c != bea903609dceac36e1f26a983c493c98064d320fdfeb423034ed63d649b2c8dc)
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != d662cd0d81601a7107312684ad1ddf38)
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Reproducably build and verify a package
+AT_SETUP([rpmkeys -Kv <unsigned> 2])
+AT_KEYWORDS([rpmkeys digest])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild -bb --quiet \
+ --define "%optflags -O2 -g" \
+ --define "%_target_platform noarch-linux" \
+ --define "%_binary_payload w.ufdio" \
+ --define "%_buildhost localhost" \
+ --define "%source_date_epoch_from_changelog 1" \
+ --define "%clamp_mtime_to_source_date_epoch 1" \
+ /data/SPECS/attrtest.spec
+runroot rpmkeys -Kv /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
+],
+[0],
+[/build/RPMS/noarch/attrtest-1.0-1.noarch.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: OK
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Import a public RSA key
+AT_SETUP([rpmkeys --import rsa])
+AT_KEYWORDS([rpmkeys import])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpm -qi gpg-pubkey-1964c5fc-58e63918|grep -v Date|grep -v Version:
+],
+[0],
+[Name : gpg-pubkey
+Version : 1964c5fc
+Release : 58e63918
+Architecture: (none)
+Group : Public Keys
+Size : 0
+License : pubkey
+Signature : (none)
+Source RPM : (none)
+Build Host : localhost
+Relocations : (not relocatable)
+Packager : rpm.org RSA testkey <rsa@rpm.org>
+Summary : gpg(rpm.org RSA testkey <rsa@rpm.org>)
+Description :
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFjmORgBCAC7TMEk6wnjSs8Dr4yqSScWdU2pjcqrkTxuzdWvowcIUPZI0w/g
+HkRqGd4apjvY2V15kjL10gk3QhFP3pZ/9p7zh8o8NHX7aGdSGDK7NOq1eFaErPRY
+91LW9RiZ0lbOjXEzIL0KHxUiTQEmdXJT43DJMFPyW9fkCWg0OltiX618FUdWWfI8
+eySdLur1utnqBvdEbCUvWK2RX3vQZQdvEBODnNk2pxqTyV0w6VPQ96W++lF/5Aas
+7rUv3HIyIXxIggc8FRrnH+y9XvvHDonhTIlGnYZN4ubm9i4y3gOkrZlGTrEw7elQ
+1QeMyG2QQEbze8YjpTm4iLABCBrRfPRaQpwrABEBAAG0IXJwbS5vcmcgUlNBIHRl
+c3RrZXkgPHJzYUBycG0ub3JnPokBNwQTAQgAIQUCWOY5GAIbAwULCQgHAgYVCAkK
+CwIEFgIDAQIeAQIXgAAKCRBDRFkeGWTF/MxxCACnjqFL+MmPh9W9JQKT2DcLbBzf
+Cqo6wcEBoCOcwgRSk8dSikhARoteoa55JRJhuMyeKhhEAogE9HRmCPFdjezFTwgB
+BDVBpO2dZ023mLXDVCYX3S8pShOgCP6Tn4wqCnYeAdLcGg106N4xcmgtcssJE+Pr
+XzTZksbZsrTVEmL/Ym+R5w5jBfFnGk7Yw7ndwfQsfNXQb5AZynClFxnX546lcyZX
+fEx3/e6ezw57WNOUK6WT+8b+EGovPkbetK/rGxNXuWaP6X4A/QUm8O98nCuHYFQq
++mvNdsCBqGf7mhaRGtpHk/JgCn5rFvArMDqLVrR9hX0LdCSsH7EGE+bR3r7wuQEN
+BFjmORgBCACk+vDZrIXQuFXEYToZVwb2attzbbJJCqD71vmZTLsW0QxuPKRgbcYY
+zp4K4lVBnHhFrF8MOUOxJ7kQWIJZMZFt+BDcptCYurbD2H4W2xvnWViiC+LzCMzz
+iMJT6165uefL4JHTDPxC2fFiM9yrc72LmylJNkM/vepT128J5Qv0gRUaQbHiQuS6
+Dm/+WRnUfx3i89SV4mnBxb/Ta93GVqoOciWwzWSnwEnWYAvOb95JL4U7c5J5f/+c
+KnQDHsW7sIiIdscsWzvgf6qs2Ra1Zrt7Fdk4+ZS2f/adagLhDO1C24sXf5XfMk5m
+L0OGwZSr9m5s17VXxfspgU5ugc8kBJfzABEBAAGJAR8EGAEIAAkFAljmORgCGwwA
+CgkQQ0RZHhlkxfzwDQf/Y5on5o+s/xD3tDyRYa6SErfT44lEArdCD7Yi+cygJFox
+3jyM8ovtJAkwRegwyxcaLN7zeG1p1Sk9ZAYWQEJT6qSU4Ppu+CVGHgxgnTcfUiu6
+EZZQE6srvua53IMY1lT50M7vx0T5VicHFRWBFV2C/Mc32p7cEE6nn45nEZgUXQNl
+ySEyvoRlsAJq6gFsfqucVz2vMJDTMVczUtq1CjvUqFbif8JVL36EoZCf1SeRw6d6
+s1Kp3AA33Rjd+Uw87HJ4EIB75zMFQX2H0ggAVdYTQcqGXHP5MZK1jJrHfxJyMi3d
+UNW2iqnN3BA7guhOv6OMiROF1+I7Q5nWT63mQC7IgQ==
+=Z6nu
+-----END PGP PUBLIC KEY BLOCK-----
+
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test pre-built package verification
+AT_SETUP([rpmkeys -K <signed> 1])
+AT_KEYWORDS([rpmkeys digest signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys -K /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -K /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+],
+[0],
+[[/data/RPMS/hello-2.0-1.x86_64-signed.rpm: digests SIGNATURES NOT OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm: digests signatures OK
+]],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test pre-built package verification
+AT_SETUP([rpmkeys -Kv <signed> 1])
+AT_KEYWORDS([rpmkeys digest signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys -Kv --nodigest /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys -Kv --nosignature /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+],
+[0],
+[/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ MD5 digest: OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ MD5 digest: OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: OK
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test pre-built corrupted package verification (corrupted signature)
+AT_SETUP([rpmkeys -Kv <corrupted signed> 1])
+AT_KEYWORDS([rpmkeys digest signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=264 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/${pkg}
+],
+[1],
+[/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header signature: BAD (package tag 268: invalid OpenPGP signature)
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ MD5 digest: OK
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header signature: BAD (package tag 268: invalid OpenPGP signature)
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ MD5 digest: OK
+],
+[])
+AT_CLEANUP
+# ------------------------------
+# Test pre-built corrupted package verification (corrupted header)
+AT_SETUP([rpmkeys -Kv <corrupted signed> 2])
+AT_KEYWORDS([rpmkeys digest signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/${pkg}
+],
+[1],
+[/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+ Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != de65519eeb4ab52eb076ec054d42e34e)
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+ Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != de65519eeb4ab52eb076ec054d42e34e)
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test pre-built corrupted package verification (corrupted payload)
+AT_SETUP([rpmkeys -Kv <corrupted signed> 3])
+AT_KEYWORDS([rpmkeys digest signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=7777 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/${pkg}
+],
+[1],
+[/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: BAD (Expected 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c != bea903609dceac36e1f26a983c493c98064d320fdfeb423034ed63d649b2c8dc)
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != d662cd0d81601a7107312684ad1ddf38)
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: BAD (Expected 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c != bea903609dceac36e1f26a983c493c98064d320fdfeb423034ed63d649b2c8dc)
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != d662cd0d81601a7107312684ad1ddf38)
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test --addsign
+AT_SETUP([rpmsign --addsign <unsigned>])
+AT_KEYWORDS([rpmsign signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+cp "${RPMTEST}"/data/RPMS/hello-2.0-1.x86_64.rpm "${RPMTEST}"/tmp/
+run rpmsign --key-id 1964C5FC --addsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64.rpm > /dev/null
+echo PRE-IMPORT
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+echo POST-IMPORT
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+run rpmsign --delsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64.rpm > /dev/null
+echo POST-DELSIGN
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+],
+[0],
+[PRE-IMPORT
+/tmp/hello-2.0-1.x86_64.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+POST-IMPORT
+/tmp/hello-2.0-1.x86_64.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+POST-DELSIGN
+/tmp/hello-2.0-1.x86_64.rpm:
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test --delsign
+AT_SETUP([rpmsign --delsign <package>])
+AT_KEYWORDS([rpmsign signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+cp "${RPMTEST}"/data/RPMS/hello-2.0-1.x86_64-signed.rpm "${RPMTEST}"/tmp/
+echo PRE-DELSIGN
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64-signed.rpm|grep -v digest
+echo POST-DELSIGN
+run rpmsign --delsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64-signed.rpm > /dev/null
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64-signed.rpm|grep -v digest
+],
+[0],
+[PRE-DELSIGN
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+POST-DELSIGN
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Test --addsign
+AT_SETUP([rpmsign --addsign <signed>])
+AT_KEYWORDS([rpmsign signature])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+rm -rf "${TOPDIR}"
+
+cp "${RPMTEST}"/data/RPMS/hello-2.0-1.x86_64-signed.rpm "${RPMTEST}"/tmp/
+run rpmsign --key-id 1964C5FC --addsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64-signed.rpm 2>&1 |grep -q "already contains identical signature, skipping"
+],
+[0],
+[],
+[])
+AT_CLEANUP
diff --git a/tests/rpmtests b/tests/rpmtests
new file mode 100755
index 000000000..7a2a9a742
--- /dev/null
+++ b/tests/rpmtests
@@ -0,0 +1,30451 @@
+#! /bin/sh
+# Generated from local.at by GNU Autoconf 2.69.
+#
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# This test suite is free software; the Free Software Foundation gives
+# unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# How were we run?
+at_cli_args="$@"
+
+
+# Not all shells have the 'times' builtin; the subshell is needed to make
+# sure we discard the 'times: not found' message from the shell.
+at_times_p=false
+(times) >/dev/null 2>&1 && at_times_p=:
+
+# CLI Arguments to pass to the debugging scripts.
+at_debug_args=
+# -e sets to true
+at_errexit_p=false
+# Shall we be verbose? ':' means no, empty means yes.
+at_verbose=:
+at_quiet=
+# Running several jobs in parallel, 0 means as many as test groups.
+at_jobs=1
+at_traceon=:
+at_trace_echo=:
+at_check_filter_trace=:
+
+# Shall we keep the debug scripts? Must be `:' when the suite is
+# run by a debug script, so that the script doesn't remove itself.
+at_debug_p=false
+# Display help message?
+at_help_p=false
+# Display the version message?
+at_version_p=false
+# List test groups?
+at_list_p=false
+# --clean
+at_clean=false
+# Test groups to run
+at_groups=
+# Whether to rerun failed tests.
+at_recheck=
+# Whether a write failure occurred
+at_write_fail=0
+
+# The directory we run the suite in. Default to . if no -C option.
+at_dir=`pwd`
+# An absolute reference to this testsuite script.
+case $as_myself in
+ [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;;
+ * ) at_myself=$at_dir/$as_myself ;;
+esac
+# Whether -C is in effect.
+at_change_dir=false
+
+# Whether to enable colored test results.
+at_color=no
+# List of the tested programs.
+at_tested='rpm
+rpmbuild
+rpmquery'
+# As many question marks as there are digits in the last test group number.
+# Used to normalize the test group numbers so that `ls' lists them in
+# numerical order.
+at_format='???'
+# Description of all the test groups.
+at_help_all="1;rpmgeneral.at:22;rpm --version;basic;
+2;rpmgeneral.at:31;rpmbuild --version;basic;
+3;rpmgeneral.at:40;rpm --showrc;basic;
+4;rpmgeneral.at:50;rpm --querytags;basic;
+5;rpmio.at:21;SIGPIPE from install scriptlet;signals;
+6;rpmquery.at:22;rpm --qf -p *.i386.rpm;query;
+7;rpmquery.at:36;rpm --qf -p *.src.rpm;query;
+8;rpmquery.at:50;rpm -ql -p *.src.rpm;query;
+9;rpmquery.at:65;rpmspec -q;query;
+10;rpmquery.at:77;rpm -ql -p *.i386.rpm;query;
+11;rpmquery.at:94;rpm -qp <manifest>;query;
+12;rpmquery.at:115;rpm -q --scripts -p *.i386.rpm;query;
+13;rpmquery.at:136;rpm -q on installed package;rpmdb install query;
+14;rpmquery.at:180;integer array query;query;
+15;rpmquery.at:196;formatted filesbypkg query;query;
+16;rpmquery.at:212;hex formatted integer array extension query;query;
+17;rpmquery.at:228;base64 extension query;query;
+18;rpmquery.at:241;pgpsig extension query;query signature;
+19;rpmquery.at:255;integer array perms format query;query;
+20;rpmquery.at:271;string array query;query;
+21;rpmquery.at:284;empty string array query;query;
+22;rpmquery.at:297;empty string array extension array format;query;
+23;rpmquery.at:310;empty string array extension query;query;
+24;rpmquery.at:323;different sizes arrays query 1;query;
+25;rpmquery.at:339;different sizes arrays query 2;query;
+26;rpmquery.at:353;different sizes arrays query 3;query;
+27;rpmquery.at:367;different sizes arrays query 4;query;
+28;rpmquery.at:383;non-existent string tag;query;
+29;rpmquery.at:396;non-existent integer tag query;query;
+30;rpmquery.at:409;conditional queryformat;query;
+31;rpmquery.at:422;invalid tag query;query;
+32;rpmquery.at:436;invalid data for format query;query;
+33;rpmquery.at:449;invalid format width query;query;
+34;rpmquery.at:462;xml format;query;
+35;rpmquery.at:761;query file attribute filtering;query;
+36;rpmverify.at:7;dependency problems;verify;
+37;rpmverify.at:32;files with no problems;verify;
+38;rpmverify.at:48;files with no problems in verbose mode;verify;
+39;rpmverify.at:67;directory replaced with a directory symlink;verify;
+40;rpmverify.at:98;directory replaced with an invalid directory symlink;verify;
+41;rpmverify.at:128;verify from db, with problems present;verify;
+42;rpmverify.at:150;verify from package, with problems present;verify;
+43;rpmverify.at:171;verify file attribute filtering;query;
+44;rpmverify.at:220;verifyscript failure;verify;
+45;rpmverify.at:237;verifyscript success;verify;
+46;rpmverify.at:256;shared file timestamp behavior;verify;
+47;rpmverify.at:285;Upgraded verification with min_writes 1 (files);upgrade verify min_writes;
+48;rpmverify.at:357;Upgraded verification with min_writes 2 (files);upgrade verify min_writes;
+49;rpmverify.at:436;Upgraded verification with min_writes 3 (LINKs);upgrade verify min_writes;
+50;rpmverify.at:503;Upgraded verification with min_writes 4 (LINKs);upgrade verify min_writes;
+51;rpmsigdig.at:7;rpmkeys -Kv <unsigned> 1;rpmkeys digest;
+52;rpmsigdig.at:31;rpmkeys -Kv <corrupted unsigned> 1;rpmkeys digest;
+53;rpmsigdig.at:56;rpmkeys -Kv <corrupted unsigned> 2;rpmkeys digest;
+54;rpmsigdig.at:81;rpmkeys -Kv <corrupted unsigned> 3;rpmkeys digest;
+55;rpmsigdig.at:106;rpmkeys -Kv <unsigned> 2;rpmkeys digest;
+56;rpmsigdig.at:135;rpmkeys --import rsa;rpmkeys import;
+57;rpmsigdig.at:196;rpmkeys -K <signed> 1;rpmkeys digest signature;
+58;rpmsigdig.at:216;rpmkeys -Kv <signed> 1;rpmkeys digest signature;
+59;rpmsigdig.at:258;rpmkeys -Kv <corrupted signed> 1;rpmkeys digest signature;
+60;rpmsigdig.at:294;rpmkeys -Kv <corrupted signed> 2;rpmkeys digest signature;
+61;rpmsigdig.at:331;rpmkeys -Kv <corrupted signed> 3;rpmkeys digest signature;
+62;rpmsigdig.at:368;rpmsign --addsign <unsigned>;rpmsign signature;
+63;rpmsigdig.at:403;rpmsign --delsign <package>;rpmsign signature;
+64;rpmsigdig.at:430;rpmsign --addsign <signed>;rpmsign signature;
+65;rpmdb.at:23;rpm --initdb;rpmdb;
+66;rpmdb.at:36;rpm -qa;rpmdb query;
+67;rpmdb.at:49;rpm -q foo;rpmdb query;
+68;rpmdb.at:69;rpm -q foo-;rpmdb query;
+69;rpmdb.at:90;rpm -i *.noarch.rpm;rpmdb install;
+70;rpmdb.at:106;rpm -U --replacepkgs 1;rpmdb install;
+71;rpmdb.at:128;rpm -U --replacepkgs 2;rpmdb install;
+72;rpmdb.at:150;rpm --reinstall 1;rpmdb install;
+73;rpmdb.at:173;rpm -i --relocate=.. *.i386.rpm;rpmdb install;
+74;rpmdb.at:192;rpm -i --relocate=.. *.ppc64.rpm;rpmdb install;
+75;rpmdb.at:208;rpmdb --rebuilddb;rpmdb;
+76;rpmdb.at:233;rpmdb --rebuilddb and verify empty database;rpmdb;
+77;rpmdb.at:248;rpm -U and verify status;install rpmdb query;
+78;rpmdb.at:271;rpm -U with _install_lang and verify status;install rpmdb query;
+79;rpmdb.at:297;rpm -U and verify files on disk;install rpmdb;
+80;rpmdb.at:318;rpm -e and verify files removed;install rpmdb;
+81;rpmi.at:21;rpm -U <manifest>;install;
+82;rpmi.at:36;rpm -U <manifest notfound 1>;install;
+83;rpmi.at:52;rpm -U <manifest notfound 2>;install;
+84;rpmi.at:68;rpm -U <notfound>;install;
+85;rpmi.at:83;rpm -U <unsigned>;install;
+86;rpmi.at:97;rpm -U <signed nokey>;install;
+87;rpmi.at:112;rpm -U <signed>;install;
+88;rpmi.at:127;rpm -U <corrupted signed 1>;install;
+89;rpmi.at:148;rpm -U <corrupted signed 2>;install;
+90;rpmi.at:173;rpm -U <corrupted signed 3>;install;
+91;rpmi.at:197;rpm -U *.src.rpm;install;
+92;rpmi.at:212;rpm -i *.src.rpm;install;
+93;rpmi.at:228;rpm -i <nonexistent file>;install;
+94;rpmi.at:240;rpm -i --nomanifest <garbage text file>;install;
+95;rpmi.at:257;rpm -i <garbage text file;install;
+96;rpmi.at:276;rpm -U upgrade to newer;;
+97;rpmi.at:299;rpm -U upgrade to older;;
+98;rpmi.at:314;rpm -U --oldpackage downgrade;;
+99;rpmi.at:330;rpm -U two versions of same package 1;;
+100;rpmi.at:350;rpm -U two versions of same package 2;;
+101;rpmi.at:370;rpm -U obsoleted package 1;;
+102;rpmi.at:399;rpm -U obsoleted package 2;;
+103;rpmi.at:428;rpm -i two versions of same package;;
+104;rpmi.at:447;rpm -i identical versions of same package;;
+105;rpmi.at:465;rpm -U with invalid --relocate;install relocate;
+106;rpmi.at:482;rpm -U --badreloc with invalid --relocate;install relocate;
+107;rpmi.at:498;rpm -i with/without --excludedocs;install excludedocs;
+108;rpmorder.at:3;basic install/erase order 1;install erase order;
+109;rpmbuild.at:23;rpmbuild -ba *.spec;build;
+110;rpmbuild.at:41;rpmbuild --rebuild;build;
+111;rpmbuild.at:54;rpmbuild --short-circuit -bl;build;
+112;rpmbuild.at:72;rpmbuild -tb <tar with bad spec>;build;
+113;rpmbuild.at:89;rpmbuild -tb;build;
+114;rpmbuild.at:104;rpmbuild %attr and %defattr;build;
+115;rpmbuild.at:144;rpmbuild hardlink;build;
+116;rpmbuild.at:175;rpmbuild unpackaged files;build;
+117;rpmbuild.at:195;rpmbuild unpackaged directories;build;
+118;rpmbuild.at:215;rpmbuild glob;build;
+119;rpmbuild.at:247;rpmbuild prefixpostfix;build;
+120;rpmbuild.at:282;Weak and reverse requires;build;
+121;rpmbuild.at:310;Build requires;build;
+122;rpmbuild.at:326;Dependency generation;build;
+123;rpmbuild.at:369;rpmspec query 1;build;
+124;rpmbuild.at:389;rpmbuild archive sanity;build;
+125;rpmbuild.at:407;rpmbuild debuginfo minisymtab;build debuginfo;
+126;rpmbuild.at:444;rpmbuild debuginfo minisymtab strip -g;build debuginfo;
+127;rpmbuild.at:483;rpmbuild debuginfo dwz;build debuginfo dwz;
+128;rpmbuild.at:575;rpmbuild debuginfo dwz unique debug names;build debuginfo dwz;
+129;rpmbuild.at:664;rpmbuild debuginfo dwz gnu_debuglink crc;build debuginfo;
+130;rpmbuild.at:698;rpmbuild implicit suid binary;build debuginfo dwz suid;
+131;rpmbuild.at:732;rpmbuild debuginfo gdb index included;build debuginfo gdb;
+132;rpmbuild.at:761;rpmbuild debuginfo no gdb index included;build debuginfo gdb;
+133;rpmbuild.at:789;rpmbuild debuginfo unique debug src dir;build debuginfo;
+134;rpmbuild.at:828;rpmbuild debuginfo no unique debug src dir;build debuginfo;
+135;rpmbuild.at:864;rpmbuild debugsource;build debuginfo debugsource;
+136;rpmbuild.at:899;rpmbuild debugsource debugsourcefiles.list path;build debuginfo debugsource;
+137;rpmbuild.at:927;rpmbuild debuginfo subpackages single;build debuginfo debugsubpackage;
+138;rpmbuild.at:969;rpmbuild debuginfo subpackages multiple;build debuginfo debugsubpackage;
+139;rpmbuild.at:1053;rpmbuild debuginfo subpackages multiple unique;build debuginfo debugsubpackage;
+140;rpmbuild.at:1137;rpmbuild debuginfo subpackages multiple unique debugsource;build debuginfo debugsubpackage debugsource;
+141;rpmbuild.at:1224;rpmbuild debuginfo subpackages multiple excluded;build debuginfo debugsubpackage debugsource;
+142;rpmbuild.at:1288;rpmbuild debuginfo subpackages multiple excluded;build debuginfo debugsubpackage debugsource;
+143;rpmbuildid.at:23;rpmbuild buildid none;build debuginfo buildid;
+144;rpmbuildid.at:57;rpmbuild buildid alldebug;build debuginfo buildid;
+145;rpmbuildid.at:149;rpmbuild buildid alldebug unique debug names;build debuginfo buildid;
+146;rpmbuildid.at:240;rpmbuild buildid separate;build debuginfo buildid;
+147;rpmbuildid.at:331;rpmbuild buildid separate unique debug names;build debuginfo buildid;
+148;rpmbuildid.at:421;rpmbuild buildid compat;build debuginfo buildid;
+149;rpmbuildid.at:525;rpmbuild buildid compat unique debug names;build debuginfo buildid;
+150;rpmbuildid.at:629;rpmbuild buildid duplicate alldebug;build debuginfo buildid;
+151;rpmbuildid.at:697;rpmbuild buildid hardlink alldebug;build debuginfo buildid;
+152;rpmbuildid.at:762;rpmbuild buildid duplicate separate;build debuginfo buildid;
+153;rpmbuildid.at:827;rpmbuild buildid hardlink separate;build debuginfo buildid;
+154;rpmbuildid.at:889;rpmbuild buildid duplicate compat;build debuginfo buildid;
+155;rpmbuildid.at:966;rpmbuild buildid hardlink compat;build debuginfo buildid;
+156;rpmbuildid.at:1039;rpmbuild buildid recompute;build debuginfo buildid;
+157;rpmbuildid.at:1153;rpmbuild buildid unique r1 r2;build debuginfo buildid;
+158;rpmbuildid.at:1201;rpmbuild buildid non-unique r1 r2;build debuginfo buildid;
+159;rpmbuildid.at:1253;rpmbuild buildid attrs;build debuginfo buildid;
+160;rpmbuildid.at:1287;rpmbuild buildid config attrs;build debuginfo buildid;
+161;rpmscript.at:7;basic scripts and arguments;verify;
+162;rpmscript.at:44;basic trigger scripts and arguments;trigger script;
+163;rpmscript.at:102;basic file trigger scripts;file trigger script;
+164;rpmscript.at:205;basic file triggers 2;filetrigger script;
+165;rpmvercmp.at:13;rpmvercmp(1.0, 1.0) = 0;vercmp;
+166;rpmvercmp.at:14;rpmvercmp(1.0, 2.0) = -1;vercmp;
+167;rpmvercmp.at:15;rpmvercmp(2.0, 1.0) = 1;vercmp;
+168;rpmvercmp.at:17;rpmvercmp(2.0.1, 2.0.1) = 0;vercmp;
+169;rpmvercmp.at:18;rpmvercmp(2.0, 2.0.1) = -1;vercmp;
+170;rpmvercmp.at:19;rpmvercmp(2.0.1, 2.0) = 1;vercmp;
+171;rpmvercmp.at:21;rpmvercmp(2.0.1a, 2.0.1a) = 0;vercmp;
+172;rpmvercmp.at:22;rpmvercmp(2.0.1a, 2.0.1) = 1;vercmp;
+173;rpmvercmp.at:23;rpmvercmp(2.0.1, 2.0.1a) = -1;vercmp;
+174;rpmvercmp.at:25;rpmvercmp(5.5p1, 5.5p1) = 0;vercmp;
+175;rpmvercmp.at:26;rpmvercmp(5.5p1, 5.5p2) = -1;vercmp;
+176;rpmvercmp.at:27;rpmvercmp(5.5p2, 5.5p1) = 1;vercmp;
+177;rpmvercmp.at:29;rpmvercmp(5.5p10, 5.5p10) = 0;vercmp;
+178;rpmvercmp.at:30;rpmvercmp(5.5p1, 5.5p10) = -1;vercmp;
+179;rpmvercmp.at:31;rpmvercmp(5.5p10, 5.5p1) = 1;vercmp;
+180;rpmvercmp.at:33;rpmvercmp(10xyz, 10.1xyz) = -1;vercmp;
+181;rpmvercmp.at:34;rpmvercmp(10.1xyz, 10xyz) = 1;vercmp;
+182;rpmvercmp.at:36;rpmvercmp(xyz10, xyz10) = 0;vercmp;
+183;rpmvercmp.at:37;rpmvercmp(xyz10, xyz10.1) = -1;vercmp;
+184;rpmvercmp.at:38;rpmvercmp(xyz10.1, xyz10) = 1;vercmp;
+185;rpmvercmp.at:40;rpmvercmp(xyz.4, xyz.4) = 0;vercmp;
+186;rpmvercmp.at:41;rpmvercmp(xyz.4, 8) = -1;vercmp;
+187;rpmvercmp.at:42;rpmvercmp(8, xyz.4) = 1;vercmp;
+188;rpmvercmp.at:43;rpmvercmp(xyz.4, 2) = -1;vercmp;
+189;rpmvercmp.at:44;rpmvercmp(2, xyz.4) = 1;vercmp;
+190;rpmvercmp.at:46;rpmvercmp(5.5p2, 5.6p1) = -1;vercmp;
+191;rpmvercmp.at:47;rpmvercmp(5.6p1, 5.5p2) = 1;vercmp;
+192;rpmvercmp.at:49;rpmvercmp(5.6p1, 6.5p1) = -1;vercmp;
+193;rpmvercmp.at:50;rpmvercmp(6.5p1, 5.6p1) = 1;vercmp;
+194;rpmvercmp.at:52;rpmvercmp(6.0.rc1, 6.0) = 1;vercmp;
+195;rpmvercmp.at:53;rpmvercmp(6.0, 6.0.rc1) = -1;vercmp;
+196;rpmvercmp.at:55;rpmvercmp(10b2, 10a1) = 1;vercmp;
+197;rpmvercmp.at:56;rpmvercmp(10a2, 10b2) = -1;vercmp;
+198;rpmvercmp.at:58;rpmvercmp(1.0aa, 1.0aa) = 0;vercmp;
+199;rpmvercmp.at:59;rpmvercmp(1.0a, 1.0aa) = -1;vercmp;
+200;rpmvercmp.at:60;rpmvercmp(1.0aa, 1.0a) = 1;vercmp;
+201;rpmvercmp.at:62;rpmvercmp(10.0001, 10.0001) = 0;vercmp;
+202;rpmvercmp.at:63;rpmvercmp(10.0001, 10.1) = 0;vercmp;
+203;rpmvercmp.at:64;rpmvercmp(10.1, 10.0001) = 0;vercmp;
+204;rpmvercmp.at:65;rpmvercmp(10.0001, 10.0039) = -1;vercmp;
+205;rpmvercmp.at:66;rpmvercmp(10.0039, 10.0001) = 1;vercmp;
+206;rpmvercmp.at:68;rpmvercmp(4.999.9, 5.0) = -1;vercmp;
+207;rpmvercmp.at:69;rpmvercmp(5.0, 4.999.9) = 1;vercmp;
+208;rpmvercmp.at:71;rpmvercmp(20101121, 20101121) = 0;vercmp;
+209;rpmvercmp.at:72;rpmvercmp(20101121, 20101122) = -1;vercmp;
+210;rpmvercmp.at:73;rpmvercmp(20101122, 20101121) = 1;vercmp;
+211;rpmvercmp.at:75;rpmvercmp(2_0, 2_0) = 0;vercmp;
+212;rpmvercmp.at:76;rpmvercmp(2.0, 2_0) = 0;vercmp;
+213;rpmvercmp.at:77;rpmvercmp(2_0, 2.0) = 0;vercmp;
+214;rpmvercmp.at:80;rpmvercmp(a, a) = 0;vercmp;
+215;rpmvercmp.at:81;rpmvercmp(a+, a+) = 0;vercmp;
+216;rpmvercmp.at:82;rpmvercmp(a+, a_) = 0;vercmp;
+217;rpmvercmp.at:83;rpmvercmp(a_, a+) = 0;vercmp;
+218;rpmvercmp.at:84;rpmvercmp(+a, +a) = 0;vercmp;
+219;rpmvercmp.at:85;rpmvercmp(+a, _a) = 0;vercmp;
+220;rpmvercmp.at:86;rpmvercmp(_a, +a) = 0;vercmp;
+221;rpmvercmp.at:87;rpmvercmp(+_, +_) = 0;vercmp;
+222;rpmvercmp.at:88;rpmvercmp(_+, +_) = 0;vercmp;
+223;rpmvercmp.at:89;rpmvercmp(_+, _+) = 0;vercmp;
+224;rpmvercmp.at:90;rpmvercmp(+, _) = 0;vercmp;
+225;rpmvercmp.at:91;rpmvercmp(_, +) = 0;vercmp;
+226;rpmvercmp.at:94;rpmvercmp(1.0~rc1, 1.0~rc1) = 0;vercmp;
+227;rpmvercmp.at:95;rpmvercmp(1.0~rc1, 1.0) = -1;vercmp;
+228;rpmvercmp.at:96;rpmvercmp(1.0, 1.0~rc1) = 1;vercmp;
+229;rpmvercmp.at:97;rpmvercmp(1.0~rc1, 1.0~rc2) = -1;vercmp;
+230;rpmvercmp.at:98;rpmvercmp(1.0~rc2, 1.0~rc1) = 1;vercmp;
+231;rpmvercmp.at:99;rpmvercmp(1.0~rc1~git123, 1.0~rc1~git123) = 0;vercmp;
+232;rpmvercmp.at:100;rpmvercmp(1.0~rc1~git123, 1.0~rc1) = -1;vercmp;
+233;rpmvercmp.at:101;rpmvercmp(1.0~rc1, 1.0~rc1~git123) = 1;vercmp;
+234;rpmdeps.at:7;missing dependency;install;
+235;rpmdeps.at:30;cross-depending packages;install;
+236;rpmdeps.at:56;unsatisfied versioned require;install;
+237;rpmdeps.at:84;satisfied versioned require;install;
+238;rpmdeps.at:110;versioned conflict in transaction;install;
+239;rpmdeps.at:137;versioned conflict in database;install;
+240;rpmdeps.at:163;install and verify self-conflicting package;install;
+241;rpmdeps.at:185;explicit file conflicts;install;
+242;rpmdeps.at:224;erase to break dependencies;install;
+243;rpmdeps.at:252;erase to break colored file dependency;install;
+244;rpmdeps.at:281;erase on wrong-colored file dependency;install;
+245;rpmdeps.at:309;unsatisfied WITH require;install, boolean;
+246;rpmdeps.at:340;unsatisfied WITH require (rpmdb);install, boolean;
+247;rpmdeps.at:373;satisfied WITH require;install, boolean;
+248;rpmdeps.at:397;satisfied WITH require (rpmdb);install, boolean;
+249;rpmdeps.at:425;unsatisfied WITHOUT require;install, boolean;
+250;rpmdeps.at:451;unsatisfied WITHOUT require (rpmdb);install, boolean;
+251;rpmdeps.at:479;satisfied WITHOUT require;install, boolean;
+252;rpmdeps.at:502;satisfied WITHOUT require (rpmdb);install, boolean;
+253;rpmdeps.at:529;unsatisfied AND require - all missing;install, boolean;
+254;rpmdeps.at:550;unsatisfied AND require - first is missing;install, boolean;
+255;rpmdeps.at:575;unsatisfied AND require - second is missing;install, boolean;
+256;rpmdeps.at:600;satisfied AND require;install, boolean;
+257;rpmdeps.at:629;unsatisfied OR require - all missing;install, boolean;
+258;rpmdeps.at:650;satisfied OR require - first is missing;install, boolean;
+259;rpmdeps.at:673;satisfied OR require - second is missing;install, boolean;
+260;rpmdeps.at:696;satisfied OR require - both present;install, boolean;
+261;rpmdeps.at:725;unsatisfied IF require;install, boolean;
+262;rpmdeps.at:750;satisfied IF require;install, boolean;
+263;rpmdeps.at:777;unsatisfied IF-ELSE require;install, boolean;
+264;rpmdeps.at:798;satisfied IF-ELSE require - right clause;install, boolean;
+265;rpmdeps.at:821;satisfied IF-ELSE require - left clause;install, boolean;
+266;rpmdeps.at:850;unsatisfied nested AND-OR require;install, boolean;
+267;rpmdeps.at:875;satisfied nested AND-OR require;install, boolean;
+268;rpmdeps.at:904;satisfied nested AND-IF require - without right clause;install, boolean;
+269;rpmdeps.at:927;satisfied nested AND-IF require - with right clause;install, boolean;
+270;rpmconflict.at:7;package with file conflict;install;
+271;rpmconflict.at:31;two packages with a conflicting file;install;
+272;rpmconflict.at:48;package with shareable file;install;
+273;rpmconflict.at:72;two packages with shareable file;install;
+274;rpmconflict.at:89;non-conflicting identical basenames;install;
+275;rpmconflict.at:107;conflicting identical basenames;install;
+276;rpmconflict.at:127;multilib elf conflict, prefer 64bit 1;install;
+277;rpmconflict.at:149;multilib elf conflict, prefer 64bit 2;install;
+278;rpmconflict.at:176;multilib elf conflict, prefer 64bit 3;install;
+279;rpmconflict.at:203;multilib elf conflict, prefer 32bit 1;install;
+280;rpmconflict.at:225;multilib elf conflict, prefer 32bit 2;install;
+281;rpmconflict.at:252;multilib elf conflict, prefer 32bit 3;install;
+282;rpmconflict.at:279;multilib elf vs non-elf file conflict 1;install;
+283;rpmconflict.at:300;multilib elf vs non-elf file conflict 2;install;
+284;rpmconflict.at:325;multilib elf vs non-elf file conflict 3;install;
+285;rpmconflict.at:351;replacing directory with symlink;install;
+286;rpmconflict.at:375;replacing symlink with directory;install;
+287;rpmconflict.at:400;real file with shared ghost;install;
+288;rpmreplace.at:4;upgrade to/from regular file;install;
+289;rpmreplace.at:40;upgrade regular file to/from broken link;install;
+290;rpmreplace.at:76;upgrade regular file to/from file link;install;
+291;rpmreplace.at:112;upgrade broken link to broken link;install;
+292;rpmreplace.at:145;upgrade file link to file link;install;
+293;rpmreplace.at:178;upgrade directory link to directory link;install;
+294;rpmreplace.at:211;upgrade regular file to directory;install;
+295;rpmreplace.at:242;upgrade broken link to directory;install;
+296;rpmreplace.at:273;upgrade file link to directory;install;
+297;rpmreplace.at:304;upgrade directory link to directory;install;
+298;rpmreplace.at:335;upgrade empty directory to empty directory;install;
+299;rpmreplace.at:363;upgrade empty directory to regular file;install;
+300;rpmreplace.at:392;upgrade locally symlinked directory;install;
+301;rpmreplace.at:428;upgrade invalid locally symlinked directory;install;
+302;rpmreplace.at:460;upgrade empty directory to broken link;install;
+303;rpmreplace.at:489;upgrade empty directory to file link;install;
+304;rpmreplace.at:518;upgrade removed empty directory to file link;install;
+305;rpmreplace.at:548;upgrade replaced empty directory to file link;install;
+306;rpmreplace.at:578;upgrade empty directory to file link with pretrans;install;
+307;rpmconfig.at:6;install config on existiting file;install;
+308;rpmconfig.at:35;install config(noreplace) on existing file;install;
+309;rpmconfig.at:70;install config on existiting identical file;install;
+310;rpmconfig.at:97;erase unchanged config;install;
+311;rpmconfig.at:123;erase changed config;install;
+312;rpmconfig.at:153;erase changed config(noreplace);install;
+313;rpmconfig.at:185;upgrade unchanged config;install;
+314;rpmconfig.at:215;upgrade unchanged config - touching test;install;
+315;rpmconfig.at:243;upgrade modified config;install;
+316;rpmconfig.at:276;upgrade changing config;install;
+317;rpmconfig.at:306;upgrade changing, modified config 1;install;
+318;rpmconfig.at:342;upgrade changing, modified config 2;install;
+319;rpmconfig.at:377;upgrade unchanged config(noreplace);install;
+320;rpmconfig.at:409;upgrade modified config(noreplace);install;
+321;rpmconfig.at:443;upgrade changing config(noreplace);install;
+322;rpmconfig.at:474;upgrade changing, modified config(noreplace) 1;install;
+323;rpmconfig.at:511;upgrade changing, modified config(noreplace) 2;install;
+324;rpmconfig.at:546;upgrade unchanged shared config;install;
+325;rpmconfig.at:584;upgrade modified shared config;install;
+326;rpmconfig.at:624;upgrade changing shared config;install;
+327;rpmconfig.at:661;upgrade changing, modified shared config 1;install;
+328;rpmconfig.at:704;upgrade changing, modified shared config 2;install;
+329;rpmconfig.at:745;upgrade changing, modified shared config(noreplace) 1;install;
+330;rpmconfig.at:789;upgrade changing, modified shared config(noreplace) 2;install;
+331;rpmconfig.at:830;install/upgrade/erase ghost config;install;
+332;rpmconfig2.at:6;install config on existiting symlink;install;
+333;rpmconfig2.at:36;install config on existiting identical link;install;
+334;rpmconfig2.at:66;erase unchanged config link;install;
+335;rpmconfig2.at:93;erase changed config link;install;
+336;rpmconfig2.at:124;upgrade unchanged config link;install;
+337;rpmconfig2.at:155;upgrade unchanged config link - touching test;install;
+338;rpmconfig2.at:185;upgrade modified config link;install;
+339;rpmconfig2.at:219;upgrade changing config link;install;
+340;rpmconfig2.at:250;upgrade changing, modified config link 1;install;
+341;rpmconfig2.at:287;upgrade changing, modified config link 2;install;
+342;rpmconfig2.at:323;upgrade unchanged config(noreplace) link;install;
+343;rpmconfig2.at:356;upgrade modified config(noreplace) link;install;
+344;rpmconfig2.at:391;upgrade changing config(noreplace) link;install;
+345;rpmconfig2.at:423;upgrade changing, modified config(noreplace) link 1;install;
+346;rpmconfig2.at:461;upgrade changing, modified config(noreplace) link 2;install;
+347;rpmconfig2.at:498;upgrade unchanged shared config link;install;
+348;rpmconfig2.at:537;upgrade modified shared config link;install;
+349;rpmconfig2.at:578;upgrade changing shared config link;install;
+350;rpmconfig2.at:616;upgrade changing, modified shared config link 1;install;
+351;rpmconfig2.at:660;upgrade changing, modified shared config link 2;install;
+352;rpmconfig2.at:702;upgrade changing, modified shared config(noreplace) link 1;install;
+353;rpmconfig2.at:747;upgrade changing, modified shared config(noreplace) link 2;install;
+354;rpmconfig3.at:6;upgrade config to/from non-config;install;
+355;rpmconfig3.at:44;upgrade modified config to/from non-config 1;install;
+356;rpmconfig3.at:88;upgrade modified config to/from non-config 2;install;
+357;rpmconfig3.at:129;upgrade config to/from config link;install;
+358;rpmconfig3.at:166;upgrade modified config to config link;install;
+359;rpmconfig3.at:206;upgrade modified config link to config;install;
+360;rpmconfig3.at:246;upgrade config to directory;install;
+361;rpmconfig3.at:278;upgrade modified config to directory;install;
+362;rpmmacro.at:6;simple rpm --eval;macros;
+363;rpmmacro.at:17;invalid rpm --eval;macros;
+364;rpmmacro.at:29;invalid rpm --define;macros;
+365;rpmmacro.at:40;rpm --undefine;macros;
+366;rpmmacro.at:55;simple true conditional rpm --eval;macros;
+367;rpmmacro.at:65;simple false conditional rpm --eval;macros;
+368;rpmmacro.at:75;nested macro in name;macros;
+369;rpmmacro.at:85;parametrized macro 1;macros;
+370;rpmmacro.at:121;parametrized macro 2;macros;
+371;rpmmacro.at:134;parametrized macro 3;macros;
+372;rpmmacro.at:146;parametrized macro 4;macros;
+373;rpmmacro.at:161;parametrized macro 5;macros;
+374;rpmmacro.at:190;uncompress macro;macros;
+375;rpmmacro.at:202;basename macro;macros;
+376;rpmmacro.at:213;shrink macro;macros;
+377;rpmmacro.at:224;suffix macro;macros;
+378;rpmmacro.at:235;url2path macro;macros;
+379;rpmmacro.at:246;shell expansion;macros;
+380;rpmmacro.at:257;simple lua --eval;macros lua;
+381;rpmmacro.at:267;lua rpm extensions;macros lua;
+382;rpmmacro.at:277;lua posix extensions;macros lua;
+383;rpmmacro.at:288;lua script exit behavior;macros lua;
+384;rpmmacro.at:300;%define + %undefine in nested levels 1;macros define undefine;
+385;rpmmacro.at:315;%define + %undefine in nested levels 2;macros define;
+386;rpmmacro.at:331;%define + %undefine in nested levels 3;macros define;
+387;rpmmacro.at:349;%define + %undefine in nested levels 4;macros define global;
+388;rpmmacro.at:371;%define in conditional macro;macros;
+389;rpmmacro.at:389;%verbose negative test;macros verbose;
+390;rpmmacro.at:407;%verbose positive test;macros verbose;
+391;rpmpython.at:6;module import;python;
+392;rpmpython.at:12;macro manipulation;python;
+393;rpmpython.at:35;basic rpmio;python;
+394;rpmpython.at:70;spec parse;python;
+395;rpmpython.at:85;basic header manipulation;python;
+396;rpmpython.at:110;invalid header data;python;
+397;rpmpython.at:129;reading a package file;python;
+398;rpmpython.at:137;reading a signed package file 1;python;
+399;rpmpython.at:152;reading a signed package file 2;python;
+400;rpmpython.at:170;add package to transaction;python;
+401;rpmpython.at:182;add bogus package to transaction 1;python;
+402;rpmpython.at:196;add bogus package to transaction 2;python;
+403;rpmpython.at:217;database iterators;python rpmdb;
+404;rpmpython.at:316;dependency sets 1;python;
+405;rpmpython.at:333;dependency sets 2;python;
+406;rpmpython.at:343;file info sets 1;python;
+407;rpmpython.at:360;string pool 1;python;
+408;rpmpython.at:375;string pool 2;python;
+409;rpmpython.at:393;archive 1;python;
+410;rpmpython.at:413;header unload;python;
+411;rpmdepmatch.at:4;provide - require pairs;python;
+"
+# List of the all the test groups.
+at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'`
+
+# at_fn_validate_ranges NAME...
+# -----------------------------
+# Validate and normalize the test group number contained in each variable
+# NAME. Leading zeroes are treated as decimal.
+at_fn_validate_ranges ()
+{
+ for at_grp
+ do
+ eval at_value=\$$at_grp
+ if test $at_value -lt 1 || test $at_value -gt 411; then
+ $as_echo "invalid test group: $at_value" >&2
+ exit 1
+ fi
+ case $at_value in
+ 0*) # We want to treat leading 0 as decimal, like expr and test, but
+ # AS_VAR_ARITH treats it as octal if it uses $(( )).
+ # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the
+ # expr fork, but it is not worth the effort to determine if the
+ # shell supports XSI when the user can just avoid leading 0.
+ eval $at_grp='`expr $at_value + 0`' ;;
+ esac
+ done
+}
+
+at_prev=
+for at_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$at_prev"; then
+ at_option=$at_prev=$at_option
+ at_prev=
+ fi
+
+ case $at_option in
+ *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;;
+ *) at_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $at_option in
+ --help | -h )
+ at_help_p=:
+ ;;
+
+ --list | -l )
+ at_list_p=:
+ ;;
+
+ --version | -V )
+ at_version_p=:
+ ;;
+
+ --clean | -c )
+ at_clean=:
+ ;;
+
+ --color )
+ at_color=always
+ ;;
+ --color=* )
+ case $at_optarg in
+ no | never | none) at_color=never ;;
+ auto | tty | if-tty) at_color=auto ;;
+ always | yes | force) at_color=always ;;
+ *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'`
+ as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;;
+ esac
+ ;;
+
+ --debug | -d )
+ at_debug_p=:
+ ;;
+
+ --errexit | -e )
+ at_debug_p=:
+ at_errexit_p=:
+ ;;
+
+ --verbose | -v )
+ at_verbose=; at_quiet=:
+ ;;
+
+ --trace | -x )
+ at_traceon='set -x'
+ at_trace_echo=echo
+ at_check_filter_trace=at_fn_filter_trace
+ ;;
+
+ [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9])
+ at_fn_validate_ranges at_option
+ as_fn_append at_groups "$at_option$as_nl"
+ ;;
+
+ # Ranges
+ [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-)
+ at_range_start=`echo $at_option |tr -d X-`
+ at_fn_validate_ranges at_range_start
+ at_range=`$as_echo "$at_groups_all" | \
+ sed -ne '/^'$at_range_start'$/,$p'`
+ as_fn_append at_groups "$at_range$as_nl"
+ ;;
+
+ -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9])
+ at_range_end=`echo $at_option |tr -d X-`
+ at_fn_validate_ranges at_range_end
+ at_range=`$as_echo "$at_groups_all" | \
+ sed -ne '1,/^'$at_range_end'$/p'`
+ as_fn_append at_groups "$at_range$as_nl"
+ ;;
+
+ [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \
+ [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \
+ [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \
+ [0-9][0-9][0-9]-[0-9][0-9][0-9] | \
+ [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \
+ [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] )
+ at_range_start=`expr $at_option : '\(.*\)-'`
+ at_range_end=`expr $at_option : '.*-\(.*\)'`
+ if test $at_range_start -gt $at_range_end; then
+ at_tmp=$at_range_end
+ at_range_end=$at_range_start
+ at_range_start=$at_tmp
+ fi
+ at_fn_validate_ranges at_range_start at_range_end
+ at_range=`$as_echo "$at_groups_all" | \
+ sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'`
+ as_fn_append at_groups "$at_range$as_nl"
+ ;;
+
+ # Directory selection.
+ --directory | -C )
+ at_prev=--directory
+ ;;
+ --directory=* )
+ at_change_dir=:
+ at_dir=$at_optarg
+ if test x- = "x$at_dir" ; then
+ at_dir=./-
+ fi
+ ;;
+
+ # Parallel execution.
+ --jobs | -j )
+ at_jobs=0
+ ;;
+ --jobs=* | -j[0-9]* )
+ if test -n "$at_optarg"; then
+ at_jobs=$at_optarg
+ else
+ at_jobs=`expr X$at_option : 'X-j\(.*\)'`
+ fi
+ case $at_jobs in *[!0-9]*)
+ at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'`
+ as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;;
+ esac
+ ;;
+
+ # Keywords.
+ --keywords | -k )
+ at_prev=--keywords
+ ;;
+ --keywords=* )
+ at_groups_selected=$at_help_all
+ at_save_IFS=$IFS
+ IFS=,
+ set X $at_optarg
+ shift
+ IFS=$at_save_IFS
+ for at_keyword
+ do
+ at_invert=
+ case $at_keyword in
+ '!'*)
+ at_invert="-v"
+ at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'`
+ ;;
+ esac
+ # It is on purpose that we match the test group titles too.
+ at_groups_selected=`$as_echo "$at_groups_selected" |
+ grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"`
+ done
+ # Smash the keywords.
+ at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//'`
+ as_fn_append at_groups "$at_groups_selected$as_nl"
+ ;;
+ --recheck)
+ at_recheck=:
+ ;;
+
+ *=*)
+ at_envvar=`expr "x$at_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $at_envvar in
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$at_envvar'" ;;
+ esac
+ at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ # Export now, but save eval for later and for debug scripts.
+ export $at_envvar
+ as_fn_append at_debug_args " $at_envvar='$at_value'"
+ ;;
+
+ *) $as_echo "$as_me: invalid option: $at_option" >&2
+ $as_echo "Try \`$0 --help' for more information." >&2
+ exit 1
+ ;;
+ esac
+done
+
+# Verify our last option didn't require an argument
+if test -n "$at_prev"; then :
+ as_fn_error $? "\`$at_prev' requires an argument"
+fi
+
+# The file containing the suite.
+at_suite_log=$at_dir/$as_me.log
+
+# Selected test groups.
+if test -z "$at_groups$at_recheck"; then
+ at_groups=$at_groups_all
+else
+ if test -n "$at_recheck" && test -r "$at_suite_log"; then
+ at_oldfails=`sed -n '
+ /^Failed tests:$/,/^Skipped tests:$/{
+ s/^[ ]*\([1-9][0-9]*\):.*/\1/p
+ }
+ /^Unexpected passes:$/,/^## Detailed failed tests/{
+ s/^[ ]*\([1-9][0-9]*\):.*/\1/p
+ }
+ /^## Detailed failed tests/q
+ ' "$at_suite_log"`
+ as_fn_append at_groups "$at_oldfails$as_nl"
+ fi
+ # Sort the tests, removing duplicates.
+ at_groups=`$as_echo "$at_groups" | sort -nu | sed '/^$/d'`
+fi
+
+if test x"$at_color" = xalways \
+ || { test x"$at_color" = xauto && test -t 1; }; then
+ at_red=`printf '\033[0;31m'`
+ at_grn=`printf '\033[0;32m'`
+ at_lgn=`printf '\033[1;32m'`
+ at_blu=`printf '\033[1;34m'`
+ at_std=`printf '\033[m'`
+else
+ at_red= at_grn= at_lgn= at_blu= at_std=
+fi
+
+# Help message.
+if $at_help_p; then
+ cat <<_ATEOF || at_write_fail=1
+Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS]
+
+Run all the tests, or the selected TESTS, given by numeric ranges, and
+save a detailed log file. Upon failure, create debugging scripts.
+
+Do not change environment variables directly. Instead, set them via
+command line arguments. Set \`AUTOTEST_PATH' to select the executables
+to exercise. Each relative directory is expanded as build and source
+directories relative to the top level of this distribution.
+E.g., from within the build directory /tmp/foo-1.0, invoking this:
+
+ $ $0 AUTOTEST_PATH=bin
+
+is equivalent to the following, assuming the source directory is /src/foo-1.0:
+
+ PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0
+_ATEOF
+cat <<_ATEOF || at_write_fail=1
+
+Operation modes:
+ -h, --help print the help message, then exit
+ -V, --version print version number, then exit
+ -c, --clean remove all the files this test suite might create and exit
+ -l, --list describes all the tests, or the selected TESTS
+_ATEOF
+cat <<_ATEOF || at_write_fail=1
+
+Execution tuning:
+ -C, --directory=DIR
+ change to directory DIR before starting
+ --color[=never|auto|always]
+ enable colored test results on terminal, or always
+ -j, --jobs[=N]
+ Allow N jobs at once; infinite jobs with no arg (default 1)
+ -k, --keywords=KEYWORDS
+ select the tests matching all the comma-separated KEYWORDS
+ multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
+ --recheck select all tests that failed or passed unexpectedly last time
+ -e, --errexit abort as soon as a test fails; implies --debug
+ -v, --verbose force more detailed output
+ default for debugging scripts
+ -d, --debug inhibit clean up and top-level logging
+ default for debugging scripts
+ -x, --trace enable tests shell tracing
+_ATEOF
+cat <<_ATEOF || at_write_fail=1
+
+Report bugs to <rpm-maint@lists.rpm.org>.
+_ATEOF
+ exit $at_write_fail
+fi
+
+# List of tests.
+if $at_list_p; then
+ cat <<_ATEOF || at_write_fail=1
+rpm 4.14.1 test suite test groups:
+
+ NUM: FILE-NAME:LINE TEST-GROUP-NAME
+ KEYWORDS
+
+_ATEOF
+ # Pass an empty line as separator between selected groups and help.
+ $as_echo "$at_groups$as_nl$as_nl$at_help_all" |
+ awk 'NF == 1 && FS != ";" {
+ selected[$ 1] = 1
+ next
+ }
+ /^$/ { FS = ";" }
+ NF > 0 {
+ if (selected[$ 1]) {
+ printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
+ if ($ 4) {
+ lmax = 79
+ indent = " "
+ line = indent
+ len = length (line)
+ n = split ($ 4, a, " ")
+ for (i = 1; i <= n; i++) {
+ l = length (a[i]) + 1
+ if (i > 1 && len + l > lmax) {
+ print line
+ line = indent " " a[i]
+ len = length (line)
+ } else {
+ line = line " " a[i]
+ len += l
+ }
+ }
+ if (n)
+ print line
+ }
+ }
+ }' || at_write_fail=1
+ exit $at_write_fail
+fi
+if $at_version_p; then
+ $as_echo "$as_me (rpm 4.14.1)" &&
+ cat <<\_ATEOF || at_write_fail=1
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This test suite is free software; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+_ATEOF
+ exit $at_write_fail
+fi
+
+# Should we print banners? Yes if more than one test is run.
+case $at_groups in #(
+ *$as_nl* )
+ at_print_banners=: ;; #(
+ * ) at_print_banners=false ;;
+esac
+# Text for banner N, set to a single space once printed.
+# Banner 1. rpmgeneral.at:19
+# Category starts at test group 1.
+at_banner_text_1="Basic tests"
+# Banner 2. rpmio.at:3
+# Category starts at test group 5.
+at_banner_text_2="I/O"
+# Banner 3. rpmquery.at:19
+# Category starts at test group 6.
+at_banner_text_3="RPM queries"
+# Banner 4. rpmverify.at:3
+# Category starts at test group 36.
+at_banner_text_4="RPM verification"
+# Banner 5. rpmsigdig.at:3
+# Category starts at test group 51.
+at_banner_text_5="RPM signatures and digests"
+# Banner 6. rpmdb.at:19
+# Category starts at test group 65.
+at_banner_text_6="RPM database access"
+# Banner 7. rpmi.at:19
+# Category starts at test group 81.
+at_banner_text_7="RPM install tests"
+# Banner 8. rpmorder.at:1
+# Category starts at test group 108.
+at_banner_text_8="RPM install/erase ordering"
+# Banner 9. rpmbuild.at:19
+# Category starts at test group 109.
+at_banner_text_9="RPM build"
+# Banner 10. rpmbuildid.at:19
+# Category starts at test group 143.
+at_banner_text_10="RPM buildid tests"
+# Banner 11. rpmscript.at:3
+# Category starts at test group 161.
+at_banner_text_11="RPM scriptlets"
+# Banner 12. rpmvercmp.at:11
+# Category starts at test group 165.
+at_banner_text_12="RPM version comparison"
+# Banner 13. rpmdeps.at:3
+# Category starts at test group 234.
+at_banner_text_13="RPM dependencies"
+# Banner 14. rpmconflict.at:3
+# Category starts at test group 270.
+at_banner_text_14="RPM implicit file conflicts"
+# Banner 15. rpmreplace.at:2
+# Category starts at test group 288.
+at_banner_text_15="RPM file replacement"
+# Banner 16. rpmconfig.at:3
+# Category starts at test group 307.
+at_banner_text_16="RPM config file behavior"
+# Banner 17. rpmconfig2.at:3
+# Category starts at test group 332.
+at_banner_text_17="RPM config symlink behavior"
+# Banner 18. rpmconfig3.at:3
+# Category starts at test group 354.
+at_banner_text_18="RPM config filetype changes"
+# Banner 19. rpmmacro.at:3
+# Category starts at test group 362.
+at_banner_text_19="RPM macros"
+# Banner 20. rpmpython.at:4
+# Category starts at test group 391.
+at_banner_text_20="Python bindings"
+# Banner 21. rpmdepmatch.at:2
+# Category starts at test group 411.
+at_banner_text_21="RPM dependency matching"
+
+# Take any -C into account.
+if $at_change_dir ; then
+ test x != "x$at_dir" && cd "$at_dir" \
+ || as_fn_error $? "unable to change directory"
+ at_dir=`pwd`
+fi
+
+# Load the config files for any default variable assignments.
+for at_file in atconfig atlocal
+do
+ test -r $at_file || continue
+ . ./$at_file || as_fn_error $? "invalid content: $at_file"
+done
+
+# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
+: "${at_top_build_prefix=$at_top_builddir}"
+
+# Perform any assignments requested during argument parsing.
+eval "$at_debug_args"
+
+# atconfig delivers names relative to the directory the test suite is
+# in, but the groups themselves are run in testsuite-dir/group-dir.
+if test -n "$at_top_srcdir"; then
+ builddir=../..
+ for at_dir_var in srcdir top_srcdir top_build_prefix
+ do
+ eval at_val=\$at_$at_dir_var
+ case $at_val in
+ [\\/$]* | ?:[\\/]* ) at_prefix= ;;
+ *) at_prefix=../../ ;;
+ esac
+ eval "$at_dir_var=\$at_prefix\$at_val"
+ done
+fi
+
+## -------------------- ##
+## Directory structure. ##
+## -------------------- ##
+
+# This is the set of directories and files used by this script
+# (non-literals are capitalized):
+#
+# TESTSUITE - the testsuite
+# TESTSUITE.log - summarizes the complete testsuite run
+# TESTSUITE.dir/ - created during a run, remains after -d or failed test
+# + at-groups/ - during a run: status of all groups in run
+# | + NNN/ - during a run: meta-data about test group NNN
+# | | + check-line - location (source file and line) of current AT_CHECK
+# | | + status - exit status of current AT_CHECK
+# | | + stdout - stdout of current AT_CHECK
+# | | + stder1 - stderr, including trace
+# | | + stderr - stderr, with trace filtered out
+# | | + test-source - portion of testsuite that defines group
+# | | + times - timestamps for computing duration
+# | | + pass - created if group passed
+# | | + xpass - created if group xpassed
+# | | + fail - created if group failed
+# | | + xfail - created if group xfailed
+# | | + skip - created if group skipped
+# + at-stop - during a run: end the run if this file exists
+# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction
+# + 0..NNN/ - created for each group NNN, remains after -d or failed test
+# | + TESTSUITE.log - summarizes the group results
+# | + ... - files created during the group
+
+# The directory the whole suite works in.
+# Should be absolute to let the user `cd' at will.
+at_suite_dir=$at_dir/$as_me.dir
+# The file containing the suite ($at_dir might have changed since earlier).
+at_suite_log=$at_dir/$as_me.log
+# The directory containing helper files per test group.
+at_helper_dir=$at_suite_dir/at-groups
+# Stop file: if it exists, do not start new jobs.
+at_stop_file=$at_suite_dir/at-stop
+# The fifo used for the job dispatcher.
+at_job_fifo=$at_suite_dir/at-job-fifo
+
+if $at_clean; then
+ test -d "$at_suite_dir" &&
+ find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+ rm -f -r "$at_suite_dir" "$at_suite_log"
+ exit $?
+fi
+
+# Don't take risks: use only absolute directories in PATH.
+#
+# For stand-alone test suites (ie. atconfig was not found),
+# AUTOTEST_PATH is relative to `.'.
+#
+# For embedded test suites, AUTOTEST_PATH is relative to the top level
+# of the package. Then expand it into build/src parts, since users
+# may create executables in both places.
+AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"`
+at_path=
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $AUTOTEST_PATH $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR
+case $as_dir in
+ [\\/]* | ?:[\\/]* )
+ as_fn_append at_path "$as_dir"
+ ;;
+ * )
+ if test -z "$at_top_build_prefix"; then
+ # Stand-alone test suite.
+ as_fn_append at_path "$as_dir"
+ else
+ # Embedded test suite.
+ as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR"
+ as_fn_append at_path "$at_top_srcdir/$as_dir"
+ fi
+ ;;
+esac
+ done
+IFS=$as_save_IFS
+
+
+# Now build and simplify PATH.
+#
+# There might be directories that don't exist, but don't redirect
+# builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
+at_new_path=
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $at_path
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -d "$as_dir" || continue
+case $as_dir in
+ [\\/]* | ?:[\\/]* ) ;;
+ * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
+esac
+case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in
+ *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;;
+ $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;;
+ *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;;
+esac
+ done
+IFS=$as_save_IFS
+
+PATH=$at_new_path
+export PATH
+
+# Setting up the FDs.
+
+
+
+# 5 is the log file. Not to be overwritten if `-d'.
+if $at_debug_p; then
+ at_suite_log=/dev/null
+else
+ : >"$at_suite_log"
+fi
+exec 5>>"$at_suite_log"
+
+# Banners and logs.
+$as_echo "## ---------------------- ##
+## rpm 4.14.1 test suite. ##
+## ---------------------- ##"
+{
+ $as_echo "## ---------------------- ##
+## rpm 4.14.1 test suite. ##
+## ---------------------- ##"
+ echo
+
+ $as_echo "$as_me: command line was:"
+ $as_echo " \$ $0 $at_cli_args"
+ echo
+
+ # If ChangeLog exists, list a few lines in case it might help determining
+ # the exact version.
+ if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then
+ $as_echo "## ---------- ##
+## ChangeLog. ##
+## ---------- ##"
+ echo
+ sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog"
+ echo
+ fi
+
+ {
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+}
+ echo
+
+ # Contents of the config files.
+ for at_file in atconfig atlocal
+ do
+ test -r $at_file || continue
+ $as_echo "$as_me: $at_file:"
+ sed 's/^/| /' $at_file
+ echo
+ done
+} >&5
+
+
+## ------------------------- ##
+## Autotest shell functions. ##
+## ------------------------- ##
+
+# at_fn_banner NUMBER
+# -------------------
+# Output banner NUMBER, provided the testsuite is running multiple groups and
+# this particular banner has not yet been printed.
+at_fn_banner ()
+{
+ $at_print_banners || return 0
+ eval at_banner_text=\$at_banner_text_$1
+ test "x$at_banner_text" = "x " && return 0
+ eval "at_banner_text_$1=\" \""
+ if test -z "$at_banner_text"; then
+ $at_first || echo
+ else
+ $as_echo "$as_nl$at_banner_text$as_nl"
+ fi
+} # at_fn_banner
+
+# at_fn_check_prepare_notrace REASON LINE
+# ---------------------------------------
+# Perform AT_CHECK preparations for the command at LINE for an untraceable
+# command; REASON is the reason for disabling tracing.
+at_fn_check_prepare_notrace ()
+{
+ $at_trace_echo "Not enabling shell tracing (command contains $1)"
+ $as_echo "$2" >"$at_check_line_file"
+ at_check_trace=: at_check_filter=:
+ : >"$at_stdout"; : >"$at_stderr"
+}
+
+# at_fn_check_prepare_trace LINE
+# ------------------------------
+# Perform AT_CHECK preparations for the command at LINE for a traceable
+# command.
+at_fn_check_prepare_trace ()
+{
+ $as_echo "$1" >"$at_check_line_file"
+ at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace
+ : >"$at_stdout"; : >"$at_stderr"
+}
+
+# at_fn_check_prepare_dynamic COMMAND LINE
+# ----------------------------------------
+# Decide if COMMAND at LINE is traceable at runtime, and call the appropriate
+# preparation function.
+at_fn_check_prepare_dynamic ()
+{
+ case $1 in
+ *$as_nl*)
+ at_fn_check_prepare_notrace 'an embedded newline' "$2" ;;
+ *)
+ at_fn_check_prepare_trace "$2" ;;
+ esac
+}
+
+# at_fn_filter_trace
+# ------------------
+# Remove the lines in the file "$at_stderr" generated by "set -x" and print
+# them to stderr.
+at_fn_filter_trace ()
+{
+ mv "$at_stderr" "$at_stder1"
+ grep '^ *+' "$at_stder1" >&2
+ grep -v '^ *+' "$at_stder1" >"$at_stderr"
+}
+
+# at_fn_log_failure FILE-LIST
+# ---------------------------
+# Copy the files in the list on stdout with a "> " prefix, and exit the shell
+# with a failure exit code.
+at_fn_log_failure ()
+{
+ for file
+ do $as_echo "$file:"; sed 's/^/> /' "$file"; done
+ echo 1 > "$at_status_file"
+ exit 1
+}
+
+# at_fn_check_skip EXIT-CODE LINE
+# -------------------------------
+# Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit
+# the test group subshell with that same exit code. Use LINE in any report
+# about test failure.
+at_fn_check_skip ()
+{
+ case $1 in
+ 99) echo 99 > "$at_status_file"; at_failed=:
+ $as_echo "$2: hard failure"; exit 99;;
+ 77) echo 77 > "$at_status_file"; exit 77;;
+ esac
+}
+
+# at_fn_check_status EXPECTED EXIT-CODE LINE
+# ------------------------------------------
+# Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing.
+# Otherwise, if it is 77 or 99, exit the test group subshell with that same
+# exit code; if it is anything else print an error message referring to LINE,
+# and fail the test.
+at_fn_check_status ()
+{
+ case $2 in
+ $1 ) ;;
+ 77) echo 77 > "$at_status_file"; exit 77;;
+ 99) echo 99 > "$at_status_file"; at_failed=:
+ $as_echo "$3: hard failure"; exit 99;;
+ *) $as_echo "$3: exit code was $2, expected $1"
+ at_failed=:;;
+ esac
+}
+
+# at_fn_diff_devnull FILE
+# -----------------------
+# Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff
+# invocations.
+at_fn_diff_devnull ()
+{
+ test -s "$1" || return 0
+ $at_diff "$at_devnull" "$1"
+}
+
+# at_fn_test NUMBER
+# -----------------
+# Parse out test NUMBER from the tail of this file.
+at_fn_test ()
+{
+ eval at_sed=\$at_sed$1
+ sed "$at_sed" "$at_myself" > "$at_test_source"
+}
+
+# at_fn_create_debugging_script
+# -----------------------------
+# Create the debugging script $at_group_dir/run which will reproduce the
+# current test group.
+at_fn_create_debugging_script ()
+{
+ {
+ echo "#! /bin/sh" &&
+ echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' &&
+ $as_echo "cd '$at_dir'" &&
+ $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" &&
+ echo 'exit 1'
+ } >"$at_group_dir/run" &&
+ chmod +x "$at_group_dir/run"
+}
+
+## -------------------------------- ##
+## End of autotest shell functions. ##
+## -------------------------------- ##
+{
+ $as_echo "## ---------------- ##
+## Tested programs. ##
+## ---------------- ##"
+ echo
+} >&5
+
+# Report what programs are being tested.
+for at_program in : $at_tested
+do
+ test "$at_program" = : && continue
+ case $at_program in
+ [\\/]* | ?:[\\/]* ) $at_program_=$at_program ;;
+ * )
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -f "$as_dir/$at_program" && break
+ done
+IFS=$as_save_IFS
+
+ at_program_=$as_dir/$at_program ;;
+ esac
+ if test -f "$at_program_"; then
+ {
+ $as_echo "$at_srcdir/local.at:36: $at_program_ --version"
+ "$at_program_" --version </dev/null
+ echo
+ } >&5 2>&1
+ else
+ as_fn_error $? "cannot find $at_program" "$LINENO" 5
+ fi
+done
+
+{
+ $as_echo "## ------------------ ##
+## Running the tests. ##
+## ------------------ ##"
+} >&5
+
+at_start_date=`date`
+at_start_time=`date +%s 2>/dev/null`
+$as_echo "$as_me: starting at: $at_start_date" >&5
+
+# Create the master directory if it doesn't already exist.
+as_dir="$at_suite_dir"; as_fn_mkdir_p ||
+ as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5
+
+# Can we diff with `/dev/null'? DU 5.0 refuses.
+if diff /dev/null /dev/null >/dev/null 2>&1; then
+ at_devnull=/dev/null
+else
+ at_devnull=$at_suite_dir/devnull
+ >"$at_devnull"
+fi
+
+# Use `diff -u' when possible.
+if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff"
+then
+ at_diff='diff -u'
+else
+ at_diff=diff
+fi
+
+# Get the last needed group.
+for at_group in : $at_groups; do :; done
+
+# Extract the start and end lines of each test group at the tail
+# of this file
+awk '
+BEGIN { FS="" }
+/^#AT_START_/ {
+ start = NR
+}
+/^#AT_STOP_/ {
+ test = substr ($ 0, 10)
+ print "at_sed" test "=\"1," start "d;" (NR-1) "q\""
+ if (test == "'"$at_group"'") exit
+}' "$at_myself" > "$at_suite_dir/at-source-lines" &&
+. "$at_suite_dir/at-source-lines" ||
+ as_fn_error $? "cannot create test line number cache" "$LINENO" 5
+rm -f "$at_suite_dir/at-source-lines"
+
+# Set number of jobs for `-j'; avoid more jobs than test groups.
+set X $at_groups; shift; at_max_jobs=$#
+if test $at_max_jobs -eq 0; then
+ at_jobs=1
+fi
+if test $at_jobs -ne 1 &&
+ { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then
+ at_jobs=$at_max_jobs
+fi
+
+# If parallel mode, don't output banners, don't split summary lines.
+if test $at_jobs -ne 1; then
+ at_print_banners=false
+ at_quiet=:
+fi
+
+# Set up helper dirs.
+rm -rf "$at_helper_dir" &&
+mkdir "$at_helper_dir" &&
+cd "$at_helper_dir" &&
+{ test -z "$at_groups" || mkdir $at_groups; } ||
+as_fn_error $? "testsuite directory setup failed" "$LINENO" 5
+
+# Functions for running a test group. We leave the actual
+# test group execution outside of a shell function in order
+# to avoid hitting zsh 4.x exit status bugs.
+
+# at_fn_group_prepare
+# -------------------
+# Prepare for running a test group.
+at_fn_group_prepare ()
+{
+ # The directory for additional per-group helper files.
+ at_job_dir=$at_helper_dir/$at_group
+ # The file containing the location of the last AT_CHECK.
+ at_check_line_file=$at_job_dir/check-line
+ # The file containing the exit status of the last command.
+ at_status_file=$at_job_dir/status
+ # The files containing the output of the tested commands.
+ at_stdout=$at_job_dir/stdout
+ at_stder1=$at_job_dir/stder1
+ at_stderr=$at_job_dir/stderr
+ # The file containing the code for a test group.
+ at_test_source=$at_job_dir/test-source
+ # The file containing dates.
+ at_times_file=$at_job_dir/times
+
+ # Be sure to come back to the top test directory.
+ cd "$at_suite_dir"
+
+ # Clearly separate the test groups when verbose.
+ $at_first || $at_verbose echo
+
+ at_group_normalized=$at_group
+
+ eval 'while :; do
+ case $at_group_normalized in #(
+ '"$at_format"'*) break;;
+ esac
+ at_group_normalized=0$at_group_normalized
+ done'
+
+
+ # Create a fresh directory for the next test group, and enter.
+ # If one already exists, the user may have invoked ./run from
+ # within that directory; we remove the contents, but not the
+ # directory itself, so that we aren't pulling the rug out from
+ # under the shell's notion of the current directory.
+ at_group_dir=$at_suite_dir/$at_group_normalized
+ at_group_log=$at_group_dir/$as_me.log
+ if test -d "$at_group_dir"; then
+ find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \;
+ rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??*
+fi ||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5
+$as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;}
+ # Be tolerant if the above `rm' was not able to remove the directory.
+ as_dir="$at_group_dir"; as_fn_mkdir_p
+
+ echo 0 > "$at_status_file"
+
+ # In verbose mode, append to the log file *and* show on
+ # the standard output; in quiet mode only write to the log.
+ if test -z "$at_verbose"; then
+ at_tee_pipe='tee -a "$at_group_log"'
+ else
+ at_tee_pipe='cat >> "$at_group_log"'
+ fi
+}
+
+# at_fn_group_banner ORDINAL LINE DESC PAD [BANNER]
+# -------------------------------------------------
+# Declare the test group ORDINAL, located at LINE with group description DESC,
+# and residing under BANNER. Use PAD to align the status column.
+at_fn_group_banner ()
+{
+ at_setup_line="$2"
+ test -n "$5" && at_fn_banner $5
+ at_desc="$3"
+ case $1 in
+ [0-9]) at_desc_line=" $1: ";;
+ [0-9][0-9]) at_desc_line=" $1: " ;;
+ *) at_desc_line="$1: " ;;
+ esac
+ as_fn_append at_desc_line "$3$4"
+ $at_quiet $as_echo_n "$at_desc_line"
+ echo "# -*- compilation -*-" >> "$at_group_log"
+}
+
+# at_fn_group_postprocess
+# -----------------------
+# Perform cleanup after running a test group.
+at_fn_group_postprocess ()
+{
+ # Be sure to come back to the suite directory, in particular
+ # since below we might `rm' the group directory we are in currently.
+ cd "$at_suite_dir"
+
+ if test ! -f "$at_check_line_file"; then
+ sed "s/^ */$as_me: WARNING: /" <<_ATEOF
+ A failure happened in a test group before any test could be
+ run. This means that test suite is improperly designed. Please
+ report this failure to <rpm-maint@lists.rpm.org>.
+_ATEOF
+ $as_echo "$at_setup_line" >"$at_check_line_file"
+ at_status=99
+ fi
+ $at_verbose $as_echo_n "$at_group. $at_setup_line: "
+ $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log"
+ case $at_xfail:$at_status in
+ yes:0)
+ at_msg="UNEXPECTED PASS"
+ at_res=xpass
+ at_errexit=$at_errexit_p
+ at_color=$at_red
+ ;;
+ no:0)
+ at_msg="ok"
+ at_res=pass
+ at_errexit=false
+ at_color=$at_grn
+ ;;
+ *:77)
+ at_msg='skipped ('`cat "$at_check_line_file"`')'
+ at_res=skip
+ at_errexit=false
+ at_color=$at_blu
+ ;;
+ no:* | *:99)
+ at_msg='FAILED ('`cat "$at_check_line_file"`')'
+ at_res=fail
+ at_errexit=$at_errexit_p
+ at_color=$at_red
+ ;;
+ yes:*)
+ at_msg='expected failure ('`cat "$at_check_line_file"`')'
+ at_res=xfail
+ at_errexit=false
+ at_color=$at_lgn
+ ;;
+ esac
+ echo "$at_res" > "$at_job_dir/$at_res"
+ # In parallel mode, output the summary line only afterwards.
+ if test $at_jobs -ne 1 && test -n "$at_verbose"; then
+ $as_echo "$at_desc_line $at_color$at_msg$at_std"
+ else
+ # Make sure there is a separator even with long titles.
+ $as_echo " $at_color$at_msg$at_std"
+ fi
+ at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
+ case $at_status in
+ 0|77)
+ # $at_times_file is only available if the group succeeded.
+ # We're not including the group log, so the success message
+ # is written in the global log separately. But we also
+ # write to the group log in case they're using -d.
+ if test -f "$at_times_file"; then
+ at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')'
+ rm -f "$at_times_file"
+ fi
+ $as_echo "$at_log_msg" >> "$at_group_log"
+ $as_echo "$at_log_msg" >&5
+
+ # Cleanup the group directory, unless the user wants the files
+ # or the success was unexpected.
+ if $at_debug_p || test $at_res = xpass; then
+ at_fn_create_debugging_script
+ if test $at_res = xpass && $at_errexit; then
+ echo stop > "$at_stop_file"
+ fi
+ else
+ if test -d "$at_group_dir"; then
+ find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+ rm -fr "$at_group_dir"
+ fi
+ rm -f "$at_test_source"
+ fi
+ ;;
+ *)
+ # Upon failure, include the log into the testsuite's global
+ # log. The failure message is written in the group log. It
+ # is later included in the global log.
+ $as_echo "$at_log_msg" >> "$at_group_log"
+
+ # Upon failure, keep the group directory for autopsy, and create
+ # the debugging script. With -e, do not start any further tests.
+ at_fn_create_debugging_script
+ if $at_errexit; then
+ echo stop > "$at_stop_file"
+ fi
+ ;;
+ esac
+}
+
+
+## ------------ ##
+## Driver loop. ##
+## ------------ ##
+
+
+if (set -m && set +m && set +b) >/dev/null 2>&1; then
+ set +b
+ at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=-
+else
+ at_job_control_on=: at_job_control_off=: at_job_group=
+fi
+
+for at_signal in 1 2 15; do
+ trap 'set +x; set +e
+ $at_job_control_off
+ at_signal='"$at_signal"'
+ echo stop > "$at_stop_file"
+ trap "" $at_signal
+ at_pgids=
+ for at_pgid in `jobs -p 2>/dev/null`; do
+ at_pgids="$at_pgids $at_job_group$at_pgid"
+ done
+ test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null
+ wait
+ if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then
+ echo >&2
+ fi
+ at_signame=`kill -l $at_signal 2>&1 || echo $at_signal`
+ set x $at_signame
+ test 0 -gt 2 && at_signame=$at_signal
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5
+$as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;}
+ as_fn_arith 128 + $at_signal && exit_status=$as_val
+ as_fn_exit $exit_status' $at_signal
+done
+
+rm -f "$at_stop_file"
+at_first=:
+
+if test $at_jobs -ne 1 &&
+ rm -f "$at_job_fifo" &&
+ test -n "$at_job_group" &&
+ ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null
+then
+ # FIFO job dispatcher.
+
+ trap 'at_pids=
+ for at_pid in `jobs -p`; do
+ at_pids="$at_pids $at_job_group$at_pid"
+ done
+ if test -n "$at_pids"; then
+ at_sig=TSTP
+ test "${TMOUT+set}" = set && at_sig=STOP
+ kill -$at_sig $at_pids 2>/dev/null
+ fi
+ kill -STOP $$
+ test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP
+
+ echo
+ # Turn jobs into a list of numbers, starting from 1.
+ at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p`
+
+ set X $at_joblist
+ shift
+ for at_group in $at_groups; do
+ $at_job_control_on 2>/dev/null
+ (
+ # Start one test group.
+ $at_job_control_off
+ if $at_first; then
+ exec 7>"$at_job_fifo"
+ else
+ exec 6<&-
+ fi
+ trap 'set +x; set +e
+ trap "" PIPE
+ echo stop > "$at_stop_file"
+ echo >&7
+ as_fn_exit 141' PIPE
+ at_fn_group_prepare
+ if cd "$at_group_dir" &&
+ at_fn_test $at_group &&
+ . "$at_test_source"
+ then :; else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
+ at_failed=:
+ fi
+ at_fn_group_postprocess
+ echo >&7
+ ) &
+ $at_job_control_off
+ if $at_first; then
+ at_first=false
+ exec 6<"$at_job_fifo" 7>"$at_job_fifo"
+ fi
+ shift # Consume one token.
+ if test $# -gt 0; then :; else
+ read at_token <&6 || break
+ set x $*
+ fi
+ test -f "$at_stop_file" && break
+ done
+ exec 7>&-
+ # Read back the remaining ($at_jobs - 1) tokens.
+ set X $at_joblist
+ shift
+ if test $# -gt 0; then
+ shift
+ for at_job
+ do
+ read at_token
+ done <&6
+ fi
+ exec 6<&-
+ wait
+else
+ # Run serially, avoid forks and other potential surprises.
+ for at_group in $at_groups; do
+ at_fn_group_prepare
+ if cd "$at_group_dir" &&
+ at_fn_test $at_group &&
+ . "$at_test_source"; then :; else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
+ at_failed=:
+ fi
+ at_fn_group_postprocess
+ test -f "$at_stop_file" && break
+ at_first=false
+ done
+fi
+
+# Wrap up the test suite with summary statistics.
+cd "$at_helper_dir"
+
+# Use ?..???? when the list must remain sorted, the faster * otherwise.
+at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'`
+at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'`
+at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'`
+at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do
+ echo $f; done | sed '/?/d; s,/xpass,,'`
+at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do
+ echo $f; done | sed '/?/d; s,/fail,,'`
+
+set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list
+shift; at_group_count=$#
+set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$*
+set X $at_xfail_list; shift; at_xfail_count=$#
+set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$*
+set X $at_skip_list; shift; at_skip_count=$#
+
+as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val
+as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val
+as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val
+
+# Back to the top directory.
+cd "$at_dir"
+rm -rf "$at_helper_dir"
+
+# Compute the duration of the suite.
+at_stop_date=`date`
+at_stop_time=`date +%s 2>/dev/null`
+$as_echo "$as_me: ending at: $at_stop_date" >&5
+case $at_start_time,$at_stop_time in
+ [0-9]*,[0-9]*)
+ as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val
+ as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val
+ as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val
+ as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val
+ as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val
+ at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
+ $as_echo "$as_me: test suite duration: $at_duration" >&5
+ ;;
+esac
+
+echo
+$as_echo "## ------------- ##
+## Test results. ##
+## ------------- ##"
+echo
+{
+ echo
+ $as_echo "## ------------- ##
+## Test results. ##
+## ------------- ##"
+ echo
+} >&5
+
+if test $at_run_count = 1; then
+ at_result="1 test"
+ at_were=was
+else
+ at_result="$at_run_count tests"
+ at_were=were
+fi
+if $at_errexit_p && test $at_unexpected_count != 0; then
+ if test $at_xpass_count = 1; then
+ at_result="$at_result $at_were run, one passed"
+ else
+ at_result="$at_result $at_were run, one failed"
+ fi
+ at_result="$at_result unexpectedly and inhibited subsequent tests."
+ at_color=$at_red
+else
+ # Don't you just love exponential explosion of the number of cases?
+ at_color=$at_red
+ case $at_xpass_count:$at_fail_count:$at_xfail_count in
+ # So far, so good.
+ 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;;
+ 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;;
+
+ # Some unexpected failures
+ 0:*:0) at_result="$at_result $at_were run,
+$at_fail_count failed unexpectedly." ;;
+
+ # Some failures, both expected and unexpected
+ 0:*:1) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+ 0:*:*) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+
+ # No unexpected failures, but some xpasses
+ *:0:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly." ;;
+
+ # No expected failures, but failures and xpasses
+ *:1:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
+ *:*:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;
+
+ # All of them.
+ *:*:1) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+ *:*:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+ esac
+
+ if test $at_skip_count = 0 && test $at_run_count -gt 1; then
+ at_result="All $at_result"
+ fi
+fi
+
+# Now put skips in the mix.
+case $at_skip_count in
+ 0) ;;
+ 1) at_result="$at_result
+1 test was skipped." ;;
+ *) at_result="$at_result
+$at_skip_count tests were skipped." ;;
+esac
+
+if test $at_unexpected_count = 0; then
+ echo "$at_color$at_result$at_std"
+ echo "$at_result" >&5
+else
+ echo "${at_color}ERROR: $at_result$at_std" >&2
+ echo "ERROR: $at_result" >&5
+ {
+ echo
+ $as_echo "## ------------------------ ##
+## Summary of the failures. ##
+## ------------------------ ##"
+
+ # Summary of failed and skipped tests.
+ if test $at_fail_count != 0; then
+ echo "Failed tests:"
+ $SHELL "$at_myself" $at_fail_list --list
+ echo
+ fi
+ if test $at_skip_count != 0; then
+ echo "Skipped tests:"
+ $SHELL "$at_myself" $at_skip_list --list
+ echo
+ fi
+ if test $at_xpass_count != 0; then
+ echo "Unexpected passes:"
+ $SHELL "$at_myself" $at_xpass_list --list
+ echo
+ fi
+ if test $at_fail_count != 0; then
+ $as_echo "## ---------------------- ##
+## Detailed failed tests. ##
+## ---------------------- ##"
+ echo
+ for at_group in $at_fail_list
+ do
+ at_group_normalized=$at_group
+
+ eval 'while :; do
+ case $at_group_normalized in #(
+ '"$at_format"'*) break;;
+ esac
+ at_group_normalized=0$at_group_normalized
+ done'
+
+ cat "$at_suite_dir/$at_group_normalized/$as_me.log"
+ echo
+ done
+ echo
+ fi
+ if test -n "$at_top_srcdir"; then
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## ${at_top_build_prefix}config.log ##
+_ASBOX
+ sed 's/^/| /' ${at_top_build_prefix}config.log
+ echo
+ fi
+ } >&5
+
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## $as_me.log was created. ##
+_ASBOX
+
+ echo
+ if $at_debug_p; then
+ at_msg='per-test log files'
+ else
+ at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'"
+ fi
+ $as_echo "Please send $at_msg and all information you think might help:
+
+ To: <rpm-maint@lists.rpm.org>
+ Subject: [rpm 4.14.1] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+
+You may investigate any problem if you feel able to do so, in which
+case the test suite provides a good starting point. Its output may
+be found below \`${at_testdir+${at_testdir}/}$as_me.dir'.
+"
+ exit 1
+fi
+
+exit 0
+
+## ------------- ##
+## Actual tests. ##
+## ------------- ##
+#AT_START_1
+at_fn_group_banner 1 'rpmgeneral.at:22' \
+ "rpm --version" " " 1
+at_xfail=no
+(
+ $as_echo "1. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmgeneral.at:24: runroot rpm --version"
+at_fn_check_prepare_trace "rpmgeneral.at:24"
+( $at_check_trace; runroot rpm --version
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "RPM version 4.14.1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmgeneral.at:24"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_1
+#AT_START_2
+at_fn_group_banner 2 'rpmgeneral.at:31' \
+ "rpmbuild --version" " " 1
+at_xfail=no
+(
+ $as_echo "2. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmgeneral.at:33: runroot rpmbuild --version"
+at_fn_check_prepare_trace "rpmgeneral.at:33"
+( $at_check_trace; runroot rpmbuild --version
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "RPM version 4.14.1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmgeneral.at:33"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_2
+#AT_START_3
+at_fn_group_banner 3 'rpmgeneral.at:40' \
+ "rpm --showrc" " " 1
+at_xfail=no
+(
+ $as_echo "3. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmgeneral.at:42: runroot rpm --showrc"
+at_fn_check_prepare_trace "rpmgeneral.at:42"
+( $at_check_trace; runroot rpm --showrc
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmgeneral.at:42"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_3
+#AT_START_4
+at_fn_group_banner 4 'rpmgeneral.at:50' \
+ "rpm --querytags" " " 1
+at_xfail=no
+(
+ $as_echo "4. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmgeneral.at:52: runroot rpm --querytags"
+at_fn_check_prepare_trace "rpmgeneral.at:52"
+( $at_check_trace; runroot rpm --querytags
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "ARCH
+ARCHIVESIZE
+BASENAMES
+BUGURL
+BUILDARCHS
+BUILDHOST
+BUILDTIME
+C
+CHANGELOGNAME
+CHANGELOGTEXT
+CHANGELOGTIME
+CLASSDICT
+CONFLICTFLAGS
+CONFLICTNAME
+CONFLICTNEVRS
+CONFLICTS
+CONFLICTVERSION
+COOKIE
+DBINSTANCE
+DEPENDSDICT
+DESCRIPTION
+DIRINDEXES
+DIRNAMES
+DISTRIBUTION
+DISTTAG
+DISTURL
+DSAHEADER
+E
+ENCODING
+ENHANCEFLAGS
+ENHANCENAME
+ENHANCENEVRS
+ENHANCES
+ENHANCEVERSION
+EPOCH
+EPOCHNUM
+EVR
+EXCLUDEARCH
+EXCLUDEOS
+EXCLUSIVEARCH
+EXCLUSIVEOS
+FILECAPS
+FILECLASS
+FILECOLORS
+FILECONTEXTS
+FILEDEPENDSN
+FILEDEPENDSX
+FILEDEVICES
+FILEDIGESTALGO
+FILEDIGESTS
+FILEFLAGS
+FILEGROUPNAME
+FILEINODES
+FILELANGS
+FILELINKTOS
+FILEMD5S
+FILEMODES
+FILEMTIMES
+FILENAMES
+FILENLINKS
+FILEPROVIDE
+FILERDEVS
+FILEREQUIRE
+FILESIGNATURELENGTH
+FILESIGNATURES
+FILESIZES
+FILESTATES
+FILETRIGGERCONDS
+FILETRIGGERFLAGS
+FILETRIGGERINDEX
+FILETRIGGERNAME
+FILETRIGGERPRIORITIES
+FILETRIGGERSCRIPTFLAGS
+FILETRIGGERSCRIPTPROG
+FILETRIGGERSCRIPTS
+FILETRIGGERTYPE
+FILETRIGGERVERSION
+FILEUSERNAME
+FILEVERIFYFLAGS
+FSCONTEXTS
+GIF
+GROUP
+HDRID
+HEADERCOLOR
+HEADERI18NTABLE
+HEADERIMAGE
+HEADERIMMUTABLE
+HEADERREGIONS
+HEADERSIGNATURES
+ICON
+INSTALLCOLOR
+INSTALLTID
+INSTALLTIME
+INSTFILENAMES
+INSTPREFIXES
+LICENSE
+LONGARCHIVESIZE
+LONGFILESIZES
+LONGSIGSIZE
+LONGSIZE
+N
+NAME
+NEVR
+NEVRA
+NOPATCH
+NOSOURCE
+NVR
+NVRA
+O
+OBSOLETEFLAGS
+OBSOLETENAME
+OBSOLETENEVRS
+OBSOLETES
+OBSOLETEVERSION
+OLDENHANCES
+OLDENHANCESFLAGS
+OLDENHANCESNAME
+OLDENHANCESVERSION
+OLDFILENAMES
+OLDSUGGESTS
+OLDSUGGESTSFLAGS
+OLDSUGGESTSNAME
+OLDSUGGESTSVERSION
+OPTFLAGS
+ORDERFLAGS
+ORDERNAME
+ORDERVERSION
+ORIGBASENAMES
+ORIGDIRINDEXES
+ORIGDIRNAMES
+ORIGFILENAMES
+OS
+P
+PACKAGER
+PATCH
+PATCHESFLAGS
+PATCHESNAME
+PATCHESVERSION
+PAYLOADCOMPRESSOR
+PAYLOADDIGEST
+PAYLOADDIGESTALGO
+PAYLOADFLAGS
+PAYLOADFORMAT
+PKGID
+PLATFORM
+POLICIES
+POLICYFLAGS
+POLICYNAMES
+POLICYTYPES
+POLICYTYPESINDEXES
+POSTIN
+POSTINFLAGS
+POSTINPROG
+POSTTRANS
+POSTTRANSFLAGS
+POSTTRANSPROG
+POSTUN
+POSTUNFLAGS
+POSTUNPROG
+PREFIXES
+PREIN
+PREINFLAGS
+PREINPROG
+PRETRANS
+PRETRANSFLAGS
+PRETRANSPROG
+PREUN
+PREUNFLAGS
+PREUNPROG
+PROVIDEFLAGS
+PROVIDENAME
+PROVIDENEVRS
+PROVIDES
+PROVIDEVERSION
+PUBKEYS
+R
+RECOMMENDFLAGS
+RECOMMENDNAME
+RECOMMENDNEVRS
+RECOMMENDS
+RECOMMENDVERSION
+RECONTEXTS
+RELEASE
+REMOVETID
+REQUIREFLAGS
+REQUIRENAME
+REQUIRENEVRS
+REQUIRES
+REQUIREVERSION
+RPMVERSION
+RSAHEADER
+SHA1HEADER
+SHA256HEADER
+SIGGPG
+SIGMD5
+SIGPGP
+SIGSIZE
+SIZE
+SOURCE
+SOURCEPACKAGE
+SOURCEPKGID
+SOURCERPM
+SUGGESTFLAGS
+SUGGESTNAME
+SUGGESTNEVRS
+SUGGESTS
+SUGGESTVERSION
+SUMMARY
+SUPPLEMENTFLAGS
+SUPPLEMENTNAME
+SUPPLEMENTNEVRS
+SUPPLEMENTS
+SUPPLEMENTVERSION
+TRANSFILETRIGGERCONDS
+TRANSFILETRIGGERFLAGS
+TRANSFILETRIGGERINDEX
+TRANSFILETRIGGERNAME
+TRANSFILETRIGGERPRIORITIES
+TRANSFILETRIGGERSCRIPTFLAGS
+TRANSFILETRIGGERSCRIPTPROG
+TRANSFILETRIGGERSCRIPTS
+TRANSFILETRIGGERTYPE
+TRANSFILETRIGGERVERSION
+TRIGGERCONDS
+TRIGGERFLAGS
+TRIGGERINDEX
+TRIGGERNAME
+TRIGGERSCRIPTFLAGS
+TRIGGERSCRIPTPROG
+TRIGGERSCRIPTS
+TRIGGERTYPE
+TRIGGERVERSION
+URL
+V
+VCS
+VENDOR
+VERBOSE
+VERIFYSCRIPT
+VERIFYSCRIPTFLAGS
+VERIFYSCRIPTPROG
+VERSION
+XPM
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmgeneral.at:52"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_4
+#AT_START_5
+at_fn_group_banner 5 'rpmio.at:21' \
+ "SIGPIPE from install scriptlet" " " 2
+at_xfail=no
+(
+ $as_echo "5. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmio.at:23:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/sigpipe.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/sigpipe-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmio.at:23"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/sigpipe.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/sigpipe-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmio.at:23"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_5
+#AT_START_6
+at_fn_group_banner 6 'rpmquery.at:22' \
+ "rpm --qf -p *.i386.rpm" " " 3
+at_xfail=no
+(
+ $as_echo "6. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:24:
+runroot rpm \\
+ -q --qf \"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\\n\" \\
+ -p /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:24"
+( $at_check_trace;
+runroot rpm \
+ -q --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" \
+ -p /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello-1.0-1.i386
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:24"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_6
+#AT_START_7
+at_fn_group_banner 7 'rpmquery.at:36' \
+ "rpm --qf -p *.src.rpm" " " 3
+at_xfail=no
+(
+ $as_echo "7. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:38:
+runroot rpm \\
+ -q --qf \"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\\n\" \\
+ -p /data/SRPMS/hello-1.0-1.src.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:38"
+( $at_check_trace;
+runroot rpm \
+ -q --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" \
+ -p /data/SRPMS/hello-1.0-1.src.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello-1.0-1.i386
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:38"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_7
+#AT_START_8
+at_fn_group_banner 8 'rpmquery.at:50' \
+ "rpm -ql -p *.src.rpm" " " 3
+at_xfail=no
+(
+ $as_echo "8. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:52:
+runroot rpm \\
+ -ql \\
+ -p /data/SRPMS/hello-1.0-1.src.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:52"
+( $at_check_trace;
+runroot rpm \
+ -ql \
+ -p /data/SRPMS/hello-1.0-1.src.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello-1.0.tar.gz
+hello.spec
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:52"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_8
+#AT_START_9
+at_fn_group_banner 9 'rpmquery.at:65' \
+ "rpmspec -q" " " 3
+at_xfail=no
+(
+ $as_echo "9. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:67:
+runroot rpmspec \\
+ -q --qf \"%{name}\" /data/SPECS/hello.spec
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:67"
+( $at_check_trace;
+runroot rpmspec \
+ -q --qf "%{name}" /data/SPECS/hello.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_9
+#AT_START_10
+at_fn_group_banner 10 'rpmquery.at:77' \
+ "rpm -ql -p *.i386.rpm" " " 3
+at_xfail=no
+(
+ $as_echo "10. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:79:
+runroot rpm \\
+ -ql \\
+ -p /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:79"
+( $at_check_trace;
+runroot rpm \
+ -ql \
+ -p /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "/usr/local/bin/hello
+/usr/share/doc/hello-1.0
+/usr/share/doc/hello-1.0/FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:79"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_10
+#AT_START_11
+at_fn_group_banner 11 'rpmquery.at:94' \
+ "rpm -qp <manifest>" " " 3
+at_xfail=no
+(
+ $as_echo "11. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:96:
+cat << EOF > \${RPMTEST}/query.mft
+/data/RPMS/hello-1.0-1.i386.rpm
+/data/RPMS/hello-1.0-1.ppc64.rpm
+/data/RPMS/foo-1.0-1.noarch.rpm
+EOF
+runroot rpm -qp --qf \"%{nvr}\\n\" /query.mft
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmquery.at:96"
+( $at_check_trace;
+cat << EOF > ${RPMTEST}/query.mft
+/data/RPMS/hello-1.0-1.i386.rpm
+/data/RPMS/hello-1.0-1.ppc64.rpm
+/data/RPMS/foo-1.0-1.noarch.rpm
+EOF
+runroot rpm -qp --qf "%{nvr}\n" /query.mft
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello-1.0-1
+hello-1.0-1
+foo-1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_11
+#AT_START_12
+at_fn_group_banner 12 'rpmquery.at:115' \
+ "rpm -q --scripts -p *.i386.rpm" " " 3
+at_xfail=no
+(
+ $as_echo "12. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:117:
+runroot rpm \\
+ -q --scripts \\
+ -p /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:117"
+( $at_check_trace;
+runroot rpm \
+ -q --scripts \
+ -p /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "preinstall program: /bin/sh
+postinstall program: /bin/sh
+preuninstall program: /bin/sh
+postuninstall program: /bin/sh
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:117"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_12
+#AT_START_13
+at_fn_group_banner 13 'rpmquery.at:136' \
+ "rpm -q on installed package" " " 3
+at_xfail=no
+(
+ $as_echo "13. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:139:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm \\
+ --noscripts --nodeps --ignorearch --relocate=/usr=/check \\
+ -i /data/RPMS/hello-1.0-1.ppc64.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmquery.at:139"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm \
+ --noscripts --nodeps --ignorearch --relocate=/usr=/check \
+ -i /data/RPMS/hello-1.0-1.ppc64.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+# check common NVRA combinations
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:150:
+runroot rpm \\
+ -q hello hello-1.0 hello-1.0-1 \\
+ hello.ppc64 hello-1.0.ppc64 hello-1.0-1.ppc64
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:150"
+( $at_check_trace;
+runroot rpm \
+ -q hello hello-1.0 hello-1.0-1 \
+ hello.ppc64 hello-1.0.ppc64 hello-1.0-1.ppc64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello-1.0-1.ppc64
+hello-1.0-1.ppc64
+hello-1.0-1.ppc64
+hello-1.0-1.ppc64
+hello-1.0-1.ppc64
+hello-1.0-1.ppc64
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:166:
+runroot rpm \\
+ -ql hello
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:166"
+( $at_check_trace;
+runroot rpm \
+ -ql hello
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "/check/local/bin/hello
+/check/share/doc/hello-1.0
+/check/share/doc/hello-1.0/FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:166"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_13
+#AT_START_14
+at_fn_group_banner 14 'rpmquery.at:180' \
+ "integer array query" " " 3
+at_xfail=no
+(
+ $as_echo "14. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:182:
+runroot rpm \\
+ --queryformat=\"[%{filemodes}\\n]\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:182"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{filemodes}\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "33257
+16877
+33188
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_14
+#AT_START_15
+at_fn_group_banner 15 'rpmquery.at:196' \
+ "formatted filesbypkg query" " " 3
+at_xfail=no
+(
+ $as_echo "15. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:198:
+runroot rpm \\
+ --queryformat=\"[%-10{=NAME} %{FILENAMES}\\n]\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:198"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%-10{=NAME} %{FILENAMES}\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello /usr/local/bin/hello
+hello /usr/share/doc/hello-1.0
+hello /usr/share/doc/hello-1.0/FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:198"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_15
+#AT_START_16
+at_fn_group_banner 16 'rpmquery.at:212' \
+ "hex formatted integer array extension query" " " 3
+at_xfail=no
+(
+ $as_echo "16. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:214:
+runroot rpm \\
+ --queryformat=\"[%5{longfilesizes:hex}\\n]\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:214"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%5{longfilesizes:hex}\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo " b40
+ 1000
+ 24
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:214"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_16
+#AT_START_17
+at_fn_group_banner 17 'rpmquery.at:228' \
+ "base64 extension query" " " 3
+at_xfail=no
+(
+ $as_echo "17. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:230:
+runroot rpm \\
+ --queryformat=\"%{pkgid:base64}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:230"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{pkgid:base64}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "qt8W635v5FKy1pILrW+0uw==
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_17
+#AT_START_18
+at_fn_group_banner 18 'rpmquery.at:241' \
+ "pgpsig extension query" " " 3
+at_xfail=no
+(
+ $as_echo "18. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:243:
+runroot rpm \\
+ --queryformat=\"%{rsaheader:pgpsig}\" \\
+ -qp /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:243"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{rsaheader:pgpsig}" \
+ -qp /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /data/RPMS/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "RSA/SHA256, Thu Apr 6 13:02:33 2017, Key ID 4344591e1964c5fc" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:243"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_18
+#AT_START_19
+at_fn_group_banner 19 'rpmquery.at:255' \
+ "integer array perms format query" " " 3
+at_xfail=no
+(
+ $as_echo "19. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:257:
+runroot rpm \\
+ --queryformat=\"[%{filemodes:perms}\\n]\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:257"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{filemodes:perms}\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-rwxr-x--x
+drwxr-xr-x
+-rw-r--r--
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:257"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_19
+#AT_START_20
+at_fn_group_banner 20 'rpmquery.at:271' \
+ "string array query" " " 3
+at_xfail=no
+(
+ $as_echo "20. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:273:
+runroot rpm \\
+ --queryformat=\"[%{basenames} ]\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:273"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{basenames} ]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello hello-1.0 FAQ " | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:273"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_20
+#AT_START_21
+at_fn_group_banner 21 'rpmquery.at:284' \
+ "empty string array query" " " 3
+at_xfail=no
+(
+ $as_echo "21. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:286:
+runroot rpm \\
+ --queryformat=\"[%{basenames}]\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:286"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{basenames}]" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_21
+#AT_START_22
+at_fn_group_banner 22 'rpmquery.at:297' \
+ "empty string array extension array format" " " 3
+at_xfail=no
+(
+ $as_echo "22. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:299:
+runroot rpm \\
+ --queryformat=\"[%{filenames}]\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:299"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{filenames}]" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_22
+#AT_START_23
+at_fn_group_banner 23 'rpmquery.at:310' \
+ "empty string array extension query" " " 3
+at_xfail=no
+(
+ $as_echo "23. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:312:
+runroot rpm \\
+ --queryformat=\"%{filenames}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:312"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{filenames}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "(none)" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:312"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_23
+#AT_START_24
+at_fn_group_banner 24 'rpmquery.at:323' \
+ "different sizes arrays query 1" " " 3
+at_xfail=no
+(
+ $as_echo "24. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:325:
+runroot rpm \\
+ --queryformat=\"[%{basenames} %{changelogname}]\\n\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:325"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{basenames} %{changelogname}]\n" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: incorrect format: array iterator used with different sized arrays
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_24
+#AT_START_25
+at_fn_group_banner 25 'rpmquery.at:339' \
+ "different sizes arrays query 2" " " 3
+at_xfail=no
+(
+ $as_echo "25. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:341:
+runroot rpm \\
+ --queryformat=\"[%{name} %{changelogtime}]\\n\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:341"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{name} %{changelogtime}]\n" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello 908877600
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:341"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_25
+#AT_START_26
+at_fn_group_banner 26 'rpmquery.at:353' \
+ "different sizes arrays query 3" " " 3
+at_xfail=no
+(
+ $as_echo "26. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:355:
+runroot rpm \\
+ --queryformat=\"[%{name} %{basenames}]\\n\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:355"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{name} %{basenames}]\n" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: incorrect format: array iterator used with different sized arrays
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:355"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_26
+#AT_START_27
+at_fn_group_banner 27 'rpmquery.at:367' \
+ "different sizes arrays query 4" " " 3
+at_xfail=no
+(
+ $as_echo "27. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:369:
+runroot rpm \\
+ --queryformat=\"[%{=name} %{basenames}\\n]\" \\
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:369"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="[%{=name} %{basenames}\n]" \
+ -qp /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello hello
+hello hello-1.0
+hello FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:369"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_27
+#AT_START_28
+at_fn_group_banner 28 'rpmquery.at:383' \
+ "non-existent string tag" " " 3
+at_xfail=no
+(
+ $as_echo "28. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:385:
+runroot rpm \\
+ --queryformat=\"%{vendor}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:385"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{vendor}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "(none)" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:385"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_28
+#AT_START_29
+at_fn_group_banner 29 'rpmquery.at:396' \
+ "non-existent integer tag query" " " 3
+at_xfail=no
+(
+ $as_echo "29. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:398:
+runroot rpm \\
+ --queryformat=\"%{installcolor}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:398"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{installcolor}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "(none)" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:398"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_29
+#AT_START_30
+at_fn_group_banner 30 'rpmquery.at:409' \
+ "conditional queryformat" " " 3
+at_xfail=no
+(
+ $as_echo "30. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:411:
+runroot rpm \\
+ --queryformat=\"%|name?{%{name}}:{no}| %|installtime?{%{installtime}}:{(not installed)}|\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:411"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%|name?{%{name}}:{no}| %|installtime?{%{installtime}}:{(not installed)}|" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo (not installed)" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_30
+#AT_START_31
+at_fn_group_banner 31 'rpmquery.at:422' \
+ "invalid tag query" " " 3
+at_xfail=no
+(
+ $as_echo "31. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:424:
+runroot rpm \\
+ --queryformat=\"%{notag}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:424"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{notag}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: incorrect format: unknown tag: \"notag\"
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:424"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_31
+#AT_START_32
+at_fn_group_banner 32 'rpmquery.at:436' \
+ "invalid data for format query" " " 3
+at_xfail=no
+(
+ $as_echo "32. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:438:
+runroot rpm \\
+ --queryformat=\"%{name:depflags}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:438"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%{name:depflags}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "(not a number)" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_32
+#AT_START_33
+at_fn_group_banner 33 'rpmquery.at:449' \
+ "invalid format width query" " " 3
+at_xfail=no
+(
+ $as_echo "33. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:451:
+runroot rpm \\
+ --queryformat=\"%ss{size}\" \\
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:451"
+( $at_check_trace;
+runroot rpm \
+ --queryformat="%ss{size}" \
+ -qp /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: incorrect format: invalid field width
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:451"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_33
+#AT_START_34
+at_fn_group_banner 34 'rpmquery.at:462' \
+ "xml format" " " 3
+at_xfail=no
+(
+ $as_echo "34. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:464:
+runroot rpm -qp --xml data/RPMS/hello-2.0-1.x86_64.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmquery.at:464"
+( $at_check_trace;
+runroot rpm -qp --xml data/RPMS/hello-2.0-1.x86_64.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "<rpmHeader>
+ <rpmTag name=\"Headeri18ntable\">
+ <string>C</string>
+ </rpmTag>
+ <rpmTag name=\"Sigsize\">
+ <integer>5411</integer>
+ </rpmTag>
+ <rpmTag name=\"Sigmd5\">
+ <base64>E3yh2LNcygKhhUujAcVDLg==
+</base64>
+ </rpmTag>
+ <rpmTag name=\"Sha1header\">
+ <string>5cd9874c510b67b44483f9e382a1649ef7743bac</string>
+ </rpmTag>
+ <rpmTag name=\"Sha256header\">
+ <string>ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9</string>
+ </rpmTag>
+ <rpmTag name=\"Name\">
+ <string>hello</string>
+ </rpmTag>
+ <rpmTag name=\"Version\">
+ <string>2.0</string>
+ </rpmTag>
+ <rpmTag name=\"Release\">
+ <string>1</string>
+ </rpmTag>
+ <rpmTag name=\"Summary\">
+ <string>hello -- hello, world rpm</string>
+ </rpmTag>
+ <rpmTag name=\"Description\">
+ <string>Simple rpm demonstration.</string>
+ </rpmTag>
+ <rpmTag name=\"Buildtime\">
+ <integer>1227355200</integer>
+ </rpmTag>
+ <rpmTag name=\"Buildhost\">
+ <string>localhost</string>
+ </rpmTag>
+ <rpmTag name=\"Size\">
+ <integer>7243</integer>
+ </rpmTag>
+ <rpmTag name=\"License\">
+ <string>GPL</string>
+ </rpmTag>
+ <rpmTag name=\"Group\">
+ <string>Testing</string>
+ </rpmTag>
+ <rpmTag name=\"Os\">
+ <string>linux</string>
+ </rpmTag>
+ <rpmTag name=\"Arch\">
+ <string>x86_64</string>
+ </rpmTag>
+ <rpmTag name=\"Filesizes\">
+ <integer>7120</integer>
+ <integer>4096</integer>
+ <integer>48</integer>
+ <integer>36</integer>
+ <integer>39</integer>
+ </rpmTag>
+ <rpmTag name=\"Filemodes\">
+ <integer>33257</integer>
+ <integer>16877</integer>
+ <integer>33188</integer>
+ <integer>33188</integer>
+ <integer>33188</integer>
+ </rpmTag>
+ <rpmTag name=\"Filerdevs\">
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name=\"Filemtimes\">
+ <integer>1489670606</integer>
+ <integer>1489670606</integer>
+ <integer>908894882</integer>
+ <integer>908895030</integer>
+ <integer>908884468</integer>
+ </rpmTag>
+ <rpmTag name=\"Filedigests\">
+ <string>c89fa87aeb1143969c0b6be9334b21d932f77f74e8f60120b5de316406369cf0</string>
+ <string/>
+ <string>fac3b28492ecdc16da172a6f1a432ceed356ca4d9248157b2a962b395e37b3b0</string>
+ <string>678b87e217a415f05e43460e2c7b668245b412e2b4f18a75aa7399d9774ed0b4</string>
+ <string>d63fdc6c986106f57230f217d36b2395d83ecf491d2b7187af714dc8db9629e9</string>
+ </rpmTag>
+ <rpmTag name=\"Filelinktos\">
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ </rpmTag>
+ <rpmTag name=\"Fileflags\">
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ </rpmTag>
+ <rpmTag name=\"Fileusername\">
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ </rpmTag>
+ <rpmTag name=\"Filegroupname\">
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ <string>root</string>
+ </rpmTag>
+ <rpmTag name=\"Sourcerpm\">
+ <string>hello-2.0-1.src.rpm</string>
+ </rpmTag>
+ <rpmTag name=\"Fileverifyflags\">
+ <integer>4294967295</integer>
+ <integer>0</integer>
+ <integer>4294967295</integer>
+ <integer>4294967295</integer>
+ <integer>4294967295</integer>
+ </rpmTag>
+ <rpmTag name=\"Archivesize\">
+ <integer>8060</integer>
+ </rpmTag>
+ <rpmTag name=\"Providename\">
+ <string>hello</string>
+ <string>hello(x86-64)</string>
+ </rpmTag>
+ <rpmTag name=\"Requireflags\">
+ <integer>16384</integer>
+ <integer>16384</integer>
+ <integer>16777226</integer>
+ <integer>16777226</integer>
+ <integer>16777226</integer>
+ <integer>16384</integer>
+ </rpmTag>
+ <rpmTag name=\"Requirename\">
+ <string>libc.so.6()(64bit)</string>
+ <string>libc.so.6(GLIBC_2.2.5)(64bit)</string>
+ <string>rpmlib(CompressedFileNames)</string>
+ <string>rpmlib(FileDigests)</string>
+ <string>rpmlib(PayloadFilesHavePrefix)</string>
+ <string>rtld(GNU_HASH)</string>
+ </rpmTag>
+ <rpmTag name=\"Requireversion\">
+ <string/>
+ <string/>
+ <string>3.0.4-1</string>
+ <string>4.6.0-1</string>
+ <string>4.0-1</string>
+ <string/>
+ </rpmTag>
+ <rpmTag name=\"Rpmversion\">
+ <string>4.13.90</string>
+ </rpmTag>
+ <rpmTag name=\"Changelogtime\">
+ <integer>1227355200</integer>
+ <integer>908884800</integer>
+ </rpmTag>
+ <rpmTag name=\"Changelogname\">
+ <string>Panu Matilainen &lt;pmatilai@redhat.com&gt;</string>
+ <string>Jeff Johnson &lt;jbj@redhat.com&gt;</string>
+ </rpmTag>
+ <rpmTag name=\"Changelogtext\">
+ <string>- updated version</string>
+ <string>- create.</string>
+ </rpmTag>
+ <rpmTag name=\"Filedevices\">
+ <integer>1</integer>
+ <integer>1</integer>
+ <integer>1</integer>
+ <integer>1</integer>
+ <integer>1</integer>
+ </rpmTag>
+ <rpmTag name=\"Fileinodes\">
+ <integer>1</integer>
+ <integer>2</integer>
+ <integer>3</integer>
+ <integer>4</integer>
+ <integer>5</integer>
+ </rpmTag>
+ <rpmTag name=\"Filelangs\">
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ <string/>
+ </rpmTag>
+ <rpmTag name=\"Prefixes\">
+ <string>/usr</string>
+ </rpmTag>
+ <rpmTag name=\"Provideflags\">
+ <integer>8</integer>
+ <integer>8</integer>
+ </rpmTag>
+ <rpmTag name=\"Provideversion\">
+ <string>2.0-1</string>
+ <string>2.0-1</string>
+ </rpmTag>
+ <rpmTag name=\"Dirindexes\">
+ <integer>0</integer>
+ <integer>1</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ </rpmTag>
+ <rpmTag name=\"Basenames\">
+ <string>hello</string>
+ <string>hello-2.0</string>
+ <string>COPYING</string>
+ <string>FAQ</string>
+ <string>README</string>
+ </rpmTag>
+ <rpmTag name=\"Dirnames\">
+ <string>/usr/bin/</string>
+ <string>/usr/share/doc/</string>
+ <string>/usr/share/doc/hello-2.0/</string>
+ </rpmTag>
+ <rpmTag name=\"Optflags\">
+ <string>-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic</string>
+ </rpmTag>
+ <rpmTag name=\"Payloadformat\">
+ <string>cpio</string>
+ </rpmTag>
+ <rpmTag name=\"Payloadcompressor\">
+ <string>gzip</string>
+ </rpmTag>
+ <rpmTag name=\"Payloadflags\">
+ <string>9</string>
+ </rpmTag>
+ <rpmTag name=\"Platform\">
+ <string>x86_64-redhat-linux-gnu</string>
+ </rpmTag>
+ <rpmTag name=\"Filecolors\">
+ <integer>2</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name=\"Fileclass\">
+ <integer>0</integer>
+ <integer>1</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ <integer>2</integer>
+ </rpmTag>
+ <rpmTag name=\"Classdict\">
+ <string>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=775fdcb927e4300adbe83cfacec3cfeb1f63fe17, stripped</string>
+ <string>directory</string>
+ <string>ASCII text</string>
+ </rpmTag>
+ <rpmTag name=\"Filedependsx\">
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name=\"Filedependsn\">
+ <integer>3</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </rpmTag>
+ <rpmTag name=\"Dependsdict\">
+ <integer>1375731713</integer>
+ <integer>1375731712</integer>
+ <integer>1375731717</integer>
+ </rpmTag>
+ <rpmTag name=\"Filedigestalgo\">
+ <integer>8</integer>
+ </rpmTag>
+ <rpmTag name=\"Encoding\">
+ <string>utf-8</string>
+ </rpmTag>
+ <rpmTag name=\"Payloaddigest\">
+ <string>84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c</string>
+ </rpmTag>
+ <rpmTag name=\"Payloaddigestalgo\">
+ <integer>8</integer>
+ </rpmTag>
+</rpmHeader>
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:464"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_34
+#AT_START_35
+at_fn_group_banner 35 'rpmquery.at:761' \
+ "query file attribute filtering" " " 3
+at_xfail=no
+(
+ $as_echo "35. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmquery.at:763:
+runroot rpmbuild -bb --quiet \\
+ /data/SPECS/vattrtest.spec
+
+pkg=\"/build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm\"
+cmd=\"rpm -qpl\"
+for filter in --noconfig --noghost --noartifact -A -c -d -L; do
+ echo \${filter}
+ runroot \${cmd} \${filter} \${pkg}
+done
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmquery.at:763"
+( $at_check_trace;
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/vattrtest.spec
+
+pkg="/build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm"
+cmd="rpm -qpl"
+for filter in --noconfig --noghost --noartifact -A -c -d -L; do
+ echo ${filter}
+ runroot ${cmd} ${filter} ${pkg}
+done
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "--noconfig
+/opt/vattrtest
+/opt/vattrtest/a
+/opt/vattrtest/d
+/opt/vattrtest/g
+/opt/vattrtest/l
+/opt/vattrtest/m
+/opt/vattrtest/r
+--noghost
+/opt/vattrtest
+/opt/vattrtest/a
+/opt/vattrtest/c
+/opt/vattrtest/cn
+/opt/vattrtest/d
+/opt/vattrtest/l
+/opt/vattrtest/m
+/opt/vattrtest/r
+--noartifact
+/opt/vattrtest
+/opt/vattrtest/c
+/opt/vattrtest/cn
+/opt/vattrtest/d
+/opt/vattrtest/g
+/opt/vattrtest/l
+/opt/vattrtest/m
+/opt/vattrtest/r
+-A
+/opt/vattrtest/a
+-c
+/opt/vattrtest/c
+/opt/vattrtest/cn
+-d
+/opt/vattrtest/d
+-L
+/opt/vattrtest/l
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmquery.at:763"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_35
+#AT_START_36
+at_fn_group_banner 36 'rpmverify.at:7' \
+ "dependency problems" " " 4
+at_xfail=no
+(
+ $as_echo "36. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:9:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --nodeps /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -Va --nofiles
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:9"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --nodeps /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -Va --nofiles
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Unsatisfied dependencies for deptest-one-1.0-1.noarch:
+ deptest-two is needed by (installed) deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmverify.at:9"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_36
+#AT_START_37
+at_fn_group_banner 37 'rpmverify.at:32' \
+ "files with no problems" " " 4
+at_xfail=no
+(
+ $as_echo "37. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:34:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \\
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -Va --nodeps --nouser --nogroup
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:34"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -Va --nodeps --nouser --nogroup
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:34"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_37
+#AT_START_38
+at_fn_group_banner 38 'rpmverify.at:48' \
+ "files with no problems in verbose mode" " " 4
+at_xfail=no
+(
+ $as_echo "38. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:50:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \\
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -Vva --nodeps --nouser --nogroup
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:50"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -Vva --nodeps --nouser --nogroup
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "......... /usr/local/bin/hello
+......... /usr/share/doc/hello-1.0
+......... d /usr/share/doc/hello-1.0/FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_38
+#AT_START_39
+at_fn_group_banner 39 'rpmverify.at:67' \
+ "directory replaced with a directory symlink" " " 4
+at_xfail=no
+(
+ $as_echo "39. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:69:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype datadir\" \\
+ --define \"filedata README1\" \\
+ --define \"user \$(id -u -n)\" \\
+ --define \"grp \$(id -g -n)\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+mv \"\${RPMTEST}\"/opt/foo \"\${RPMTEST}\"/opt/was
+ln -s was \"\${RPMTEST}\"/opt/foo
+runroot rpm -Vv replacetest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:69"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ --define "user $(id -u -n)" \
+ --define "grp $(id -g -n)" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was
+ln -s was "${RPMTEST}"/opt/foo
+runroot rpm -Vv replacetest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "......... /opt/foo
+......... /opt/foo/README1
+......... /opt/goo
+......... /opt/zoo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_39
+#AT_START_40
+at_fn_group_banner 40 'rpmverify.at:98' \
+ "directory replaced with an invalid directory symlink" "" 4
+at_xfail=no
+(
+ $as_echo "40. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:100:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype datadir\" \\
+ --define \"filedata README1\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+mv \"\${RPMTEST}\"/opt/foo \"\${RPMTEST}\"/opt/was
+ln -s was \"\${RPMTEST}\"/opt/foo
+runroot rpm -Vv --nouser --nogroup replacetest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:100"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was
+ln -s was "${RPMTEST}"/opt/foo
+runroot rpm -Vv --nouser --nogroup replacetest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "....L.... /opt/foo
+......... /opt/foo/README1
+......... /opt/goo
+......... /opt/zoo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmverify.at:100"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_40
+#AT_START_41
+at_fn_group_banner 41 'rpmverify.at:128' \
+ "verify from db, with problems present" " " 4
+at_xfail=no
+(
+ $as_echo "41. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:130:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \\
+ /data/RPMS/hello-1.0-1.i386.rpm
+rm -f \"\${RPMTEST}\"/usr/share/doc/hello-1.0/FAQ
+chmod u-x \"\${RPMTEST}\"/usr/local/bin/hello
+dd if=/dev/zero of=\"\${RPMTEST}\"/usr/local/bin/hello \\
+ conv=notrunc bs=1 seek=5 count=6 2> /dev/null
+runroot rpm -Va --nodeps --nouser --nogroup
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:130"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
+ /data/RPMS/hello-1.0-1.i386.rpm
+rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ
+chmod u-x "${RPMTEST}"/usr/local/bin/hello
+dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \
+ conv=notrunc bs=1 seek=5 count=6 2> /dev/null
+runroot rpm -Va --nodeps --nouser --nogroup
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo ".M5....T. /usr/local/bin/hello
+missing d /usr/share/doc/hello-1.0/FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmverify.at:130"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_41
+#AT_START_42
+at_fn_group_banner 42 'rpmverify.at:150' \
+ "verify from package, with problems present" " " 4
+at_xfail=no
+(
+ $as_echo "42. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:152:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \\
+ /data/RPMS/hello-1.0-1.i386.rpm
+rm -f \"\${RPMTEST}\"/usr/share/doc/hello-1.0/FAQ
+chmod u-x \"\${RPMTEST}\"/usr/local/bin/hello
+dd if=/dev/zero of=\"\${RPMTEST}\"/usr/local/bin/hello \\
+ conv=notrunc bs=1 seek=5 count=6 2> /dev/null
+runroot rpm -Vp --nodeps --nouser --nogroup /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:152"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
+ /data/RPMS/hello-1.0-1.i386.rpm
+rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ
+chmod u-x "${RPMTEST}"/usr/local/bin/hello
+dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \
+ conv=notrunc bs=1 seek=5 count=6 2> /dev/null
+runroot rpm -Vp --nodeps --nouser --nogroup /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo ".M5....T. /usr/local/bin/hello
+missing d /usr/share/doc/hello-1.0/FAQ
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmverify.at:152"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_42
+#AT_START_43
+at_fn_group_banner 43 'rpmverify.at:171' \
+ "verify file attribute filtering" " " 4
+at_xfail=no
+(
+ $as_echo "43. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:173:
+runroot rpmbuild -bb --quiet \\
+ /data/SPECS/vattrtest.spec
+
+runroot rpm -U /build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm
+runroot_other touch /opt/vattrtest/g
+runroot_other chmod 644 /opt/vattrtest/g
+
+cmd=\"rpm -Vv --nouser --nogroup\"
+for filter in --noconfig --noghost --noartifact; do
+ echo \${filter}
+ runroot \${cmd} \${filter} vattrtest
+done
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmverify.at:173"
+( $at_check_trace;
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/vattrtest.spec
+
+runroot rpm -U /build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm
+runroot_other touch /opt/vattrtest/g
+runroot_other chmod 644 /opt/vattrtest/g
+
+cmd="rpm -Vv --nouser --nogroup"
+for filter in --noconfig --noghost --noartifact; do
+ echo ${filter}
+ runroot ${cmd} ${filter} vattrtest
+done
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "--noconfig
+......... /opt/vattrtest
+......... a /opt/vattrtest/a
+......... d /opt/vattrtest/d
+......... g /opt/vattrtest/g
+......... l /opt/vattrtest/l
+......... m /opt/vattrtest/m
+......... r /opt/vattrtest/r
+--noghost
+......... /opt/vattrtest
+......... a /opt/vattrtest/a
+......... c /opt/vattrtest/c
+......... c /opt/vattrtest/cn
+......... d /opt/vattrtest/d
+......... l /opt/vattrtest/l
+......... m /opt/vattrtest/m
+......... r /opt/vattrtest/r
+--noartifact
+......... /opt/vattrtest
+......... c /opt/vattrtest/c
+......... c /opt/vattrtest/cn
+......... d /opt/vattrtest/d
+......... g /opt/vattrtest/g
+......... l /opt/vattrtest/l
+......... m /opt/vattrtest/m
+......... r /opt/vattrtest/r
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_skip $at_status "$at_srcdir/rpmverify.at:173"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_43
+#AT_START_44
+at_fn_group_banner 44 'rpmverify.at:220' \
+ "verifyscript failure" " " 4
+at_xfail=no
+(
+ $as_echo "44. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:222:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+rm -rf \"\${TOPDIR}\"
+runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
+rm -f \"\${RPMTEST}\"/var/checkme
+runroot rpm -V --nodeps verifyscript
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:222"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+rm -rf "${TOPDIR}"
+runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
+rm -f "${RPMTEST}"/var/checkme
+runroot rpm -V --nodeps verifyscript
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmverify.at:222"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_44
+#AT_START_45
+at_fn_group_banner 45 'rpmverify.at:237' \
+ "verifyscript success" " " 4
+at_xfail=no
+(
+ $as_echo "45. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:239:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+rm -rf \"\${TOPDIR}\"
+runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
+touch \"\${RPMTEST}\"/var/checkme
+runroot rpm -V --nodeps verifyscript
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:239"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+rm -rf "${TOPDIR}"
+runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
+runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
+touch "${RPMTEST}"/var/checkme
+runroot rpm -V --nodeps verifyscript
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:239"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_45
+#AT_START_46
+at_fn_group_banner 46 'rpmverify.at:256' \
+ "shared file timestamp behavior" " " 4
+at_xfail=no
+(
+ $as_echo "46. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:258:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+# create packages sharing a file but with different timestamp
+for p in \"one\" \"two\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"pkg \$p\" \\
+ --define \"filedata same_stuff\" \\
+ /data/SPECS/conflicttest.spec
+ sleep 1
+done
+
+# first instance of a shared file is the one that actually gets created,
+# force the order so we know what to expect as these dont depend on each other
+runroot rpm -U --noorder /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+runroot rpm -e conflicttwo
+runroot rpm -Va --nouser --nogroup
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:258"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+# create packages sharing a file but with different timestamp
+for p in "one" "two"; do
+ runroot rpmbuild --quiet -bb \
+ --define "pkg $p" \
+ --define "filedata same_stuff" \
+ /data/SPECS/conflicttest.spec
+ sleep 1
+done
+
+# first instance of a shared file is the one that actually gets created,
+# force the order so we know what to expect as these dont depend on each other
+runroot rpm -U --noorder /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+runroot rpm -e conflicttwo
+runroot rpm -Va --nouser --nogroup
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_46
+#AT_START_47
+at_fn_group_banner 47 'rpmverify.at:285' \
+ "Upgraded verification with min_writes 1 (files)" "" 4
+at_xfail=no
+(
+ $as_echo "47. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:287:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${tf}\" \"\${tf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+done
+
+for v in \"3.0\" \"4.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype file\" \\
+ --define \"filedata fox\" \\
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+touch -t 201703171717 \${tf}
+
+runroot rpm -U \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat \"\${tf}\"
+
+runroot rpm -U \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat \"\${tf}\"
+
+echo \"xx\" > \"\${tf}\"
+cat \"\${tf}\"
+
+runroot rpm -U \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat \"\${tf}\"
+
+touch -t 201703171717 \${tf}
+
+runroot rpm -U --oldpackage \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:287"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+touch -t 201703171717 ${tf}
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+echo "xx" > "${tf}"
+cat "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+touch -t 201703171717 ${tf}
+
+runroot rpm -U --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+fox
+xx
+fox
+fox
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:287"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_47
+#AT_START_48
+at_fn_group_banner 48 'rpmverify.at:357' \
+ "Upgraded verification with min_writes 2 (files)" "" 4
+at_xfail=no
+(
+ $as_echo "48. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:359:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${tf}\" \"\${tf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+done
+
+for v in \"3.0\" \"4.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype file\" \\
+ --define \"filedata fox\" \\
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+touch -t 201703171717 \${tf}
+
+runroot rpm -Uvv --fsmdebug \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+cat \"\${tf}\"
+
+
+runroot rpm -Uvv --fsmdebug \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+cat \"\${tf}\"
+echo \"xx\" > \"\${tf}\"
+cat \"\${tf}\"
+
+runroot rpm -Uvv --fsmdebug \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+cat \"\${tf}\"
+
+touch -t 201703171717 \${tf}
+
+runroot rpm -U -Uvv --fsmdebug --oldpackage \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+cat \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:359"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+touch -t 201703171717 ${tf}
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+echo "xx" > "${tf}"
+cat "${tf}"
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+
+touch -t 201703171717 ${tf}
+
+runroot rpm -U -Uvv --fsmdebug --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+2
+foo
+1
+fox
+xx
+1
+fox
+2
+fox
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:359"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_48
+#AT_START_49
+at_fn_group_banner 49 'rpmverify.at:436' \
+ "Upgraded verification with min_writes 3 (LINKs)" "" 4
+at_xfail=no
+(
+ $as_echo "49. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:438:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${tf}\" \"\${tf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype link\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+done
+
+for v in \"3.0\" \"4.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype link\" \\
+ --define \"filedata fox\" \\
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+
+runroot rpm -U \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink \"\${tf}\"
+
+runroot rpm -U \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink \"\${tf}\"
+
+ln -sf \"xx\" \"\${tf}\"
+readlink \"\${tf}\"
+
+runroot rpm -U \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink \"\${tf}\"
+
+runroot rpm -U --oldpackage \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:438"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+ln -sf "xx" "${tf}"
+readlink "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+runroot rpm -U --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+fox
+xx
+fox
+fox
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:438"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_49
+#AT_START_50
+at_fn_group_banner 50 'rpmverify.at:503' \
+ "Upgraded verification with min_writes 4 (LINKs)" "" 4
+at_xfail=no
+(
+ $as_echo "50. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmverify.at:505:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${tf}\" \"\${tf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype link\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+done
+
+for v in \"3.0\" \"4.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filetype link\" \\
+ --define \"filedata fox\" \\
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+
+runroot rpm -Uvv --fsmdebug \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+readlink \"\${tf}\"
+
+
+runroot rpm -Uvv --fsmdebug \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+readlink \"\${tf}\"
+ln -sf \"xx\" \"\${tf}\"
+readlink \"\${tf}\"
+
+runroot rpm -Uvv --fsmdebug \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+readlink \"\${tf}\"
+
+runroot rpm -U -Uvv --fsmdebug --oldpackage \\
+ --define \"_minimize_writes 1\" \\
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c \"touch\" output.txt
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmverify.at:505"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+ln -sf "xx" "${tf}"
+readlink "${tf}"
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+
+runroot rpm -U -Uvv --fsmdebug --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+2
+foo
+1
+fox
+xx
+1
+fox
+2
+fox
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmverify.at:505"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_50
+#AT_START_51
+at_fn_group_banner 51 'rpmsigdig.at:7' \
+ "rpmkeys -Kv <unsigned> 1" " " 5
+at_xfail=no
+(
+ $as_echo "51. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:9:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64.rpm /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:9"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64.rpm /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/data/RPMS/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: OK
+/data/RPMS/hello-1.0-1.i386.rpm:
+ Header SHA1 digest: OK
+ MD5 digest: OK
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:9"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_51
+#AT_START_52
+at_fn_group_banner 52 'rpmsigdig.at:31' \
+ "rpmkeys -Kv <corrupted unsigned> 1" " " 5
+at_xfail=no
+(
+ $as_echo "52. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:33:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+pkg=\"hello-2.0-1.x86_64.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+# conv=notrunc bs=1 seek=261 count=6 2> /dev/null
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=333 count=4 2> /dev/null
+runroot rpmkeys -Kv /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:33"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+# conv=notrunc bs=1 seek=261 count=6 2> /dev/null
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=333 count=4 2> /dev/null
+runroot rpmkeys -Kv /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/tmp/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: BAD (Expected 007ca1d8b35cca02a1854ba301c5432e != 137ca1d8b35cca02a1854ba301c5432e)
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmsigdig.at:33"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_52
+#AT_START_53
+at_fn_group_banner 53 'rpmsigdig.at:56' \
+ "rpmkeys -Kv <corrupted unsigned> 2" " " 5
+at_xfail=no
+(
+ $as_echo "53. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:58:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+pkg=\"hello-2.0-1.x86_64.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+runroot rpmkeys -Kv /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:58"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+runroot rpmkeys -Kv /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/tmp/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+ Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+ Payload SHA256 digest: OK
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != de65519eeb4ab52eb076ec054d42e34e)
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmsigdig.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_53
+#AT_START_54
+at_fn_group_banner 54 'rpmsigdig.at:81' \
+ "rpmkeys -Kv <corrupted unsigned> 3" " " 5
+at_xfail=no
+(
+ $as_echo "54. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:83:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+pkg=\"hello-2.0-1.x86_64.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=7777 count=6 2> /dev/null
+runroot rpmkeys -Kv /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:83"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=7777 count=6 2> /dev/null
+runroot rpmkeys -Kv /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/tmp/hello-2.0-1.x86_64.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: BAD (Expected 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c != bea903609dceac36e1f26a983c493c98064d320fdfeb423034ed63d649b2c8dc)
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != d662cd0d81601a7107312684ad1ddf38)
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmsigdig.at:83"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_54
+#AT_START_55
+at_fn_group_banner 55 'rpmsigdig.at:106' \
+ "rpmkeys -Kv <unsigned> 2" " " 5
+at_xfail=no
+(
+ $as_echo "55. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:108:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild -bb --quiet \\
+ --define \"%optflags -O2 -g\" \\
+ --define \"%_target_platform noarch-linux\" \\
+ --define \"%_binary_payload w.ufdio\" \\
+ --define \"%_buildhost localhost\" \\
+ --define \"%source_date_epoch_from_changelog 1\" \\
+ --define \"%clamp_mtime_to_source_date_epoch 1\" \\
+ /data/SPECS/attrtest.spec
+runroot rpmkeys -Kv /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:108"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild -bb --quiet \
+ --define "%optflags -O2 -g" \
+ --define "%_target_platform noarch-linux" \
+ --define "%_binary_payload w.ufdio" \
+ --define "%_buildhost localhost" \
+ --define "%source_date_epoch_from_changelog 1" \
+ --define "%clamp_mtime_to_source_date_epoch 1" \
+ /data/SPECS/attrtest.spec
+runroot rpmkeys -Kv /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/build/RPMS/noarch/attrtest-1.0-1.noarch.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: OK
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:108"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_55
+#AT_START_56
+at_fn_group_banner 56 'rpmsigdig.at:135' \
+ "rpmkeys --import rsa" " " 5
+at_xfail=no
+(
+ $as_echo "56. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:137:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpm -qi gpg-pubkey-1964c5fc-58e63918|grep -v Date|grep -v Version:
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:137"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpm -qi gpg-pubkey-1964c5fc-58e63918|grep -v Date|grep -v Version:
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Name : gpg-pubkey
+Version : 1964c5fc
+Release : 58e63918
+Architecture: (none)
+Group : Public Keys
+Size : 0
+License : pubkey
+Signature : (none)
+Source RPM : (none)
+Build Host : localhost
+Relocations : (not relocatable)
+Packager : rpm.org RSA testkey <rsa@rpm.org>
+Summary : gpg(rpm.org RSA testkey <rsa@rpm.org>)
+Description :
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFjmORgBCAC7TMEk6wnjSs8Dr4yqSScWdU2pjcqrkTxuzdWvowcIUPZI0w/g
+HkRqGd4apjvY2V15kjL10gk3QhFP3pZ/9p7zh8o8NHX7aGdSGDK7NOq1eFaErPRY
+91LW9RiZ0lbOjXEzIL0KHxUiTQEmdXJT43DJMFPyW9fkCWg0OltiX618FUdWWfI8
+eySdLur1utnqBvdEbCUvWK2RX3vQZQdvEBODnNk2pxqTyV0w6VPQ96W++lF/5Aas
+7rUv3HIyIXxIggc8FRrnH+y9XvvHDonhTIlGnYZN4ubm9i4y3gOkrZlGTrEw7elQ
+1QeMyG2QQEbze8YjpTm4iLABCBrRfPRaQpwrABEBAAG0IXJwbS5vcmcgUlNBIHRl
+c3RrZXkgPHJzYUBycG0ub3JnPokBNwQTAQgAIQUCWOY5GAIbAwULCQgHAgYVCAkK
+CwIEFgIDAQIeAQIXgAAKCRBDRFkeGWTF/MxxCACnjqFL+MmPh9W9JQKT2DcLbBzf
+Cqo6wcEBoCOcwgRSk8dSikhARoteoa55JRJhuMyeKhhEAogE9HRmCPFdjezFTwgB
+BDVBpO2dZ023mLXDVCYX3S8pShOgCP6Tn4wqCnYeAdLcGg106N4xcmgtcssJE+Pr
+XzTZksbZsrTVEmL/Ym+R5w5jBfFnGk7Yw7ndwfQsfNXQb5AZynClFxnX546lcyZX
+fEx3/e6ezw57WNOUK6WT+8b+EGovPkbetK/rGxNXuWaP6X4A/QUm8O98nCuHYFQq
++mvNdsCBqGf7mhaRGtpHk/JgCn5rFvArMDqLVrR9hX0LdCSsH7EGE+bR3r7wuQEN
+BFjmORgBCACk+vDZrIXQuFXEYToZVwb2attzbbJJCqD71vmZTLsW0QxuPKRgbcYY
+zp4K4lVBnHhFrF8MOUOxJ7kQWIJZMZFt+BDcptCYurbD2H4W2xvnWViiC+LzCMzz
+iMJT6165uefL4JHTDPxC2fFiM9yrc72LmylJNkM/vepT128J5Qv0gRUaQbHiQuS6
+Dm/+WRnUfx3i89SV4mnBxb/Ta93GVqoOciWwzWSnwEnWYAvOb95JL4U7c5J5f/+c
+KnQDHsW7sIiIdscsWzvgf6qs2Ra1Zrt7Fdk4+ZS2f/adagLhDO1C24sXf5XfMk5m
+L0OGwZSr9m5s17VXxfspgU5ugc8kBJfzABEBAAGJAR8EGAEIAAkFAljmORgCGwwA
+CgkQQ0RZHhlkxfzwDQf/Y5on5o+s/xD3tDyRYa6SErfT44lEArdCD7Yi+cygJFox
+3jyM8ovtJAkwRegwyxcaLN7zeG1p1Sk9ZAYWQEJT6qSU4Ppu+CVGHgxgnTcfUiu6
+EZZQE6srvua53IMY1lT50M7vx0T5VicHFRWBFV2C/Mc32p7cEE6nn45nEZgUXQNl
+ySEyvoRlsAJq6gFsfqucVz2vMJDTMVczUtq1CjvUqFbif8JVL36EoZCf1SeRw6d6
+s1Kp3AA33Rjd+Uw87HJ4EIB75zMFQX2H0ggAVdYTQcqGXHP5MZK1jJrHfxJyMi3d
+UNW2iqnN3BA7guhOv6OMiROF1+I7Q5nWT63mQC7IgQ==
+=Z6nu
+-----END PGP PUBLIC KEY BLOCK-----
+
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_56
+#AT_START_57
+at_fn_group_banner 57 'rpmsigdig.at:196' \
+ "rpmkeys -K <signed> 1" " " 5
+at_xfail=no
+(
+ $as_echo "57. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:198:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmkeys -K /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -K /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:198"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys -K /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -K /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/data/RPMS/hello-2.0-1.x86_64-signed.rpm: digests SIGNATURES NOT OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm: digests signatures OK
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:198"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_57
+#AT_START_58
+at_fn_group_banner 58 'rpmsigdig.at:216' \
+ "rpmkeys -Kv <signed> 1" " " 5
+at_xfail=no
+(
+ $as_echo "58. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:218:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys -Kv --nodigest /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys -Kv --nosignature /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:218"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys -Kv --nodigest /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+runroot rpmkeys -Kv --nosignature /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ MD5 digest: OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ MD5 digest: OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+/data/RPMS/hello-2.0-1.x86_64-signed.rpm:
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ MD5 digest: OK
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:218"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_58
+#AT_START_59
+at_fn_group_banner 59 'rpmsigdig.at:258' \
+ "rpmkeys -Kv <corrupted signed> 1" " " 5
+at_xfail=no
+(
+ $as_echo "59. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:260:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+pkg=\"hello-2.0-1.x86_64-signed.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=264 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/\${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:260"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=264 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header signature: BAD (package tag 268: invalid OpenPGP signature)
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ MD5 digest: OK
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header signature: BAD (package tag 268: invalid OpenPGP signature)
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ MD5 digest: OK
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmsigdig.at:260"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_59
+#AT_START_60
+at_fn_group_banner 60 'rpmsigdig.at:294' \
+ "rpmkeys -Kv <corrupted signed> 2" " " 5
+at_xfail=no
+(
+ $as_echo "60. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:296:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+pkg=\"hello-2.0-1.x86_64-signed.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/\${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:296"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+ Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != de65519eeb4ab52eb076ec054d42e34e)
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+ Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+ Payload SHA256 digest: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != de65519eeb4ab52eb076ec054d42e34e)
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmsigdig.at:296"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_60
+#AT_START_61
+at_fn_group_banner 61 'rpmsigdig.at:331' \
+ "rpmkeys -Kv <corrupted signed> 3" " " 5
+at_xfail=no
+(
+ $as_echo "61. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:333:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+pkg=\"hello-2.0-1.x86_64-signed.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=7777 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/\${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:333"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=7777 count=6 2> /dev/null
+
+runroot rpmkeys -Kv /tmp/${pkg}
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: BAD (Expected 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c != bea903609dceac36e1f26a983c493c98064d320fdfeb423034ed63d649b2c8dc)
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != d662cd0d81601a7107312684ad1ddf38)
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ Header SHA1 digest: OK
+ Header SHA256 digest: OK
+ Payload SHA256 digest: BAD (Expected 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c != bea903609dceac36e1f26a983c493c98064d320fdfeb423034ed63d649b2c8dc)
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+ MD5 digest: BAD (Expected 137ca1d8b35cca02a1854ba301c5432e != d662cd0d81601a7107312684ad1ddf38)
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmsigdig.at:333"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_61
+#AT_START_62
+at_fn_group_banner 62 'rpmsigdig.at:368' \
+ "rpmsign --addsign <unsigned>" " " 5
+at_xfail=no
+(
+ $as_echo "62. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:370:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+cp \"\${RPMTEST}\"/data/RPMS/hello-2.0-1.x86_64.rpm \"\${RPMTEST}\"/tmp/
+run rpmsign --key-id 1964C5FC --addsign \"\${RPMTEST}\"/tmp/hello-2.0-1.x86_64.rpm > /dev/null
+echo PRE-IMPORT
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+echo POST-IMPORT
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+run rpmsign --delsign \"\${RPMTEST}\"/tmp/hello-2.0-1.x86_64.rpm > /dev/null
+echo POST-DELSIGN
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:370"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+cp "${RPMTEST}"/data/RPMS/hello-2.0-1.x86_64.rpm "${RPMTEST}"/tmp/
+run rpmsign --key-id 1964C5FC --addsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64.rpm > /dev/null
+echo PRE-IMPORT
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+echo POST-IMPORT
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+run rpmsign --delsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64.rpm > /dev/null
+echo POST-DELSIGN
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64.rpm|grep -v digest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "PRE-IMPORT
+/tmp/hello-2.0-1.x86_64.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+POST-IMPORT
+/tmp/hello-2.0-1.x86_64.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: OK
+POST-DELSIGN
+/tmp/hello-2.0-1.x86_64.rpm:
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:370"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_62
+#AT_START_63
+at_fn_group_banner 63 'rpmsigdig.at:403' \
+ "rpmsign --delsign <package>" " " 5
+at_xfail=no
+(
+ $as_echo "63. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:405:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+cp \"\${RPMTEST}\"/data/RPMS/hello-2.0-1.x86_64-signed.rpm \"\${RPMTEST}\"/tmp/
+echo PRE-DELSIGN
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64-signed.rpm|grep -v digest
+echo POST-DELSIGN
+run rpmsign --delsign \"\${RPMTEST}\"/tmp/hello-2.0-1.x86_64-signed.rpm > /dev/null
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64-signed.rpm|grep -v digest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:405"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+cp "${RPMTEST}"/data/RPMS/hello-2.0-1.x86_64-signed.rpm "${RPMTEST}"/tmp/
+echo PRE-DELSIGN
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64-signed.rpm|grep -v digest
+echo POST-DELSIGN
+run rpmsign --delsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64-signed.rpm > /dev/null
+runroot rpmkeys -Kv /tmp/hello-2.0-1.x86_64-signed.rpm|grep -v digest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "PRE-DELSIGN
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+ Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+ V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+POST-DELSIGN
+/tmp/hello-2.0-1.x86_64-signed.rpm:
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:405"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_63
+#AT_START_64
+at_fn_group_banner 64 'rpmsigdig.at:430' \
+ "rpmsign --addsign <signed>" " " 5
+at_xfail=no
+(
+ $as_echo "64. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmsigdig.at:432:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+cp \"\${RPMTEST}\"/data/RPMS/hello-2.0-1.x86_64-signed.rpm \"\${RPMTEST}\"/tmp/
+run rpmsign --key-id 1964C5FC --addsign \"\${RPMTEST}\"/tmp/hello-2.0-1.x86_64-signed.rpm 2>&1 |grep -q \"already contains identical signature, skipping\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmsigdig.at:432"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+cp "${RPMTEST}"/data/RPMS/hello-2.0-1.x86_64-signed.rpm "${RPMTEST}"/tmp/
+run rpmsign --key-id 1964C5FC --addsign "${RPMTEST}"/tmp/hello-2.0-1.x86_64-signed.rpm 2>&1 |grep -q "already contains identical signature, skipping"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmsigdig.at:432"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_64
+#AT_START_65
+at_fn_group_banner 65 'rpmdb.at:23' \
+ "rpm --initdb" " " 6
+at_xfail=no
+(
+ $as_echo "65. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:25:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:25"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:25"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_65
+#AT_START_66
+at_fn_group_banner 66 'rpmdb.at:36' \
+ "rpm -qa" " " 6
+at_xfail=no
+(
+ $as_echo "66. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:38:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+runroot rpm \\
+ -qa
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:38"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+runroot rpm \
+ -qa
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:38"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_66
+#AT_START_67
+at_fn_group_banner 67 'rpmdb.at:49' \
+ "rpm -q foo" " " 6
+at_xfail=no
+(
+ $as_echo "67. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:51:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ /data/RPMS/foo-1.0-1.noarch.rpm
+
+runroot rpm -q foo
+
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:51"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ /data/RPMS/foo-1.0-1.noarch.rpm
+
+runroot rpm -q foo
+
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:51"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_67
+#AT_START_68
+at_fn_group_banner 68 'rpmdb.at:69' \
+ "rpm -q foo-" " " 6
+at_xfail=no
+(
+ $as_echo "68. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:71:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ /data/RPMS/foo-1.0-1.noarch.rpm
+
+runroot rpm -q foo-
+
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:71"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ /data/RPMS/foo-1.0-1.noarch.rpm
+
+runroot rpm -q foo-
+
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "package foo- is not installed
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdb.at:71"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_68
+#AT_START_69
+at_fn_group_banner 69 'rpmdb.at:90' \
+ "rpm -i *.noarch.rpm" " " 6
+at_xfail=no
+(
+ $as_echo "69. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:93:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ /data/RPMS/foo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:93"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ /data/RPMS/foo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:93"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_69
+#AT_START_70
+at_fn_group_banner 70 'rpmdb.at:106' \
+ "rpm -U --replacepkgs 1" " " 6
+at_xfail=no
+(
+ $as_echo "70. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:109:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+tpkg=\"/data/RPMS/foo-1.0-1.noarch.rpm\"
+
+runroot rpm -i \"\${tpkg}\" &&
+ runroot rpm -U --replacepkgs \"\${tpkg}\" &&
+ runroot rpm -qa
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:109"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+tpkg="/data/RPMS/foo-1.0-1.noarch.rpm"
+
+runroot rpm -i "${tpkg}" &&
+ runroot rpm -U --replacepkgs "${tpkg}" &&
+ runroot rpm -qa
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:109"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_70
+#AT_START_71
+at_fn_group_banner 71 'rpmdb.at:128' \
+ "rpm -U --replacepkgs 2" " " 6
+at_xfail=no
+ test $RPM_XFAIL -ne 0 && at_xfail=yes
+(
+ $as_echo "71. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:131:
+
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+tpkg=\"/data/RPMS/hello-2.0-1.i686.rpm\"
+
+runroot rpm -U --nodeps --ignorearch \"\${tpkg}\" &&
+ runroot rpm -U --nodeps --ignorearch --nodocs --replacepkgs \"\${tpkg}\" &&
+ runroot rpm -e hello
+test -d \"\${RPMTEST}\"/usr/share/doc/hello-2.0
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:131"
+( $at_check_trace;
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+tpkg="/data/RPMS/hello-2.0-1.i686.rpm"
+
+runroot rpm -U --nodeps --ignorearch "${tpkg}" &&
+ runroot rpm -U --nodeps --ignorearch --nodocs --replacepkgs "${tpkg}" &&
+ runroot rpm -e hello
+test -d "${RPMTEST}"/usr/share/doc/hello-2.0
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdb.at:131"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_71
+#AT_START_72
+at_fn_group_banner 72 'rpmdb.at:150' \
+ "rpm --reinstall 1" " " 6
+at_xfail=no
+(
+ $as_echo "72. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:153:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+tpkg=\"/data/RPMS/hello-2.0-1.i686.rpm\"
+
+runroot rpm -U --nodeps --ignorearch \"\${tpkg}\" &&
+ runroot rpm --reinstall --nodeps --ignorearch --nodocs \"\${tpkg}\" &&
+ runroot rpm -e hello
+test -d \"\${RPMTEST}\"/usr/share/doc/hello-2.0
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:153"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+tpkg="/data/RPMS/hello-2.0-1.i686.rpm"
+
+runroot rpm -U --nodeps --ignorearch "${tpkg}" &&
+ runroot rpm --reinstall --nodeps --ignorearch --nodocs "${tpkg}" &&
+ runroot rpm -e hello
+test -d "${RPMTEST}"/usr/share/doc/hello-2.0
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdb.at:153"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_72
+#AT_START_73
+at_fn_group_banner 73 'rpmdb.at:173' \
+ "rpm -i --relocate=.. *.i386.rpm" " " 6
+at_xfail=no
+(
+ $as_echo "73. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:175:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ --noscripts --nodeps --ignorearch --relocate=/usr=/check \\
+ /data/RPMS/hello-1.0-1.i386.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:175"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ --noscripts --nodeps --ignorearch --relocate=/usr=/check \
+ /data/RPMS/hello-1.0-1.i386.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:175"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_73
+#AT_START_74
+at_fn_group_banner 74 'rpmdb.at:192' \
+ "rpm -i --relocate=.. *.ppc64.rpm" " " 6
+at_xfail=no
+(
+ $as_echo "74. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:194:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ --noscripts --nodeps --ignorearch --relocate=/usr=/check \\
+ /data/RPMS/hello-1.0-1.ppc64.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:194"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ --noscripts --nodeps --ignorearch --relocate=/usr=/check \
+ /data/RPMS/hello-1.0-1.ppc64.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:194"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_74
+#AT_START_75
+at_fn_group_banner 75 'rpmdb.at:208' \
+ "rpmdb --rebuilddb" " " 6
+at_xfail=no
+(
+ $as_echo "75. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:210:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --noscripts --nodeps --ignorearch \\
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -qa --qf \"%{nevra} %{dbinstance}\\n\"
+runroot rpm -U --noscripts --nodeps --ignorearch \\
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -qa --qf \"%{nevra} %{dbinstance}\\n\"
+runroot rpmdb --rebuilddb
+runroot rpm -qa --qf \"%{nevra} %{dbinstance}\\n\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:210"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --noscripts --nodeps --ignorearch \
+ /data/RPMS/hello-1.0-1.i386.rpm
+runroot rpm -qa --qf "%{nevra} %{dbinstance}\n"
+runroot rpm -U --noscripts --nodeps --ignorearch \
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -qa --qf "%{nevra} %{dbinstance}\n"
+runroot rpmdb --rebuilddb
+runroot rpm -qa --qf "%{nevra} %{dbinstance}\n"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello-1.0-1.i386 1
+hello-2.0-1.i686 2
+hello-2.0-1.i686 1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:210"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_75
+#AT_START_76
+at_fn_group_banner 76 'rpmdb.at:233' \
+ "rpmdb --rebuilddb and verify empty database" " " 6
+at_xfail=no
+(
+ $as_echo "76. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:235:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+runroot rpmdb --rebuilddb
+runroot rpmdb --verifydb
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:235"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+runroot rpmdb --rebuilddb
+runroot rpmdb --verifydb
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:235"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_76
+#AT_START_77
+at_fn_group_banner 77 'rpmdb.at:248' \
+ "rpm -U and verify status" " " 6
+at_xfail=no
+(
+ $as_echo "77. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:250:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg status\" \\
+ --define \"filedata same_stuff\" \\
+ /data/SPECS/conflicttest.spec
+
+runroot rpm -U /build/RPMS/noarch/conflictstatus-1.0-1.noarch.rpm
+runroot rpm -qls conflictstatus
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:250"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg status" \
+ --define "filedata same_stuff" \
+ /data/SPECS/conflicttest.spec
+
+runroot rpm -U /build/RPMS/noarch/conflictstatus-1.0-1.noarch.rpm
+runroot rpm -qls conflictstatus
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal /usr/share/my.version
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:250"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_77
+#AT_START_78
+at_fn_group_banner 78 'rpmdb.at:271' \
+ "rpm -U with _install_lang and verify status" " " 6
+at_xfail=no
+(
+ $as_echo "78. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:273:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ /data/SPECS/flangtest.spec
+
+runroot rpm -U --define \"_install_langs de:fi\" /build/RPMS/noarch/flangtest-1.0-1.noarch.rpm
+runroot rpm -qls flangtest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:273"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ /data/SPECS/flangtest.spec
+
+runroot rpm -U --define "_install_langs de:fi" /build/RPMS/noarch/flangtest-1.0-1.noarch.rpm
+runroot rpm -qls flangtest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal /usr/share/flangtest/de.txt
+normal /usr/share/flangtest/empty.txt
+not installed /usr/share/flangtest/en.txt
+normal /usr/share/flangtest/fi.txt
+normal /usr/share/flangtest/none.txt
+not installed /usr/share/flangtest/pl.txt
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:273"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_78
+#AT_START_79
+at_fn_group_banner 79 'rpmdb.at:297' \
+ "rpm -U and verify files on disk" " " 6
+at_xfail=no
+(
+ $as_echo "79. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:299:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+rm -rf \"\${RPMTEST}\"/opt/*
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+find \"\${RPMTEST}\"/opt | wc -l
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:299"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+rm -rf "${RPMTEST}"/opt/*
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+find "${RPMTEST}"/opt | wc -l
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "6
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:299"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_79
+#AT_START_80
+at_fn_group_banner 80 'rpmdb.at:318' \
+ "rpm -e and verify files removed" " " 6
+at_xfail=no
+(
+ $as_echo "80. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdb.at:320:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+rm -rf \"\${RPMTEST}\"/opt/*
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+runroot rpm -e selfconflict
+find \"\${RPMTEST}\"/opt | wc -l
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdb.at:320"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+rm -rf "${RPMTEST}"/opt/*
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+runroot rpm -e selfconflict
+find "${RPMTEST}"/opt | wc -l
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdb.at:320"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_80
+#AT_START_81
+at_fn_group_banner 81 'rpmi.at:21' \
+ "rpm -U <manifest>" " " 7
+at_xfail=no
+(
+ $as_echo "81. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:23:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+echo /data/RPMS/hello-2.0-1.x86_64.rpm > \${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /tmp/test.mft
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:23"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+echo /data/RPMS/hello-2.0-1.x86_64.rpm > ${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/test.mft
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:23"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_81
+#AT_START_82
+at_fn_group_banner 82 'rpmi.at:36' \
+ "rpm -U <manifest notfound 1>" " " 7
+at_xfail=no
+(
+ $as_echo "82. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:38:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+echo /data/RPMS/hello-2.0-1.x86_64.rpm > \${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /tmp/test-not-there.mft
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:38"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+echo /data/RPMS/hello-2.0-1.x86_64.rpm > ${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/test-not-there.mft
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: open of /tmp/test-not-there.mft failed: No such file or directory
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:38"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_82
+#AT_START_83
+at_fn_group_banner 83 'rpmi.at:52' \
+ "rpm -U <manifest notfound 2>" " " 7
+at_xfail=no
+(
+ $as_echo "83. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:54:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+echo /data/RPMS/hello-not-there-2.0-1.x86_64.rpm > \${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /tmp/test.mft
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:54"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+echo /data/RPMS/hello-not-there-2.0-1.x86_64.rpm > ${RPMTEST}/tmp/test.mft
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/test.mft
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: open of /data/RPMS/hello-not-there-2.0-1.x86_64.rpm failed: No such file or directory
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:54"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_83
+#AT_START_84
+at_fn_group_banner 84 'rpmi.at:68' \
+ "rpm -U <notfound>" " " 7
+at_xfail=no
+(
+ $as_echo "84. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:70:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /data/RPMS/hello-not-there-2.0-1.x86_64.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:70"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-not-there-2.0-1.x86_64.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: open of /data/RPMS/hello-not-there-2.0-1.x86_64.rpm failed: No such file or directory
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:70"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_84
+#AT_START_85
+at_fn_group_banner 85 'rpmi.at:83' \
+ "rpm -U <unsigned>" " " 7
+at_xfail=no
+(
+ $as_echo "85. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:85:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:85"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:85"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_85
+#AT_START_86
+at_fn_group_banner 86 'rpmi.at:97' \
+ "rpm -U <signed nokey>" " " 7
+at_xfail=no
+(
+ $as_echo "86. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:99:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:99"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /data/RPMS/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:99"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_86
+#AT_START_87
+at_fn_group_banner 87 'rpmi.at:112' \
+ "rpm -U <signed>" " " 7
+at_xfail=no
+(
+ $as_echo "87. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:114:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:114"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /data/RPMS/hello-2.0-1.x86_64-signed.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:114"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_87
+#AT_START_88
+at_fn_group_banner 88 'rpmi.at:127' \
+ "rpm -U <corrupted signed 1>" " " 7
+at_xfail=no
+(
+ $as_echo "88. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:129:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+pkg=\"hello-2.0-1.x86_64-signed.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=264 count=2 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:129"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=264 count=2 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header signature: BAD (package tag 268: invalid OpenPGP signature)
+error: /tmp/hello-2.0-1.x86_64-signed.rpm cannot be installed
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:129"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_88
+#AT_START_89
+at_fn_group_banner 89 'rpmi.at:148' \
+ "rpm -U <corrupted signed 2>" " " 7
+at_xfail=no
+(
+ $as_echo "89. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:150:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+pkg=\"hello-2.0-1.x86_64-signed.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:150"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=5555 count=6 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: BAD
+error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header SHA1 digest: BAD (Expected 5cd9874c510b67b44483f9e382a1649ef7743bac != 4261b2c1eb861a4152c2239bce20bfbcaa8971ba)
+error: /tmp/hello-2.0-1.x86_64-signed.rpm: Header SHA256 digest: BAD (Expected ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 != 29fdfe92782fb0470a9a164a6c94af87d3b138c63b39d4c30e0223ca1202ba82)
+error: /tmp/hello-2.0-1.x86_64-signed.rpm cannot be installed
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:150"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_89
+#AT_START_90
+at_fn_group_banner 90 'rpmi.at:173' \
+ "rpm -U <corrupted signed 3>" " " 7
+at_xfail=no
+(
+ $as_echo "90. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:175:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+pkg=\"hello-2.0-1.x86_64-signed.rpm\"
+cp \"\${RPMTEST}\"/data/RPMS/\${pkg} \"\${RPMTEST}\"/tmp/\${pkg}
+dd if=/dev/zero of=\"\${RPMTEST}\"/tmp/\${pkg} \\
+ conv=notrunc bs=1 seek=7788 count=6 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \\
+ /tmp/\${pkg}
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:175"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+pkg="hello-2.0-1.x86_64-signed.rpm"
+cp "${RPMTEST}"/data/RPMS/${pkg} "${RPMTEST}"/tmp/${pkg}
+dd if=/dev/zero of="${RPMTEST}"/tmp/${pkg} \
+ conv=notrunc bs=1 seek=7788 count=6 2> /dev/null
+
+runroot rpm -U --ignorearch --ignoreos --nodeps \
+ /tmp/${pkg}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /tmp/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY
+error: unpacking of archive failed: cpio: Bad magic
+error: hello-2.0-1.x86_64: install failed
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:175"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_90
+#AT_START_91
+at_fn_group_banner 91 'rpmi.at:197' \
+ "rpm -U *.src.rpm" " " 7
+at_xfail=no
+(
+ $as_echo "91. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:199:
+rm -rf \${TOPDIR}
+
+runroot rpm \\
+ -U /data/SRPMS/hello-1.0-1.src.rpm
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmi.at:199"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+runroot rpm \
+ -U /data/SRPMS/hello-1.0-1.src.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:199"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_91
+#AT_START_92
+at_fn_group_banner 92 'rpmi.at:212' \
+ "rpm -i *.src.rpm" " " 7
+at_xfail=no
+(
+ $as_echo "92. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:214:
+rm -rf \${TOPDIR}
+
+runroot rpm \\
+ -i /data/SRPMS/hello-1.0-1.src.rpm
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmi.at:214"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+runroot rpm \
+ -i /data/SRPMS/hello-1.0-1.src.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:214"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_92
+#AT_START_93
+at_fn_group_banner 93 'rpmi.at:228' \
+ "rpm -i <nonexistent file>" " " 7
+at_xfail=no
+(
+ $as_echo "93. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:230:
+runroot rpm \\
+ -i no_such_file
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmi.at:230"
+( $at_check_trace;
+runroot rpm \
+ -i no_such_file
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:230"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_93
+#AT_START_94
+at_fn_group_banner 94 'rpmi.at:240' \
+ "rpm -i --nomanifest <garbage text file>" " " 7
+at_xfail=no
+(
+ $as_echo "94. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:242:
+junk=\"\${RPMTEST}/textfile\"
+cat << EOF > \"\${junk}\"
+no_such.file
+not_an.rpm
+EOF
+
+runroot rpm \\
+ -Uvv --nomanifest /textfile
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmi.at:242"
+( $at_check_trace;
+junk="${RPMTEST}/textfile"
+cat << EOF > "${junk}"
+no_such.file
+not_an.rpm
+EOF
+
+runroot rpm \
+ -Uvv --nomanifest /textfile
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:242"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_94
+#AT_START_95
+at_fn_group_banner 95 'rpmi.at:257' \
+ "rpm -i <garbage text file" " " 7
+at_xfail=no
+(
+ $as_echo "95. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:259:
+junk=\"\${RPMTEST}/not_an.rpm\"
+cat << EOF > \"\${junk}\"
+no_such.file
+not_pkg.rpm
+EOF
+
+runroot rpm \\
+ -Uvv /not_an.rpm
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmi.at:259"
+( $at_check_trace;
+junk="${RPMTEST}/not_an.rpm"
+cat << EOF > "${junk}"
+no_such.file
+not_pkg.rpm
+EOF
+
+runroot rpm \
+ -Uvv /not_an.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 2 $at_status "$at_srcdir/rpmi.at:259"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_95
+#AT_START_96
+at_fn_group_banner 96 'rpmi.at:276' \
+ "rpm -U upgrade to newer" " " 7
+at_xfail=no
+(
+ $as_echo "96. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:277:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ /data/SPECS/versiontest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -q versiontest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:277"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ /data/SPECS/versiontest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -q versiontest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "versiontest-2.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:277"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_96
+#AT_START_97
+at_fn_group_banner 97 'rpmi.at:299' \
+ "rpm -U upgrade to older" " " 7
+at_xfail=no
+(
+ $as_echo "97. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:300:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:300"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " package versiontest-2.0-1.noarch (which is newer than versiontest-1.0-1.noarch) is already installed
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmi.at:300"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_97
+#AT_START_98
+at_fn_group_banner 98 'rpmi.at:314' \
+ "rpm -U --oldpackage downgrade" " " 7
+at_xfail=no
+(
+ $as_echo "98. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:315:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -q versiontest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:315"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -U --oldpackage /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -q versiontest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "versiontest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:315"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_98
+#AT_START_99
+at_fn_group_banner 99 'rpmi.at:330' \
+ "rpm -U two versions of same package 1" " " 7
+at_xfail=no
+(
+ $as_echo "99. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:331:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -Uv \\
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -q versiontest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:331"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -Uv \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -q versiontest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: package versiontest-1.0-1.noarch was already added, replacing with versiontest-2.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Preparing packages...
+versiontest-2.0-1.noarch
+versiontest-2.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:331"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_99
+#AT_START_100
+at_fn_group_banner 100 'rpmi.at:350' \
+ "rpm -U two versions of same package 2" " " 7
+at_xfail=no
+(
+ $as_echo "100. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:351:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -Uv \\
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -q versiontest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:351"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -Uv \
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -q versiontest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: package versiontest-2.0-1.noarch was already added, skipping versiontest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Preparing packages...
+versiontest-2.0-1.noarch
+versiontest-2.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:351"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_100
+#AT_START_101
+at_fn_group_banner 101 'rpmi.at:370' \
+ "rpm -U obsoleted package 1" " " 7
+at_xfail=no
+(
+ $as_echo "101. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:371:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"obs deptest-two\" \\
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+
+runroot rpm -Uv \\
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -q deptest-one
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:371"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "obs deptest-two" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+
+runroot rpm -Uv \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -q deptest-one
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: package deptest-two-1.0-1.noarch was already added, replacing with deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Preparing packages...
+deptest-one-1.0-1.noarch
+deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:371"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_101
+#AT_START_102
+at_fn_group_banner 102 'rpmi.at:399' \
+ "rpm -U obsoleted package 2" " " 7
+at_xfail=no
+(
+ $as_echo "102. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:400:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"obs deptest-two\" \\
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+
+runroot rpm -Uv \\
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -q deptest-one
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:400"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "obs deptest-two" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+
+runroot rpm -Uv \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -q deptest-one
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: package deptest-one-1.0-1.noarch was already added, skipping deptest-two-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Preparing packages...
+deptest-one-1.0-1.noarch
+deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:400"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_102
+#AT_START_103
+at_fn_group_banner 103 'rpmi.at:428' \
+ "rpm -i two versions of same package" " " 7
+at_xfail=no
+(
+ $as_echo "103. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:429:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -q versiontest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:429"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-2.0-1.noarch.rpm
+runroot rpm -q versiontest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "versiontest-2.0-1.noarch
+versiontest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:429"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_103
+#AT_START_104
+at_fn_group_banner 104 'rpmi.at:447' \
+ "rpm -i identical versions of same package" " " 7
+at_xfail=no
+(
+ $as_echo "104. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:448:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \\
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -q versiontest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:448"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -i \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/versiontest-1.0-1.noarch.rpm
+runroot rpm -q versiontest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "versiontest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:448"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_104
+#AT_START_105
+at_fn_group_banner 105 'rpmi.at:465' \
+ "rpm -U with invalid --relocate" " " 7
+at_xfail=no
+(
+ $as_echo "105. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:467:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --test --ignoreos --relocate /usr=/opt \\
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:467"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --test --ignoreos --relocate /usr=/opt \
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " path /usr in package hello-script-1.0-1.noarch is not relocatable
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmi.at:467"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_105
+#AT_START_106
+at_fn_group_banner 106 'rpmi.at:482' \
+ "rpm -U --badreloc with invalid --relocate" " " 7
+at_xfail=no
+(
+ $as_echo "106. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:484:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --test --ignoreos --badreloc --relocate /usr=/opt \\
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:484"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --test --ignoreos --badreloc --relocate /usr=/opt \
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:484"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_106
+#AT_START_107
+at_fn_group_banner 107 'rpmi.at:498' \
+ "rpm -i with/without --excludedocs" " " 7
+at_xfail=no
+(
+ $as_echo "107. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmi.at:500:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/testdoc.spec
+
+runroot rpm -i --excludedocs \\
+ /build/RPMS/noarch/testdoc-1.0-1.noarch.rpm
+
+RPM_DOCDIR=\$(runroot rpm --eval '%_defaultdocdir')
+RPM_DATADIR=\$(runroot rpm --eval '%_datadir')
+
+test ! -e \${RPMTEST}\${RPM_DOCDIR}/testdoc || exit 1
+test -e \${RPMTEST}\${RPM_DATADIR}/testdoc/nodoc || exit 1
+
+runroot rpm -e testdoc
+
+runroot rpm -i \\
+ /build/RPMS/noarch/testdoc-1.0-1.noarch.rpm
+test -e \${RPMTEST}\${RPM_DOCDIR}/testdoc/documentation1 || exit 1
+test -e \${RPMTEST}\${RPM_DOCDIR}/testdoc/documentation2 || exit 1
+test -e \${RPMTEST}\${RPM_DOCDIR}/testdoc/examples/example1 || exit 1
+test -e \${RPMTEST}\${RPM_DOCDIR}/testdoc/examples/example2 || exit 1
+test -e \${RPMTEST}\${RPM_DATADIR}/testdoc/nodoc || exit 1
+
+runroot rpm -e testdoc
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmi.at:500"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/testdoc.spec
+
+runroot rpm -i --excludedocs \
+ /build/RPMS/noarch/testdoc-1.0-1.noarch.rpm
+
+RPM_DOCDIR=$(runroot rpm --eval '%_defaultdocdir')
+RPM_DATADIR=$(runroot rpm --eval '%_datadir')
+
+test ! -e ${RPMTEST}${RPM_DOCDIR}/testdoc || exit 1
+test -e ${RPMTEST}${RPM_DATADIR}/testdoc/nodoc || exit 1
+
+runroot rpm -e testdoc
+
+runroot rpm -i \
+ /build/RPMS/noarch/testdoc-1.0-1.noarch.rpm
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/documentation1 || exit 1
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/documentation2 || exit 1
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/examples/example1 || exit 1
+test -e ${RPMTEST}${RPM_DOCDIR}/testdoc/examples/example2 || exit 1
+test -e ${RPMTEST}${RPM_DATADIR}/testdoc/nodoc || exit 1
+
+runroot rpm -e testdoc
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmi.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_107
+#AT_START_108
+at_fn_group_banner 108 'rpmorder.at:3' \
+ "basic install/erase order 1" " " 8
+at_xfail=no
+(
+ $as_echo "108. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmorder.at:5:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-two\" \\
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"reqs deptest-three\" \\
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+echo INSTALL:
+runroot rpm -Uv --justdb \\
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -ev --justdb \\
+ deptest-three \\
+ deptest-one \\
+ deptest-two
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmorder.at:5"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-two" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "reqs deptest-three" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+echo INSTALL:
+runroot rpm -Uv --justdb \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -ev --justdb \
+ deptest-three \
+ deptest-one \
+ deptest-two
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "INSTALL:
+Preparing packages...
+deptest-three-1.0-1.noarch
+deptest-two-1.0-1.noarch
+deptest-one-1.0-1.noarch
+ERASE:
+Preparing packages...
+deptest-one-1.0-1.noarch
+deptest-two-1.0-1.noarch
+deptest-three-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmorder.at:5"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_108
+#AT_START_109
+at_fn_group_banner 109 'rpmbuild.at:23' \
+ "rpmbuild -ba *.spec" " " 9
+at_xfail=no
+(
+ $as_echo "109. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:25:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+run rpmbuild \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:25"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+run rpmbuild \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:25"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_109
+#AT_START_110
+at_fn_group_banner 110 'rpmbuild.at:41' \
+ "rpmbuild --rebuild" " " 9
+at_xfail=no
+(
+ $as_echo "110. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:43:
+rm -rf \${TOPDIR}
+
+run rpmbuild \\
+ --rebuild \"\${abs_srcdir}\"/data/SRPMS/hello-1.0-1.src.rpm
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:43"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+run rpmbuild \
+ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_110
+#AT_START_111
+at_fn_group_banner 111 'rpmbuild.at:54' \
+ "rpmbuild --short-circuit -bl" " " 9
+at_xfail=no
+(
+ $as_echo "111. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:56:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+run rpmbuild -bi \"\${abs_srcdir}\"/data/SPECS/hello.spec &> /dev/null
+run rpmbuild --quiet -bl --short-circuit \"\${abs_srcdir}\"/data/SPECS/hello.spec
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:56"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+run rpmbuild -bi "${abs_srcdir}"/data/SPECS/hello.spec &> /dev/null
+run rpmbuild --quiet -bl --short-circuit "${abs_srcdir}"/data/SPECS/hello.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:56"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_111
+#AT_START_112
+at_fn_group_banner 112 'rpmbuild.at:72' \
+ "rpmbuild -tb <tar with bad spec>" " " 9
+at_xfail=no
+(
+ $as_echo "112. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:74:
+rm -rf \${TOPDIR}
+
+run rpmbuild \\
+ -tb \"\${RPMDATA}/SOURCES/hello-1.0.tar.gz\"
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:74"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+run rpmbuild \
+ -tb "${RPMDATA}/SOURCES/hello-1.0.tar.gz"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: line 5: Unknown tag: Serial: 1
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/rpmbuild.at:74"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_112
+#AT_START_113
+at_fn_group_banner 113 'rpmbuild.at:89' \
+ "rpmbuild -tb" " " 9
+at_xfail=no
+(
+ $as_echo "113. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:91:
+rm -rf \${TOPDIR}
+
+run rpmbuild \\
+ -ta \"\${RPMDATA}/SOURCES/hello-2.0.tar.gz\"
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:91"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+run rpmbuild \
+ -ta "${RPMDATA}/SOURCES/hello-2.0.tar.gz"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:91"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_113
+#AT_START_114
+at_fn_group_banner 114 'rpmbuild.at:104' \
+ "rpmbuild %attr and %defattr" " " 9
+at_xfail=no
+(
+ $as_echo "114. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:106:
+rm -rf \${TOPDIR}
+
+runroot rpmbuild \\
+ -bb --quiet /data/SPECS/attrtest.spec
+
+runroot rpm -qp --qf \\
+ \"\\n[%{filemodes:perms} %-8{fileusername} %-8{filegroupname} %{filenames}\\n]\"\\
+ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:106"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet /data/SPECS/attrtest.spec
+
+runroot rpm -qp --qf \
+ "\n[%{filemodes:perms} %-8{fileusername} %-8{filegroupname} %{filenames}\n]"\
+ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+drwx------ root root /a/dir
+-r-------- root root /a/file
+drwx------ daemon adm /b/dir
+-r-------- daemon adm /b/file
+drwxr-x--- root adm /c/dir
+-rw-r----- daemon root /c/file
+drwxr-x--x daemon bin /d/dir
+-rw-r--r-- bin daemon /d/file
+drwx------ foo bar /e/dir
+-r-------- foo bar /e/file
+drwxrwx--- bar foo /f/dir
+-rw-rw---- bar foo /f/file
+drwx------ adm foo /g/dir
+-r-------- bar adm /g/file
+drwxr-xr-x foo bar /h/dir
+-rw-r--r-- foo bar /h/file
+drwxr-x--- adm root /i/dir
+-rwsr-xr-x root adm /i/file
+drwxrwxrwx zoot zoot /j/dir
+--w--w--w- zoot zoot /j/file
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:106"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_114
+#AT_START_115
+at_fn_group_banner 115 'rpmbuild.at:144' \
+ "rpmbuild hardlink" " " 9
+at_xfail=no
+(
+ $as_echo "115. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:146:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \${TOPDIR}
+
+runroot rpmbuild \\
+ -bb --quiet /data/SPECS/hlinktest.spec
+
+runroot rpm -i /build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
+
+runroot rpm -q --qf \"[%{filenlinks} %{filenames}\\n]%{longsize}\\n\" hlinktest
+runroot rpm -V --nouser --nogroup hlinktest
+ls -i \"\${RPMTEST}\"/foo/hello* | awk {'print \$1'} | sort -u | wc -l
+
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmbuild.at:146"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet /data/SPECS/hlinktest.spec
+
+runroot rpm -i /build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
+
+runroot rpm -q --qf "[%{filenlinks} %{filenames}\n]%{longsize}\n" hlinktest
+runroot rpm -V --nouser --nogroup hlinktest
+ls -i "${RPMTEST}"/foo/hello* | awk {'print $1'} | sort -u | wc -l
+
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "2 /foo/aaaa
+1 /foo/copyllo
+4 /foo/hello
+4 /foo/hello-bar
+4 /foo/hello-foo
+4 /foo/hello-world
+2 /foo/zzzz
+87
+1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:146"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_115
+#AT_START_116
+at_fn_group_banner 116 'rpmbuild.at:175' \
+ "rpmbuild unpackaged files" " " 9
+at_xfail=no
+(
+ $as_echo "116. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:177:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \${TOPDIR}
+
+runroot rpmbuild \\
+ -bb --quiet --with unpackaged_files /data/SPECS/hlinktest.spec
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmbuild.at:177"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet --with unpackaged_files /data/SPECS/hlinktest.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Installed (but unpackaged) file(s) found:
+ /toot
+ Installed (but unpackaged) file(s) found:
+ /toot
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmbuild.at:177"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_116
+#AT_START_117
+at_fn_group_banner 117 'rpmbuild.at:195' \
+ "rpmbuild unpackaged directories" " " 9
+at_xfail=no
+ test $RPM_XFAIL -ne 0 && at_xfail=yes
+(
+ $as_echo "117. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:198:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \${TOPDIR}
+
+runroot rpmbuild \\
+ -bb --quiet --with unpackaged_dirs /data/SPECS/hlinktest.spec
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmbuild.at:198"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet --with unpackaged_dirs /data/SPECS/hlinktest.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Installed (but unpackaged) file(s) found:
+ /zoo
+ Installed (but unpackaged) file(s) found:
+ /zoo
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmbuild.at:198"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_117
+#AT_START_118
+at_fn_group_banner 118 'rpmbuild.at:215' \
+ "rpmbuild glob" " " 9
+at_xfail=no
+(
+ $as_echo "118. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:217:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \${TOPDIR}
+
+runroot rpmbuild -bb --quiet /data/SPECS/globtest.spec
+runroot rpm -qp \\
+ --qf \"[%{filemodes:perms} %{filenames}\\n]\" \\
+ /build/RPMS/noarch/globtest-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmbuild.at:217"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf ${TOPDIR}
+
+runroot rpmbuild -bb --quiet /data/SPECS/globtest.spec
+runroot rpm -qp \
+ --qf "[%{filemodes:perms} %{filenames}\n]" \
+ /build/RPMS/noarch/globtest-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-rw-r--r-- /opt/globtest/baf
+drwxr-xr-x /opt/globtest/bang
+-rw-r--r-- /opt/globtest/bif
+drwxr-xr-x /opt/globtest/bing
+drwxr-xr-x /opt/globtest/bong
+drwxr-xr-x /opt/globtest/foo
+-rw-r--r-- /opt/globtest/foo/one
+-rw-r--r-- /opt/globtest/foo/three
+-rw-r--r-- /opt/globtest/foo/two
+lrwxrwxrwx /opt/globtest/linkbad
+lrwxrwxrwx /opt/globtest/linkgood
+-rw-r--r-- /opt/globtest/weird%name
+-rw-r--r-- /opt/globtest/zab
+-rw-r--r-- /opt/globtest/zeb
+-rw-r--r-- /opt/globtest/zib
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:217"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_118
+#AT_START_119
+at_fn_group_banner 119 'rpmbuild.at:247' \
+ "rpmbuild prefixpostfix" " " 9
+at_xfail=no
+(
+ $as_echo "119. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:249:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \${TOPDIR}
+
+runroot rpmbuild -bb --quiet \\
+ /data/SPECS/prefixtest.spec
+runroot rpm -qp \\
+ --qf \"[%{filemodes:perms} %{filenames}\\n]\" \\
+ /build/RPMS/noarch/prefixtest-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmbuild.at:249"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf ${TOPDIR}
+
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/prefixtest.spec
+runroot rpm -qp \
+ --qf "[%{filemodes:perms} %{filenames}\n]" \
+ /build/RPMS/noarch/prefixtest-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-rw-r--r-- /opt/prefixtest/ba
+drwxr-xr-x /opt/prefixtest/ban
+-rw-r--r-- /opt/prefixtest/bi
+drwxr-xr-x /opt/prefixtest/bin
+drwxr-xr-x /opt/prefixtest/bon
+drwxr-xr-x /opt/prefixtest/foo
+-rw-r--r-- /opt/prefixtest/foo/one
+-rw-r--r-- /opt/prefixtest/foo/three
+-rw-r--r-- /opt/prefixtest/foo/two
+lrwxrwxrwx /opt/prefixtest/linkbad
+lrwxrwxrwx /opt/prefixtest/linkgood
+-rw-r--r-- /opt/prefixtest/weird%name
+-rw-r--r-- /opt/prefixtest/zab
+-rw-r--r-- /opt/prefixtest/zeb
+-rw-r--r-- /opt/prefixtest/zib
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:249"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_119
+#AT_START_120
+at_fn_group_banner 120 'rpmbuild.at:282' \
+ "Weak and reverse requires" " " 9
+at_xfail=no
+(
+ $as_echo "120. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:284:
+
+runroot rpmbuild -bb --quiet \\
+ --define \"pkg weakdeps\" \\
+ --define \"recs foo > 1.2.3\" \\
+ --define \"sugs bar >= 0.1.2\" \\
+ --define \"sups baz\" \\
+ --define \"ens zap = 3\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -qp --recommends /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --suggests /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --supplements /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --enhances /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmbuild.at:284"
+( $at_check_trace;
+
+runroot rpmbuild -bb --quiet \
+ --define "pkg weakdeps" \
+ --define "recs foo > 1.2.3" \
+ --define "sugs bar >= 0.1.2" \
+ --define "sups baz" \
+ --define "ens zap = 3" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -qp --recommends /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --suggests /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --supplements /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+runroot rpm -qp --enhances /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "foo > 1.2.3
+bar >= 0.1.2
+baz
+zap = 3
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:284"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_120
+#AT_START_121
+at_fn_group_banner 121 'rpmbuild.at:310' \
+ "Build requires" " " 9
+at_xfail=no
+(
+ $as_echo "121. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:312:
+
+runroot rpmbuild -bb --quiet \\
+ --define \"pkg buildreq\" \\
+ --define \"buildreqs foo > 1.2.3\" \\
+ /data/SPECS/deptest.spec
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmbuild.at:312"
+( $at_check_trace;
+
+runroot rpmbuild -bb --quiet \
+ --define "pkg buildreq" \
+ --define "buildreqs foo > 1.2.3" \
+ /data/SPECS/deptest.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed build dependencies:
+ foo > 1.2.3 is needed by deptest-buildreq-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmbuild.at:312"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_121
+#AT_START_122
+at_fn_group_banner 122 'rpmbuild.at:326' \
+ "Dependency generation" " " 9
+at_xfail=no
+(
+ $as_echo "122. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:328:
+
+runroot rpmbuild -bb --quiet \\
+ /data/SPECS/filedep.spec
+echo Requires:
+runroot rpm -qp --requires /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Provides:
+runroot rpm -qp --provides /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Filerequires:
+runroot rpm -qp --qf '[\"%{FILENAMES}\\t%{FILEREQUIRE}\"\\n]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Fileprovides:
+runroot rpm -qp --qf '[\"%{FILENAMES}\\t%{FILEPROVIDE}\"\\n]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmbuild.at:328"
+( $at_check_trace;
+
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/filedep.spec
+echo Requires:
+runroot rpm -qp --requires /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Provides:
+runroot rpm -qp --provides /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Filerequires:
+runroot rpm -qp --qf '["%{FILENAMES}\t%{FILEREQUIRE}"\n]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+echo Fileprovides:
+runroot rpm -qp --qf '["%{FILENAMES}\t%{FILEPROVIDE}"\n]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Requires:
+/bin/f00f
+/bin/sh
+rpmlib(CompressedFileNames) <= 3.0.4-1
+rpmlib(FileDigests) <= 4.6.0-1
+rpmlib(PayloadFilesHavePrefix) <= 4.0-1
+Provides:
+filedep = 1.0-1
+Filerequires:
+\"/etc/foo.conf \"
+\"/usr/bin/bar /bin/f00f\"
+\"/usr/bin/foo /bin/sh\"
+\"/usr/share/doc/filedep \"
+\"/usr/share/doc/filedep/README \"
+Fileprovides:
+\"/etc/foo.conf \"
+\"/usr/bin/bar \"
+\"/usr/bin/foo \"
+\"/usr/share/doc/filedep \"
+\"/usr/share/doc/filedep/README \"
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:328"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_122
+#AT_START_123
+at_fn_group_banner 123 'rpmbuild.at:369' \
+ "rpmspec query 1" " " 9
+at_xfail=no
+(
+ $as_echo "123. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:371:
+
+runroot rpmspec -q \\
+ --define \"pkg dep\" \\
+ --define \"reqs foo > 1.2.3 bar <= 2.3\" \\
+ --requires \\
+ /data/SPECS/deptest.spec
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmbuild.at:371"
+( $at_check_trace;
+
+runroot rpmspec -q \
+ --define "pkg dep" \
+ --define "reqs foo > 1.2.3 bar <= 2.3" \
+ --requires \
+ /data/SPECS/deptest.spec
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "bar <= 2.3
+foo > 1.2.3
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:371"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_123
+#AT_START_124
+at_fn_group_banner 124 'rpmbuild.at:389' \
+ "rpmbuild archive sanity" " " 9
+at_xfail=no
+(
+ $as_echo "124. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:391:
+rm -rf \${TOPDIR}
+
+runroot rpmbuild \\
+ -bb --quiet /data/SPECS/attrtest.spec
+
+runroot rpm2cpio \\
+ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm > /tmp/attrtest.cpio
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:391"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+runroot rpmbuild \
+ -bb --quiet /data/SPECS/attrtest.spec
+
+runroot rpm2cpio \
+ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm > /tmp/attrtest.cpio
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:391"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_124
+#AT_START_125
+at_fn_group_banner 125 'rpmbuild.at:407' \
+ "rpmbuild debuginfo minisymtab" " " 9
+at_xfail=no
+(
+ $as_echo "125. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:409:
+rm -rf \${TOPDIR}
+
+# Use macros.debug to generate a debuginfo package.
+export CFLAGS=\"-g\"
+rundebug rpmbuild --quiet \\
+ --rebuild \"\${abs_srcdir}\"/data/SRPMS/hello-1.0-1.src.rpm
+
+# Extract the main package and inspect the hello binary
+# It should contain .gnu_debugdata, but not the full .symtab
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu
+test -f ./usr/local/bin/hello || exit 1
+readelf -S ./usr/local/bin/hello |\\
+ grep -q .gnu_debugdata; test \$? == 0 || exit 1
+readelf -S ./usr/local/bin/hello \\
+ | grep -q .symtab; test \$? == 1 || exit 1
+
+# And the opposite for the debuginfo package
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \\
+ | grep -q .gnu_debugdata; test \$? == 1 || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \\
+ | grep -q .symtab; test \$? == 0 || exit 1
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:409"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+# Use macros.debug to generate a debuginfo package.
+export CFLAGS="-g"
+rundebug rpmbuild --quiet \
+ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm
+
+# Extract the main package and inspect the hello binary
+# It should contain .gnu_debugdata, but not the full .symtab
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu
+test -f ./usr/local/bin/hello || exit 1
+readelf -S ./usr/local/bin/hello |\
+ grep -q .gnu_debugdata; test $? == 0 || exit 1
+readelf -S ./usr/local/bin/hello \
+ | grep -q .symtab; test $? == 1 || exit 1
+
+# And the opposite for the debuginfo package
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep -q .gnu_debugdata; test $? == 1 || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep -q .symtab; test $? == 0 || exit 1
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:409"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_125
+#AT_START_126
+at_fn_group_banner 126 'rpmbuild.at:444' \
+ "rpmbuild debuginfo minisymtab strip -g" " " 9
+at_xfail=no
+(
+ $as_echo "126. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:446:
+rm -rf \${TOPDIR}
+
+# Use macros.debug to generate a debuginfo package.
+export CFLAGS=\"-g\"
+rundebug rpmbuild --quiet \\
+ --define=\"_find_debuginfo_opts -g\" \\
+ --rebuild \"\${abs_srcdir}\"/data/SRPMS/hello-1.0-1.src.rpm
+
+# Extract the main package and inspect the hello binary
+# It should contain .symtab (because of strip -g), so doesn't .gnu_debugdata.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu
+test -f ./usr/local/bin/hello || exit 1
+readelf -S ./usr/local/bin/hello \\
+ | grep -q .gnu_debugdata; test \$? == 1 || exit 1
+readelf -S ./usr/local/bin/hello \\
+ | grep -q .symtab; test \$? == 0 || exit 1
+
+# The debuginfo package should contain neither. The .symtab is NOBITS.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \\
+ | grep -q .gnu_debugdata; test \$? == 1 || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \\
+ | grep .symtab | grep -q NOBITS; test \$? == 0 || exit 1
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:446"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+
+# Use macros.debug to generate a debuginfo package.
+export CFLAGS="-g"
+rundebug rpmbuild --quiet \
+ --define="_find_debuginfo_opts -g" \
+ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm
+
+# Extract the main package and inspect the hello binary
+# It should contain .symtab (because of strip -g), so doesn't .gnu_debugdata.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu
+test -f ./usr/local/bin/hello || exit 1
+readelf -S ./usr/local/bin/hello \
+ | grep -q .gnu_debugdata; test $? == 1 || exit 1
+readelf -S ./usr/local/bin/hello \
+ | grep -q .symtab; test $? == 0 || exit 1
+
+# The debuginfo package should contain neither. The .symtab is NOBITS.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep -q .gnu_debugdata; test $? == 1 || exit 1
+readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \
+ | grep .symtab | grep -q NOBITS; test $? == 0 || exit 1
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:446"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_126
+#AT_START_127
+at_fn_group_banner 127 'rpmbuild.at:483' \
+ "rpmbuild debuginfo dwz" " " 9
+at_xfail=no
+(
+ $as_echo "127. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:485:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --undefine \"_unique_debug_names\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# The debuginfo package should contain a .debug file for each binary
+# and a dwz multi file that contains the shared debuginfo between them.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+hello_file_debug=./usr/lib/debug/usr/local/bin/hello.debug
+hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2.debug
+hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.*
+test -f \$hello_file_debug || echo \"no hello debug file: \$hello_file_debug\"
+test -f \$hello2_file_debug || echo \"no hello2 debug file: \$hello2_file_debug\"
+test -f \$hello_multi_file || echo \"no dwz multi file: \$hello_multi_file\"
+
+# Make sure the main package binaries contain the correct build-ids
+# linking them to the debug packages.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu
+hello_file=./usr/local/bin/hello
+hello2_file=./usr/local/bin/hello2
+test -f \$hello_file || echo \"no hello file: \$hello_file\"
+test -f \$hello2_file || echo \"no hello2 file: \$hello2_file\"
+
+id1=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+id2=\$(file \$hello2_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+id1debug=\$(file \$hello_file_debug | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+id2debug=\$(file \$hello2_file_debug | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+idmulti=\$(file \$hello_multi_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \"\$id1\" = \"\$id1debug\" || echo \"id1: \$id1 != id1debug: \$id1debug\"
+test \"\$id2\" = \"\$id2debug\" || echo \"id2: \$id2 != id2debug: \$id2debug\"
+
+# The build-id files should link to the .debug files.
+id1file=\"./usr/lib/debug/.build-id/\${id1:0:2}/\${id1:2}\"
+canonid1file=\$(readlink -f \${id1file})
+canonfile1=\$(readlink -f \$hello_file)
+canonid1debug=\$(readlink -f \${id1file}.debug)
+canondebug1=\$(readlink -f \$hello_file_debug)
+
+test \"\$canonid1file\" = \"\$canonfile1\" \\
+ || echo \"canonid1file: \$canonid1file != \$canonfile1\"
+test \"\$canonid1debug\" = \"\$canondebug1\" \\
+ || echo \"canonid1debug: \$canonid1debug != \$canondebug1\"
+
+id2file=\"./usr/lib/debug/.build-id/\${id2:0:2}/\${id2:2}\"
+canonid2file=\$(readlink -f \${id2file})
+canonfile2=\$(readlink -f \$hello2_file)
+canonid2debug=\$(readlink -f \${id2file}.debug)
+canondebug2=\$(readlink -f \$hello2_file_debug)
+
+test \"\$canonid2file\" = \"\$canonfile2\" \\
+ || echo \"canonid2: \$canonid2file != \$canonfile2\"
+test \"\$canonid2debug\" = \"\$canondebug2\" \\
+ || echo \"canonid2debug: \$canonid2debug\" != \"\$canondebug2\"
+
+# Both .debug files should point to the dwz multi file.
+# It would be nice to also test that they contain the correct dwz build-id
+# but that is a bit hard to grep out of the section data.
+multiref1=\$(readelf --string-dump=.gnu_debugaltlink \$hello_file_debug \\
+ | grep ' 0' | cut -c13-)
+multiref2=\$(readelf --string-dump=.gnu_debugaltlink \$hello2_file_debug \\
+ | grep ' 0' | cut -c13-)
+
+test \"\$multiref1\" = \"\$multiref2\" || echo \"multiref: \$multiref1 != \$multiref2\"
+
+canonmultiref=\$(readlink -f \$(dirname \$canondebug1)/\$multiref1)
+canonmultifile=\$(readlink -f \$hello_multi_file)
+
+test \"\$canonmultiref\" = \"\$canonmultifile\" \\
+ || echo \"canonmultiref: \$canonmultiref\" != \"\$canonmultifile\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:485"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# The debuginfo package should contain a .debug file for each binary
+# and a dwz multi file that contains the shared debuginfo between them.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+hello_file_debug=./usr/lib/debug/usr/local/bin/hello.debug
+hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2.debug
+hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.*
+test -f $hello_file_debug || echo "no hello debug file: $hello_file_debug"
+test -f $hello2_file_debug || echo "no hello2 debug file: $hello2_file_debug"
+test -f $hello_multi_file || echo "no dwz multi file: $hello_multi_file"
+
+# Make sure the main package binaries contain the correct build-ids
+# linking them to the debug packages.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu
+hello_file=./usr/local/bin/hello
+hello2_file=./usr/local/bin/hello2
+test -f $hello_file || echo "no hello file: $hello_file"
+test -f $hello2_file || echo "no hello2 file: $hello2_file"
+
+id1=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+id2=$(file $hello2_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+id1debug=$(file $hello_file_debug | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+id2debug=$(file $hello2_file_debug | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+idmulti=$(file $hello_multi_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test "$id1" = "$id1debug" || echo "id1: $id1 != id1debug: $id1debug"
+test "$id2" = "$id2debug" || echo "id2: $id2 != id2debug: $id2debug"
+
+# The build-id files should link to the .debug files.
+id1file="./usr/lib/debug/.build-id/${id1:0:2}/${id1:2}"
+canonid1file=$(readlink -f ${id1file})
+canonfile1=$(readlink -f $hello_file)
+canonid1debug=$(readlink -f ${id1file}.debug)
+canondebug1=$(readlink -f $hello_file_debug)
+
+test "$canonid1file" = "$canonfile1" \
+ || echo "canonid1file: $canonid1file != $canonfile1"
+test "$canonid1debug" = "$canondebug1" \
+ || echo "canonid1debug: $canonid1debug != $canondebug1"
+
+id2file="./usr/lib/debug/.build-id/${id2:0:2}/${id2:2}"
+canonid2file=$(readlink -f ${id2file})
+canonfile2=$(readlink -f $hello2_file)
+canonid2debug=$(readlink -f ${id2file}.debug)
+canondebug2=$(readlink -f $hello2_file_debug)
+
+test "$canonid2file" = "$canonfile2" \
+ || echo "canonid2: $canonid2file != $canonfile2"
+test "$canonid2debug" = "$canondebug2" \
+ || echo "canonid2debug: $canonid2debug" != "$canondebug2"
+
+# Both .debug files should point to the dwz multi file.
+# It would be nice to also test that they contain the correct dwz build-id
+# but that is a bit hard to grep out of the section data.
+multiref1=$(readelf --string-dump=.gnu_debugaltlink $hello_file_debug \
+ | grep ' 0' | cut -c13-)
+multiref2=$(readelf --string-dump=.gnu_debugaltlink $hello2_file_debug \
+ | grep ' 0' | cut -c13-)
+
+test "$multiref1" = "$multiref2" || echo "multiref: $multiref1 != $multiref2"
+
+canonmultiref=$(readlink -f $(dirname $canondebug1)/$multiref1)
+canonmultifile=$(readlink -f $hello_multi_file)
+
+test "$canonmultiref" = "$canonmultifile" \
+ || echo "canonmultiref: $canonmultiref" != "$canonmultifile"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:485"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_127
+#AT_START_128
+at_fn_group_banner 128 'rpmbuild.at:575' \
+ "rpmbuild debuginfo dwz unique debug names" " " 9
+at_xfail=no
+(
+ $as_echo "128. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:577:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_unique_debug_names 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# The debuginfo package should contain a .debug file for each binary
+# and a dwz multi file that contains the shared debuginfo between them.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+hello_file_debug=./usr/lib/debug/usr/local/bin/hello-*.debug
+hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2-*.debug
+hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.*
+test -f \$hello_file_debug || echo \"no hello debug file: \$hello_file_debug\"
+test -f \$hello2_file_debug || echo \"no hello2 debug file: \$hello2_file_debug\"
+test -f \$hello_multi_file || echo \"no dwz multi file: \$hello_multi_file\"
+
+# Make sure the main package binaries contain the correct build-ids
+# linking them to the debug packages.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu
+hello_file=./usr/local/bin/hello
+hello2_file=./usr/local/bin/hello2
+test -f \$hello_file || echo \"no hello file: \$hello_file\"
+test -f \$hello2_file || echo \"no hello2 file: \$hello2_file\"
+
+id1=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+id2=\$(file \$hello2_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+id1debug=\$(file \$hello_file_debug | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+id2debug=\$(file \$hello2_file_debug | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+idmulti=\$(file \$hello_multi_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \"\$id1\" = \"\$id1debug\" || echo \"id1: \$id1 != id1debug: \$id1debug\"
+test \"\$id2\" = \"\$id2debug\" || echo \"id2: \$id2 != id2debug: \$id2debug\"
+
+# The build-id files should link to the .debug files.
+id1file=\"./usr/lib/debug/.build-id/\${id1:0:2}/\${id1:2}\"
+canonid1file=\$(readlink -f \${id1file})
+canonfile1=\$(readlink -f \$hello_file)
+canonid1debug=\$(readlink -f \${id1file}.debug)
+canondebug1=\$(readlink -f \$hello_file_debug)
+
+test \"\$canonid1file\" = \"\$canonfile1\" \\
+ || echo \"canonid1file: \$canonid1file != \$canonfile1\"
+test \"\$canonid1debug\" = \"\$canondebug1\" \\
+ || echo \"canonid1debug: \$canonid1debug != \$canondebug1\"
+
+id2file=\"./usr/lib/debug/.build-id/\${id2:0:2}/\${id2:2}\"
+canonid2file=\$(readlink -f \${id2file})
+canonfile2=\$(readlink -f \$hello2_file)
+canonid2debug=\$(readlink -f \${id2file}.debug)
+canondebug2=\$(readlink -f \$hello2_file_debug)
+
+test \"\$canonid2file\" = \"\$canonfile2\" \\
+ || echo \"canonid2: \$canonid2file != \$canonfile2\"
+test \"\$canonid2debug\" = \"\$canondebug2\" \\
+ || echo \"canonid2debug: \$canonid2debug\" != \"\$canondebug2\"
+
+# Both .debug files should point to the dwz multi file.
+# It would be nice to also test that they contain the correct dwz build-id
+# but that is a bit hard to grep out of the section data.
+multiref1=\$(readelf --string-dump=.gnu_debugaltlink \$hello_file_debug \\
+ | grep ' 0' | cut -c13-)
+multiref2=\$(readelf --string-dump=.gnu_debugaltlink \$hello2_file_debug \\
+ | grep ' 0' | cut -c13-)
+
+test \"\$multiref1\" = \"\$multiref2\" || echo \"multiref: \$multiref1 != \$multiref2\"
+
+canonmultiref=\$(readlink -f \$(dirname \$canondebug1)/\$multiref1)
+canonmultifile=\$(readlink -f \$hello_multi_file)
+
+test \"\$canonmultiref\" = \"\$canonmultifile\" \\
+ || echo \"canonmultiref: \$canonmultiref\" != \"\$canonmultifile\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:577"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# The debuginfo package should contain a .debug file for each binary
+# and a dwz multi file that contains the shared debuginfo between them.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+hello_file_debug=./usr/lib/debug/usr/local/bin/hello-*.debug
+hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2-*.debug
+hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.*
+test -f $hello_file_debug || echo "no hello debug file: $hello_file_debug"
+test -f $hello2_file_debug || echo "no hello2 debug file: $hello2_file_debug"
+test -f $hello_multi_file || echo "no dwz multi file: $hello_multi_file"
+
+# Make sure the main package binaries contain the correct build-ids
+# linking them to the debug packages.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu
+hello_file=./usr/local/bin/hello
+hello2_file=./usr/local/bin/hello2
+test -f $hello_file || echo "no hello file: $hello_file"
+test -f $hello2_file || echo "no hello2 file: $hello2_file"
+
+id1=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+id2=$(file $hello2_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+id1debug=$(file $hello_file_debug | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+id2debug=$(file $hello2_file_debug | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+idmulti=$(file $hello_multi_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test "$id1" = "$id1debug" || echo "id1: $id1 != id1debug: $id1debug"
+test "$id2" = "$id2debug" || echo "id2: $id2 != id2debug: $id2debug"
+
+# The build-id files should link to the .debug files.
+id1file="./usr/lib/debug/.build-id/${id1:0:2}/${id1:2}"
+canonid1file=$(readlink -f ${id1file})
+canonfile1=$(readlink -f $hello_file)
+canonid1debug=$(readlink -f ${id1file}.debug)
+canondebug1=$(readlink -f $hello_file_debug)
+
+test "$canonid1file" = "$canonfile1" \
+ || echo "canonid1file: $canonid1file != $canonfile1"
+test "$canonid1debug" = "$canondebug1" \
+ || echo "canonid1debug: $canonid1debug != $canondebug1"
+
+id2file="./usr/lib/debug/.build-id/${id2:0:2}/${id2:2}"
+canonid2file=$(readlink -f ${id2file})
+canonfile2=$(readlink -f $hello2_file)
+canonid2debug=$(readlink -f ${id2file}.debug)
+canondebug2=$(readlink -f $hello2_file_debug)
+
+test "$canonid2file" = "$canonfile2" \
+ || echo "canonid2: $canonid2file != $canonfile2"
+test "$canonid2debug" = "$canondebug2" \
+ || echo "canonid2debug: $canonid2debug" != "$canondebug2"
+
+# Both .debug files should point to the dwz multi file.
+# It would be nice to also test that they contain the correct dwz build-id
+# but that is a bit hard to grep out of the section data.
+multiref1=$(readelf --string-dump=.gnu_debugaltlink $hello_file_debug \
+ | grep ' 0' | cut -c13-)
+multiref2=$(readelf --string-dump=.gnu_debugaltlink $hello2_file_debug \
+ | grep ' 0' | cut -c13-)
+
+test "$multiref1" = "$multiref2" || echo "multiref: $multiref1 != $multiref2"
+
+canonmultiref=$(readlink -f $(dirname $canondebug1)/$multiref1)
+canonmultifile=$(readlink -f $hello_multi_file)
+
+test "$canonmultiref" = "$canonmultifile" \
+ || echo "canonmultiref: $canonmultiref" != "$canonmultifile"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_128
+#AT_START_129
+at_fn_group_banner 129 'rpmbuild.at:664' \
+ "rpmbuild debuginfo dwz gnu_debuglink crc" " " 9
+at_xfail=no
+(
+ $as_echo "129. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:666:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# Unpack the main and debuginfo rpms so we can check binaries and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check that dwz has ran and a multi file has been produced
+test -f ./usr/lib/debug/.dwz/hello2-1.0-1.* || exit 1
+
+# Run sepdbugcrcfix on the binaries, both should have correct CRC already.
+\${abs_top_builddir}/sepdebugcrcfix ./usr/lib/debug \\
+ ./usr/local/bin/hello ./usr/local/bin/hello2 | grep CRC32 | cut -f2 -d:
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:666"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the main and debuginfo rpms so we can check binaries and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check that dwz has ran and a multi file has been produced
+test -f ./usr/lib/debug/.dwz/hello2-1.0-1.* || exit 1
+
+# Run sepdbugcrcfix on the binaries, both should have correct CRC already.
+${abs_top_builddir}/sepdebugcrcfix ./usr/lib/debug \
+ ./usr/local/bin/hello ./usr/local/bin/hello2 | grep CRC32 | cut -f2 -d:
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo " Updated 0 CRC32s, 2 CRC32s did match.
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:666"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_129
+#AT_START_130
+at_fn_group_banner 130 'rpmbuild.at:698' \
+ "rpmbuild implicit suid binary" " " 9
+at_xfail=no
+(
+ $as_echo "130. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:700:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2-suid.spec
+
+# Unpack rpm so we can check the included binaries.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# List all binaries with suid bit set (should be one, hello).
+echo \"suid:\"
+find usr -executable -type f -perm /4000
+# List all binaries without suid bit set (should also be one, hello2).
+echo \"no-suid:\"
+find usr -executable -type f \\! -perm /4000
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:700"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ -ba "${abs_srcdir}"/data/SPECS/hello2-suid.spec
+
+# Unpack rpm so we can check the included binaries.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# List all binaries with suid bit set (should be one, hello).
+echo "suid:"
+find usr -executable -type f -perm /4000
+# List all binaries without suid bit set (should also be one, hello2).
+echo "no-suid:"
+find usr -executable -type f \! -perm /4000
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "suid:
+usr/local/bin/hello
+no-suid:
+usr/local/bin/hello2
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:700"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_130
+#AT_START_131
+at_fn_group_banner 131 'rpmbuild.at:732' \
+ "rpmbuild debuginfo gdb index included" " " 9
+at_xfail=no
+(
+ $as_echo "131. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:734:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_include_gdb_index 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# Check that gdb-add-index has ran and a .gdb_index section has been added
+readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \\
+ | grep gdb_index | cut -c8-17
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:734"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_include_gdb_index 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that gdb-add-index has ran and a .gdb_index section has been added
+readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep gdb_index | cut -c8-17
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo ".gdb_index
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:734"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_131
+#AT_START_132
+at_fn_group_banner 132 'rpmbuild.at:761' \
+ "rpmbuild debuginfo no gdb index included" " " 9
+at_xfail=no
+(
+ $as_echo "132. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:763:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --undefine \"_include_gdb_index\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# Check that gdb-add-index has not ran and no .gdb_index section has been added
+readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \\
+ | grep gdb_index | cut -c8-17
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:763"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_include_gdb_index" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that gdb-add-index has not ran and no .gdb_index section has been added
+readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep gdb_index | cut -c8-17
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:763"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_132
+#AT_START_133
+at_fn_group_banner 133 'rpmbuild.at:789' \
+ "rpmbuild debuginfo unique debug src dir" " " 9
+at_xfail=no
+(
+ $as_echo "133. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:791:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Note that the spec defines hello2 as name, but the source is hello-1.0.
+# Disable dwz to make debuginfo path rewrite checking easier.
+rundebug rpmbuild --quiet \\
+ --undefine \"_find_debuginfo_dwz_opts\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# Check that the source path is \"unique\"
+# Drop the final arch prefix to make the test arch-independent.
+ls ./usr/src/debug/ | cut -f1,2 -d\\.
+
+# Check that the source path has been rewritten in the .debug file.
+# Drop the final arch prefix to make the test arch-independent.
+readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \\
+ | grep comp_dir | sed -e 's/\\t\$//' | cut -f5- -d/ | cut -f1,2 -d\\.
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:791"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Note that the spec defines hello2 as name, but the source is hello-1.0.
+# Disable dwz to make debuginfo path rewrite checking easier.
+rundebug rpmbuild --quiet \
+ --undefine "_find_debuginfo_dwz_opts" \
+ --define "_unique_debug_srcs 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that the source path is "unique"
+# Drop the final arch prefix to make the test arch-independent.
+ls ./usr/src/debug/ | cut -f1,2 -d\.
+
+# Check that the source path has been rewritten in the .debug file.
+# Drop the final arch prefix to make the test arch-independent.
+readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep comp_dir | sed -e 's/\t$//' | cut -f5- -d/ | cut -f1,2 -d\.
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello2-1.0-1
+hello2-1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:791"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_133
+#AT_START_134
+at_fn_group_banner 134 'rpmbuild.at:828' \
+ "rpmbuild debuginfo no unique debug src dir" " " 9
+at_xfail=no
+(
+ $as_echo "134. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:830:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Note that the spec defines hello2 as name, but the source is hello-1.0.
+# Disable dwz to make debuginfo path rewrite checking easier.
+rundebug rpmbuild --quiet \\
+ --undefine \"_find_debuginfo_dwz_opts\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# Check that the source path is \"unique\"
+ls ./usr/src/debug/
+
+# Check that the source path has been rewritten in the .debug file.
+readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \\
+ | grep comp_dir | sed -e 's/\\t\$//' | cut -f5- -d/
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:830"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Note that the spec defines hello2 as name, but the source is hello-1.0.
+# Disable dwz to make debuginfo path rewrite checking easier.
+rundebug rpmbuild --quiet \
+ --undefine "_find_debuginfo_dwz_opts" \
+ --undefine "_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debuginfo rpms so we can check the .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that the source path is "unique"
+ls ./usr/src/debug/
+
+# Check that the source path has been rewritten in the .debug file.
+readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \
+ | grep comp_dir | sed -e 's/\t$//' | cut -f5- -d/
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello-1.0
+hello-1.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:830"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_134
+#AT_START_135
+at_fn_group_banner 135 'rpmbuild.at:864' \
+ "rpmbuild debugsource" " " 9
+at_xfail=no
+(
+ $as_echo "135. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:866:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_debugsource_packages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2.spec
+
+# Unpack the debugsource rpm so we can check the sources are there.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debugsource-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# Check that hello.c is there.
+ls ./usr/src/debug/hello2-1.0*/
+
+# The debuginfo package should recommend the debugsource package (ignore arch).
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:866"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Build a package that has some debuginfo
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_debugsource_packages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2.spec
+
+# Unpack the debugsource rpm so we can check the sources are there.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debugsource-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that hello.c is there.
+ls ./usr/src/debug/hello2-1.0*/
+
+# The debuginfo package should recommend the debugsource package (ignore arch).
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello.c
+Recommends: hello2-debugsource(ignore-arch) = 1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:866"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_135
+#AT_START_136
+at_fn_group_banner 136 'rpmbuild.at:899' \
+ "rpmbuild debugsource debugsourcefiles.list path" "" 9
+at_xfail=no
+(
+ $as_echo "136. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:901:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_debugsource_packages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello-cd.spec
+
+# Unpack the debuginfo rpms so we can check the sources are there.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debugsource-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# Check that hello.c is there.
+ls ./usr/src/debug/test-1.0*/
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuild.at:901"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_debugsource_packages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-cd.spec
+
+# Unpack the debuginfo rpms so we can check the sources are there.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debugsource-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# Check that hello.c is there.
+ls ./usr/src/debug/test-1.0*/
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello.c
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:901"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_136
+#AT_START_137
+at_fn_group_banner 137 'rpmbuild.at:927' \
+ "rpmbuild debuginfo subpackages single" " " 9
+at_xfail=no
+(
+ $as_echo "137. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:929:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --undefine \"_unique_debug_names\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ --undefine \"_debugsource_packages\" \\
+ --undefine \"_debuginfo_subpackages\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/test-subpackages.spec
+
+# Check that there is just one debuginfo package.
+ls \${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# Which contains hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello debug exists\"
+else
+ echo \"No hello: \$debug_name\"
+fi
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:929"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --undefine "_debugsource_packages" \
+ --undefine "_debuginfo_subpackages" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there is just one debuginfo package.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# Which contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "1
+hello debug exists
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:929"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_137
+#AT_START_138
+at_fn_group_banner 138 'rpmbuild.at:969' \
+ "rpmbuild debuginfo subpackages multiple" " " 9
+at_xfail=no
+(
+ $as_echo "138. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:971:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --undefine \"_unique_debug_names\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ --undefine \"_debugsource_packages\" \\
+ --define \"_debuginfo_subpackages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls \${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello debug exists\"
+else
+ echo \"No hello: \$debug_name\"
+fi
+
+# Second contains hello2.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello2 debug exists\"
+else
+ echo \"No hello2: \$debug_name\"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+
+# Third contains hello3.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello3 debug exists\"
+else
+ echo \"No hello3: \$debug_name\"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:971"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --undefine "_debugsource_packages" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Second contains hello2.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+# Third contains hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "3
+hello debug exists
+hello2 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+hello3 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:971"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_138
+#AT_START_139
+at_fn_group_banner 139 'rpmbuild.at:1053' \
+ "rpmbuild debuginfo subpackages multiple unique" " " 9
+at_xfail=no
+(
+ $as_echo "139. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:1055:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_unique_debug_names 1\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ --undefine \"_debugsource_packages\" \\
+ --define \"_debuginfo_subpackages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls \${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello debug exists\"
+else
+ echo \"No hello: \$debug_name\"
+fi
+
+# Second contains hello2.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello2 debug exists\"
+else
+ echo \"No hello2: \$debug_name\"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+
+# Third contains hello3.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello3 debug exists\"
+else
+ echo \"No hello3: \$debug_name\"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:1055"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --undefine "_debugsource_packages" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Second contains hello2.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+# Third contains hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3: $debug_name"
+fi
+
+# No debugsource package, so sources are in the main debuginfo package.
+# Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "3
+hello debug exists
+hello2 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+hello3 debug exists
+Recommends: test-debuginfo(ignore-arch) = 1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:1055"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_139
+#AT_START_140
+at_fn_group_banner 140 'rpmbuild.at:1137' \
+ "rpmbuild debuginfo subpackages multiple unique debugsource" "" 9
+at_xfail=no
+(
+ $as_echo "140. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:1139:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_unique_debug_names 1\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ --define \"_debugsource_packages 1\" \\
+ --define \"_debuginfo_subpackages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls \${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello debug exists\"
+else
+ echo \"No hello: \$debug_name\"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+
+# Second contains hello2.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello2 debug exists\"
+else
+ echo \"No hello2: \$debug_name\"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+
+# Third contains hello3.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello3 debug exists\"
+else
+ echo \"No hello3: \$debug_name\"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n \"Recommends: \"
+run rpm -qp --recommends \${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\\(.*\\) = ([-.0-9]+)/\\1\\(ignore-arch\\) = \\2/'
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:1139"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --define "_debugsource_packages 1" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec
+
+# Check that there are 3 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+# Second contains hello2.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+# Third contains hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3: $debug_name"
+fi
+
+# Sources are in debugsource package. Make sure it is recommended.
+echo -n "Recommends: "
+run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([-.a-z0-9]+)\(.*\) = ([-.0-9]+)/\1\(ignore-arch\) = \2/'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "3
+hello debug exists
+Recommends: test-debugsource(ignore-arch) = 1.0-1
+hello2 debug exists
+Recommends: test-debugsource(ignore-arch) = 1.0-1
+hello3 debug exists
+Recommends: test-debugsource(ignore-arch) = 1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:1139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_140
+#AT_START_141
+at_fn_group_banner 141 'rpmbuild.at:1224' \
+ "rpmbuild debuginfo subpackages multiple excluded" "" 9
+at_xfail=no
+(
+ $as_echo "141. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:1226:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_unique_debug_names 1\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ --define \"_debugsource_packages 1\" \\
+ --define \"_debuginfo_subpackages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/test-subpackages-exclude.spec
+
+# Check that there are 2 debuginfo packages.
+ls \${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello debug exists\"
+else
+ echo \"No hello: \$debug_name\"
+fi
+
+# Second contains hello2.debug but NOT hello3.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello2 debug exists\"
+else
+ echo \"No hello2: \$debug_name\"
+fi
+
+if test -f ./usr/lib/debug/bin/hello3*; then
+ echo \"hello3 debug exists\"
+else
+ echo \"No hello3 debug\"
+fi
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:1226"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --define "_debugsource_packages 1" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages-exclude.spec
+
+# Check that there are 2 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# Second contains hello2.debug but NOT hello3.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello2 debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+if test -f ./usr/lib/debug/bin/hello3*; then
+ echo "hello3 debug exists"
+else
+ echo "No hello3 debug"
+fi
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "2
+hello debug exists
+hello2 debug exists
+No hello3 debug
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:1226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_141
+#AT_START_142
+at_fn_group_banner 142 'rpmbuild.at:1288' \
+ "rpmbuild debuginfo subpackages multiple excluded" "" 9
+at_xfail=no
+(
+ $as_echo "142. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuild.at:1290:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \\
+ --define \"_unique_debug_names 1\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ --define \"_debugsource_packages 1\" \\
+ --define \"_debuginfo_subpackages 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/test-subpackages-pathpostfixes.spec
+
+# Check that there are 2 debuginfo packages.
+ls \${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello debug exists\"
+else
+ echo \"No hello: \$debug_name\"
+fi
+
+# remove it, we are going to check the other debuginfo package.
+rm ./bin/hello
+rm ./usr/lib/debug/bin/\$debug_name
+orig_debugname=\$debugname
+
+# Second contains hello.foobar.debug but NOT hello.debug
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=\$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/\$debug_name; then
+ echo \"hello.foobar debug exists\"
+else
+ echo \"No hello2: \$debug_name\"
+fi
+
+if test -f ./usr/lib/debug/bin/\$orig_debugname; then
+ echo \"\$orig_debugname exists\"
+else
+ echo \"No hello.debug\"
+fi
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuild.at:1290"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+rundebug rpmbuild --quiet \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --define "_debugsource_packages 1" \
+ --define "_debuginfo_subpackages 1" \
+ -ba "${abs_srcdir}"/data/SPECS/test-subpackages-pathpostfixes.spec
+
+# Check that there are 2 debuginfo packages.
+ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines
+
+# First contains hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello debug exists"
+else
+ echo "No hello: $debug_name"
+fi
+
+# remove it, we are going to check the other debuginfo package.
+rm ./bin/hello
+rm ./usr/lib/debug/bin/$debug_name
+orig_debugname=$debugname
+
+# Second contains hello.foobar.debug but NOT hello.debug
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+# Extract the debug name from the exe (.gnu_debuglink section, first string)
+debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-)
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+if test -f ./usr/lib/debug/bin/$debug_name; then
+ echo "hello.foobar debug exists"
+else
+ echo "No hello2: $debug_name"
+fi
+
+if test -f ./usr/lib/debug/bin/$orig_debugname; then
+ echo "$orig_debugname exists"
+else
+ echo "No hello.debug"
+fi
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "2
+hello debug exists
+hello.foobar debug exists
+No hello.debug
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuild.at:1290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_142
+#AT_START_143
+at_fn_group_banner 143 'rpmbuildid.at:23' \
+ "rpmbuild buildid none" " " 10
+at_xfail=no
+(
+ $as_echo "143. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:25:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links none\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be zero build-id files in both the main and debuginfo package
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuildid.at:25"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links none" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be zero build-id files in both the main and debuginfo package
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 0
+hello debuginfo build-id files: 0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:25"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_143
+#AT_START_144
+at_fn_group_banner 144 'rpmbuildid.at:57' \
+ "rpmbuild buildid alldebug" " " 10
+at_xfail=no
+(
+ $as_echo "144. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:59:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links alldebug\" \\
+ --undefine \"_unique_debug_names\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be zero build-id files in the main package
+# Main and debug should be in the debuginfo package,
+# plus the .build-id/xx subdir, 3 in total.
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f \"\${main_file}\" || echo \"No main file \${main_file}\"
+
+# Extract the build-id from the main file
+id_main=\$(file \$main_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+id_main_file=\"./usr/lib/debug/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_main_file\" || echo \"No build-id file \$id_main_file\"
+
+canon_main_file=\$(readlink -f \${main_file})
+
+test -f \"\$canon_main_file\" \\
+ || echo \"Cannot resolve main file \${main_file} -> \${canon_main_file}\"
+
+canon_main_id_file=\$(readlink -f \${id_main_file})
+
+test -f \"\$canon_main_id_file\" \\
+ || echo \"Cannot resolve main build-id file \${id_main_file} -> \${canon_main_id_file}\"
+
+test \"\$canon_main_file\" = \"\$canon_main_id_file\" \\
+ || echo \"main and build-id file not linked\"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f \${debug_file} || echo \"No debug file \${debug_file}\"
+
+# Extract the build-id from the .debug file
+id_debug=\$(file \$debug_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \${id_main} = \${id_debug} || echo \"unequal main and debug id\"
+
+id_debug_file=\"./usr/lib/debug/.build-id/\${id_debug:0:2}/\${id_debug:2}.debug\"
+test -L \"\$id_debug_file\" || echo \"No build-id file \$id_debug_file\"
+
+canon_debug_file=\$(readlink -f \${debug_file})
+
+test -f \"\$canon_debug_file\" \\
+ || echo \"Cannot resolve debug file \${debug_file} -> \${canon_debug_file}\"
+
+canon_debug_id_file=\$(readlink -f \${id_debug_file})
+
+test -f \"\$canon_debug_id_file\" \\
+ || echo \"Cannot resolve debug build-id file \${id_debug_file} -> \${canon_debug_id_file}\"
+
+test \"\$canon_debug_file\" = \"\$canon_debug_id_file\" \\
+ || echo \"debug and build-id not linked\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:59"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links alldebug" \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be zero build-id files in the main package
+# Main and debug should be in the debuginfo package,
+# plus the .build-id/xx subdir, 3 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+id_main_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 0
+hello debuginfo build-id files: 3
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_144
+#AT_START_145
+at_fn_group_banner 145 'rpmbuildid.at:149' \
+ "rpmbuild buildid alldebug unique debug names" " " 10
+at_xfail=no
+(
+ $as_echo "145. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:151:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links alldebug\" \\
+ --define=\"_unique_debug_names 1\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be zero build-id files in the main package
+# Main and debug should be in the debuginfo package,
+# plus the .build-id/xx subdir, 3 in total.
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f \"\${main_file}\" || echo \"No main file \${main_file}\"
+
+# Extract the build-id from the main file
+id_main=\$(file \$main_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+id_main_file=\"./usr/lib/debug/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_main_file\" || echo \"No build-id file \$id_main_file\"
+
+canon_main_file=\$(readlink -f \${main_file})
+
+test -f \"\$canon_main_file\" \\
+ || echo \"Cannot resolve main file \${main_file} -> \${canon_main_file}\"
+
+canon_main_id_file=\$(readlink -f \${id_main_file})
+
+test -f \"\$canon_main_id_file\" \\
+ || echo \"Cannot resolve main build-id file \${id_main_file} -> \${canon_main_id_file}\"
+
+test \"\$canon_main_file\" = \"\$canon_main_id_file\" \\
+ || echo \"main and build-id file not linked\"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*.debug
+test -f \${debug_file} || echo \"No debug file \${debug_file}\"
+
+# Extract the build-id from the .debug file
+id_debug=\$(file \$debug_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \${id_main} = \${id_debug} || echo \"unequal main and debug id\"
+
+id_debug_file=\"./usr/lib/debug/.build-id/\${id_debug:0:2}/\${id_debug:2}.debug\"
+test -L \"\$id_debug_file\" || echo \"No build-id file \$id_debug_file\"
+
+canon_debug_file=\$(readlink -f \${debug_file})
+
+test -f \"\$canon_debug_file\" \\
+ || echo \"Cannot resolve debug file \${debug_file} -> \${canon_debug_file}\"
+
+canon_debug_id_file=\$(readlink -f \${id_debug_file})
+
+test -f \"\$canon_debug_id_file\" \\
+ || echo \"Cannot resolve debug build-id file \${id_debug_file} -> \${canon_debug_id_file}\"
+
+test \"\$canon_debug_file\" = \"\$canon_debug_id_file\" \\
+ || echo \"debug and build-id not linked\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:151"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links alldebug" \
+ --define="_unique_debug_names 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be zero build-id files in the main package
+# Main and debug should be in the debuginfo package,
+# plus the .build-id/xx subdir, 3 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+id_main_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 0
+hello debuginfo build-id files: 3
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:151"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_145
+#AT_START_146
+at_fn_group_banner 146 'rpmbuildid.at:240' \
+ "rpmbuild buildid separate" " " 10
+at_xfail=no
+(
+ $as_echo "146. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:242:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links separate\" \\
+ --undefine \"_unique_debug_names\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package
+# plus the .build-id/xx subdir, 2 in total.
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f \"\${main_file}\" || echo \"No main file \${main_file}\"
+
+# Extract the build-id from the main file
+id_main=\$(file \$main_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+id_main_file=\"./usr/lib/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_main_file\" || echo \"No build-id file \$id_main_file\"
+
+canon_main_file=\$(readlink -f \${main_file})
+
+test -f \"\$canon_main_file\" \\
+ || echo \"Cannot resolve main file \${main_file} -> \${canon_main_file}\"
+
+canon_main_id_file=\$(readlink -f \${id_main_file})
+
+test -f \"\$canon_main_id_file\" \\
+ || echo \"Cannot resolve main build-id file \${id_main_file} -> \${canon_main_id_file}\"
+
+test \"\$canon_main_file\" = \"\$canon_main_id_file\" \\
+ || echo \"main and build-id file not linked\"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f \${debug_file} || echo \"No debug file \${debug_file}\"
+
+# Extract the build-id from the .debug file
+id_debug=\$(file \$debug_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \${id_main} = \${id_debug} || echo \"unequal main and debug id\"
+
+id_debug_file=\"./usr/lib/debug/.build-id/\${id_debug:0:2}/\${id_debug:2}.debug\"
+test -L \"\$id_debug_file\" || echo \"No build-id file \$id_debug_file\"
+
+canon_debug_file=\$(readlink -f \${debug_file})
+
+test -f \"\$canon_debug_file\" \\
+ || echo \"Cannot resolve debug file \${debug_file} -> \${canon_debug_file}\"
+
+canon_debug_id_file=\$(readlink -f \${id_debug_file})
+
+test -f \"\$canon_debug_id_file\" \\
+ || echo \"Cannot resolve debug build-id file \${id_debug_file} -> \${canon_debug_id_file}\"
+
+test \"\$canon_debug_file\" = \"\$canon_debug_id_file\" \\
+ || echo \"debug and build-id not linked\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:242"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links separate" \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package
+# plus the .build-id/xx subdir, 2 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 2
+hello debuginfo build-id files: 2
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:242"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_146
+#AT_START_147
+at_fn_group_banner 147 'rpmbuildid.at:331' \
+ "rpmbuild buildid separate unique debug names" " " 10
+at_xfail=no
+(
+ $as_echo "147. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:333:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links separate\" \\
+ --define=\"_unique_debug_names 1\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package
+# plus the .build-id/xx subdir, 2 in total.
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f \"\${main_file}\" || echo \"No main file \${main_file}\"
+
+# Extract the build-id from the main file
+id_main=\$(file \$main_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+id_main_file=\"./usr/lib/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_main_file\" || echo \"No build-id file \$id_main_file\"
+
+canon_main_file=\$(readlink -f \${main_file})
+
+test -f \"\$canon_main_file\" \\
+ || echo \"Cannot resolve main file \${main_file} -> \${canon_main_file}\"
+
+canon_main_id_file=\$(readlink -f \${id_main_file})
+
+test -f \"\$canon_main_id_file\" \\
+ || echo \"Cannot resolve main build-id file \${id_main_file} -> \${canon_main_id_file}\"
+
+test \"\$canon_main_file\" = \"\$canon_main_id_file\" \\
+ || echo \"main and build-id file not linked\"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*.debug
+test -f \${debug_file} || echo \"No debug file \${debug_file}\"
+
+# Extract the build-id from the .debug file
+id_debug=\$(file \$debug_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \${id_main} = \${id_debug} || echo \"unequal main and debug id\"
+
+id_debug_file=\"./usr/lib/debug/.build-id/\${id_debug:0:2}/\${id_debug:2}.debug\"
+test -L \"\$id_debug_file\" || echo \"No build-id file \$id_debug_file\"
+
+canon_debug_file=\$(readlink -f \${debug_file})
+
+test -f \"\$canon_debug_file\" \\
+ || echo \"Cannot resolve debug file \${debug_file} -> \${canon_debug_file}\"
+
+canon_debug_id_file=\$(readlink -f \${id_debug_file})
+
+test -f \"\$canon_debug_id_file\" \\
+ || echo \"Cannot resolve debug build-id file \${id_debug_file} -> \${canon_debug_id_file}\"
+
+test \"\$canon_debug_file\" = \"\$canon_debug_id_file\" \\
+ || echo \"debug and build-id not linked\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:333"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links separate" \
+ --define="_unique_debug_names 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package
+# plus the .build-id/xx subdir, 2 in total.
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 2
+hello debuginfo build-id files: 2
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:333"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_147
+#AT_START_148
+at_fn_group_banner 148 'rpmbuildid.at:421' \
+ "rpmbuild buildid compat" " " 10
+at_xfail=no
+(
+ $as_echo "148. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:423:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links compat\" \\
+ --undefine \"_unique_debug_names\" \\
+ --undefine \"_unique_debug_srcs\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package.
+# the debuginfo package has one extra main build-id compat symlink
+# plus the .build-id/xx subdir, 2 in total in main, 3 in total in debug
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f \"\${main_file}\" || echo \"No main file \${main_file}\"
+
+# Extract the build-id from the main file
+id_main=\$(file \$main_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+id_main_file=\"./usr/lib/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_main_file\" || echo \"No build-id file \$id_main_file\"
+
+canon_main_file=\$(readlink -f \${main_file})
+
+test -f \"\$canon_main_file\" \\
+ || echo \"Cannot resolve main file \${main_file} -> \${canon_main_file}\"
+
+canon_main_id_file=\$(readlink -f \${id_main_file})
+
+test -f \"\$canon_main_id_file\" \\
+ || echo \"Cannot resolve main build-id file \${id_main_file} -> \${canon_main_id_file}\"
+
+test \"\$canon_main_file\" = \"\$canon_main_id_file\" \\
+ || echo \"main and build-id file not linked\"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f \${debug_file} || echo \"No debug file \${debug_file}\"
+
+# Extract the build-id from the .debug file
+id_debug=\$(file \$debug_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \${id_main} = \${id_debug} || echo \"unequal main and debug id\"
+
+id_debug_file=\"./usr/lib/debug/.build-id/\${id_debug:0:2}/\${id_debug:2}.debug\"
+test -L \"\$id_debug_file\" || echo \"No build-id file \$id_debug_file\"
+
+canon_debug_file=\$(readlink -f \${debug_file})
+
+test -f \"\$canon_debug_file\" \\
+ || echo \"Cannot resolve debug file \${debug_file} -> \${canon_debug_file}\"
+
+canon_debug_id_file=\$(readlink -f \${id_debug_file})
+
+test -f \"\$canon_debug_id_file\" \\
+ || echo \"Cannot resolve debug build-id file \${id_debug_file} -> \${canon_debug_id_file}\"
+
+test \"\$canon_debug_file\" = \"\$canon_debug_id_file\" \\
+ || echo \"debug and build-id not linked\"
+
+# The compat link should also point to the same (indirectly).
+id_compat_file=\"./usr/lib/debug/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_compat_file\" || echo \"No build-id compat file \$id_compat_file\"
+
+canon_compat_file=\$(readlink -f \${id_compat_file})
+
+test -f \"\$canon_compat_file\" \\
+ || echo \"Cannot resolve compat file \${id_compat_file} -> \${canon_compat_file}\"
+
+test \"\$canon_compat_file\" = \"\$canon_main_file\" \\
+ || echo \"compat and build-id not linked\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:423"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --undefine "_unique_debug_names" \
+ --undefine "_unique_debug_srcs" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package.
+# the debuginfo package has one extra main build-id compat symlink
+# plus the .build-id/xx subdir, 2 in total in main, 3 in total in debug
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello.debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+# The compat link should also point to the same (indirectly).
+id_compat_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_compat_file" || echo "No build-id compat file $id_compat_file"
+
+canon_compat_file=$(readlink -f ${id_compat_file})
+
+test -f "$canon_compat_file" \
+ || echo "Cannot resolve compat file ${id_compat_file} -> ${canon_compat_file}"
+
+test "$canon_compat_file" = "$canon_main_file" \
+ || echo "compat and build-id not linked"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 2
+hello debuginfo build-id files: 3
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:423"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_148
+#AT_START_149
+at_fn_group_banner 149 'rpmbuildid.at:525' \
+ "rpmbuild buildid compat unique debug names" " " 10
+at_xfail=no
+(
+ $as_echo "149. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:527:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links compat\" \\
+ --define=\"_unique_debug_names 1\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package.
+# the debuginfo package has one extra main build-id compat symlink
+# plus the .build-id/xx subdir, 2 in total in main, 3 in total in debug
+echo -n \"hello build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+echo -n \"hello debuginfo build-id files: \"
+run rpm -ql -p \"\${TOPDIR}\"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f \"\${main_file}\" || echo \"No main file \${main_file}\"
+
+# Extract the build-id from the main file
+id_main=\$(file \$main_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+id_main_file=\"./usr/lib/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_main_file\" || echo \"No build-id file \$id_main_file\"
+
+canon_main_file=\$(readlink -f \${main_file})
+
+test -f \"\$canon_main_file\" \\
+ || echo \"Cannot resolve main file \${main_file} -> \${canon_main_file}\"
+
+canon_main_id_file=\$(readlink -f \${id_main_file})
+
+test -f \"\$canon_main_id_file\" \\
+ || echo \"Cannot resolve main build-id file \${id_main_file} -> \${canon_main_id_file}\"
+
+test \"\$canon_main_file\" = \"\$canon_main_id_file\" \\
+ || echo \"main and build-id file not linked\"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*debug
+test -f \${debug_file} || echo \"No debug file \${debug_file}\"
+
+# Extract the build-id from the .debug file
+id_debug=\$(file \$debug_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+test \${id_main} = \${id_debug} || echo \"unequal main and debug id\"
+
+id_debug_file=\"./usr/lib/debug/.build-id/\${id_debug:0:2}/\${id_debug:2}.debug\"
+test -L \"\$id_debug_file\" || echo \"No build-id file \$id_debug_file\"
+
+canon_debug_file=\$(readlink -f \${debug_file})
+
+test -f \"\$canon_debug_file\" \\
+ || echo \"Cannot resolve debug file \${debug_file} -> \${canon_debug_file}\"
+
+canon_debug_id_file=\$(readlink -f \${id_debug_file})
+
+test -f \"\$canon_debug_id_file\" \\
+ || echo \"Cannot resolve debug build-id file \${id_debug_file} -> \${canon_debug_id_file}\"
+
+test \"\$canon_debug_file\" = \"\$canon_debug_id_file\" \\
+ || echo \"debug and build-id not linked\"
+
+# The compat link should also point to the same (indirectly).
+id_compat_file=\"./usr/lib/debug/.build-id/\${id_main:0:2}/\${id_main:2}\"
+test -L \"\$id_compat_file\" || echo \"No build-id compat file \$id_compat_file\"
+
+canon_compat_file=\$(readlink -f \${id_compat_file})
+
+test -f \"\$canon_compat_file\" \\
+ || echo \"Cannot resolve compat file \${id_compat_file} -> \${canon_compat_file}\"
+
+test \"\$canon_compat_file\" = \"\$canon_main_file\" \\
+ || echo \"compat and build-id not linked\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:527"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --define="_unique_debug_names 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+# There should be one build-id files in the main and debuginfo package.
+# the debuginfo package has one extra main build-id compat symlink
+# plus the .build-id/xx subdir, 2 in total in main, 3 in total in debug
+echo -n "hello build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+echo -n "hello debuginfo build-id files: "
+run rpm -ql -p "${TOPDIR}"/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | grep /.build-id/ | wc --lines
+
+# Extract the both packages to check the build-id files link to the
+# main and .debug files.
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \
+ | cpio -diu
+
+# Check there is a build-id symlink for the main file.
+main_file=./usr/local/bin/hello
+test -f "${main_file}" || echo "No main file ${main_file}"
+
+# Extract the build-id from the main file
+id_main=$(file $main_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+id_main_file="./usr/lib/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_main_file" || echo "No build-id file $id_main_file"
+
+canon_main_file=$(readlink -f ${main_file})
+
+test -f "$canon_main_file" \
+ || echo "Cannot resolve main file ${main_file} -> ${canon_main_file}"
+
+canon_main_id_file=$(readlink -f ${id_main_file})
+
+test -f "$canon_main_id_file" \
+ || echo "Cannot resolve main build-id file ${id_main_file} -> ${canon_main_id_file}"
+
+test "$canon_main_file" = "$canon_main_id_file" \
+ || echo "main and build-id file not linked"
+
+# And check the same for the debug file.
+debug_file=./usr/lib/debug/usr/local/bin/hello-*debug
+test -f ${debug_file} || echo "No debug file ${debug_file}"
+
+# Extract the build-id from the .debug file
+id_debug=$(file $debug_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+test ${id_main} = ${id_debug} || echo "unequal main and debug id"
+
+id_debug_file="./usr/lib/debug/.build-id/${id_debug:0:2}/${id_debug:2}.debug"
+test -L "$id_debug_file" || echo "No build-id file $id_debug_file"
+
+canon_debug_file=$(readlink -f ${debug_file})
+
+test -f "$canon_debug_file" \
+ || echo "Cannot resolve debug file ${debug_file} -> ${canon_debug_file}"
+
+canon_debug_id_file=$(readlink -f ${id_debug_file})
+
+test -f "$canon_debug_id_file" \
+ || echo "Cannot resolve debug build-id file ${id_debug_file} -> ${canon_debug_id_file}"
+
+test "$canon_debug_file" = "$canon_debug_id_file" \
+ || echo "debug and build-id not linked"
+
+# The compat link should also point to the same (indirectly).
+id_compat_file="./usr/lib/debug/.build-id/${id_main:0:2}/${id_main:2}"
+test -L "$id_compat_file" || echo "No build-id compat file $id_compat_file"
+
+canon_compat_file=$(readlink -f ${id_compat_file})
+
+test -f "$canon_compat_file" \
+ || echo "Cannot resolve compat file ${id_compat_file} -> ${canon_compat_file}"
+
+test "$canon_compat_file" = "$canon_main_file" \
+ || echo "compat and build-id not linked"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "hello build-id files: 2
+hello debuginfo build-id files: 3
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:527"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_149
+#AT_START_150
+at_fn_group_banner 150 'rpmbuildid.at:629' \
+ "rpmbuild buildid duplicate alldebug" " " 10
+at_xfail=no
+(
+ $as_echo "150. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:631:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \\
+ --define=\"_build_id_links alldebug\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2cp.spec 2>&1 | grep \"^warning: \" \\
+ | cut -f1-3 -d' '
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# alldebug not here...
+id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$id_file\" && echo \"main id in main package\"
+id_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$id_dup_file\" && echo \"main dup id in main package\"
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# alldebug, so they are all here
+test -L \"\$id_file\" && echo \"main id in debug package\"
+test -L \"\$id_dup_file\" && echo \"main dup id in debug package\"
+
+debug_id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.debug\"
+test -L \"\$debug_id_file\" && echo \"debug id in debug package\"
+debug_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1.debug\"
+test -L \"\$debug_dup_file\" && echo \"debug dup id in debug package\"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=\$(readlink -f \${id_file})
+canon_dup_file=\$(readlink -f \${id_dup_file})
+test \"\$canon_id_file\" != \"\$canon_dup_file\" \\
+ || echo \"id and dup same\"
+
+canon_debug_id_file=\$(readlink -f \${debug_id_file})
+canon_debug_dup_file=\$(readlink -f \${debug_dup_file})
+test \"\$canon_debug_id_file\" != \"\$canon_debug_dup_file\" \\
+ || echo \"debug id and dup same\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:631"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \
+ --define="_build_id_links alldebug" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2cp.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# alldebug not here...
+id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# alldebug, so they are all here
+test -L "$id_file" && echo "main id in debug package"
+test -L "$id_dup_file" && echo "main dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "warning: Duplicate build-ids
+warning: Duplicate build-ids
+main id in debug package
+main dup id in debug package
+debug id in debug package
+debug dup id in debug package
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:631"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_150
+#AT_START_151
+at_fn_group_banner 151 'rpmbuildid.at:697' \
+ "rpmbuild buildid hardlink alldebug" " " 10
+at_xfail=no
+(
+ $as_echo "151. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:699:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \\
+ --define=\"_build_id_links alldebug\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2ln.spec 2>&1 | grep \"^warning: \" \\
+ | cut -f1-3 -d' '
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# alldebug not here...
+id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$id_file\" && echo \"main id in main package\"
+id_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$id_dup_file\" && echo \"main dup id in main package\"
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# alldebug, so they are all here
+test -L \"\$id_file\" && echo \"main id in debug package\"
+test -L \"\$id_dup_file\" && echo \"main dup id in debug package\"
+
+debug_id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.debug\"
+test -L \"\$debug_id_file\" && echo \"debug id in debug package\"
+debug_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1.debug\"
+test -L \"\$debug_dup_file\" && echo \"debug dup id in debug package\"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=\$(readlink -f \${id_file})
+canon_dup_file=\$(readlink -f \${id_dup_file})
+test \"\$canon_id_file\" != \"\$canon_dup_file\" \\
+ || echo \"id and dup same\"
+
+canon_debug_id_file=\$(readlink -f \${debug_id_file})
+canon_debug_dup_file=\$(readlink -f \${debug_dup_file})
+test \"\$canon_debug_id_file\" != \"\$canon_debug_dup_file\" \\
+ || echo \"debug id and dup same\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:699"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_build_id_links alldebug" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2ln.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# alldebug not here...
+id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# alldebug, so they are all here
+test -L "$id_file" && echo "main id in debug package"
+test -L "$id_dup_file" && echo "main dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "main id in debug package
+main dup id in debug package
+debug id in debug package
+debug dup id in debug package
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:699"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_151
+#AT_START_152
+at_fn_group_banner 152 'rpmbuildid.at:762' \
+ "rpmbuild buildid duplicate separate" " " 10
+at_xfail=no
+(
+ $as_echo "152. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:764:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \\
+ --define=\"_build_id_links separate\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2cp.spec 2>&1 | grep \"^warning: \" \\
+ | cut -f1-3 -d' '
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# separate build-ids split...
+id_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$id_file\" && echo \"main id in main package\"
+id_dup_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$id_dup_file\" && echo \"main dup id in main package\"
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# separate, so debug ids are here
+debug_id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.debug\"
+test -L \"\$debug_id_file\" && echo \"debug id in debug package\"
+debug_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1.debug\"
+test -L \"\$debug_dup_file\" && echo \"debug dup id in debug package\"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=\$(readlink -f \${id_file})
+canon_dup_file=\$(readlink -f \${id_dup_file})
+test \"\$canon_id_file\" != \"\$canon_dup_file\" \\
+ || echo \"id and dup same\"
+
+canon_debug_id_file=\$(readlink -f \${debug_id_file})
+canon_debug_dup_file=\$(readlink -f \${debug_dup_file})
+test \"\$canon_debug_id_file\" != \"\$canon_debug_dup_file\" \\
+ || echo \"debug id and dup same\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:764"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \
+ --define="_build_id_links separate" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2cp.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# separate build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# separate, so debug ids are here
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "warning: Duplicate build-ids
+warning: Duplicate build-ids
+main id in main package
+main dup id in main package
+debug id in debug package
+debug dup id in debug package
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:764"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_152
+#AT_START_153
+at_fn_group_banner 153 'rpmbuildid.at:827' \
+ "rpmbuild buildid hardlink separate" " " 10
+at_xfail=no
+(
+ $as_echo "153. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:829:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \\
+ --define=\"_build_id_links separate\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2ln.spec 2>&1 | grep \"^warning: \" \\
+ | cut -f1-3 -d' '
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# separate build-ids split...
+id_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$id_file\" && echo \"main id in main package\"
+id_dup_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$id_dup_file\" && echo \"main dup id in main package\"
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# separate, so debug ids are here
+debug_id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.debug\"
+test -L \"\$debug_id_file\" && echo \"debug id in debug package\"
+debug_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1.debug\"
+test -L \"\$debug_dup_file\" && echo \"debug dup id in debug package\"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=\$(readlink -f \${id_file})
+canon_dup_file=\$(readlink -f \${id_dup_file})
+test \"\$canon_id_file\" != \"\$canon_dup_file\" \\
+ || echo \"id and dup same\"
+
+canon_debug_id_file=\$(readlink -f \${debug_id_file})
+canon_debug_dup_file=\$(readlink -f \${debug_dup_file})
+test \"\$canon_debug_id_file\" != \"\$canon_debug_dup_file\" \\
+ || echo \"debug id and dup same\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:829"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_build_id_links separate" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2ln.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# separate build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# separate, so debug ids are here
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "main id in main package
+main dup id in main package
+debug id in debug package
+debug dup id in debug package
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:829"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_153
+#AT_START_154
+at_fn_group_banner 154 'rpmbuildid.at:889' \
+ "rpmbuild buildid duplicate compat" " " 10
+at_xfail=no
+(
+ $as_echo "154. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:891:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \\
+ --define=\"_build_id_links compat\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2cp.spec 2>&1 | grep \"^warning: \" \\
+ | cut -f1-3 -d' '
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# compat build-ids split...
+id_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$id_file\" && echo \"main id in main package\"
+id_dup_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$id_dup_file\" && echo \"main dup id in main package\"
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# compat, so main (and debug) ids are (also) here
+compat_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$compat_file\" && echo \"compat id in debug package\"
+compat_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$compat_dup_file\" && echo \"compat dup id in debug package\"
+
+debug_id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.debug\"
+test -L \"\$debug_id_file\" && echo \"debug id in debug package\"
+debug_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1.debug\"
+test -L \"\$debug_dup_file\" && echo \"debug dup id in debug package\"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=\$(readlink -f \${id_file})
+canon_dup_file=\$(readlink -f \${id_dup_file})
+test \"\$canon_id_file\" != \"\$canon_dup_file\" \\
+ || echo \"id and dup same\"
+
+canon_debug_id_file=\$(readlink -f \${debug_id_file})
+canon_debug_dup_file=\$(readlink -f \${debug_dup_file})
+test \"\$canon_debug_id_file\" != \"\$canon_debug_dup_file\" \\
+ || echo \"debug id and dup same\"
+
+canon_compat_file=\$(readlink -f \${compat_file})
+canon_compat_dup_file=\$(readlink -f \${compat_dup_file})
+test \"\$canon_compat_file\" != \"\$canon_compat_dup_file\" \\
+ || echo \"compat id and dup same\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:891"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Should create two warnings
+rundebug rpmbuild --quiet \
+ --define="_build_id_links compat" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2cp.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# compat build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# compat, so main (and debug) ids are (also) here
+compat_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$compat_file" && echo "compat id in debug package"
+compat_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$compat_dup_file" && echo "compat dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+canon_compat_file=$(readlink -f ${compat_file})
+canon_compat_dup_file=$(readlink -f ${compat_dup_file})
+test "$canon_compat_file" != "$canon_compat_dup_file" \
+ || echo "compat id and dup same"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "warning: Duplicate build-ids
+warning: Duplicate build-ids
+main id in main package
+main dup id in main package
+compat id in debug package
+compat dup id in debug package
+debug id in debug package
+debug dup id in debug package
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:891"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_154
+#AT_START_155
+at_fn_group_banner 155 'rpmbuildid.at:966' \
+ "rpmbuild buildid hardlink compat" " " 10
+at_xfail=no
+(
+ $as_echo "155. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:968:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \\
+ --define=\"_build_id_links compat\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello2ln.spec 2>&1 | grep \"^warning: \" \\
+ | cut -f1-3 -d' '
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# compat build-ids split...
+id_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$id_file\" && echo \"main id in main package\"
+id_dup_file=\"./usr/lib/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$id_dup_file\" && echo \"main dup id in main package\"
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+# compat, so main (and debug) ids are (also) here
+compat_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}\"
+test -L \"\$compat_file\" && echo \"compat id in debug package\"
+compat_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1\"
+test -L \"\$compat_dup_file\" && echo \"compat dup id in debug package\"
+
+debug_id_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.debug\"
+test -L \"\$debug_id_file\" && echo \"debug id in debug package\"
+debug_dup_file=\"./usr/lib/debug/.build-id/\${id:0:2}/\${id:2}.1.debug\"
+test -L \"\$debug_dup_file\" && echo \"debug dup id in debug package\"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=\$(readlink -f \${id_file})
+canon_dup_file=\$(readlink -f \${id_dup_file})
+test \"\$canon_id_file\" != \"\$canon_dup_file\" \\
+ || echo \"id and dup same\"
+
+canon_debug_id_file=\$(readlink -f \${debug_id_file})
+canon_debug_dup_file=\$(readlink -f \${debug_dup_file})
+test \"\$canon_debug_id_file\" != \"\$canon_debug_dup_file\" \\
+ || echo \"debug id and dup same\"
+
+canon_compat_file=\$(readlink -f \${compat_file})
+canon_compat_dup_file=\$(readlink -f \${compat_dup_file})
+test \"\$canon_compat_file\" != \"\$canon_compat_dup_file\" \\
+ || echo \"compat id and dup same\"
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:968"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_build_id_links compat" \
+ -ba "${abs_srcdir}"/data/SPECS/hello2ln.spec 2>&1 | grep "^warning: " \
+ | cut -f1-3 -d' '
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+id=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# compat build-ids split...
+id_file="./usr/lib/.build-id/${id:0:2}/${id:2}"
+test -L "$id_file" && echo "main id in main package"
+id_dup_file="./usr/lib/.build-id/${id:0:2}/${id:2}.1"
+test -L "$id_dup_file" && echo "main dup id in main package"
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+# compat, so main (and debug) ids are (also) here
+compat_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}"
+test -L "$compat_file" && echo "compat id in debug package"
+compat_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1"
+test -L "$compat_dup_file" && echo "compat dup id in debug package"
+
+debug_id_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
+test -L "$debug_id_file" && echo "debug id in debug package"
+debug_dup_file="./usr/lib/debug/.build-id/${id:0:2}/${id:2}.1.debug"
+test -L "$debug_dup_file" && echo "debug dup id in debug package"
+
+# We don't know which points to which, but we do know they point
+# to different files.
+canon_id_file=$(readlink -f ${id_file})
+canon_dup_file=$(readlink -f ${id_dup_file})
+test "$canon_id_file" != "$canon_dup_file" \
+ || echo "id and dup same"
+
+canon_debug_id_file=$(readlink -f ${debug_id_file})
+canon_debug_dup_file=$(readlink -f ${debug_dup_file})
+test "$canon_debug_id_file" != "$canon_debug_dup_file" \
+ || echo "debug id and dup same"
+
+canon_compat_file=$(readlink -f ${compat_file})
+canon_compat_dup_file=$(readlink -f ${compat_dup_file})
+test "$canon_compat_file" != "$canon_compat_dup_file" \
+ || echo "compat id and dup same"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "main id in main package
+main dup id in main package
+compat id in debug package
+compat dup id in debug package
+debug id in debug package
+debug dup id in debug package
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:968"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_155
+#AT_START_156
+at_fn_group_banner 156 'rpmbuildid.at:1039' \
+ "rpmbuild buildid recompute" " " 10
+at_xfail=no
+(
+ $as_echo "156. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:1041:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# Make sure we get debuginfo
+export CFLAGS=\"-g\"
+
+# Unique 1
+rundebug rpmbuild --quiet \\
+ --define=\"_unique_build_ids 1\" \\
+ --undefine=\"_no_recompute_build_ids\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id1=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# Make sure we generate a new one
+rm \$hello_file
+
+# Unique 2
+# Build the \"next\" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \\
+ --define=\"_unique_build_ids 1\" \\
+ --undefine=\"_no_recompute_build_ids\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello-r2.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \\
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id2=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# Two unique builds should not be equal
+if test \"\$id1\" == \"\$id2\"; then
+ echo \"uniques equal\";
+else
+ echo \"uniques unequal\";
+fi
+
+# Make sure we generate a new one
+rm \$hello_file
+
+# no-recompute 1
+rundebug rpmbuild --quiet \\
+ --undefine=\"_unique_build_ids\" \\
+ --undefine=\"_unique_debug_names\" \\
+ --undefine=\"_unique_debug_srcs\" \\
+ --define=\"_no_recompute_build_ids 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id3=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# An unique and no-recompute build should be unequal
+if test \"\$id2\" == \"\$id3\"; then
+ echo \"no-recompute unique equal\";
+else
+ echo \"no-recompute unique unequal\";
+fi
+
+# Make sure we generate a new one
+rm \$hello_file
+
+# no-recompute 2
+# Build the \"next\" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \\
+ --undefine=\"_unique_build_ids\" \\
+ --undefine=\"_unique_debug_names\" \\
+ --undefine=\"_unique_debug_srcs\" \\
+ --define=\"_no_recompute_build_ids 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello-r2.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \\
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id4=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# Two no-recompute builds should be equal. Even for different \"releases\".
+if test \"\$id3\" == \"\$id4\"; then
+ echo \"no-recomputes equal\";
+else
+ echo \"no-recomputes unequal\";
+fi
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:1041"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# Make sure we get debuginfo
+export CFLAGS="-g"
+
+# Unique 1
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ --undefine="_no_recompute_build_ids" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id1=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# Make sure we generate a new one
+rm $hello_file
+
+# Unique 2
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ --undefine="_no_recompute_build_ids" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id2=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# Two unique builds should not be equal
+if test "$id1" == "$id2"; then
+ echo "uniques equal";
+else
+ echo "uniques unequal";
+fi
+
+# Make sure we generate a new one
+rm $hello_file
+
+# no-recompute 1
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ --define="_no_recompute_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id3=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# An unique and no-recompute build should be unequal
+if test "$id2" == "$id3"; then
+ echo "no-recompute unique equal";
+else
+ echo "no-recompute unique unequal";
+fi
+
+# Make sure we generate a new one
+rm $hello_file
+
+# no-recompute 2
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ --define="_no_recompute_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id4=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# Two no-recompute builds should be equal. Even for different "releases".
+if test "$id3" == "$id4"; then
+ echo "no-recomputes equal";
+else
+ echo "no-recomputes unequal";
+fi
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "uniques unequal
+no-recompute unique unequal
+no-recomputes equal
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:1041"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_156
+#AT_START_157
+at_fn_group_banner 157 'rpmbuildid.at:1153' \
+ "rpmbuild buildid unique r1 r2" " " 10
+at_xfail=no
+(
+ $as_echo "157. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:1155:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \\
+ --define=\"_unique_build_ids 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id1=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# Make sure we generate a new one
+rm \$hello_file
+
+# Build the \"next\" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \\
+ --define=\"_unique_build_ids 1\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello-r2.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \\
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id2=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+if test \"\$id1\" == \"\$id2\"; then echo \"equal \$id1\"; else echo \"unequal\"; fi
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:1155"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id1=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# Make sure we generate a new one
+rm $hello_file
+
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --define="_unique_build_ids 1" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id2=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+if test "$id1" == "$id2"; then echo "equal $id1"; else echo "unequal"; fi
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "unequal
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:1155"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_157
+#AT_START_158
+at_fn_group_banner 158 'rpmbuildid.at:1201' \
+ "rpmbuild buildid non-unique r1 r2" " " 10
+at_xfail=no
+(
+ $as_echo "158. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:1203:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp \"\${abs_srcdir}\"/data/SOURCES/hello-1.0.tar.gz \"\${abs_srcdir}\"/data/SOURCES/hello-1.0-modernize.patch \${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \\
+ --undefine=\"_unique_build_ids\" \\
+ --undefine=\"_unique_debug_names\" \\
+ --undefine=\"_unique_debug_srcs\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \\
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id1=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+# Make sure we generate a new one
+rm \$hello_file
+
+# Build the \"next\" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \\
+ --undefine=\"_unique_build_ids\" \\
+ --undefine=\"_unique_debug_names\" \\
+ --undefine=\"_unique_debug_srcs\" \\
+ -ba \"\${abs_srcdir}\"/data/SPECS/hello-r2.spec
+
+rpm2cpio \${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \\
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f \$hello_file || echo \"No \$hello_file\"
+id2=\$(file \$hello_file | sed 's/.*, BuildID\\[.*\\]=\\([0-9a-f]*\\),.*/\\1/')
+
+if test \"\$id1\" == \"\$id2\"; then echo \"equal\"; else echo \"unequal \$id1 \$id2\"; fi
+"
+at_fn_check_prepare_notrace 'a $(...) command substitution' "rpmbuildid.at:1203"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES
+
+# No warnings for hard links
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm \
+ | cpio -diu --quiet
+
+hello_file=./usr/local/bin/hello
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id1=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+# Make sure we generate a new one
+rm $hello_file
+
+# Build the "next" release, which has no changes except for the release update.
+rundebug rpmbuild --quiet \
+ --undefine="_unique_build_ids" \
+ --undefine="_unique_debug_names" \
+ --undefine="_unique_debug_srcs" \
+ -ba "${abs_srcdir}"/data/SPECS/hello-r2.spec
+
+rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-2.*.rpm \
+ | cpio -diu --quiet
+
+# Extract the build-id from the main file
+test -f $hello_file || echo "No $hello_file"
+id2=$(file $hello_file | sed 's/.*, BuildID\[.*\]=\([0-9a-f]*\),.*/\1/')
+
+if test "$id1" == "$id2"; then echo "equal"; else echo "unequal $id1 $id2"; fi
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "equal
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:1203"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_158
+#AT_START_159
+at_fn_group_banner 159 'rpmbuildid.at:1253' \
+ "rpmbuild buildid attrs" " " 10
+at_xfail=no
+(
+ $as_echo "159. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:1255:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links compat\" \\
+ --define \"_unique_debug_names 1\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello-attr-buildid.spec
+
+run rpm -qp --qf \"[%{filenames} %{filemodes:perms}\\n]\" \\
+ \${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm \\
+ | grep \"build-id d\"
+
+run rpm -qp --qf \"[%{filenames} %{filemodes:perms}\\n]\" \\
+ \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm \\
+ | grep \"build-id d\"
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuildid.at:1255"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-attr-buildid.spec
+
+run rpm -qp --qf "[%{filenames} %{filemodes:perms}\n]" \
+ ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm \
+ | grep "build-id d"
+
+run rpm -qp --qf "[%{filenames} %{filemodes:perms}\n]" \
+ ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm \
+ | grep "build-id d"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "/usr/lib/.build-id drwxr-xr-x
+/usr/lib/debug/.build-id drwxr-xr-x
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:1255"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_159
+#AT_START_160
+at_fn_group_banner 160 'rpmbuildid.at:1287' \
+ "rpmbuild buildid config attrs" " " 10
+at_xfail=no
+(
+ $as_echo "160. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmbuildid.at:1289:
+rm -rf \${TOPDIR}
+as_dir=\${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp \"\${abs_srcdir}\"/data/SOURCES/hello.c \${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \\
+ --define=\"_build_id_links compat\" \\
+ --define \"_unique_debug_names 1\" \\
+ --define \"_unique_debug_srcs 1\" \\
+ --quiet -ba \"\${abs_srcdir}\"/data/SPECS/hello-config-buildid.spec
+
+# Should contain one config file.
+run rpm -c -qp \${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm
+# Should not contain config files.
+run rpm -c -qp \${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmbuildid.at:1289"
+( $at_check_trace;
+rm -rf ${TOPDIR}
+as_dir=${TOPDIR}/SOURCES; as_fn_mkdir_p
+
+# Setup sources
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
+
+# Build, contains one ELF which should have a buildid.
+rundebug rpmbuild \
+ --define="_build_id_links compat" \
+ --define "_unique_debug_names 1" \
+ --define "_unique_debug_srcs 1" \
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-config-buildid.spec
+
+# Should contain one config file.
+run rpm -c -qp ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm
+# Should not contain config files.
+run rpm -c -qp ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo >>"$at_stdout"; $as_echo "/etc/config.file
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmbuildid.at:1289"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_160
+#AT_START_161
+at_fn_group_banner 161 'rpmscript.at:7' \
+ "basic scripts and arguments" " " 11
+at_xfail=no
+(
+ $as_echo "161. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmscript.at:9:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb --define \"rel 1\" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define \"rel 2\" /data/SPECS/scripts.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -Vvp /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-2.noarch.rpm
+runroot rpm -Vv scripts
+runroot rpm -e scripts
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmscript.at:9"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb --define "rel 1" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define "rel 2" /data/SPECS/scripts.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -Vvp /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-2.noarch.rpm
+runroot rpm -Vv scripts
+runroot rpm -e scripts
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "scripts-1.0-1 VERIFY 0
+scripts-1.0-1 PRETRANS 1
+scripts-1.0-1 PRE 1
+scripts-1.0-1 POST 1
+scripts-1.0-1 POSTTRANS 1
+scripts-1.0-2 PRETRANS 2
+scripts-1.0-2 PRE 2
+scripts-1.0-2 POST 2
+scripts-1.0-1 PREUN 1
+scripts-1.0-1 POSTUN 1
+scripts-1.0-2 POSTTRANS 1
+scripts-1.0-2 VERIFY 1
+scripts-1.0-2 PREUN 0
+scripts-1.0-2 POSTUN 0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmscript.at:9"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_161
+#AT_START_162
+at_fn_group_banner 162 'rpmscript.at:44' \
+ "basic trigger scripts and arguments" " " 11
+at_xfail=no
+(
+ $as_echo "162. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmscript.at:46:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb --define \"rel 1\" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define \"rel 2\" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define \"rel 1\" --define \"trigpkg scripts\" /data/SPECS/triggers.spec
+runroot rpmbuild --quiet -bb --define \"rel 2\" --define \"trigpkg scripts\" /data/SPECS/triggers.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+echo TRIGGERS 1
+runroot rpm -U /build/RPMS/noarch/triggers-1.0-1.noarch.rpm
+echo SCRIPTS 1
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+echo SCRIPTS 2
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-2.noarch.rpm
+echo TRIGGERS 2
+runroot rpm -U /build/RPMS/noarch/triggers-1.0-2.noarch.rpm
+echo ERASE
+runroot rpm -e scripts
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmscript.at:46"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb --define "rel 1" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define "rel 2" /data/SPECS/scripts.spec
+runroot rpmbuild --quiet -bb --define "rel 1" --define "trigpkg scripts" /data/SPECS/triggers.spec
+runroot rpmbuild --quiet -bb --define "rel 2" --define "trigpkg scripts" /data/SPECS/triggers.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+echo TRIGGERS 1
+runroot rpm -U /build/RPMS/noarch/triggers-1.0-1.noarch.rpm
+echo SCRIPTS 1
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-1.noarch.rpm
+echo SCRIPTS 2
+runroot rpm -U /build/RPMS/noarch/scripts-1.0-2.noarch.rpm
+echo TRIGGERS 2
+runroot rpm -U /build/RPMS/noarch/triggers-1.0-2.noarch.rpm
+echo ERASE
+runroot rpm -e scripts
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "TRIGGERS 1
+SCRIPTS 1
+scripts-1.0-1 PRETRANS 1
+triggers-1.0-1 TRIGGERPREIN 1 0
+scripts-1.0-1 PRE 1
+scripts-1.0-1 POST 1
+triggers-1.0-1 TRIGGERIN 1 1
+scripts-1.0-1 POSTTRANS 1
+SCRIPTS 2
+scripts-1.0-2 PRETRANS 2
+triggers-1.0-1 TRIGGERPREIN 1 1
+scripts-1.0-2 PRE 2
+scripts-1.0-2 POST 2
+triggers-1.0-1 TRIGGERIN 1 2
+triggers-1.0-1 TRIGGERUN 1 1
+scripts-1.0-1 PREUN 1
+scripts-1.0-1 POSTUN 1
+triggers-1.0-1 TRIGGERPOSTUN 1 1
+scripts-1.0-2 POSTTRANS 1
+TRIGGERS 2
+triggers-1.0-2 TRIGGERPREIN 1 1
+triggers-1.0-2 TRIGGERIN 2 1
+triggers-1.0-1 TRIGGERUN 1 1
+ERASE
+triggers-1.0-2 TRIGGERUN 1 0
+scripts-1.0-2 PREUN 0
+scripts-1.0-2 POSTUN 0
+triggers-1.0-2 TRIGGERPOSTUN 1 0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmscript.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_162
+#AT_START_163
+at_fn_group_banner 163 'rpmscript.at:102' \
+ "basic file trigger scripts" " " 11
+at_xfail=no
+(
+ $as_echo "163. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmscript.at:104:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+runroot rpmbuild --quiet -bb /data/SPECS/hlinktest.spec
+runroot rpmbuild --quiet -bb /data/SPECS/filetriggers.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/filetriggers-1.0-1.noarch.rpm
+echo INSTALLATION
+runroot rpm -U /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm \\
+/build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
+echo ERASE
+runroot rpm -e hello-script hlinktest
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmscript.at:104"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+runroot rpmbuild --quiet -bb /data/SPECS/hlinktest.spec
+runroot rpmbuild --quiet -bb /data/SPECS/filetriggers.spec
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/filetriggers-1.0-1.noarch.rpm
+echo INSTALLATION
+runroot rpm -U /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm \
+/build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm
+echo ERASE
+runroot rpm -e hello-script hlinktest
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "INSTALLATION
+filetriggerin(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerin(/foo*)<lua>:
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerin(/usr/bin*):
+/usr/bin/hello
+
+filetriggerin(/usr/bin*)<lua>:
+/usr/bin/hello
+
+transfiletriggerin(/usr/bin*):
+/usr/bin/hello
+
+transfiletriggerin(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+ERASE
+transfiletriggerun(/usr/bin*):
+/usr/bin/hello
+
+transfiletriggerun(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerun(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerpostun(/foo*):
+/foo/aaaa
+/foo/copyllo
+/foo/hello
+/foo/hello-bar
+/foo/hello-foo
+/foo/hello-world
+/foo/zzzz
+
+filetriggerun(/usr/bin*):
+/usr/bin/hello
+
+filetriggerpostun(/usr/bin*):
+/usr/bin/hello
+
+transfiletriggerpostun(/usr/bin*):
+
+transfiletriggerpostun(/foo*):
+
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmscript.at:104"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_163
+#AT_START_164
+at_fn_group_banner 164 'rpmscript.at:205' \
+ "basic file triggers 2" " " 11
+at_xfail=no
+(
+ $as_echo "164. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmscript.at:207:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+for v in 1.0 2.0 3.0; do
+ runroot rpmbuild --quiet -bb --define \"ver \${v}\" /data/SPECS/parallel.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -i \\
+ /build/RPMS/noarch/parallel-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/parallel-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/parallel-3.0-1.noarch.rpm
+
+echo INSTALL:
+runroot rpm -U /build/RPMS/noarch/parallel-trigger-1.0-1.noarch.rpm
+echo UPGRADE:
+runroot rpm -U /build/RPMS/noarch/parallel-trigger-2.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -e parallel-trigger
+
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmscript.at:207"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/fakeshell.spec
+for v in 1.0 2.0 3.0; do
+ runroot rpmbuild --quiet -bb --define "ver ${v}" /data/SPECS/parallel.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/fakeshell-1.0-1.noarch.rpm
+runroot rpm -i \
+ /build/RPMS/noarch/parallel-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/parallel-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/parallel-3.0-1.noarch.rpm
+
+echo INSTALL:
+runroot rpm -U /build/RPMS/noarch/parallel-trigger-1.0-1.noarch.rpm
+echo UPGRADE:
+runroot rpm -U /build/RPMS/noarch/parallel-trigger-2.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -e parallel-trigger
+
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "INSTALL:
+%filetriggerin: 0 0
+36
+%transfiletriggerin: 0 0
+36
+UPGRADE:
+%transfiletriggerun: 0 0
+36
+%filetriggerin: 0 0
+36
+%transfiletriggerin: 0 0
+36
+ERASE:
+%transfiletriggerun: 0 0
+36
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmscript.at:207"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_164
+#AT_START_165
+at_fn_group_banner 165 'rpmvercmp.at:13' \
+ "rpmvercmp(1.0, 1.0) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "165. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:13: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0\", \"1.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:13"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0", "1.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:13"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_165
+#AT_START_166
+at_fn_group_banner 166 'rpmvercmp.at:14' \
+ "rpmvercmp(1.0, 2.0) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "166. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:14: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0\", \"2.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:14"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0", "2.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:14"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_166
+#AT_START_167
+at_fn_group_banner 167 'rpmvercmp.at:15' \
+ "rpmvercmp(2.0, 1.0) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "167. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:15: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0\", \"1.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:15"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0", "1.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:15"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_167
+#AT_START_168
+at_fn_group_banner 168 'rpmvercmp.at:17' \
+ "rpmvercmp(2.0.1, 2.0.1) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "168. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:17: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0.1\", \"2.0.1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:17"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0.1", "2.0.1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:17"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_168
+#AT_START_169
+at_fn_group_banner 169 'rpmvercmp.at:18' \
+ "rpmvercmp(2.0, 2.0.1) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "169. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:18: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0\", \"2.0.1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:18"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0", "2.0.1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:18"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_169
+#AT_START_170
+at_fn_group_banner 170 'rpmvercmp.at:19' \
+ "rpmvercmp(2.0.1, 2.0) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "170. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:19: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0.1\", \"2.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:19"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0.1", "2.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:19"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_170
+#AT_START_171
+at_fn_group_banner 171 'rpmvercmp.at:21' \
+ "rpmvercmp(2.0.1a, 2.0.1a) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "171. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:21: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0.1a\", \"2.0.1a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:21"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0.1a", "2.0.1a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:21"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_171
+#AT_START_172
+at_fn_group_banner 172 'rpmvercmp.at:22' \
+ "rpmvercmp(2.0.1a, 2.0.1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "172. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:22: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0.1a\", \"2.0.1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:22"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0.1a", "2.0.1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:22"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_172
+#AT_START_173
+at_fn_group_banner 173 'rpmvercmp.at:23' \
+ "rpmvercmp(2.0.1, 2.0.1a) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "173. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:23: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0.1\", \"2.0.1a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:23"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0.1", "2.0.1a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:23"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_173
+#AT_START_174
+at_fn_group_banner 174 'rpmvercmp.at:25' \
+ "rpmvercmp(5.5p1, 5.5p1) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "174. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:25: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p1\", \"5.5p1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:25"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p1", "5.5p1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:25"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_174
+#AT_START_175
+at_fn_group_banner 175 'rpmvercmp.at:26' \
+ "rpmvercmp(5.5p1, 5.5p2) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "175. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:26: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p1\", \"5.5p2\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:26"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p1", "5.5p2"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:26"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_175
+#AT_START_176
+at_fn_group_banner 176 'rpmvercmp.at:27' \
+ "rpmvercmp(5.5p2, 5.5p1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "176. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:27: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p2\", \"5.5p1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:27"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p2", "5.5p1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:27"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_176
+#AT_START_177
+at_fn_group_banner 177 'rpmvercmp.at:29' \
+ "rpmvercmp(5.5p10, 5.5p10) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "177. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:29: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p10\", \"5.5p10\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:29"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p10", "5.5p10"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:29"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_177
+#AT_START_178
+at_fn_group_banner 178 'rpmvercmp.at:30' \
+ "rpmvercmp(5.5p1, 5.5p10) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "178. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:30: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p1\", \"5.5p10\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:30"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p1", "5.5p10"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:30"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_178
+#AT_START_179
+at_fn_group_banner 179 'rpmvercmp.at:31' \
+ "rpmvercmp(5.5p10, 5.5p1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "179. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:31: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p10\", \"5.5p1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:31"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p10", "5.5p1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:31"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_179
+#AT_START_180
+at_fn_group_banner 180 'rpmvercmp.at:33' \
+ "rpmvercmp(10xyz, 10.1xyz) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "180. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:33: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10xyz\", \"10.1xyz\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:33"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10xyz", "10.1xyz"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:33"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_180
+#AT_START_181
+at_fn_group_banner 181 'rpmvercmp.at:34' \
+ "rpmvercmp(10.1xyz, 10xyz) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "181. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:34: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10.1xyz\", \"10xyz\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:34"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10.1xyz", "10xyz"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:34"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_181
+#AT_START_182
+at_fn_group_banner 182 'rpmvercmp.at:36' \
+ "rpmvercmp(xyz10, xyz10) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "182. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:36: runroot rpm --eval '%{lua: print(rpm.vercmp(\"xyz10\", \"xyz10\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:36"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("xyz10", "xyz10"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:36"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_182
+#AT_START_183
+at_fn_group_banner 183 'rpmvercmp.at:37' \
+ "rpmvercmp(xyz10, xyz10.1) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "183. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:37: runroot rpm --eval '%{lua: print(rpm.vercmp(\"xyz10\", \"xyz10.1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:37"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("xyz10", "xyz10.1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:37"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_183
+#AT_START_184
+at_fn_group_banner 184 'rpmvercmp.at:38' \
+ "rpmvercmp(xyz10.1, xyz10) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "184. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:38: runroot rpm --eval '%{lua: print(rpm.vercmp(\"xyz10.1\", \"xyz10\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:38"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("xyz10.1", "xyz10"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:38"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_184
+#AT_START_185
+at_fn_group_banner 185 'rpmvercmp.at:40' \
+ "rpmvercmp(xyz.4, xyz.4) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "185. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:40: runroot rpm --eval '%{lua: print(rpm.vercmp(\"xyz.4\", \"xyz.4\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:40"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("xyz.4", "xyz.4"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:40"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_185
+#AT_START_186
+at_fn_group_banner 186 'rpmvercmp.at:41' \
+ "rpmvercmp(xyz.4, 8) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "186. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:41: runroot rpm --eval '%{lua: print(rpm.vercmp(\"xyz.4\", \"8\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:41"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("xyz.4", "8"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:41"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_186
+#AT_START_187
+at_fn_group_banner 187 'rpmvercmp.at:42' \
+ "rpmvercmp(8, xyz.4) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "187. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:42: runroot rpm --eval '%{lua: print(rpm.vercmp(\"8\", \"xyz.4\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:42"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("8", "xyz.4"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:42"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_187
+#AT_START_188
+at_fn_group_banner 188 'rpmvercmp.at:43' \
+ "rpmvercmp(xyz.4, 2) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "188. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:43: runroot rpm --eval '%{lua: print(rpm.vercmp(\"xyz.4\", \"2\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:43"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("xyz.4", "2"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:43"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_188
+#AT_START_189
+at_fn_group_banner 189 'rpmvercmp.at:44' \
+ "rpmvercmp(2, xyz.4) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "189. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:44: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2\", \"xyz.4\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:44"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2", "xyz.4"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:44"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_189
+#AT_START_190
+at_fn_group_banner 190 'rpmvercmp.at:46' \
+ "rpmvercmp(5.5p2, 5.6p1) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "190. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:46: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.5p2\", \"5.6p1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:46"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.5p2", "5.6p1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_190
+#AT_START_191
+at_fn_group_banner 191 'rpmvercmp.at:47' \
+ "rpmvercmp(5.6p1, 5.5p2) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "191. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:47: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.6p1\", \"5.5p2\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:47"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.6p1", "5.5p2"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:47"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_191
+#AT_START_192
+at_fn_group_banner 192 'rpmvercmp.at:49' \
+ "rpmvercmp(5.6p1, 6.5p1) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "192. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:49: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.6p1\", \"6.5p1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:49"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.6p1", "6.5p1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:49"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_192
+#AT_START_193
+at_fn_group_banner 193 'rpmvercmp.at:50' \
+ "rpmvercmp(6.5p1, 5.6p1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "193. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:50: runroot rpm --eval '%{lua: print(rpm.vercmp(\"6.5p1\", \"5.6p1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:50"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("6.5p1", "5.6p1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_193
+#AT_START_194
+at_fn_group_banner 194 'rpmvercmp.at:52' \
+ "rpmvercmp(6.0.rc1, 6.0) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "194. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:52: runroot rpm --eval '%{lua: print(rpm.vercmp(\"6.0.rc1\", \"6.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:52"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("6.0.rc1", "6.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:52"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_194
+#AT_START_195
+at_fn_group_banner 195 'rpmvercmp.at:53' \
+ "rpmvercmp(6.0, 6.0.rc1) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "195. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:53: runroot rpm --eval '%{lua: print(rpm.vercmp(\"6.0\", \"6.0.rc1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:53"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("6.0", "6.0.rc1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:53"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_195
+#AT_START_196
+at_fn_group_banner 196 'rpmvercmp.at:55' \
+ "rpmvercmp(10b2, 10a1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "196. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:55: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10b2\", \"10a1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:55"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10b2", "10a1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:55"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_196
+#AT_START_197
+at_fn_group_banner 197 'rpmvercmp.at:56' \
+ "rpmvercmp(10a2, 10b2) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "197. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:56: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10a2\", \"10b2\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:56"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10a2", "10b2"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:56"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_197
+#AT_START_198
+at_fn_group_banner 198 'rpmvercmp.at:58' \
+ "rpmvercmp(1.0aa, 1.0aa) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "198. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:58: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0aa\", \"1.0aa\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:58"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0aa", "1.0aa"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_198
+#AT_START_199
+at_fn_group_banner 199 'rpmvercmp.at:59' \
+ "rpmvercmp(1.0a, 1.0aa) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "199. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:59: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0a\", \"1.0aa\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:59"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0a", "1.0aa"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:59"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_199
+#AT_START_200
+at_fn_group_banner 200 'rpmvercmp.at:60' \
+ "rpmvercmp(1.0aa, 1.0a) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "200. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:60: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0aa\", \"1.0a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:60"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0aa", "1.0a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:60"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_200
+#AT_START_201
+at_fn_group_banner 201 'rpmvercmp.at:62' \
+ "rpmvercmp(10.0001, 10.0001) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "201. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:62: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10.0001\", \"10.0001\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:62"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10.0001", "10.0001"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:62"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_201
+#AT_START_202
+at_fn_group_banner 202 'rpmvercmp.at:63' \
+ "rpmvercmp(10.0001, 10.1) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "202. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:63: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10.0001\", \"10.1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:63"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10.0001", "10.1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:63"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_202
+#AT_START_203
+at_fn_group_banner 203 'rpmvercmp.at:64' \
+ "rpmvercmp(10.1, 10.0001) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "203. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:64: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10.1\", \"10.0001\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:64"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10.1", "10.0001"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:64"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_203
+#AT_START_204
+at_fn_group_banner 204 'rpmvercmp.at:65' \
+ "rpmvercmp(10.0001, 10.0039) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "204. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:65: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10.0001\", \"10.0039\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:65"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10.0001", "10.0039"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:65"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_204
+#AT_START_205
+at_fn_group_banner 205 'rpmvercmp.at:66' \
+ "rpmvercmp(10.0039, 10.0001) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "205. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:66: runroot rpm --eval '%{lua: print(rpm.vercmp(\"10.0039\", \"10.0001\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:66"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("10.0039", "10.0001"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:66"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_205
+#AT_START_206
+at_fn_group_banner 206 'rpmvercmp.at:68' \
+ "rpmvercmp(4.999.9, 5.0) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "206. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:68: runroot rpm --eval '%{lua: print(rpm.vercmp(\"4.999.9\", \"5.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:68"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("4.999.9", "5.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:68"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_206
+#AT_START_207
+at_fn_group_banner 207 'rpmvercmp.at:69' \
+ "rpmvercmp(5.0, 4.999.9) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "207. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:69: runroot rpm --eval '%{lua: print(rpm.vercmp(\"5.0\", \"4.999.9\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:69"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("5.0", "4.999.9"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:69"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_207
+#AT_START_208
+at_fn_group_banner 208 'rpmvercmp.at:71' \
+ "rpmvercmp(20101121, 20101121) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "208. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:71: runroot rpm --eval '%{lua: print(rpm.vercmp(\"20101121\", \"20101121\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:71"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("20101121", "20101121"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:71"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_208
+#AT_START_209
+at_fn_group_banner 209 'rpmvercmp.at:72' \
+ "rpmvercmp(20101121, 20101122) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "209. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:72: runroot rpm --eval '%{lua: print(rpm.vercmp(\"20101121\", \"20101122\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:72"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("20101121", "20101122"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_209
+#AT_START_210
+at_fn_group_banner 210 'rpmvercmp.at:73' \
+ "rpmvercmp(20101122, 20101121) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "210. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:73: runroot rpm --eval '%{lua: print(rpm.vercmp(\"20101122\", \"20101121\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:73"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("20101122", "20101121"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:73"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_210
+#AT_START_211
+at_fn_group_banner 211 'rpmvercmp.at:75' \
+ "rpmvercmp(2_0, 2_0) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "211. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:75: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2_0\", \"2_0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:75"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2_0", "2_0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:75"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_211
+#AT_START_212
+at_fn_group_banner 212 'rpmvercmp.at:76' \
+ "rpmvercmp(2.0, 2_0) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "212. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:76: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2.0\", \"2_0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:76"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2.0", "2_0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:76"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_212
+#AT_START_213
+at_fn_group_banner 213 'rpmvercmp.at:77' \
+ "rpmvercmp(2_0, 2.0) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "213. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:77: runroot rpm --eval '%{lua: print(rpm.vercmp(\"2_0\", \"2.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:77"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("2_0", "2.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:77"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_213
+#AT_START_214
+at_fn_group_banner 214 'rpmvercmp.at:80' \
+ "rpmvercmp(a, a) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "214. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:80: runroot rpm --eval '%{lua: print(rpm.vercmp(\"a\", \"a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:80"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("a", "a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:80"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_214
+#AT_START_215
+at_fn_group_banner 215 'rpmvercmp.at:81' \
+ "rpmvercmp(a+, a+) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "215. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:81: runroot rpm --eval '%{lua: print(rpm.vercmp(\"a+\", \"a+\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:81"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("a+", "a+"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:81"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_215
+#AT_START_216
+at_fn_group_banner 216 'rpmvercmp.at:82' \
+ "rpmvercmp(a+, a_) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "216. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:82: runroot rpm --eval '%{lua: print(rpm.vercmp(\"a+\", \"a_\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:82"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("a+", "a_"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:82"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_216
+#AT_START_217
+at_fn_group_banner 217 'rpmvercmp.at:83' \
+ "rpmvercmp(a_, a+) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "217. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:83: runroot rpm --eval '%{lua: print(rpm.vercmp(\"a_\", \"a+\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:83"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("a_", "a+"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:83"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_217
+#AT_START_218
+at_fn_group_banner 218 'rpmvercmp.at:84' \
+ "rpmvercmp(+a, +a) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "218. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:84: runroot rpm --eval '%{lua: print(rpm.vercmp(\"+a\", \"+a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:84"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("+a", "+a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:84"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_218
+#AT_START_219
+at_fn_group_banner 219 'rpmvercmp.at:85' \
+ "rpmvercmp(+a, _a) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "219. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:85: runroot rpm --eval '%{lua: print(rpm.vercmp(\"+a\", \"_a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:85"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("+a", "_a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:85"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_219
+#AT_START_220
+at_fn_group_banner 220 'rpmvercmp.at:86' \
+ "rpmvercmp(_a, +a) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "220. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:86: runroot rpm --eval '%{lua: print(rpm.vercmp(\"_a\", \"+a\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:86"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("_a", "+a"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:86"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_220
+#AT_START_221
+at_fn_group_banner 221 'rpmvercmp.at:87' \
+ "rpmvercmp(+_, +_) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "221. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:87: runroot rpm --eval '%{lua: print(rpm.vercmp(\"+_\", \"+_\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:87"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("+_", "+_"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_221
+#AT_START_222
+at_fn_group_banner 222 'rpmvercmp.at:88' \
+ "rpmvercmp(_+, +_) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "222. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:88: runroot rpm --eval '%{lua: print(rpm.vercmp(\"_+\", \"+_\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:88"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("_+", "+_"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:88"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_222
+#AT_START_223
+at_fn_group_banner 223 'rpmvercmp.at:89' \
+ "rpmvercmp(_+, _+) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "223. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:89: runroot rpm --eval '%{lua: print(rpm.vercmp(\"_+\", \"_+\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:89"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("_+", "_+"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:89"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_223
+#AT_START_224
+at_fn_group_banner 224 'rpmvercmp.at:90' \
+ "rpmvercmp(+, _) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "224. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:90: runroot rpm --eval '%{lua: print(rpm.vercmp(\"+\", \"_\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:90"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("+", "_"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_224
+#AT_START_225
+at_fn_group_banner 225 'rpmvercmp.at:91' \
+ "rpmvercmp(_, +) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "225. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:91: runroot rpm --eval '%{lua: print(rpm.vercmp(\"_\", \"+\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:91"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("_", "+"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:91"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_225
+#AT_START_226
+at_fn_group_banner 226 'rpmvercmp.at:94' \
+ "rpmvercmp(1.0~rc1, 1.0~rc1) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "226. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:94: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc1\", \"1.0~rc1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:94"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc1", "1.0~rc1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:94"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_226
+#AT_START_227
+at_fn_group_banner 227 'rpmvercmp.at:95' \
+ "rpmvercmp(1.0~rc1, 1.0) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "227. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:95: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc1\", \"1.0\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:95"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc1", "1.0"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:95"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_227
+#AT_START_228
+at_fn_group_banner 228 'rpmvercmp.at:96' \
+ "rpmvercmp(1.0, 1.0~rc1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "228. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:96: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0\", \"1.0~rc1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:96"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0", "1.0~rc1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:96"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_228
+#AT_START_229
+at_fn_group_banner 229 'rpmvercmp.at:97' \
+ "rpmvercmp(1.0~rc1, 1.0~rc2) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "229. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:97: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc1\", \"1.0~rc2\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:97"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc1", "1.0~rc2"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:97"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_229
+#AT_START_230
+at_fn_group_banner 230 'rpmvercmp.at:98' \
+ "rpmvercmp(1.0~rc2, 1.0~rc1) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "230. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:98: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc2\", \"1.0~rc1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:98"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc2", "1.0~rc1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:98"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_230
+#AT_START_231
+at_fn_group_banner 231 'rpmvercmp.at:99' \
+ "rpmvercmp(1.0~rc1~git123, 1.0~rc1~git123) = 0" " " 12
+at_xfail=no
+(
+ $as_echo "231. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:99: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc1~git123\", \"1.0~rc1~git123\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:99"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc1~git123", "1.0~rc1~git123"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:99"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_231
+#AT_START_232
+at_fn_group_banner 232 'rpmvercmp.at:100' \
+ "rpmvercmp(1.0~rc1~git123, 1.0~rc1) = -1" " " 12
+at_xfail=no
+(
+ $as_echo "232. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:100: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc1~git123\", \"1.0~rc1\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:100"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc1~git123", "1.0~rc1"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:100"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_232
+#AT_START_233
+at_fn_group_banner 233 'rpmvercmp.at:101' \
+ "rpmvercmp(1.0~rc1, 1.0~rc1~git123) = 1" " " 12
+at_xfail=no
+(
+ $as_echo "233. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmvercmp.at:101: runroot rpm --eval '%{lua: print(rpm.vercmp(\"1.0~rc1\", \"1.0~rc1~git123\"))}'"
+at_fn_check_prepare_trace "rpmvercmp.at:101"
+( $at_check_trace; runroot rpm --eval '%{lua: print(rpm.vercmp("1.0~rc1", "1.0~rc1~git123"))}'
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmvercmp.at:101"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_233
+#AT_START_234
+at_fn_group_banner 234 'rpmdeps.at:7' \
+ "missing dependency" " " 13
+at_xfail=no
+(
+ $as_echo "234. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:9:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:9"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ deptest-two is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:9"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_234
+#AT_START_235
+at_fn_group_banner 235 'rpmdeps.at:30' \
+ "cross-depending packages" " " 13
+at_xfail=no
+(
+ $as_echo "235. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:32:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"reqs deptest-one\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:32"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "reqs deptest-one" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:32"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_235
+#AT_START_236
+at_fn_group_banner 236 'rpmdeps.at:56' \
+ "unsatisfied versioned require" " " 13
+at_xfail=no
+(
+ $as_echo "236. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:58:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-two >= 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs deptest-foo = 1.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:58"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-two >= 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs deptest-foo = 1.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ deptest-two >= 2.0 is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:58"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_236
+#AT_START_237
+at_fn_group_banner 237 'rpmdeps.at:84' \
+ "satisfied versioned require" " " 13
+at_xfail=no
+(
+ $as_echo "237. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:86:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-foo >= 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs deptest-foo = 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:86"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-foo >= 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs deptest-foo = 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:86"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_237
+#AT_START_238
+at_fn_group_banner 238 'rpmdeps.at:110' \
+ "versioned conflict in transaction" " " 13
+at_xfail=no
+(
+ $as_echo "238. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:112:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"cfls deptest-two < 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:112"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "cfls deptest-two < 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ deptest-two < 2.0 conflicts with deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:112"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_238
+#AT_START_239
+at_fn_group_banner 239 'rpmdeps.at:137' \
+ "versioned conflict in database" " " 13
+at_xfail=no
+(
+ $as_echo "239. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:139:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"cfls deptest-two < 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:139"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "cfls deptest-two < 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ deptest-two < 2.0 conflicts with (installed) deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:139"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_239
+#AT_START_240
+at_fn_group_banner 240 'rpmdeps.at:163' \
+ "install and verify self-conflicting package" " " 13
+at_xfail=no
+(
+ $as_echo "240. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:165:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"provs something\" \\
+ --define \"cfls something\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -V --nofiles deptest-one
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:165"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "provs something" \
+ --define "cfls something" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -V --nofiles deptest-one
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:165"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_240
+#AT_START_241
+at_fn_group_banner 241 'rpmdeps.at:185' \
+ "explicit file conflicts" " " 13
+at_xfail=no
+(
+ $as_echo "241. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:187:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"cfls /opt/bar\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --test \\
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -e deptest-one
+# XXX FIXME: rpm's problem message for this case is higly bogus.
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -e deptest-two
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:187"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "cfls /opt/bar" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --test \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -e deptest-one
+# XXX FIXME: rpm's problem message for this case is higly bogus.
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -e deptest-two
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ /opt/bar conflicts with deptest-one-1.0-1.noarch
+error: Failed dependencies:
+ /opt/bar conflicts with (installed) deptest-one-1.0-1.noarch
+error: Failed dependencies:
+ /opt/bar conflicts with deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:187"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_241
+#AT_START_242
+at_fn_group_banner 242 'rpmdeps.at:224' \
+ "erase to break dependencies" " " 13
+at_xfail=no
+(
+ $as_echo "242. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:226:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs deptest-foo >= 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs deptest-foo = 2.0\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -e deptest-two
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:226"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs deptest-foo >= 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs deptest-foo = 2.0" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+runroot rpm -e deptest-two
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ deptest-foo >= 2.0 is needed by (installed) deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_242
+#AT_START_243
+at_fn_group_banner 243 'rpmdeps.at:252' \
+ "erase to break colored file dependency" " " 13
+at_xfail=no
+(
+ $as_echo "243. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:254:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg hello\" \\
+ --define \"reqs /usr/bin/hello\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm \\
+ /build/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
+
+runroot rpm -e hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:254"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg hello" \
+ --define "reqs /usr/bin/hello" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.i686.rpm \
+ /data/RPMS/hello-2.0-1.x86_64.rpm \
+ /build/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
+
+runroot rpm -e hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ /usr/bin/hello is needed by (installed) deptest-hello-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:254"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_243
+#AT_START_244
+at_fn_group_banner 244 'rpmdeps.at:281' \
+ "erase on wrong-colored file dependency" " " 13
+at_xfail=no
+(
+ $as_echo "244. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:283:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg hello\" \\
+ --define \"reqs /usr/bin/hello\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm \\
+ /build/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
+
+runroot rpm -e hello.i686
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:283"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg hello" \
+ --define "reqs /usr/bin/hello" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.i686.rpm \
+ /data/RPMS/hello-2.0-1.x86_64.rpm \
+ /build/RPMS/noarch/deptest-hello-1.0-1.noarch.rpm
+
+runroot rpm -e hello.i686
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:283"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_244
+#AT_START_245
+at_fn_group_banner 245 'rpmdeps.at:309' \
+ "unsatisfied WITH require" " " 13
+at_xfail=no
+(
+ $as_echo "245. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:311:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two with flavor = dekstop)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs flavor = server\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ --define \"provs flavor = desktop\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:311"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = dekstop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two with flavor = dekstop) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 3 $at_status "$at_srcdir/rpmdeps.at:311"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_245
+#AT_START_246
+at_fn_group_banner 246 'rpmdeps.at:340' \
+ "unsatisfied WITH require (rpmdb)" " " 13
+at_xfail=no
+(
+ $as_echo "246. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:342:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two with flavor = dekstop)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs flavor = server\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ --define \"provs flavor = desktop\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:342"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = dekstop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two with flavor = dekstop) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:342"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_246
+#AT_START_247
+at_fn_group_banner 247 'rpmdeps.at:373' \
+ "satisfied WITH require" " " 13
+at_xfail=no
+(
+ $as_echo "247. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:375:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two with flavor = desktop)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs flavor = desktop\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:375"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = desktop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_247
+#AT_START_248
+at_fn_group_banner 248 'rpmdeps.at:397' \
+ "satisfied WITH require (rpmdb)" " " 13
+at_xfail=no
+(
+ $as_echo "248. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:399:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two with flavor = desktop)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs flavor = desktop\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:399"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two with flavor = desktop)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = desktop" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:399"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_248
+#AT_START_249
+at_fn_group_banner 249 'rpmdeps.at:425' \
+ "unsatisfied WITHOUT require" " " 13
+at_xfail=no
+(
+ $as_echo "249. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:427:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two without flavor)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs flavor = server\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:427"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two without flavor) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:427"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_249
+#AT_START_250
+at_fn_group_banner 250 'rpmdeps.at:451' \
+ "unsatisfied WITHOUT require (rpmdb)" " " 13
+at_xfail=no
+(
+ $as_echo "250. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:453:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two without flavor)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ --define \"provs flavor = server\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:453"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "provs flavor = server" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two without flavor) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:453"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_250
+#AT_START_251
+at_fn_group_banner 251 'rpmdeps.at:479' \
+ "satisfied WITHOUT require" " " 13
+at_xfail=no
+(
+ $as_echo "251. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:481:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two without flavor)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:481"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:481"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_251
+#AT_START_252
+at_fn_group_banner 252 'rpmdeps.at:502' \
+ "satisfied WITHOUT require (rpmdb)" " " 13
+at_xfail=no
+(
+ $as_echo "252. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:504:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two without flavor)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:504"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two without flavor)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:504"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_252
+#AT_START_253
+at_fn_group_banner 253 'rpmdeps.at:529' \
+ "unsatisfied AND require - all missing" " " 13
+at_xfail=no
+(
+ $as_echo "253. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:531:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:531"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two and deptest-three) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:531"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_253
+#AT_START_254
+at_fn_group_banner 254 'rpmdeps.at:550' \
+ "unsatisfied AND require - first is missing" " " 13
+at_xfail=no
+(
+ $as_echo "254. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:552:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:552"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two and deptest-three) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:552"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_254
+#AT_START_255
+at_fn_group_banner 255 'rpmdeps.at:575' \
+ "unsatisfied AND require - second is missing" " " 13
+at_xfail=no
+(
+ $as_echo "255. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:577:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:577"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two and deptest-three) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:577"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_255
+#AT_START_256
+at_fn_group_banner 256 'rpmdeps.at:600' \
+ "satisfied AND require" " " 13
+at_xfail=no
+(
+ $as_echo "256. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:602:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:602"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:602"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_256
+#AT_START_257
+at_fn_group_banner 257 'rpmdeps.at:629' \
+ "unsatisfied OR require - all missing" " " 13
+at_xfail=no
+(
+ $as_echo "257. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:631:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two or deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:631"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two or deptest-three) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:631"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_257
+#AT_START_258
+at_fn_group_banner 258 'rpmdeps.at:650' \
+ "satisfied OR require - first is missing" " " 13
+at_xfail=no
+(
+ $as_echo "258. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:652:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two or deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:652"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:652"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_258
+#AT_START_259
+at_fn_group_banner 259 'rpmdeps.at:673' \
+ "satisfied OR require - second is missing" " " 13
+at_xfail=no
+(
+ $as_echo "259. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:675:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two or deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:675"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:675"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_259
+#AT_START_260
+at_fn_group_banner 260 'rpmdeps.at:696' \
+ "satisfied OR require - both present" " " 13
+at_xfail=no
+(
+ $as_echo "260. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:698:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two or deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:698"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two or deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:698"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_260
+#AT_START_261
+at_fn_group_banner 261 'rpmdeps.at:725' \
+ "unsatisfied IF require" " " 13
+at_xfail=no
+(
+ $as_echo "261. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:727:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two if deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:727"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two if deptest-three) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:727"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_261
+#AT_START_262
+at_fn_group_banner 262 'rpmdeps.at:750' \
+ "satisfied IF require" " " 13
+at_xfail=no
+(
+ $as_echo "262. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:752:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two if deptest-three)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:752"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:752"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_262
+#AT_START_263
+at_fn_group_banner 263 'rpmdeps.at:777' \
+ "unsatisfied IF-ELSE require" " " 13
+at_xfail=no
+(
+ $as_echo "263. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:779:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two if deptest-three else deptest-four)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:779"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three else deptest-four)" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two if deptest-three else deptest-four) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmdeps.at:779"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_263
+#AT_START_264
+at_fn_group_banner 264 'rpmdeps.at:798' \
+ "satisfied IF-ELSE require - right clause" " " 13
+at_xfail=no
+(
+ $as_echo "264. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:800:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two if deptest-three else deptest-four)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg four\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:800"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three else deptest-four)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg four" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:800"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_264
+#AT_START_265
+at_fn_group_banner 265 'rpmdeps.at:821' \
+ "satisfied IF-ELSE require - left clause" " " 13
+at_xfail=no
+(
+ $as_echo "265. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:823:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two if deptest-three else deptest-four)\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:823"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two if deptest-three else deptest-four)" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:823"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_265
+#AT_START_266
+at_fn_group_banner 266 'rpmdeps.at:850' \
+ "unsatisfied nested AND-OR require" " " 13
+at_xfail=no
+(
+ $as_echo "266. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:852:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and (deptest-three or deptest-four))\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:852"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three or deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Failed dependencies:
+ (deptest-two and (deptest-three or deptest-four)) is needed by deptest-one-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmdeps.at:852"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_266
+#AT_START_267
+at_fn_group_banner 267 'rpmdeps.at:875' \
+ "satisfied nested AND-OR require" " " 13
+at_xfail=no
+(
+ $as_echo "267. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:877:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and (deptest-three or deptest-four))\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:877"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three or deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:877"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_267
+#AT_START_268
+at_fn_group_banner 268 'rpmdeps.at:904' \
+ "satisfied nested AND-IF require - without right clause" "" 13
+at_xfail=no
+(
+ $as_echo "268. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:906:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and (deptest-three if deptest-four))\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:906"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three if deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:906"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_268
+#AT_START_269
+at_fn_group_banner 269 'rpmdeps.at:927' \
+ "satisfied nested AND-IF require - with right clause" "" 13
+at_xfail=no
+(
+ $as_echo "269. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdeps.at:929:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" \\
+ --define \"reqs (deptest-two and (deptest-three if deptest-four))\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg four\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg three\" \\
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmdeps.at:929"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "reqs (deptest-two and (deptest-three if deptest-four))" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg four" \
+ /data/SPECS/deptest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdeps.at:929"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_269
+#AT_START_270
+at_fn_group_banner 270 'rpmconflict.at:7' \
+ "package with file conflict" " " 14
+at_xfail=no
+(
+ $as_echo "270. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:9:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+for p in \"one\" \"two\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"pkg \$p\" \\
+ --define \"filedata \$p\" \\
+ /data/SPECS/conflicttest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:9"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+for p in "one" "two"; do
+ runroot rpmbuild --quiet -bb \
+ --define "pkg $p" \
+ --define "filedata $p" \
+ /data/SPECS/conflicttest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 1 $at_status "$at_srcdir/rpmconflict.at:9"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_270
+#AT_START_271
+at_fn_group_banner 271 'rpmconflict.at:31' \
+ "two packages with a conflicting file" " " 14
+at_xfail=no
+(
+ $as_echo "271. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:33:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U \\
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:33"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U \
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 2 $at_status "$at_srcdir/rpmconflict.at:33"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_271
+#AT_START_272
+at_fn_group_banner 272 'rpmconflict.at:48' \
+ "package with shareable file" " " 14
+at_xfail=no
+(
+ $as_echo "272. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:50:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+for p in \"one\" \"two\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"pkg \$p\" \\
+ --define \"filedata same_stuff\" \\
+ /data/SPECS/conflicttest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:50"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+for p in "one" "two"; do
+ runroot rpmbuild --quiet -bb \
+ --define "pkg $p" \
+ --define "filedata same_stuff" \
+ /data/SPECS/conflicttest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:50"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_272
+#AT_START_273
+at_fn_group_banner 273 'rpmconflict.at:72' \
+ "two packages with shareable file" " " 14
+at_xfail=no
+(
+ $as_echo "273. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:74:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U \\
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:74"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U \
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo stderr:; cat "$at_stderr"
+echo stdout:; cat "$at_stdout"
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:74"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_273
+#AT_START_274
+at_fn_group_banner 274 'rpmconflict.at:89' \
+ "non-conflicting identical basenames" " " 14
+at_xfail=no
+(
+ $as_echo "274. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:91:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+rm -rf \"\${RPMTEST}\"/opt/mydir
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:91"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+rm -rf "${RPMTEST}"/opt/mydir
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:91"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_274
+#AT_START_275
+at_fn_group_banner 275 'rpmconflict.at:107' \
+ "conflicting identical basenames" " " 14
+at_xfail=no
+(
+ $as_echo "275. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:109:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+rm -rf \"\${RPMTEST}\"/opt/mydir
+mkdir -p \"\${RPMTEST}\"/opt/mydir/one
+ln -s one \"\${RPMTEST}\"/opt/mydir/two
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:109"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec
+rm -rf "${RPMTEST}"/opt/mydir
+mkdir -p "${RPMTEST}"/opt/mydir/one
+ln -s one "${RPMTEST}"/opt/mydir/two
+runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /opt/mydir/two/somefile conflicts between attempted installs of selfconflict-1.0-1.noarch and selfconflict-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmconflict.at:109"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_275
+#AT_START_276
+at_fn_group_banner 276 'rpmconflict.at:127' \
+ "multilib elf conflict, prefer 64bit 1" " " 14
+at_xfail=no
+(
+ $as_echo "276. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:129:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686 hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:129"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.i686.rpm \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686 hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "wrong color,normal,normal,normal,normal,
+normal,normal,normal,normal,normal,
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:129"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_276
+#AT_START_277
+at_fn_group_banner 277 'rpmconflict.at:149' \
+ "multilib elf conflict, prefer 64bit 2" " " 14
+at_xfail=no
+(
+ $as_echo "277. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:151:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686 hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:151"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686 hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal,normal,normal,normal,normal,
+wrong color,normal,normal,normal,normal,
+normal,normal,normal,normal,normal,
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:151"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_277
+#AT_START_278
+at_fn_group_banner 278 'rpmconflict.at:176' \
+ "multilib elf conflict, prefer 64bit 3" " " 14
+at_xfail=no
+(
+ $as_echo "278. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:178:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.x86_64
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686 hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:178"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.x86_64
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686 hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal,normal,normal,normal,normal,
+wrong color,normal,normal,normal,normal,
+normal,normal,normal,normal,normal,
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:178"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_278
+#AT_START_279
+at_fn_group_banner 279 'rpmconflict.at:203' \
+ "multilib elf conflict, prefer 32bit 1" " " 14
+at_xfail=no
+(
+ $as_echo "279. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:205:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 1\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686 hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:205"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 1" \
+ /data/RPMS/hello-2.0-1.i686.rpm \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686 hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal,normal,normal,normal,normal,
+wrong color,normal,normal,normal,normal,
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:205"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_279
+#AT_START_280
+at_fn_group_banner 280 'rpmconflict.at:225' \
+ "multilib elf conflict, prefer 32bit 2" " " 14
+at_xfail=no
+(
+ $as_echo "280. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:227:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 1\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 1\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686 hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:227"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 1" \
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 1" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686 hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal,normal,normal,normal,normal,
+normal,normal,normal,normal,normal,
+wrong color,normal,normal,normal,normal,
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:227"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_280
+#AT_START_281
+at_fn_group_banner 281 'rpmconflict.at:252' \
+ "multilib elf conflict, prefer 32bit 3" " " 14
+at_xfail=no
+(
+ $as_echo "281. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:254:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 1\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.x86_64
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 1\" \\
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf \"[%{filestates:fstate},]\\n\" hello.i686 hello.x86_64
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:254"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 1" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.x86_64
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 1" \
+ /data/RPMS/hello-2.0-1.i686.rpm
+runroot rpm -q --qf "[%{filestates:fstate},]\n" hello.i686 hello.x86_64
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "normal,normal,normal,normal,normal,
+normal,normal,normal,normal,normal,
+wrong color,normal,normal,normal,normal,
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:254"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_281
+#AT_START_282
+at_fn_group_banner 282 'rpmconflict.at:279' \
+ "multilib elf vs non-elf file conflict 1" " " 14
+at_xfail=no
+(
+ $as_echo "282. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:281:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm \\
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:281"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm \
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /usr/bin/hello conflicts between attempted installs of hello-2.0-1.x86_64 and hello-script-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmconflict.at:281"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_282
+#AT_START_283
+at_fn_group_banner 283 'rpmconflict.at:300' \
+ "multilib elf vs non-elf file conflict 2" " " 14
+at_xfail=no
+(
+ $as_echo "283. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:302:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:302"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /usr/bin/hello from install of hello-script-1.0-1.noarch conflicts with file from package hello-2.0-1.x86_64
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmconflict.at:302"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_283
+#AT_START_284
+at_fn_group_banner 284 'rpmconflict.at:325' \
+ "multilib elf vs non-elf file conflict 3" " " 14
+at_xfail=no
+(
+ $as_echo "284. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:327:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \\
+ --define \"_transaction_color 3\" \\
+ --define \"_prefer_color 2\" \\
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:327"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+runroot rpmbuild --quiet -bb /data/SPECS/hello-script.spec
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /build/RPMS/noarch/hello-script-1.0-1.noarch.rpm
+
+runroot rpm -U --ignoreos --ignorearch --nodeps \
+ --define "_transaction_color 3" \
+ --define "_prefer_color 2" \
+ /data/RPMS/hello-2.0-1.x86_64.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /usr/bin/hello from install of hello-2.0-1.x86_64 conflicts with file from package hello-script-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmconflict.at:327"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_284
+#AT_START_285
+at_fn_group_banner 285 'rpmconflict.at:351' \
+ "replacing directory with symlink" " " 14
+at_xfail=no
+(
+ $as_echo "285. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:353:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+rm -rf \"\${RPMTEST}\"/usr/{share,lib}/symlinktest*
+
+runroot rpmbuild --quiet -bb \\
+ --define \"rel 1\" --without symlink /data/SPECS/symlinktest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"rel 2\" --with symlink /data/SPECS/symlinktest.spec
+
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:353"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+rm -rf "${RPMTEST}"/usr/{share,lib}/symlinktest*
+
+runroot rpmbuild --quiet -bb \
+ --define "rel 1" --without symlink /data/SPECS/symlinktest.spec
+runroot rpmbuild --quiet -bb \
+ --define "rel 2" --with symlink /data/SPECS/symlinktest.spec
+
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /usr/share/symlinktest from install of symlinktest-1.0-2.noarch conflicts with file from package symlinktest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmconflict.at:353"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_285
+#AT_START_286
+at_fn_group_banner 286 'rpmconflict.at:375' \
+ "replacing symlink with directory" " " 14
+at_xfail=no
+(
+ $as_echo "286. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:377:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+rm -rf \"\${TOPDIR}\"
+rm -rf \"\${RPMTEST}\"/usr/{share,lib}/symlinktest*
+
+runroot rpmbuild --quiet -bb \\
+ --define \"rel 1\" --with symlink /data/SPECS/symlinktest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"rel 2\" --without symlink /data/SPECS/symlinktest.spec
+
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:377"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+rm -rf "${TOPDIR}"
+rm -rf "${RPMTEST}"/usr/{share,lib}/symlinktest*
+
+runroot rpmbuild --quiet -bb \
+ --define "rel 1" --with symlink /data/SPECS/symlinktest.spec
+runroot rpmbuild --quiet -bb \
+ --define "rel 2" --without symlink /data/SPECS/symlinktest.spec
+
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-1.noarch.rpm
+runroot rpm -U /build/RPMS/noarch/symlinktest-1.0-2.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /usr/share/symlinktest from install of symlinktest-1.0-2.noarch conflicts with file from package symlinktest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmconflict.at:377"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_286
+#AT_START_287
+at_fn_group_banner 287 'rpmconflict.at:400' \
+ "real file with shared ghost" " " 14
+at_xfail=no
+(
+ $as_echo "287. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconflict.at:402:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+fn=\"\${RPMTEST}\"/usr/share/my.version
+rm -rf \"\${TOPDIR}\" \"\${fn}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg one\" --define \"filedata one\" \\
+ /data/SPECS/conflicttest.spec
+runroot rpmbuild --quiet -bb \\
+ --define \"pkg two\" --define \"filedata two\" --define \"fileattr %ghost\"\\
+ /data/SPECS/conflicttest.spec
+
+test ! -f \"\${fn}\" && echo OK
+runroot rpm -U \\
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+cat \"\${fn}\"
+runroot rpm -e conflicttwo
+cat \"\${fn}\"
+runroot rpm -e conflictone
+test ! -f \"\${fn}\" && echo OK
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconflict.at:402"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+fn="${RPMTEST}"/usr/share/my.version
+rm -rf "${TOPDIR}" "${fn}"
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" --define "filedata one" \
+ /data/SPECS/conflicttest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" --define "filedata two" --define "fileattr %ghost"\
+ /data/SPECS/conflicttest.spec
+
+test ! -f "${fn}" && echo OK
+runroot rpm -U \
+ /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+cat "${fn}"
+runroot rpm -e conflicttwo
+cat "${fn}"
+runroot rpm -e conflictone
+test ! -f "${fn}" && echo OK
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "OK
+one
+one
+OK
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconflict.at:402"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_287
+#AT_START_288
+at_fn_group_banner 288 'rpmreplace.at:4' \
+ "upgrade to/from regular file" " " 15
+at_xfail=no
+(
+ $as_echo "288. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:6:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${tf}\" \"\${tf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata bar\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+cat \"\${tf}\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:6"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype file" \
+ --define "filedata bar" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+cat "${tf}"
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+bar
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:6"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_288
+#AT_START_289
+at_fn_group_banner 289 'rpmreplace.at:40' \
+ "upgrade regular file to/from broken link" " " 15
+at_xfail=no
+(
+ $as_echo "289. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:42:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata stuff\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:42"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata stuff" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+stuff
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:42"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_289
+#AT_START_290
+at_fn_group_banner 290 'rpmreplace.at:76' \
+ "upgrade regular file to/from file link" " " 15
+at_xfail=no
+(
+ $as_echo "290. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:78:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:78"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U --oldpackage /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+goo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:78"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_290
+#AT_START_291
+at_fn_group_banner 291 'rpmreplace.at:112' \
+ "upgrade broken link to broken link" " " 15
+at_xfail=no
+(
+ $as_echo "291. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:114:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata stiff\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata stuff\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:114"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata stiff" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata stuff" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "stiff
+stuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:114"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_291
+#AT_START_292
+at_fn_group_banner 292 'rpmreplace.at:145' \
+ "upgrade file link to file link" " " 15
+at_xfail=no
+(
+ $as_echo "292. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:147:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:147"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "goo
+goo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:147"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_292
+#AT_START_293
+at_fn_group_banner 293 'rpmreplace.at:178' \
+ "upgrade directory link to directory link" " " 15
+at_xfail=no
+(
+ $as_echo "293. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:180:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata zoo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata zoo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:180"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata zoo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata zoo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "zoo
+zoo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:180"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_293
+#AT_START_294
+at_fn_group_banner 294 'rpmreplace.at:211' \
+ "upgrade regular file to directory" " " 15
+at_xfail=no
+(
+ $as_echo "294. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:213:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:213"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:213"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_294
+#AT_START_295
+at_fn_group_banner 295 'rpmreplace.at:242' \
+ "upgrade broken link to directory" " " 15
+at_xfail=no
+(
+ $as_echo "295. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:244:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata other\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:244"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata other" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "other
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:244"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_295
+#AT_START_296
+at_fn_group_banner 296 'rpmreplace.at:273' \
+ "upgrade file link to directory" " " 15
+at_xfail=no
+(
+ $as_echo "296. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:275:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:275"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "goo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:275"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_296
+#AT_START_297
+at_fn_group_banner 297 'rpmreplace.at:304' \
+ "upgrade directory link to directory" " " 15
+at_xfail=no
+(
+ $as_echo "297. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:306:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata zoo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink \"\${tf}\"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:306"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata zoo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /opt/foo from install of replacetest-2.0-1.noarch conflicts with file from package replacetest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "zoo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmreplace.at:306"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_297
+#AT_START_298
+at_fn_group_banner 298 'rpmreplace.at:335' \
+ "upgrade empty directory to empty directory" " " 15
+at_xfail=no
+(
+ $as_echo "298. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:337:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:337"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:337"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_298
+#AT_START_299
+at_fn_group_banner 299 'rpmreplace.at:363' \
+ "upgrade empty directory to regular file" " " 15
+at_xfail=no
+(
+ $as_echo "299. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:365:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata woot\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:365"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype file" \
+ --define "filedata woot" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /opt/foo from install of replacetest-2.0-1.noarch conflicts with file from package replacetest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmreplace.at:365"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_299
+#AT_START_300
+at_fn_group_banner 300 'rpmreplace.at:392' \
+ "upgrade locally symlinked directory" " " 15
+at_xfail=no
+(
+ $as_echo "300. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:394:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype datadir\" \\
+ --define \"filedata README1\" \\
+ --define \"user \$(id -u -n)\" \\
+ --define \"grp \$(id -g -n)\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype datadir\" \\
+ --define \"filedata README2\" \\
+ --define \"user \$(id -u -n)\" \\
+ --define \"grp \$(id -g -n)\" \\
+ /data/SPECS/replacetest.spec
+
+mkdir \"\${RPMTEST}\"/opt/f00f
+ln -s f00f \"\${RPMTEST}\"/opt/foo
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -L \"\${tf}\" && test -d \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -L \"\${tf}\" && test -d \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:394"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ --define "user $(id -u -n)" \
+ --define "grp $(id -g -n)" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype datadir" \
+ --define "filedata README2" \
+ --define "user $(id -u -n)" \
+ --define "grp $(id -g -n)" \
+ /data/SPECS/replacetest.spec
+
+mkdir "${RPMTEST}"/opt/f00f
+ln -s f00f "${RPMTEST}"/opt/foo
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -L "${tf}" && test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -L "${tf}" && test -d "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:394"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_300
+#AT_START_301
+at_fn_group_banner 301 'rpmreplace.at:428' \
+ "upgrade invalid locally symlinked directory" " " 15
+at_xfail=no
+(
+ $as_echo "301. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:430:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype datadir\" \\
+ --define \"filedata README1\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype datadir\" \\
+ --define \"filedata README2\" \\
+ /data/SPECS/replacetest.spec
+
+mkdir \"\${RPMTEST}\"/opt/f00f
+ln -s f00f \"\${RPMTEST}\"/opt/foo
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -L \"\${tf}\" && test -d \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:430"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype datadir" \
+ --define "filedata README2" \
+ /data/SPECS/replacetest.spec
+
+mkdir "${RPMTEST}"/opt/f00f
+ln -s f00f "${RPMTEST}"/opt/foo
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -L "${tf}" && test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+test -d "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:430"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_301
+#AT_START_302
+at_fn_group_banner 302 'rpmreplace.at:460' \
+ "upgrade empty directory to broken link" " " 15
+at_xfail=no
+(
+ $as_echo "302. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:462:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata woot\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:462"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata woot" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /opt/foo from install of replacetest-2.0-1.noarch conflicts with file from package replacetest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmreplace.at:462"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_302
+#AT_START_303
+at_fn_group_banner 303 'rpmreplace.at:489' \
+ "upgrade empty directory to file link" " " 15
+at_xfail=no
+(
+ $as_echo "303. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:491:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata woot\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:491"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata woot" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo " file /opt/foo from install of replacetest-2.0-1.noarch conflicts with file from package replacetest-1.0-1.noarch
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 2 $at_status "$at_srcdir/rpmreplace.at:491"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_303
+#AT_START_304
+at_fn_group_banner 304 'rpmreplace.at:518' \
+ "upgrade removed empty directory to file link" " " 15
+at_xfail=no
+(
+ $as_echo "304. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:520:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && rmdir \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:520"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && rmdir "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "goo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:520"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_304
+#AT_START_305
+at_fn_group_banner 305 'rpmreplace.at:548' \
+ "upgrade replaced empty directory to file link" " " 15
+at_xfail=no
+(
+ $as_echo "305. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:550:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && rmdir \"\${tf}\" && ln -sf goo \"\${tf}\" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:550"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && rmdir "${tf}" && ln -sf goo "${tf}" && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "goo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:550"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_305
+#AT_START_306
+at_fn_group_banner 306 'rpmreplace.at:578' \
+ "upgrade empty directory to file link with pretrans" "" 15
+at_xfail=no
+(
+ $as_echo "306. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmreplace.at:580:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+tf=\"\${RPMTEST}\"/opt/foo
+rm -rf \"\${RPMTEST}\"/opt/*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata goo\" \\
+ --define \"fixit posix.rmdir('/opt/foo')\" \\
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d \"\${tf}\" && runroot rpm -U --test /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink \"\${tf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmreplace.at:580"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype dir" \
+ /data/SPECS/replacetest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata goo" \
+ --define "fixit posix.rmdir('/opt/foo')" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+test -d "${tf}" && runroot rpm -U --test /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm && runroot rpm -U /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+readlink "${tf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "goo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmreplace.at:580"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_306
+#AT_START_307
+at_fn_group_banner 307 'rpmconfig.at:6' \
+ "install config on existiting file" " " 16
+at_xfail=no
+(
+ $as_echo "307. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:8:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+echo \"otherstuff\" > \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -e configtest
+cat \"\${cf}.rpmorig\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:8"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+echo "otherstuff" > "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -e configtest
+cat "${cf}.rpmorig"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmorig
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:8"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_307
+#AT_START_308
+at_fn_group_banner 308 'rpmconfig.at:35' \
+ "install config(noreplace) on existing file" " " 16
+at_xfail=no
+(
+ $as_echo "308. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:37:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+
+echo \"otherstuff\" > \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+cat \"\${cf}.rpmnew\"
+runroot rpm -e configtest
+cat \"\${cf}.rpmsave\"
+cat \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:37"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+
+echo "otherstuff" > "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+cat "${cf}.rpmnew"
+runroot rpm -e configtest
+cat "${cf}.rpmsave"
+cat "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf created as /etc/my.conf.rpmnew
+warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "otherstuff
+foo
+otherstuff
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:37"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_308
+#AT_START_309
+at_fn_group_banner 309 'rpmconfig.at:70' \
+ "install config on existiting identical file" " " 16
+at_xfail=no
+(
+ $as_echo "309. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:72:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+echo \"foo\" > \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -e configtest
+test ! -f \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:72"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+echo "foo" > "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -e configtest
+test ! -f "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:72"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_309
+#AT_START_310
+at_fn_group_banner 310 'rpmconfig.at:97' \
+ "erase unchanged config" " " 16
+at_xfail=no
+(
+ $as_echo "310. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:99:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -e configtest
+test ! -f \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:99"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -e configtest
+test ! -f "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:99"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_310
+#AT_START_311
+at_fn_group_banner 311 'rpmconfig.at:123' \
+ "erase changed config" " " 16
+at_xfail=no
+(
+ $as_echo "311. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:125:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+runroot rpm -e configtest
+cat \"\${cf}.rpmsave\"
+test ! -f \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:125"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+runroot rpm -e configtest
+cat "${cf}.rpmsave"
+test ! -f "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:125"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_311
+#AT_START_312
+at_fn_group_banner 312 'rpmconfig.at:153' \
+ "erase changed config(noreplace)" " " 16
+at_xfail=no
+(
+ $as_echo "312. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:155:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+runroot rpm -e configtest
+cat \"\${cf}.rpmsave\"
+test ! -f \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:155"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+runroot rpm -e configtest
+cat "${cf}.rpmsave"
+test ! -f "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:155"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_312
+#AT_START_313
+at_fn_group_banner 313 'rpmconfig.at:185' \
+ "upgrade unchanged config" " " 16
+at_xfail=no
+(
+ $as_echo "313. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:187:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:187"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:187"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_313
+#AT_START_314
+at_fn_group_banner 314 'rpmconfig.at:215' \
+ "upgrade unchanged config - touching test" " " 16
+at_xfail=no
+(
+ $as_echo "314. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:217:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -Uvv --fsmdebug /build/RPMS/noarch/configtest-2.0-1.noarch.rpm > output.txt 2>&1
+grep -c \"touch\" output.txt
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:217"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -Uvv --fsmdebug /build/RPMS/noarch/configtest-2.0-1.noarch.rpm > output.txt 2>&1
+grep -c "touch" output.txt
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:217"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_314
+#AT_START_315
+at_fn_group_banner 315 'rpmconfig.at:243' \
+ "upgrade modified config" " " 16
+at_xfail=no
+(
+ $as_echo "315. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:245:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:245"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:245"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_315
+#AT_START_316
+at_fn_group_banner 316 'rpmconfig.at:276' \
+ "upgrade changing config" " " 16
+at_xfail=no
+(
+ $as_echo "316. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:278:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:278"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:278"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_316
+#AT_START_317
+at_fn_group_banner 317 'rpmconfig.at:306' \
+ "upgrade changing, modified config 1" " " 16
+at_xfail=no
+(
+ $as_echo "317. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:308:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+cat \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:308"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+cat "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+foo-2.0
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:308"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_317
+#AT_START_318
+at_fn_group_banner 318 'rpmconfig.at:342' \
+ "upgrade changing, modified config 2" " " 16
+at_xfail=no
+(
+ $as_echo "318. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:344:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"foo-2.0\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:344"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:344"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_318
+#AT_START_319
+at_fn_group_banner 319 'rpmconfig.at:377' \
+ "upgrade unchanged config(noreplace)" " " 16
+at_xfail=no
+(
+ $as_echo "319. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:379:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:379"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:379"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_319
+#AT_START_320
+at_fn_group_banner 320 'rpmconfig.at:409' \
+ "upgrade modified config(noreplace)" " " 16
+at_xfail=no
+(
+ $as_echo "320. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:411:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:411"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:411"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_320
+#AT_START_321
+at_fn_group_banner 321 'rpmconfig.at:443' \
+ "upgrade changing config(noreplace)" " " 16
+at_xfail=no
+(
+ $as_echo "321. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:445:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:445"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:445"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_321
+#AT_START_322
+at_fn_group_banner 322 'rpmconfig.at:474' \
+ "upgrade changing, modified config(noreplace) 1" " " 16
+at_xfail=no
+(
+ $as_echo "322. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:476:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+cat \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:476"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+cat "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf created as /etc/my.conf.rpmnew
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+otherstuff
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:476"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_322
+#AT_START_323
+at_fn_group_banner 323 'rpmconfig.at:511' \
+ "upgrade changing, modified config(noreplace) 2" " " 16
+at_xfail=no
+(
+ $as_echo "323. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:513:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"foo-2.0\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:513"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:513"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_323
+#AT_START_324
+at_fn_group_banner 324 'rpmconfig.at:546' \
+ "upgrade unchanged shared config" " " 16
+at_xfail=no
+(
+ $as_echo "324. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:548:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:548"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:548"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_324
+#AT_START_325
+at_fn_group_banner 325 'rpmconfig.at:584' \
+ "upgrade modified shared config" " " 16
+at_xfail=no
+(
+ $as_echo "325. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:586:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:586"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:586"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_325
+#AT_START_326
+at_fn_group_banner 326 'rpmconfig.at:624' \
+ "upgrade changing shared config" " " 16
+at_xfail=no
+(
+ $as_echo "326. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:626:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:626"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:626"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_326
+#AT_START_327
+at_fn_group_banner 327 'rpmconfig.at:661' \
+ "upgrade changing, modified shared config 1" " " 16
+at_xfail=no
+(
+ $as_echo "327. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:663:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+cat \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:663"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+cat "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+foo-2.0
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:663"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_327
+#AT_START_328
+at_fn_group_banner 328 'rpmconfig.at:704' \
+ "upgrade changing, modified shared config 2" " " 16
+at_xfail=no
+(
+ $as_echo "328. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:706:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"foo-2.0\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:706"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:706"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_328
+#AT_START_329
+at_fn_group_banner 329 'rpmconfig.at:745' \
+ "upgrade changing, modified shared config(noreplace) 1" "" 16
+at_xfail=no
+(
+ $as_echo "329. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:747:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+cat \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:747"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+cat "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf created as /etc/my.conf.rpmnew
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+otherstuff
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:747"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_329
+#AT_START_330
+at_fn_group_banner 330 'rpmconfig.at:789' \
+ "upgrade changing, modified shared config(noreplace) 2" "" 16
+at_xfail=no
+(
+ $as_echo "330. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:791:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"foo-2.0\" > \"\${RPMTEST}\"/etc/my.conf
+cat \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:791"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+cat "${cf}"
+echo "foo-2.0" > "${RPMTEST}"/etc/my.conf
+cat "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:791"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_330
+#AT_START_331
+at_fn_group_banner 331 'rpmconfig.at:830' \
+ "install/upgrade/erase ghost config" " " 16
+at_xfail=no
+(
+ $as_echo "331. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig.at:832:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in 1.0 2.0; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \${v}\" \\
+ --define \"filetype file\" \\
+ --define \"filedata buster\" \\
+ --define \"fileattr %ghost\" \\
+ /data/SPECS/configtest.spec
+done
+
+# pre-existing config, install, erase
+test ! -f \"\${cf}\" && echo OK1
+echo \"keaton\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -e configtest
+cat \"\${cf}\"
+rm -f \"\${cf}\"
+
+# post-install config, upgrade, erase
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+test ! -f \"\${cf}\" && echo OK2
+echo \"buster\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -e configtest
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig.at:832"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in 1.0 2.0; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver ${v}" \
+ --define "filetype file" \
+ --define "filedata buster" \
+ --define "fileattr %ghost" \
+ /data/SPECS/configtest.spec
+done
+
+# pre-existing config, install, erase
+test ! -f "${cf}" && echo OK1
+echo "keaton" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -e configtest
+cat "${cf}"
+rm -f "${cf}"
+
+# post-install config, upgrade, erase
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+test ! -f "${cf}" && echo OK2
+echo "buster" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -e configtest
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "OK1
+keaton
+keaton
+keaton
+OK2
+buster
+buster
+buster
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig.at:832"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_331
+#AT_START_332
+at_fn_group_banner 332 'rpmconfig2.at:6' \
+ "install config on existiting symlink" " " 17
+at_xfail=no
+(
+ $as_echo "332. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:8:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+
+ln -s \"otherstuff\" \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -e configtest
+readlink \"\${cf}.rpmorig\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:8"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+
+ln -s "otherstuff" "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -e configtest
+readlink "${cf}.rpmorig"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmorig
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:8"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_332
+#AT_START_333
+at_fn_group_banner 333 'rpmconfig2.at:36' \
+ "install config on existiting identical link" " " 17
+at_xfail=no
+(
+ $as_echo "333. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:38:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+
+ln -s \"foo\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -e configtest
+test ! -L \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:38"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+
+ln -s "foo" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -e configtest
+test ! -L "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:38"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_333
+#AT_START_334
+at_fn_group_banner 334 'rpmconfig2.at:66' \
+ "erase unchanged config link" " " 17
+at_xfail=no
+(
+ $as_echo "334. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:68:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -e configtest
+test ! -L \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:68"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -e configtest
+test ! -L "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:68"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_334
+#AT_START_335
+at_fn_group_banner 335 'rpmconfig2.at:93' \
+ "erase changed config link" " " 17
+at_xfail=no
+(
+ $as_echo "335. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:95:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+runroot rpm -e configtest
+readlink \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:95"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+runroot rpm -e configtest
+readlink "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:95"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_335
+#AT_START_336
+at_fn_group_banner 336 'rpmconfig2.at:124' \
+ "upgrade unchanged config link" " " 17
+at_xfail=no
+(
+ $as_echo "336. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:126:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:126"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:126"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_336
+#AT_START_337
+at_fn_group_banner 337 'rpmconfig2.at:155' \
+ "upgrade unchanged config link - touching test" " " 17
+at_xfail=no
+(
+ $as_echo "337. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:157:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -Uvv --fsmdebug /build/RPMS/noarch/configtest-2.0-1.noarch.rpm > output.txt 2>&1
+grep -c \"touch\" output.txt
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:157"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+runroot rpm -Uvv --fsmdebug /build/RPMS/noarch/configtest-2.0-1.noarch.rpm > output.txt 2>&1
+grep -c "touch" output.txt
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:157"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_337
+#AT_START_338
+at_fn_group_banner 338 'rpmconfig2.at:185' \
+ "upgrade modified config link" " " 17
+at_xfail=no
+(
+ $as_echo "338. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:187:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:187"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:187"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_338
+#AT_START_339
+at_fn_group_banner 339 'rpmconfig2.at:219' \
+ "upgrade changing config link" " " 17
+at_xfail=no
+(
+ $as_echo "339. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:221:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:221"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:221"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_339
+#AT_START_340
+at_fn_group_banner 340 'rpmconfig2.at:250' \
+ "upgrade changing, modified config link 1" " " 17
+at_xfail=no
+(
+ $as_echo "340. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:252:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+readlink \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:252"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+readlink "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+foo-2.0
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:252"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_340
+#AT_START_341
+at_fn_group_banner 341 'rpmconfig2.at:287' \
+ "upgrade changing, modified config link 2" " " 17
+at_xfail=no
+(
+ $as_echo "341. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:289:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"foo-2.0\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:289"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "foo-2.0" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:289"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_341
+#AT_START_342
+at_fn_group_banner 342 'rpmconfig2.at:323' \
+ "upgrade unchanged config(noreplace) link" " " 17
+at_xfail=no
+(
+ $as_echo "342. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:325:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:325"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:325"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_342
+#AT_START_343
+at_fn_group_banner 343 'rpmconfig2.at:356' \
+ "upgrade modified config(noreplace) link" " " 17
+at_xfail=no
+(
+ $as_echo "343. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:358:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:358"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:358"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_343
+#AT_START_344
+at_fn_group_banner 344 'rpmconfig2.at:391' \
+ "upgrade changing config(noreplace) link" " " 17
+at_xfail=no
+(
+ $as_echo "344. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:393:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:393"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:393"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_344
+#AT_START_345
+at_fn_group_banner 345 'rpmconfig2.at:423' \
+ "upgrade changing, modified config(noreplace) link 1" "" 17
+at_xfail=no
+(
+ $as_echo "345. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:425:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+readlink \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:425"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+readlink "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf created as /etc/my.conf.rpmnew
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+otherstuff
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:425"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_345
+#AT_START_346
+at_fn_group_banner 346 'rpmconfig2.at:461' \
+ "upgrade changing, modified config(noreplace) link 2" "" 17
+at_xfail=no
+(
+ $as_echo "346. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:463:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"foo-2.0\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+test ! -L \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:463"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+done
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "foo-2.0" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+test ! -L "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:463"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_346
+#AT_START_347
+at_fn_group_banner 347 'rpmconfig2.at:498' \
+ "upgrade unchanged shared config link" " " 17
+at_xfail=no
+(
+ $as_echo "347. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:500:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:500"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:500"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_347
+#AT_START_348
+at_fn_group_banner 348 'rpmconfig2.at:537' \
+ "upgrade modified shared config link" " " 17
+at_xfail=no
+(
+ $as_echo "348. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:539:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:539"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:539"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_348
+#AT_START_349
+at_fn_group_banner 349 'rpmconfig2.at:578' \
+ "upgrade changing shared config link" " " 17
+at_xfail=no
+(
+ $as_echo "349. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:580:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:580"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:580"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_349
+#AT_START_350
+at_fn_group_banner 350 'rpmconfig2.at:616' \
+ "upgrade changing, modified shared config link 1" "" 17
+at_xfail=no
+(
+ $as_echo "350. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:618:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+readlink \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:618"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+readlink "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+foo-2.0
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:618"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_350
+#AT_START_351
+at_fn_group_banner 351 'rpmconfig2.at:660' \
+ "upgrade changing, modified shared config link 2" "" 17
+at_xfail=no
+(
+ $as_echo "351. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:662:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"foo-2.0\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:662"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "foo-2.0" "${cf}"
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:662"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_351
+#AT_START_352
+at_fn_group_banner 352 'rpmconfig2.at:702' \
+ "upgrade changing, modified shared config(noreplace) link 1" "" 17
+at_xfail=no
+(
+ $as_echo "352. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:704:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+readlink \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:704"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+readlink "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf created as /etc/my.conf.rpmnew
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+otherstuff
+otherstuff
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:704"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_352
+#AT_START_353
+at_fn_group_banner 353 'rpmconfig2.at:747' \
+ "upgrade changing, modified shared config(noreplace) link 2" "" 17
+at_xfail=no
+(
+ $as_echo "353. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig2.at:749:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+for s in \"A\" \"B\"; do
+ for v in \"1.0\" \"2.0\"; do
+ runroot rpmbuild --quiet -bb \\
+ --define \"sub \$s\" \\
+ --define \"ver \$v\" \\
+ --define \"filedata foo-\$v\" \\
+ --define \"filetype link\" \\
+ --define \"noreplace 1\" \\
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"foo-2.0\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U \\
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \\
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+test ! -L \"\${cf}.rpmnew\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig2.at:749"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+for s in "A" "B"; do
+ for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "sub $s" \
+ --define "ver $v" \
+ --define "filedata foo-$v" \
+ --define "filetype link" \
+ --define "noreplace 1" \
+ /data/SPECS/configtest.spec
+ done
+done
+
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "foo-2.0" "${cf}"
+readlink "${cf}"
+runroot rpm -U \
+ /build/RPMS/noarch/configtest-A-2.0-1.noarch.rpm \
+ /build/RPMS/noarch/configtest-B-2.0-1.noarch.rpm
+readlink "${cf}"
+test ! -L "${cf}.rpmnew"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0
+foo-2.0
+foo-2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig2.at:749"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_353
+#AT_START_354
+at_fn_group_banner 354 'rpmconfig3.at:6' \
+ "upgrade config to/from non-config" " " 18
+at_xfail=no
+(
+ $as_echo "354. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:8:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata bar\" \\
+ --define \"noconfig 1\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:8"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype file" \
+ --define "filedata bar" \
+ --define "noconfig 1" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+bar
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:8"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_354
+#AT_START_355
+at_fn_group_banner 355 'rpmconfig3.at:44' \
+ "upgrade modified config to/from non-config 1" " " 18
+at_xfail=no
+(
+ $as_echo "355. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:46:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata bar\" \\
+ --define \"noconfig 1\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+cat \"\${cf}.rpmsave\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:46"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype file" \
+ --define "filedata bar" \
+ --define "noconfig 1" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+cat "${cf}.rpmsave"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+bar
+otherstuff
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_355
+#AT_START_356
+at_fn_group_banner 356 'rpmconfig3.at:88' \
+ "upgrade modified config to/from non-config 2" " " 18
+at_xfail=no
+(
+ $as_echo "356. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:90:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata bar\" \\
+ --define \"noconfig 1\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"bar\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:90"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype file" \
+ --define "filedata bar" \
+ --define "noconfig 1" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "bar" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+bar
+bar
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:90"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_356
+#AT_START_357
+at_fn_group_banner 357 'rpmconfig3.at:129' \
+ "upgrade config to/from config link" " " 18
+at_xfail=no
+(
+ $as_echo "357. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:131:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata bar\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:131"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata bar" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+runroot rpm -U --oldpackage /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+bar
+foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:131"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_357
+#AT_START_358
+at_fn_group_banner 358 'rpmconfig3.at:166' \
+ "upgrade modified config to config link" " " 18
+at_xfail=no
+(
+ $as_echo "358. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:168:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata bar\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink \"\${cf}\"
+cat \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:168"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype link" \
+ --define "filedata bar" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+readlink "${cf}"
+cat "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+bar
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:168"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_358
+#AT_START_359
+at_fn_group_banner 359 'rpmconfig3.at:206' \
+ "upgrade modified config link to config" " " 18
+at_xfail=no
+(
+ $as_echo "359. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:208:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype link\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata bar\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink \"\${cf}\"
+ln -sf \"otherstuff\" \"\${cf}\"
+readlink \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat \"\${cf}\"
+readlink \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:208"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype link" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype file" \
+ --define "filedata bar" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+readlink "${cf}"
+ln -sf "otherstuff" "${cf}"
+readlink "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+cat "${cf}"
+readlink "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+bar
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:208"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_359
+#AT_START_360
+at_fn_group_banner 360 'rpmconfig3.at:246' \
+ "upgrade config to directory" " " 18
+at_xfail=no
+(
+ $as_echo "360. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:248:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+test -d \"\${cf}\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:248"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+test -d "${cf}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:248"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_360
+#AT_START_361
+at_fn_group_banner 361 'rpmconfig3.at:278' \
+ "upgrade modified config to directory" " " 18
+at_xfail=no
+(
+ $as_echo "361. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmconfig3.at:280:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+cf=\"\${RPMTEST}\"/etc/my.conf
+rm -rf \"\${cf}\" \"\${cf}\".rpm*
+rm -rf \"\${TOPDIR}\"
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 1.0\" \\
+ --define \"filetype file\" \\
+ --define \"filedata foo\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \\
+ --define \"ver 2.0\" \\
+ --define \"filetype dir\" \\
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat \"\${cf}\"
+echo \"otherstuff\" > \"\${cf}\"
+cat \"\${cf}\"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+test -d \"\${cf}\"
+cat \"\${cf}.rpmsave\"
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmconfig3.at:280"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+cf="${RPMTEST}"/etc/my.conf
+rm -rf "${cf}" "${cf}".rpm*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/configtest.spec
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 2.0" \
+ --define "filetype dir" \
+ /data/SPECS/configtest.spec
+
+runroot rpm -U /build/RPMS/noarch/configtest-1.0-1.noarch.rpm
+cat "${cf}"
+echo "otherstuff" > "${cf}"
+cat "${cf}"
+runroot rpm -U /build/RPMS/noarch/configtest-2.0-1.noarch.rpm
+test -d "${cf}"
+cat "${cf}.rpmsave"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "warning: /etc/my.conf saved as /etc/my.conf.rpmsave
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+otherstuff
+otherstuff
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmconfig3.at:280"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_361
+#AT_START_362
+at_fn_group_banner 362 'rpmmacro.at:6' \
+ "simple rpm --eval" " " 19
+at_xfail=no
+(
+ $as_echo "362. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:8:
+runroot rpm --define \"this that\" --eval '%{this}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:8"
+( $at_check_trace;
+runroot rpm --define "this that" --eval '%{this}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "that
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:8"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_362
+#AT_START_363
+at_fn_group_banner 363 'rpmmacro.at:17' \
+ "invalid rpm --eval" " " 19
+at_xfail=no
+(
+ $as_echo "363. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:19:
+runroot rpm --eval '%define _ that'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:19"
+( $at_check_trace;
+runroot rpm --eval '%define _ that'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Macro %_ has illegal name (%define)
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmmacro.at:19"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_363
+#AT_START_364
+at_fn_group_banner 364 'rpmmacro.at:29' \
+ "invalid rpm --define" " " 19
+at_xfail=no
+(
+ $as_echo "364. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:31:
+runroot rpm --define \"_ that\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:31"
+( $at_check_trace;
+runroot rpm --define "_ that"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: Macro %_ has illegal name (%define)
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmmacro.at:31"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_364
+#AT_START_365
+at_fn_group_banner 365 'rpmmacro.at:40' \
+ "rpm --undefine" " " 19
+at_xfail=no
+(
+ $as_echo "365. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:42:
+runroot rpm --define \"this that\" --eval '1. %{this}' --undefine 'this' --eval '2. %{this'}
+runroot rpm --eval '1. %{this}' --define \"this that\" --eval '2. %{this}' --undefine 'this' --eval '3. %{this'}
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:42"
+( $at_check_trace;
+runroot rpm --define "this that" --eval '1. %{this}' --undefine 'this' --eval '2. %{this'}
+runroot rpm --eval '1. %{this}' --define "this that" --eval '2. %{this}' --undefine 'this' --eval '3. %{this'}
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1. that
+2. %{this}
+1. %{this}
+2. that
+3. %{this}
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:42"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_365
+#AT_START_366
+at_fn_group_banner 366 'rpmmacro.at:55' \
+ "simple true conditional rpm --eval" " " 19
+at_xfail=no
+(
+ $as_echo "366. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:57:
+runroot rpm --define \"this that\" --eval '%{?this}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:57"
+( $at_check_trace;
+runroot rpm --define "this that" --eval '%{?this}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "that
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:57"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_366
+#AT_START_367
+at_fn_group_banner 367 'rpmmacro.at:65' \
+ "simple false conditional rpm --eval" " " 19
+at_xfail=no
+(
+ $as_echo "367. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:67:
+runroot rpm --define \"this that\" --eval '%{?that}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:67"
+( $at_check_trace;
+runroot rpm --define "this that" --eval '%{?that}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:67"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_367
+#AT_START_368
+at_fn_group_banner 368 'rpmmacro.at:75' \
+ "nested macro in name" " " 19
+at_xfail=no
+(
+ $as_echo "368. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:77:
+runroot rpm --define \"this that\" --define \"that_that foo\" --eval '%{expand:%{%{this}_that}}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:77"
+( $at_check_trace;
+runroot rpm --define "this that" --define "that_that foo" --eval '%{expand:%{%{this}_that}}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:77"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_368
+#AT_START_369
+at_fn_group_banner 369 'rpmmacro.at:85' \
+ "parametrized macro 1" " " 19
+at_xfail=no
+(
+ $as_echo "369. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:87:
+cat << EOF > \${abs_builddir}/testing/mtest
+%bar() bar
+%foo()\\\\
+%bar\\\\
+foo 1\\\\
+%{bar}\\\\
+foo 2\\\\
+%bar x\\\\
+foo 3\\\\
+%{bar x}\\\\
+foo 4\\\\
+%bar \\\\
+foo 5
+EOF
+
+runroot rpm --eval '%{load:mtest}%{foo}'
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmmacro.at:87"
+( $at_check_trace;
+cat << EOF > ${abs_builddir}/testing/mtest
+%bar() bar
+%foo()\\
+%bar\\
+foo 1\\
+%{bar}\\
+foo 2\\
+%bar x\\
+foo 3\\
+%{bar x}\\
+foo 4\\
+%bar \\
+foo 5
+EOF
+
+runroot rpm --eval '%{load:mtest}%{foo}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+bar
+foo 1
+bar
+foo 2
+bar
+foo 3
+bar
+foo 4
+bar
+foo 5
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:87"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_369
+#AT_START_370
+at_fn_group_banner 370 'rpmmacro.at:121' \
+ "parametrized macro 2" " " 19
+at_xfail=no
+(
+ $as_echo "370. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:123:
+runroot rpm \\
+ --define '%bar() \"Bar %#: %{?1} %{?2}\"' \\
+ --define '%foo() \"Foo %#: %{?1} %{?2}\" %bar a' \\
+ --eval '%foo 1 2'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:123"
+( $at_check_trace;
+runroot rpm \
+ --define '%bar() "Bar %#: %{?1} %{?2}"' \
+ --define '%foo() "Foo %#: %{?1} %{?2}" %bar a' \
+ --eval '%foo 1 2'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "\"Foo 2: 1 2\" \"Bar 1: a \"
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:123"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_370
+#AT_START_371
+at_fn_group_banner 371 'rpmmacro.at:134' \
+ "parametrized macro 3" " " 19
+at_xfail=no
+(
+ $as_echo "371. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:136:
+runroot rpm \\
+ --define '%foo() 1:%1 2:%2' \\
+ --eval '%foo %nil bar'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:136"
+( $at_check_trace;
+runroot rpm \
+ --define '%foo() 1:%1 2:%2' \
+ --eval '%foo %nil bar'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1:bar 2:%2
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:136"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_371
+#AT_START_372
+at_fn_group_banner 372 'rpmmacro.at:146' \
+ "parametrized macro 4" " " 19
+at_xfail=no
+(
+ $as_echo "372. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:148:
+runroot rpm \\
+ --define '%bar yyy' \\
+ --define '%foo() %1' \\
+ --eval '%foo %bar' \\
+ --eval '%foo %%bar'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:148"
+( $at_check_trace;
+runroot rpm \
+ --define '%bar yyy' \
+ --define '%foo() %1' \
+ --eval '%foo %bar' \
+ --eval '%foo %%bar'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "yyy
+%bar
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:148"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_372
+#AT_START_373
+at_fn_group_banner 373 'rpmmacro.at:161' \
+ "parametrized macro 5" " " 19
+at_xfail=no
+(
+ $as_echo "373. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:163:
+runroot rpm \\
+ --define '%foo() %#:%{?1:\"%1\"}%{?2: \"%2\"}' \\
+ --define 'bar zzz' \\
+ --eval '%foo 1' \\
+ --eval '%foo 2 ' \\
+ --eval '%foo 1 2' \\
+ --eval '%foo %{nil}' \\
+ --eval '%foo %{nil} xx' \\
+ --eval '%foo %{bar} xx' \\
+ --eval '%foo %{quote: 2 3 5} %{quote:%{nil}}' \\
+ --eval '%foo x%{quote:y}z 123' \\
+ --eval '%foo x%{quote:%{nil}}z' \\
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:163"
+( $at_check_trace;
+runroot rpm \
+ --define '%foo() %#:%{?1:"%1"}%{?2: "%2"}' \
+ --define 'bar zzz' \
+ --eval '%foo 1' \
+ --eval '%foo 2 ' \
+ --eval '%foo 1 2' \
+ --eval '%foo %{nil}' \
+ --eval '%foo %{nil} xx' \
+ --eval '%foo %{bar} xx' \
+ --eval '%foo %{quote: 2 3 5} %{quote:%{nil}}' \
+ --eval '%foo x%{quote:y}z 123' \
+ --eval '%foo x%{quote:%{nil}}z' \
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1:\"1\"
+1:\"2\"
+2:\"1\" \"2\"
+0:
+1:\"xx\"
+2:\"zzz\" \"xx\"
+2:\" 2 3 5\" \"\"
+2:\"xyz\" \"123\"
+1:\"xz\"
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:163"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_373
+#AT_START_374
+at_fn_group_banner 374 'rpmmacro.at:190' \
+ "uncompress macro" " " 19
+at_xfail=no
+(
+ $as_echo "374. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:192:
+runroot rpm \\
+ --define \"__gzip /my/bin/gzip\" \\
+ --eval \"%{uncompress:/data/SOURCES/hello-2.0.tar.gz}\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:192"
+( $at_check_trace;
+runroot rpm \
+ --define "__gzip /my/bin/gzip" \
+ --eval "%{uncompress:/data/SOURCES/hello-2.0.tar.gz}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/my/bin/gzip -dc /data/SOURCES/hello-2.0.tar.gz
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:192"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_374
+#AT_START_375
+at_fn_group_banner 375 'rpmmacro.at:202' \
+ "basename macro" " " 19
+at_xfail=no
+(
+ $as_echo "375. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:204:
+runroot rpm \\
+ --eval \"%{basename:/data/SOURCES/hello-2.0.tar.gz}\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:204"
+( $at_check_trace;
+runroot rpm \
+ --eval "%{basename:/data/SOURCES/hello-2.0.tar.gz}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello-2.0.tar.gz
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:204"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_375
+#AT_START_376
+at_fn_group_banner 376 'rpmmacro.at:213' \
+ "shrink macro" " " 19
+at_xfail=no
+(
+ $as_echo "376. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:215:
+runroot rpm \\
+ --eval \"%{shrink: h e l lo }\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:215"
+( $at_check_trace;
+runroot rpm \
+ --eval "%{shrink: h e l lo }"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "h e l lo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:215"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_376
+#AT_START_377
+at_fn_group_banner 377 'rpmmacro.at:224' \
+ "suffix macro" " " 19
+at_xfail=no
+(
+ $as_echo "377. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:226:
+runroot rpm \\
+ --eval \"%{suffix:/data/SOURCES/hello-2.0.tar.gz}\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:226"
+( $at_check_trace;
+runroot rpm \
+ --eval "%{suffix:/data/SOURCES/hello-2.0.tar.gz}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "gz
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:226"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_377
+#AT_START_378
+at_fn_group_banner 378 'rpmmacro.at:235' \
+ "url2path macro" " " 19
+at_xfail=no
+(
+ $as_echo "378. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:237:
+runroot rpm \\
+ --eval \"%{url2path:http://hello.org/releases/hello-2.0.tar.gz}\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:237"
+( $at_check_trace;
+runroot rpm \
+ --eval "%{url2path:http://hello.org/releases/hello-2.0.tar.gz}"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "/releases/hello-2.0.tar.gz
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:237"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_378
+#AT_START_379
+at_fn_group_banner 379 'rpmmacro.at:246' \
+ "shell expansion" " " 19
+at_xfail=no
+(
+ $as_echo "379. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:248:
+runroot rpm \\
+ --eval \"%(echo foo)\"
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:248"
+( $at_check_trace;
+runroot rpm \
+ --eval "%(echo foo)"
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:248"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_379
+#AT_START_380
+at_fn_group_banner 380 'rpmmacro.at:257' \
+ "simple lua --eval" " " 19
+at_xfail=no
+(
+ $as_echo "380. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:259:
+runroot rpm --eval '%{lua:print(5*5)}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:259"
+( $at_check_trace;
+runroot rpm --eval '%{lua:print(5*5)}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "25
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:259"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_380
+#AT_START_381
+at_fn_group_banner 381 'rpmmacro.at:267' \
+ "lua rpm extensions" " " 19
+at_xfail=no
+(
+ $as_echo "381. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:269:
+runroot rpm --eval '%{lua: rpm.define(\"foo bar\") print(rpm.expand(\"%{foo}\"))}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:269"
+( $at_check_trace;
+runroot rpm --eval '%{lua: rpm.define("foo bar") print(rpm.expand("%{foo}"))}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "bar
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:269"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_381
+#AT_START_382
+at_fn_group_banner 382 'rpmmacro.at:277' \
+ "lua posix extensions" " " 19
+at_xfail=no
+(
+ $as_echo "382. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:279:
+runroot rpm \\
+ --eval '%{lua: posix.putenv(\"LUATEST=ok\") print(posix.getenv(\"LUATEST\"))}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:279"
+( $at_check_trace;
+runroot rpm \
+ --eval '%{lua: posix.putenv("LUATEST=ok") print(posix.getenv("LUATEST"))}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "ok
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:279"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_382
+#AT_START_383
+at_fn_group_banner 383 'rpmmacro.at:288' \
+ "lua script exit behavior" " " 19
+at_xfail=no
+(
+ $as_echo "383. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:290:
+runroot rpm \\
+ --eval '%{lua: os.exit()}))}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:290"
+( $at_check_trace;
+runroot rpm \
+ --eval '%{lua: os.exit()}))}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "error: lua script failed: [string \"<lua>\"]:1: exit not permitted in this context
+" | \
+ $at_diff - "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 1 $at_status "$at_srcdir/rpmmacro.at:290"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_383
+#AT_START_384
+at_fn_group_banner 384 'rpmmacro.at:300' \
+ "%define + %undefine in nested levels 1" " " 19
+at_xfail=no
+(
+ $as_echo "384. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:302:
+# basic %define in nested scoping level
+runroot rpm \\
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand:%undefine xxx} %{echo:%xxx}' \\
+ --eval .'%foo'.
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:302"
+( $at_check_trace;
+# basic %define in nested scoping level
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand:%undefine xxx} %{echo:%xxx}' \
+ --eval .'%foo'.
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+%xxx
+. .
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:302"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_384
+#AT_START_385
+at_fn_group_banner 385 'rpmmacro.at:315' \
+ "%define + %undefine in nested levels 2" " " 19
+at_xfail=no
+(
+ $as_echo "385. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:317:
+# %define macro once in a nested scope
+runroot rpm \\
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx}' \\
+ --eval .'%foo'. \\
+ --eval '%xxx'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:317"
+( $at_check_trace;
+# %define macro once in a nested scope
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx}' \
+ --eval .'%foo'. \
+ --eval '%xxx'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+. .
+%xxx
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:317"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_385
+#AT_START_386
+at_fn_group_banner 386 'rpmmacro.at:331' \
+ "%define + %undefine in nested levels 3" " " 19
+at_xfail=no
+ test $RPM_XFAIL -ne 0 && at_xfail=yes
+(
+ $as_echo "386. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:333:
+
+# %define macro twice in a nested scope
+runroot rpm \\
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand: %define xxx 2} %{echo:%xxx}' \\
+ --eval .'%foo'. \\
+ --eval '%xxx'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:333"
+( $at_check_trace;
+
+# %define macro twice in a nested scope
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand: %define xxx 2} %{echo:%xxx}' \
+ --eval .'%foo'. \
+ --eval '%xxx'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+. .
+%xxx
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:333"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_386
+#AT_START_387
+at_fn_group_banner 387 'rpmmacro.at:349' \
+ "%define + %undefine in nested levels 4" " " 19
+at_xfail=no
+ test $RPM_XFAIL -ne 0 && at_xfail=yes
+(
+ $as_echo "387. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:351:
+
+# %define in a nested level covered by %global
+runroot rpm \\
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand: %global xxx 2} %{echo:%xxx}' \\
+ --eval .'%foo'. \\
+ --eval '%xxx' \\
+ --eval .'%undefine xxx'. \\
+ --eval '%xxx'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:351"
+( $at_check_trace;
+
+# %define in a nested level covered by %global
+runroot rpm \
+ --define '%foo() %{expand:%define xxx 1} %{echo:%xxx} %{expand: %global xxx 2} %{echo:%xxx}' \
+ --eval .'%foo'. \
+ --eval '%xxx' \
+ --eval .'%undefine xxx'. \
+ --eval '%xxx'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+. .
+2
+..
+%xxx
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:351"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_387
+#AT_START_388
+at_fn_group_banner 388 'rpmmacro.at:371' \
+ "%define in conditional macro" " " 19
+at_xfail=no
+(
+ $as_echo "388. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:373:
+runroot rpm \\
+ --define 'dofoo() true'\\
+ --eval '.%{!?foo: %define foo bar}.'\\
+ --eval '%foo' \\
+ --eval '%dofoo'\\
+ --eval '%foo'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:373"
+( $at_check_trace;
+runroot rpm \
+ --define 'dofoo() true'\
+ --eval '.%{!?foo: %define foo bar}.'\
+ --eval '%foo' \
+ --eval '%dofoo'\
+ --eval '%foo'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo ". .
+bar
+true
+bar
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:373"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_388
+#AT_START_389
+at_fn_group_banner 389 'rpmmacro.at:389' \
+ "%verbose negative test" " " 19
+at_xfail=no
+(
+ $as_echo "389. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:391:
+runroot rpm \\
+ --eval '%{verbose:%{echo:is verbose}}' \\
+ --eval '%{verbose:is verbose text}'\\
+ --eval '%{!verbose:%{echo:is not verbose}}'\\
+ --eval '%{!verbose:is not verbose text}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:391"
+( $at_check_trace;
+runroot rpm \
+ --eval '%{verbose:%{echo:is verbose}}' \
+ --eval '%{verbose:is verbose text}'\
+ --eval '%{!verbose:%{echo:is not verbose}}'\
+ --eval '%{!verbose:is not verbose text}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+
+is not verbose
+
+is not verbose text
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:391"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_389
+#AT_START_390
+at_fn_group_banner 390 'rpmmacro.at:407' \
+ "%verbose positive test" " " 19
+at_xfail=no
+(
+ $as_echo "390. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmmacro.at:409:
+runroot rpm -v \\
+ --eval '%{!verbose:%{echo:is not verbose}}' \\
+ --eval '%{!verbose:is not verbose text}'\\
+ --eval '%{verbose:%{echo:is verbose}}'\\
+ --eval '%{verbose:is verbose text}'
+"
+at_fn_check_prepare_notrace 'an embedded newline' "rpmmacro.at:409"
+( $at_check_trace;
+runroot rpm -v \
+ --eval '%{!verbose:%{echo:is not verbose}}' \
+ --eval '%{!verbose:is not verbose text}'\
+ --eval '%{verbose:%{echo:is verbose}}'\
+ --eval '%{verbose:is verbose text}'
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+
+is verbose
+
+is verbose text
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmmacro.at:409"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_390
+#AT_START_391
+at_fn_group_banner 391 'rpmpython.at:6' \
+ "module import" " " 20
+at_xfail=no
+(
+ $as_echo "391. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:6:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+myprint(rpm.__version__)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:6"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+myprint(rpm.__version__)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "4.14.1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:6"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_391
+#AT_START_392
+at_fn_group_banner 392 'rpmpython.at:12' \
+ "macro manipulation" " " 20
+at_xfail=no
+(
+ $as_echo "392. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:12:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+def prexp(m):
+ myprint(rpm.expandMacro('%%{?%s}' % m))
+
+mname = '__no_such_macro_yet'
+prexp(mname)
+rpm.addMacro(mname, '/bin/sh')
+prexp(mname)
+rpm.addMacro(mname, '/bin/false')
+prexp(mname)
+rpm.delMacro(mname)
+prexp(mname)
+rpm.delMacro(mname)
+prexp(mname)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:12"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+def prexp(m):
+ myprint(rpm.expandMacro('%%{?%s}' % m))
+
+mname = '__no_such_macro_yet'
+prexp(mname)
+rpm.addMacro(mname, '/bin/sh')
+prexp(mname)
+rpm.addMacro(mname, '/bin/false')
+prexp(mname)
+rpm.delMacro(mname)
+prexp(mname)
+rpm.delMacro(mname)
+prexp(mname)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+/bin/sh
+/bin/false
+/bin/sh
+
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:12"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_392
+#AT_START_393
+at_fn_group_banner 393 'rpmpython.at:35' \
+ "basic rpmio" " " 20
+at_xfail=no
+(
+ $as_echo "393. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:35:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+msg = 'Killroy was here\\n'
+data = msg * 10
+# TODO: test other compression types too if built in
+for iot in [ 'fpio', 'fdio', 'ufdio', 'gzdio' ]:
+ fn = 'pyio.%s' % iot
+ fd = rpm.fd(fn, 'w', iot)
+ pos = fd.tell()
+ if pos != -2 and pos != 0:
+ myprint('bad start pos %d' % fd.tell())
+ if fd.write(data) != len(data):
+ myprint('%s write fail' % iot)
+ if fn != fd.name:
+ myprint('bad file name %s' % fd.name)
+ fd.flush()
+ pos = fd.tell()
+ if pos != -2 and pos != len(data):
+ myprint('bad end pos %d' % fd.tell())
+ fd = rpm.fd(fn, 'r', iot)
+ rdata = fd.read()
+ if rdata != data:
+ myprint('%s read fail (got %d bytes)\\n%s' % (iot, len(rdata), rdata))
+ # compressed io types can't seek
+ if iot == 'ufdio':
+ fd.seek(0)
+ else:
+ fd = rpm.fd(fn, 'r', iot)
+ if fn != fd.name:
+ myprint('bad file name %s' % fd.name)
+ rdata = fd.read(len(msg))
+ if rdata != msg:
+ myprint('%s sized read fail (got %d bytes)\\n%s' % (iot, len(rdata), rdata))
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:35"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+msg = 'Killroy was here\n'
+data = msg * 10
+# TODO: test other compression types too if built in
+for iot in [ 'fpio', 'fdio', 'ufdio', 'gzdio' ]:
+ fn = 'pyio.%s' % iot
+ fd = rpm.fd(fn, 'w', iot)
+ pos = fd.tell()
+ if pos != -2 and pos != 0:
+ myprint('bad start pos %d' % fd.tell())
+ if fd.write(data) != len(data):
+ myprint('%s write fail' % iot)
+ if fn != fd.name:
+ myprint('bad file name %s' % fd.name)
+ fd.flush()
+ pos = fd.tell()
+ if pos != -2 and pos != len(data):
+ myprint('bad end pos %d' % fd.tell())
+ fd = rpm.fd(fn, 'r', iot)
+ rdata = fd.read()
+ if rdata != data:
+ myprint('%s read fail (got %d bytes)\n%s' % (iot, len(rdata), rdata))
+ # compressed io types can't seek
+ if iot == 'ufdio':
+ fd.seek(0)
+ else:
+ fd = rpm.fd(fn, 'r', iot)
+ if fn != fd.name:
+ myprint('bad file name %s' % fd.name)
+ rdata = fd.read(len(msg))
+ if rdata != msg:
+ myprint('%s sized read fail (got %d bytes)\n%s' % (iot, len(rdata), rdata))
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:35"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_393
+#AT_START_394
+at_fn_group_banner 394 'rpmpython.at:70' \
+ "spec parse" " " 20
+at_xfail=no
+(
+ $as_echo "394. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:70:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+# TODO: add a better test spec with sub-packages etc
+spec = rpm.spec('\${RPMDATA}/SPECS/hello.spec')
+for (name, num, flags) in spec.sources:
+ myprint('src %s %d %d' % (name, num, flags))
+for pkg in spec.packages:
+ myprint(pkg.header.format('%{nvr}'))
+myprint(spec.sourceHeader.format('%{nvr}'))
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:70"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+# TODO: add a better test spec with sub-packages etc
+spec = rpm.spec('${RPMDATA}/SPECS/hello.spec')
+for (name, num, flags) in spec.sources:
+ myprint('src %s %d %d' % (name, num, flags))
+for pkg in spec.packages:
+ myprint(pkg.header.format('%{nvr}'))
+myprint(spec.sourceHeader.format('%{nvr}'))
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "src hello-1.0-modernize.patch 0 2
+src hello-1.0.tar.gz 0 1
+hello-1.0-1
+hello-1.0-1
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:70"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_394
+#AT_START_395
+at_fn_group_banner 395 'rpmpython.at:85' \
+ "basic header manipulation" " " 20
+at_xfail=no
+(
+ $as_echo "395. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:85:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+h = rpm.hdr()
+h['name'] = 'testpkg'
+h['version'] = '1.0'
+h['release'] = '1'
+h['epoch'] = 5
+h['arch'] = 'noarch'
+myprint(h['nevra'])
+del h['epoch']
+myprint(h['nevra'])
+for a in ['name', 'bugurl', '__class__', '__foo__', ]:
+ try:
+ x = getattr(h, a)
+ myprint(x)
+ except AttributeError, exc:
+ myprint(exc)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:85"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+h = rpm.hdr()
+h['name'] = 'testpkg'
+h['version'] = '1.0'
+h['release'] = '1'
+h['epoch'] = 5
+h['arch'] = 'noarch'
+myprint(h['nevra'])
+del h['epoch']
+myprint(h['nevra'])
+for a in ['name', 'bugurl', '__class__', '__foo__', ]:
+ try:
+ x = getattr(h, a)
+ myprint(x)
+ except AttributeError, exc:
+ myprint(exc)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testpkg-5:1.0-1.noarch
+testpkg-1.0-1.noarch
+testpkg
+None
+<type 'rpm.hdr'>
+'rpm.hdr' object has no attribute '__foo__'
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:85"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_395
+#AT_START_396
+at_fn_group_banner 396 'rpmpython.at:110' \
+ "invalid header data" " " 20
+at_xfail=no
+(
+ $as_echo "396. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:110:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+h1 = rpm.hdr()
+h1['basenames'] = ['bing', 'bang', 'bong']
+h1['dirnames'] = ['/opt/', '/flopt/']
+h1['dirindexes'] = [ 1, 0, 3 ]
+h2 = rpm.hdr()
+h2['basenames'] = ['bing', 'bang', 'bong']
+h2['dirnames'] = ['/opt/', '/flopt/']
+h2['dirindexes'] = [ 0, 0, 1 ]
+for h in [h1, h2]:
+ try:
+ myprint(','.join(h['filenames']))
+ except rpm.error, exc:
+ myprint(exc)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:110"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+h1 = rpm.hdr()
+h1['basenames'] = ['bing', 'bang', 'bong']
+h1['dirnames'] = ['/opt/', '/flopt/']
+h1['dirindexes'] = [ 1, 0, 3 ]
+h2 = rpm.hdr()
+h2['basenames'] = ['bing', 'bang', 'bong']
+h2['dirnames'] = ['/opt/', '/flopt/']
+h2['dirindexes'] = [ 0, 0, 1 ]
+for h in [h1, h2]:
+ try:
+ myprint(','.join(h['filenames']))
+ except rpm.error, exc:
+ myprint(exc)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "invalid header data
+/opt/bing,/opt/bang,/flopt/bong
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:110"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_396
+#AT_START_397
+at_fn_group_banner 397 'rpmpython.at:129' \
+ "reading a package file" " " 20
+at_xfail=no
+(
+ $as_echo "397. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:129:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-1.0-1.ppc64.rpm')
+myprint(h['arch'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:129"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-1.0-1.ppc64.rpm')
+myprint(h['arch'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "ppc64
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:129"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_397
+#AT_START_398
+at_fn_group_banner 398 'rpmpython.at:137' \
+ "reading a signed package file 1" " " 20
+at_xfail=no
+(
+ $as_echo "398. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:137:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+# avoid rpmlog spew with absolute path to package
+sink = open('/dev/null', 'w')
+rpm.setLogFile(sink)
+try:
+ h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-2.0-1.x86_64-signed.rpm')
+ myprint(h['arch'])
+except rpm.error, e:
+ myprint(e)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:137"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+# avoid rpmlog spew with absolute path to package
+sink = open('/dev/null', 'w')
+rpm.setLogFile(sink)
+try:
+ h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.x86_64-signed.rpm')
+ myprint(h['arch'])
+except rpm.error, e:
+ myprint(e)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "public key not available
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:137"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_398
+#AT_START_399
+at_fn_group_banner 399 'rpmpython.at:152' \
+ "reading a signed package file 2" " " 20
+at_xfail=no
+(
+ $as_echo "399. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:152:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+
+keydata = open('\${RPMDATA}/keys/rpm.org-rsa-2048-test.pub').read()
+pubkey = rpm.pubkey(keydata)
+keyring = rpm.keyring()
+keyring.addKey(pubkey)
+
+ts = rpm.ts()
+ts.setKeyring(keyring)
+try:
+ h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-2.0-1.x86_64-signed.rpm')
+ myprint(h['arch'])
+except rpm.error, e:
+ myprint(e)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:152"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+
+keydata = open('${RPMDATA}/keys/rpm.org-rsa-2048-test.pub').read()
+pubkey = rpm.pubkey(keydata)
+keyring = rpm.keyring()
+keyring.addKey(pubkey)
+
+ts = rpm.ts()
+ts.setKeyring(keyring)
+try:
+ h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.x86_64-signed.rpm')
+ myprint(h['arch'])
+except rpm.error, e:
+ myprint(e)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "x86_64
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:152"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_399
+#AT_START_400
+at_fn_group_banner 400 'rpmpython.at:170' \
+ "add package to transaction" " " 20
+at_xfail=no
+(
+ $as_echo "400. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:170:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+ts.addInstall('\${RPMDATA}/RPMS/foo-1.0-1.noarch.rpm', 'u')
+for e in ts:
+ myprint(e.NEVRA())
+ts.clear()
+for e in ts:
+ myprint(e.NEVRA())
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:170"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+ts.addInstall('${RPMDATA}/RPMS/foo-1.0-1.noarch.rpm', 'u')
+for e in ts:
+ myprint(e.NEVRA())
+ts.clear()
+for e in ts:
+ myprint(e.NEVRA())
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:170"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_400
+#AT_START_401
+at_fn_group_banner 401 'rpmpython.at:182' \
+ "add bogus package to transaction 1" " " 20
+at_xfail=no
+(
+ $as_echo "401. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:182:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = rpm.hdr()
+h['name'] = \"foo\"
+try:
+ ts.addInstall(h, 'foo', 'u')
+except rpm.error, err:
+ myprint(err)
+for e in ts:
+ myprint(e.NEVRA())
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:182"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = rpm.hdr()
+h['name'] = "foo"
+try:
+ ts.addInstall(h, 'foo', 'u')
+except rpm.error, err:
+ myprint(err)
+for e in ts:
+ myprint(e.NEVRA())
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "adding package to transaction failed
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:182"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_401
+#AT_START_402
+at_fn_group_banner 402 'rpmpython.at:196' \
+ "add bogus package to transaction 2" " " 20
+at_xfail=no
+(
+ $as_echo "402. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:196:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = rpm.hdr()
+h['name'] = 'foo'
+h['version'] = '1.0'
+h['release'] = '1'
+h['os'] = 'linux'
+h['arch'] = 'noarch'
+h['basenames'] = ['bing', 'bang', 'bong']
+h['dirnames'] = ['/opt' '/flopt']
+h['dirindexes'] = [ 1, 2, 3 ]
+try:
+ ts.addInstall(h, 'foo', 'u')
+except rpm.error, err:
+ myprint(err)
+for e in ts:
+ myprint(e.NEVRA())
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:196"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = rpm.hdr()
+h['name'] = 'foo'
+h['version'] = '1.0'
+h['release'] = '1'
+h['os'] = 'linux'
+h['arch'] = 'noarch'
+h['basenames'] = ['bing', 'bang', 'bong']
+h['dirnames'] = ['/opt' '/flopt']
+h['dirindexes'] = [ 1, 2, 3 ]
+try:
+ ts.addInstall(h, 'foo', 'u')
+except rpm.error, err:
+ myprint(err)
+for e in ts:
+ myprint(e.NEVRA())
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "adding package to transaction failed
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:196"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_402
+#AT_START_403
+at_fn_group_banner 403 'rpmpython.at:217' \
+ "database iterators" " " 20
+at_xfail=no
+(
+ $as_echo "403. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:219:
+
+rm -rf \"\${abs_builddir}\"/testing\`rpm --eval '%_dbpath'\`/*
+
+
+runroot rpm --initdb
+
+runroot rpm -i \\
+ --justdb --nodeps --ignorearch --ignoreos \\
+ /data/RPMS/foo-1.0-1.noarch.rpm \\
+ /data/RPMS/hello-2.0-1.i686.rpm
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "rpmpython.at:219"
+( $at_check_trace;
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+runroot rpm -i \
+ --justdb --nodeps --ignorearch --ignoreos \
+ /data/RPMS/foo-1.0-1.noarch.rpm \
+ /data/RPMS/hello-2.0-1.i686.rpm
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:219"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:231:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+ix = 0
+mi = ts.dbMatch()
+mi.pattern('name', rpm.RPMMIRE_STRCMP, 'hello')
+for h in mi:
+ ix = h['dbinstance']
+ break
+del mi
+for h in ts.dbMatch('packages', ix):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:231"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+ix = 0
+mi = ts.dbMatch()
+mi.pattern('name', rpm.RPMMIRE_STRCMP, 'hello')
+for h in mi:
+ ix = h['dbinstance']
+ break
+del mi
+for h in ts.dbMatch('packages', ix):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello-2.0-1.i686
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:231"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:247:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+mi = ts.dbMatch()
+mi.pattern('name', rpm.RPMMIRE_DEFAULT, 'f*')
+for h in mi:
+ myprint(h['nevra'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:247"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+mi = ts.dbMatch()
+mi.pattern('name', rpm.RPMMIRE_DEFAULT, 'f*')
+for h in mi:
+ myprint(h['nevra'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:247"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:258:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('name'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:258"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('name'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+hello-2.0-1.i686
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:258"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:268:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('obsoletes'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:268"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('obsoletes'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:268"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:277:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('provides', 'hi'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:277"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('provides', 'hi'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo-1.0-1.noarch
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:277"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:286:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('basenames', '/usr/share/doc/hello-2.0/FAQ'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:286"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+for h in ts.dbMatch('basenames', '/usr/share/doc/hello-2.0/FAQ'):
+ myprint(h['nevra'])
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "hello-2.0-1.i686
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:286"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:294:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+for di in sorted(ts.dbIndex('obsoletes')):
+ myprint(di)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:294"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+for di in sorted(ts.dbIndex('obsoletes')):
+ myprint(di)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "howdy
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:294"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:303:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+for di in sorted(ts.dbIndex('provides')):
+ myprint(di)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:303"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+for di in sorted(ts.dbIndex('provides')):
+ myprint(di)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
+hello
+hello(x86-32)
+hi
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:303"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_403
+#AT_START_404
+at_fn_group_banner 404 'rpmpython.at:316' \
+ "dependency sets 1" " " 20
+at_xfail=no
+(
+ $as_echo "404. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:316:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-1.0-1.ppc64.rpm')
+for dep in rpm.ds(h, 'requires'):
+ myprint(dep.DNEVR())
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:316"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-1.0-1.ppc64.rpm')
+for dep in rpm.ds(h, 'requires'):
+ myprint(dep.DNEVR())
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "R /bin/sh
+R /bin/sh
+R /bin/sh
+R /bin/sh
+R libc.so.6
+R libc.so.6(GLIBC_2.0)
+R rpmlib(CompressedFileNames) <= 3.0.4-1
+R rpmlib(PayloadFilesHavePrefix) <= 4.0-1
+R rtld(GNU_HASH)
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:316"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_404
+#AT_START_405
+at_fn_group_banner 405 'rpmpython.at:333' \
+ "dependency sets 2" " " 20
+at_xfail=no
+(
+ $as_echo "405. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:333:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+ds = rpm.ds(h, 'provides')
+myprint('%d %d' % (ds.Instance(), ds.Count()))
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:333"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+ds = rpm.ds(h, 'provides')
+myprint('%d %d' % (ds.Instance(), ds.Count()))
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0 2
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:333"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_405
+#AT_START_406
+at_fn_group_banner 406 'rpmpython.at:343' \
+ "file info sets 1" " " 20
+at_xfail=no
+(
+ $as_echo "406. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:343:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+fi = rpm.fi(h)
+myprint(fi.FC())
+for f in fi:
+ myprint('%x: %s' % (fi.FFlags(), fi.FN()))
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:343"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+fi = rpm.fi(h)
+myprint(fi.FC())
+for f in fi:
+ myprint('%x: %s' % (fi.FFlags(), fi.FN()))
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "5
+0: /usr/bin/hello
+0: /usr/share/doc/hello-2.0
+2: /usr/share/doc/hello-2.0/COPYING
+2: /usr/share/doc/hello-2.0/FAQ
+2: /usr/share/doc/hello-2.0/README
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:343"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_406
+#AT_START_407
+at_fn_group_banner 407 'rpmpython.at:360' \
+ "string pool 1" " " 20
+at_xfail=no
+(
+ $as_echo "407. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:360:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+p = rpm.strpool()
+for s in ['foo', 'bar', 'foo', 'zoo']:
+ p.str2id(s)
+myprint('%s' % len(p))
+for i in range(1, len(p)+1):
+ myprint('%s: %s' % (i, p[i]))
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:360"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+p = rpm.strpool()
+for s in ['foo', 'bar', 'foo', 'zoo']:
+ p.str2id(s)
+myprint('%s' % len(p))
+for i in range(1, len(p)+1):
+ myprint('%s: %s' % (i, p[i]))
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3
+1: foo
+2: bar
+3: zoo
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:360"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_407
+#AT_START_408
+at_fn_group_banner 408 'rpmpython.at:375' \
+ "string pool 2" " " 20
+at_xfail=no
+(
+ $as_echo "408. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:375:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+p = rpm.strpool()
+d1 = rpm.ds(('foo', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+d2 = rpm.ds(('bar', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+d3 = rpm.ds(('bar', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+myprint('%s' % len(p))
+del p
+myprint(d1.DNEVR())
+myprint(d2.DNEVR())
+myprint(d3.DNEVR())
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:375"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+p = rpm.strpool()
+d1 = rpm.ds(('foo', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+d2 = rpm.ds(('bar', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+d3 = rpm.ds(('bar', rpm.RPMSENSE_EQUAL, '2.0'), rpm.RPMTAG_PROVIDES, pool=p)
+myprint('%s' % len(p))
+del p
+myprint(d1.DNEVR())
+myprint(d2.DNEVR())
+myprint(d3.DNEVR())
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "3
+P foo = 2.0
+P bar = 2.0
+P bar = 2.0
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:375"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_408
+#AT_START_409
+at_fn_group_banner 409 'rpmpython.at:393' \
+ "archive 1" " " 20
+at_xfail=no
+(
+ $as_echo "409. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:393:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+import hashlib
+ts = rpm.ts()
+fd = rpm.fd.open('\${RPMDATA}/SRPMS/hello-1.0-1.src.rpm')
+h = ts.hdrFromFdno(fd)
+payload = rpm.fd.open(fd, flags=h['payloadcompressor'])
+files = rpm.files(h)
+archive = files.archive(payload)
+for f in archive:
+ if not f.fflags & rpm.RPMFILE_SPECFILE:
+ continue
+ spec = archive.read()
+ hash = hashlib.md5(spec)
+ if f.digest != hash.hexdigest():
+ myprint('%s should be %s' % (hash.hexdigest(), f.digest))
+ break
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:393"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+import hashlib
+ts = rpm.ts()
+fd = rpm.fd.open('${RPMDATA}/SRPMS/hello-1.0-1.src.rpm')
+h = ts.hdrFromFdno(fd)
+payload = rpm.fd.open(fd, flags=h['payloadcompressor'])
+files = rpm.files(h)
+archive = files.archive(payload)
+for f in archive:
+ if not f.fflags & rpm.RPMFILE_SPECFILE:
+ continue
+ spec = archive.read()
+ hash = hashlib.md5(spec)
+ if f.digest != hash.hexdigest():
+ myprint('%s should be %s' % (hash.hexdigest(), f.digest))
+ break
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:393"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_409
+#AT_START_410
+at_fn_group_banner 410 'rpmpython.at:413' \
+ "header unload" " " 20
+at_xfail=no
+(
+ $as_echo "410. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmpython.at:413:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('\${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+# Add some garbage to header to make it non-sorted
+h['installtime'] = 0
+# RhBug:1061730 causes export of non-sorted header to be larger than it should
+len1 = len(h.unload())
+# Accessing the header before export forces sorting to take place even on
+# buggy versions
+t = h['installtime']
+len2 = len(h.unload())
+myprint(len1 == len2)
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmpython.at:413"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+ts = rpm.ts()
+h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
+# Add some garbage to header to make it non-sorted
+h['installtime'] = 0
+# RhBug:1061730 causes export of non-sorted header to be larger than it should
+len1 = len(h.unload())
+# Accessing the header before export forces sorting to take place even on
+# buggy versions
+t = h['installtime']
+len2 = len(h.unload())
+myprint(len1 == len2)
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "True
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmpython.at:413"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_410
+#AT_START_411
+at_fn_group_banner 411 'rpmdepmatch.at:4' \
+ "provide - require pairs" " " 21
+at_xfail=no
+(
+ $as_echo "411. $at_setup_line: testing $at_desc ..."
+ $at_traceon
+
+
+
+rm -rf "${abs_builddir}"/testing`rpm --eval '%_dbpath'`/*
+
+
+runroot rpm --initdb
+
+
+{ set +x
+$as_echo "$at_srcdir/rpmdepmatch.at:4:
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '\${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\\n' % msg)
+
+# ((provides), (requires), match) expected values
+tests = [
+ # Different names never match
+ (('b',), ('a',), 0),
+ (('b',), ('a', '=', '1.2'), 0),
+ (('b',), ('a', '>=', '1.2'), 0),
+ (('b',), ('a', '<=', '1.2'), 0),
+ (('b',), ('a', '<', '1.2'), 0),
+ (('b',), ('a', '>', '1.2'), 0),
+ (('b',), ('a', '<>', '1.2'), 0),
+
+ # Unversioned provide matches all versions
+ (('a',), ('a',), 1),
+ (('a',), ('a', '=', '1.2'), 1),
+ (('a',), ('a', '>=', '1.2'), 1),
+ (('a',), ('a', '<=', '1.2'), 1),
+ (('a',), ('a', '<', '1.2'), 1),
+ (('a',), ('a', '>', '1.2'), 1),
+ (('a',), ('a', '<>', '1.2'), 1),
+
+ # Unversioned require matches all versions
+ (('a', '=', '1.2'), ('a',), 1),
+ (('a', '<', '1.2'), ('a',), 1),
+ (('a', '>', '1.2'), ('a',), 1),
+ (('a', '<=', '1.2'), ('a',), 1),
+ (('a', '>=', '1.2'), ('a',), 1),
+ (('a', '<>', '1.2'), ('a',), 1),
+
+ # Simple, obvious version comparisons
+ (('a', '=', '1.2'), ('a', '=', '1.2'), 1),
+ (('a', '=', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1.2'), 0),
+ (('a', '=', '1.2'), ('a', '>', '1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '1.2'), 0),
+
+ (('a', '=', '1.2'), ('a', '=', '1.3'), 0),
+ (('a', '=', '1.2'), ('a', '>=', '1.3'), 0),
+ (('a', '=', '1.2'), ('a', '<=', '1.3'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1.3'), 1),
+ (('a', '=', '1.2'), ('a', '>', '1.3'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '1.3'), 1),
+
+ # Simple, obvious version-release comparisons
+ (('a', '=', '1.2-1'), ('a', '=', '1.2-1'), 1),
+ (('a', '=', '1.2-1'), ('a', '>=', '1.2-1'), 1),
+ (('a', '=', '1.2-1'), ('a', '<=', '1.2-1'), 1),
+ (('a', '=', '1.2-1'), ('a', '<', '1.2-1'), 0),
+ (('a', '=', '1.2-1'), ('a', '>', '1.2-1'), 0),
+ (('a', '=', '1.2-1'), ('a', '<>', '1.2-1'), 0),
+
+ (('a', '=', '1.2-1'), ('a', '=', '1.2-2'), 0),
+ (('a', '=', '1.2-1'), ('a', '>=', '1.2-2'), 0),
+ (('a', '=', '1.2-1'), ('a', '<=', '1.2-2'), 1),
+ (('a', '=', '1.2-1'), ('a', '<', '1.2-2'), 1),
+ (('a', '=', '1.2-1'), ('a', '>', '1.2-2'), 0),
+ (('a', '=', '1.2-1'), ('a', '<>', '1.2-2'), 1),
+
+ (('a', '=', '1.3-1'), ('a', '=', '1.2-2'), 0),
+ (('a', '=', '1.3-1'), ('a', '>=', '1.2-2'), 1),
+ (('a', '=', '1.3-1'), ('a', '<=', '1.2-2'), 0),
+ (('a', '=', '1.3-1'), ('a', '<', '1.2-2'), 0),
+ (('a', '=', '1.3-1'), ('a', '>', '1.2-2'), 1),
+ (('a', '=', '1.3-1'), ('a', '<>', '1.2-2'), 1),
+
+ # Zero epoch is same as no epoch
+ (('a', '=', '0:1.2'), ('a', '=', '1.2'), 1),
+ (('a', '=', '0:1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '0:1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '=', '0:1.2'), ('a', '<', '1.2'), 0),
+ (('a', '=', '0:1.2'), ('a', '>', '1.2'), 0),
+ (('a', '=', '0:1.2'), ('a', '<>', '1.2'), 0),
+
+ (('a', '=', '1.2'), ('a', '=', '0:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '>=', '0:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<=', '0:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<', '0:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '>', '0:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '0:1.2'), 0),
+
+ # Non-zero epochs
+ (('a', '=', '1:1.2'), ('a', '=', '1.2'), 0),
+ (('a', '=', '1:1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '1:1.2'), ('a', '<=', '1.2'), 0),
+ (('a', '=', '1:1.2'), ('a', '<', '1.2'), 0),
+ (('a', '=', '1:1.2'), ('a', '>', '1.2'), 1),
+ (('a', '=', '1:1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '=', '1.2'), ('a', '=', '1:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '>=', '1:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<=', '1:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '>', '1:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '1:1.2'), 1),
+
+ (('a', '=', '2:1.2'), ('a', '=', '2:1.2'), 1),
+ (('a', '=', '2:1.2'), ('a', '>=', '2:1.2'), 1),
+ (('a', '=', '2:1.2'), ('a', '<=', '2:1.2'), 1),
+ (('a', '=', '2:1.2'), ('a', '<', '2:1.2'), 0),
+ (('a', '=', '2:1.2'), ('a', '>', '2:1.2'), 0),
+ (('a', '=', '2:1.2'), ('a', '<>', '2:1.2'), 0),
+
+ # Simple, obvious version comparisons with provide ranges
+ (('a', '>', '1.2'), ('a', '=', '1.2'), 0),
+ (('a', '>', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '>', '1.2'), ('a', '<=', '1.2'), 0),
+ (('a', '>', '1.2'), ('a', '<', '1.2'), 0),
+ (('a', '>', '1.2'), ('a', '>', '1.2'), 1),
+ (('a', '>', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<', '1.2'), ('a', '=', '1.2'), 0),
+ (('a', '<', '1.2'), ('a', '>=', '1.2'), 0),
+ (('a', '<', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '<', '1.2'), ('a', '<', '1.2'), 1),
+ (('a', '<', '1.2'), ('a', '>', '1.2'), 0),
+ (('a', '<', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '>=', '1.2'), ('a', '=', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '<', '1.2'), 0),
+ (('a', '>=', '1.2'), ('a', '>', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<=', '1.2'), ('a', '=', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '<', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '>', '1.2'), 0),
+ (('a', '<=', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<>', '1.2'), ('a', '=', '1.2'), 0),
+ (('a', '<>', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '<', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '>', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '<>', '1.2'), 1),
+
+ # Missing release should be considered \"any release will do\"
+ # but this is not always so (the cases with \"???\")
+ (('a', '=', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '=', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '=', '1.2-1'), ('a', '<', '1.2'), 0),
+ (('a', '=', '1.2-1'), ('a', '>', '1.2'), 0),
+ (('a', '=', '1.2-1'), ('a', '<>', '1.2'), 0),
+
+ (('a', '>', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '<', '1.2'), 0),
+ (('a', '>', '1.2-1'), ('a', '>', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '<', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '>', '1.2'), 0),
+ (('a', '<', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '>=', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '<', '1.2'), 0),
+ (('a', '>=', '1.2-1'), ('a', '>', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<=', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '<', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '>', '1.2'), 0),
+ (('a', '<=', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<>', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '<', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '>', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '=', '1.2'), ('a', '=', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '>', '1.2'), ('a', '=', '1.2-1'), 0),
+ (('a', '>', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '>', '1.2'), ('a', '<=', '1.2-1'), 0),
+ (('a', '>', '1.2'), ('a', '<', '1.2-1'), 0),
+ (('a', '>', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '>', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '<', '1.2'), ('a', '=', '1.2-1'), 0),
+ (('a', '<', '1.2'), ('a', '>=', '1.2-1'), 0),
+ (('a', '<', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '<', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '<', '1.2'), ('a', '>', '1.2-1'), 0),
+ (('a', '<', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '>=', '1.2'), ('a', '=', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '<=', '1.2'), ('a', '=', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '<>', '1.2'), ('a', '=', '1.2-1'), 0),
+ (('a', '<>', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '<>', '1.2-1'), 1),
+]
+
+ms = ['no match', 'match']
+
+myprint() # dumb kludge to fixup expected output
+for p, r, res in tests:
+ d1 = rpm.ds(p, 'provides')
+ d2 = rpm.ds(r, 'requires')
+ match = d1.Compare(d2)
+ if match != res:
+ myprint('FAILED: %s with %s: %s' % (d1.DNEVR(), d2.DNEVR(),ms[res]))
+
+EOF
+python test.py
+"
+at_fn_check_prepare_notrace 'a ${...} parameter expansion' "rpmdepmatch.at:4"
+( $at_check_trace;
+cat << EOF > test.py
+import rpm, sys
+dbpath=rpm.expandMacro('%_dbpath')
+rpm.addMacro('_dbpath', '${abs_builddir}/testing%s' % dbpath)
+def myprint(msg = ''):
+ sys.stdout.write('%s\n' % msg)
+
+# ((provides), (requires), match) expected values
+tests = [
+ # Different names never match
+ (('b',), ('a',), 0),
+ (('b',), ('a', '=', '1.2'), 0),
+ (('b',), ('a', '>=', '1.2'), 0),
+ (('b',), ('a', '<=', '1.2'), 0),
+ (('b',), ('a', '<', '1.2'), 0),
+ (('b',), ('a', '>', '1.2'), 0),
+ (('b',), ('a', '<>', '1.2'), 0),
+
+ # Unversioned provide matches all versions
+ (('a',), ('a',), 1),
+ (('a',), ('a', '=', '1.2'), 1),
+ (('a',), ('a', '>=', '1.2'), 1),
+ (('a',), ('a', '<=', '1.2'), 1),
+ (('a',), ('a', '<', '1.2'), 1),
+ (('a',), ('a', '>', '1.2'), 1),
+ (('a',), ('a', '<>', '1.2'), 1),
+
+ # Unversioned require matches all versions
+ (('a', '=', '1.2'), ('a',), 1),
+ (('a', '<', '1.2'), ('a',), 1),
+ (('a', '>', '1.2'), ('a',), 1),
+ (('a', '<=', '1.2'), ('a',), 1),
+ (('a', '>=', '1.2'), ('a',), 1),
+ (('a', '<>', '1.2'), ('a',), 1),
+
+ # Simple, obvious version comparisons
+ (('a', '=', '1.2'), ('a', '=', '1.2'), 1),
+ (('a', '=', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1.2'), 0),
+ (('a', '=', '1.2'), ('a', '>', '1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '1.2'), 0),
+
+ (('a', '=', '1.2'), ('a', '=', '1.3'), 0),
+ (('a', '=', '1.2'), ('a', '>=', '1.3'), 0),
+ (('a', '=', '1.2'), ('a', '<=', '1.3'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1.3'), 1),
+ (('a', '=', '1.2'), ('a', '>', '1.3'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '1.3'), 1),
+
+ # Simple, obvious version-release comparisons
+ (('a', '=', '1.2-1'), ('a', '=', '1.2-1'), 1),
+ (('a', '=', '1.2-1'), ('a', '>=', '1.2-1'), 1),
+ (('a', '=', '1.2-1'), ('a', '<=', '1.2-1'), 1),
+ (('a', '=', '1.2-1'), ('a', '<', '1.2-1'), 0),
+ (('a', '=', '1.2-1'), ('a', '>', '1.2-1'), 0),
+ (('a', '=', '1.2-1'), ('a', '<>', '1.2-1'), 0),
+
+ (('a', '=', '1.2-1'), ('a', '=', '1.2-2'), 0),
+ (('a', '=', '1.2-1'), ('a', '>=', '1.2-2'), 0),
+ (('a', '=', '1.2-1'), ('a', '<=', '1.2-2'), 1),
+ (('a', '=', '1.2-1'), ('a', '<', '1.2-2'), 1),
+ (('a', '=', '1.2-1'), ('a', '>', '1.2-2'), 0),
+ (('a', '=', '1.2-1'), ('a', '<>', '1.2-2'), 1),
+
+ (('a', '=', '1.3-1'), ('a', '=', '1.2-2'), 0),
+ (('a', '=', '1.3-1'), ('a', '>=', '1.2-2'), 1),
+ (('a', '=', '1.3-1'), ('a', '<=', '1.2-2'), 0),
+ (('a', '=', '1.3-1'), ('a', '<', '1.2-2'), 0),
+ (('a', '=', '1.3-1'), ('a', '>', '1.2-2'), 1),
+ (('a', '=', '1.3-1'), ('a', '<>', '1.2-2'), 1),
+
+ # Zero epoch is same as no epoch
+ (('a', '=', '0:1.2'), ('a', '=', '1.2'), 1),
+ (('a', '=', '0:1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '0:1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '=', '0:1.2'), ('a', '<', '1.2'), 0),
+ (('a', '=', '0:1.2'), ('a', '>', '1.2'), 0),
+ (('a', '=', '0:1.2'), ('a', '<>', '1.2'), 0),
+
+ (('a', '=', '1.2'), ('a', '=', '0:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '>=', '0:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<=', '0:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<', '0:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '>', '0:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '0:1.2'), 0),
+
+ # Non-zero epochs
+ (('a', '=', '1:1.2'), ('a', '=', '1.2'), 0),
+ (('a', '=', '1:1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '1:1.2'), ('a', '<=', '1.2'), 0),
+ (('a', '=', '1:1.2'), ('a', '<', '1.2'), 0),
+ (('a', '=', '1:1.2'), ('a', '>', '1.2'), 1),
+ (('a', '=', '1:1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '=', '1.2'), ('a', '=', '1:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '>=', '1:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<=', '1:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1:1.2'), 1),
+ (('a', '=', '1.2'), ('a', '>', '1:1.2'), 0),
+ (('a', '=', '1.2'), ('a', '<>', '1:1.2'), 1),
+
+ (('a', '=', '2:1.2'), ('a', '=', '2:1.2'), 1),
+ (('a', '=', '2:1.2'), ('a', '>=', '2:1.2'), 1),
+ (('a', '=', '2:1.2'), ('a', '<=', '2:1.2'), 1),
+ (('a', '=', '2:1.2'), ('a', '<', '2:1.2'), 0),
+ (('a', '=', '2:1.2'), ('a', '>', '2:1.2'), 0),
+ (('a', '=', '2:1.2'), ('a', '<>', '2:1.2'), 0),
+
+ # Simple, obvious version comparisons with provide ranges
+ (('a', '>', '1.2'), ('a', '=', '1.2'), 0),
+ (('a', '>', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '>', '1.2'), ('a', '<=', '1.2'), 0),
+ (('a', '>', '1.2'), ('a', '<', '1.2'), 0),
+ (('a', '>', '1.2'), ('a', '>', '1.2'), 1),
+ (('a', '>', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<', '1.2'), ('a', '=', '1.2'), 0),
+ (('a', '<', '1.2'), ('a', '>=', '1.2'), 0),
+ (('a', '<', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '<', '1.2'), ('a', '<', '1.2'), 1),
+ (('a', '<', '1.2'), ('a', '>', '1.2'), 0),
+ (('a', '<', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '>=', '1.2'), ('a', '=', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '<', '1.2'), 0),
+ (('a', '>=', '1.2'), ('a', '>', '1.2'), 1),
+ (('a', '>=', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<=', '1.2'), ('a', '=', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '<', '1.2'), 1),
+ (('a', '<=', '1.2'), ('a', '>', '1.2'), 0),
+ (('a', '<=', '1.2'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<>', '1.2'), ('a', '=', '1.2'), 0),
+ (('a', '<>', '1.2'), ('a', '>=', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '<=', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '<', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '>', '1.2'), 1),
+ (('a', '<>', '1.2'), ('a', '<>', '1.2'), 1),
+
+ # Missing release should be considered "any release will do"
+ # but this is not always so (the cases with "???")
+ (('a', '=', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '=', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '=', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '=', '1.2-1'), ('a', '<', '1.2'), 0),
+ (('a', '=', '1.2-1'), ('a', '>', '1.2'), 0),
+ (('a', '=', '1.2-1'), ('a', '<>', '1.2'), 0),
+
+ (('a', '>', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '<', '1.2'), 0),
+ (('a', '>', '1.2-1'), ('a', '>', '1.2'), 1),
+ (('a', '>', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '<', '1.2'), 1),
+ (('a', '<', '1.2-1'), ('a', '>', '1.2'), 0),
+ (('a', '<', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '>=', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '<', '1.2'), 0),
+ (('a', '>=', '1.2-1'), ('a', '>', '1.2'), 1),
+ (('a', '>=', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<=', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '<', '1.2'), 1),
+ (('a', '<=', '1.2-1'), ('a', '>', '1.2'), 0),
+ (('a', '<=', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '<>', '1.2-1'), ('a', '=', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '>=', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '<=', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '<', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '>', '1.2'), 1),
+ (('a', '<>', '1.2-1'), ('a', '<>', '1.2'), 1),
+
+ (('a', '=', '1.2'), ('a', '=', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '=', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '>', '1.2'), ('a', '=', '1.2-1'), 0),
+ (('a', '>', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '>', '1.2'), ('a', '<=', '1.2-1'), 0),
+ (('a', '>', '1.2'), ('a', '<', '1.2-1'), 0),
+ (('a', '>', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '>', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '<', '1.2'), ('a', '=', '1.2-1'), 0),
+ (('a', '<', '1.2'), ('a', '>=', '1.2-1'), 0),
+ (('a', '<', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '<', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '<', '1.2'), ('a', '>', '1.2-1'), 0),
+ (('a', '<', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '>=', '1.2'), ('a', '=', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '>=', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '<=', '1.2'), ('a', '=', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '<=', '1.2'), ('a', '<>', '1.2-1'), 1),
+
+ (('a', '<>', '1.2'), ('a', '=', '1.2-1'), 0),
+ (('a', '<>', '1.2'), ('a', '>=', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '<=', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '<', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '>', '1.2-1'), 1),
+ (('a', '<>', '1.2'), ('a', '<>', '1.2-1'), 1),
+]
+
+ms = ['no match', 'match']
+
+myprint() # dumb kludge to fixup expected output
+for p, r, res in tests:
+ d1 = rpm.ds(p, 'provides')
+ d2 = rpm.ds(r, 'requires')
+ match = d1.Compare(d2)
+ if match != res:
+ myprint('FAILED: %s with %s: %s' % (d1.DNEVR(), d2.DNEVR(),ms[res]))
+
+EOF
+python test.py
+
+) >>"$at_stdout" 2>>"$at_stderr" 5>&-
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "
+" | \
+ $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/rpmdepmatch.at:4"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+ set +x
+ $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 7>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_411
diff --git a/tests/rpmtests.at b/tests/rpmtests.at
index b51266a2d..746792234 100644
--- a/tests/rpmtests.at
+++ b/tests/rpmtests.at
@@ -1,9 +1,13 @@
m4_include([rpmgeneral.at])
+m4_include([rpmio.at])
m4_include([rpmquery.at])
m4_include([rpmverify.at])
+m4_include([rpmsigdig.at])
m4_include([rpmdb.at])
m4_include([rpmi.at])
+m4_include([rpmorder.at])
m4_include([rpmbuild.at])
+m4_include([rpmbuildid.at])
m4_include([rpmscript.at])
m4_include([rpmvercmp.at])
m4_include([rpmdeps.at])
diff --git a/tests/rpmverify.at b/tests/rpmverify.at
index 473ac494f..7e6a1b0dc 100644
--- a/tests/rpmverify.at
+++ b/tests/rpmverify.at
@@ -16,8 +16,8 @@ runroot rpmbuild --quiet -bb \
--define "reqs deptest-two" \
/data/SPECS/deptest.spec
-runroot rpm -U --nodeps "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
-runroot rpm -Va
+runroot rpm -U --nodeps /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+runroot rpm -Va --nofiles
],
[1],
[Unsatisfied dependencies for deptest-one-1.0-1.noarch:
@@ -63,6 +63,67 @@ runroot rpm -Vva --nodeps --nouser --nogroup
[])
AT_CLEANUP
+# Test file verify when no errors expected in verbose mode.
+AT_SETUP([directory replaced with a directory symlink])
+AT_KEYWORDS([verify])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ --define "user $(id -u -n)" \
+ --define "grp $(id -g -n)" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was
+ln -s was "${RPMTEST}"/opt/foo
+runroot rpm -Vv replacetest
+],
+[0],
+[......... /opt/foo
+......... /opt/foo/README1
+......... /opt/goo
+......... /opt/zoo
+],
+[])
+AT_CLEANUP
+
+AT_SETUP([directory replaced with an invalid directory symlink])
+AT_KEYWORDS([verify])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${RPMTEST}"/opt/*
+rm -rf "${TOPDIR}"
+
+runroot rpmbuild --quiet -bb \
+ --define "ver 1.0" \
+ --define "filetype datadir" \
+ --define "filedata README1" \
+ /data/SPECS/replacetest.spec
+
+runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was
+ln -s was "${RPMTEST}"/opt/foo
+runroot rpm -Vv --nouser --nogroup replacetest
+],
+[1],
+[....L.... /opt/foo
+......... /opt/foo/README1
+......... /opt/goo
+......... /opt/zoo
+],
+[])
+AT_CLEANUP
+
# Test file verify after mutilating the files a bit.
AT_SETUP([verify from db, with problems present])
AT_KEYWORDS([verify])
@@ -107,6 +168,53 @@ missing d /usr/share/doc/hello-1.0/FAQ
[])
AT_CLEANUP
+AT_SETUP([verify file attribute filtering])
+AT_KEYWORDS([query])
+AT_CHECK([
+runroot rpmbuild -bb --quiet \
+ /data/SPECS/vattrtest.spec
+
+runroot rpm -U /build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm
+runroot_other touch /opt/vattrtest/g
+runroot_other chmod 644 /opt/vattrtest/g
+
+cmd="rpm -Vv --nouser --nogroup"
+for filter in --noconfig --noghost --noartifact; do
+ echo ${filter}
+ runroot ${cmd} ${filter} vattrtest
+done
+],
+[ignore],
+[--noconfig
+......... /opt/vattrtest
+......... a /opt/vattrtest/a
+......... d /opt/vattrtest/d
+......... g /opt/vattrtest/g
+......... l /opt/vattrtest/l
+......... m /opt/vattrtest/m
+......... r /opt/vattrtest/r
+--noghost
+......... /opt/vattrtest
+......... a /opt/vattrtest/a
+......... c /opt/vattrtest/c
+......... c /opt/vattrtest/cn
+......... d /opt/vattrtest/d
+......... l /opt/vattrtest/l
+......... m /opt/vattrtest/m
+......... r /opt/vattrtest/r
+--noartifact
+......... /opt/vattrtest
+......... c /opt/vattrtest/c
+......... c /opt/vattrtest/cn
+......... d /opt/vattrtest/d
+......... g /opt/vattrtest/g
+......... l /opt/vattrtest/l
+......... m /opt/vattrtest/m
+......... r /opt/vattrtest/r
+],
+[])
+AT_CLEANUP
+
# Test verify script success & failure behavior
# Ignoring stderr spew for now
AT_SETUP([verifyscript failure])
@@ -117,7 +225,7 @@ RPMDB_INIT
rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
-runroot rpm -U --nodeps "${TOPDIR}"/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
+runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
rm -f "${RPMTEST}"/var/checkme
runroot rpm -V --nodeps verifyscript
],
@@ -134,7 +242,7 @@ RPMDB_INIT
rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
-runroot rpm -U --nodeps "${TOPDIR}"/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
+runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
touch "${RPMTEST}"/var/checkme
runroot rpm -V --nodeps verifyscript
],
@@ -163,7 +271,7 @@ done
# first instance of a shared file is the one that actually gets created,
# force the order so we know what to expect as these dont depend on each other
-runroot rpm -U --noorder "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
+runroot rpm -U --noorder /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
runroot rpm -e conflicttwo
runroot rpm -Va --nouser --nogroup
],
@@ -171,3 +279,297 @@ runroot rpm -Va --nouser --nogroup
[],
[])
AT_CLEANUP
+
+# ------------------------------
+# Upgraded verification with min_writes 1 (files)
+AT_SETUP([Upgraded verification with min_writes 1 (files)])
+AT_KEYWORDS([upgrade verify min_writes])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+touch -t 201703171717 ${tf}
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+echo "xx" > "${tf}"
+cat "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+
+touch -t 201703171717 ${tf}
+
+runroot rpm -U --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+cat "${tf}"
+],
+[0],
+[foo
+foo
+fox
+xx
+fox
+fox
+],
+[])
+AT_CLEANUP
+
+
+# ------------------------------
+# Upgraded verification with min_writes 2 (files)
+AT_SETUP([Upgraded verification with min_writes 2 (files)])
+AT_KEYWORDS([upgrade verify min_writes])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype file" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+cat "${tf}"
+touch -t 201703171717 ${tf}
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+echo "xx" > "${tf}"
+cat "${tf}"
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+
+touch -t 201703171717 ${tf}
+
+runroot rpm -U -Uvv --fsmdebug --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+cat "${tf}"
+],
+[0],
+[foo
+2
+foo
+1
+fox
+xx
+1
+fox
+2
+fox
+],
+[])
+AT_CLEANUP
+
+# ------------------------------
+# Upgraded verification with min_writes 3 (LINKs)
+AT_SETUP([Upgraded verification with min_writes 3 (LINKs)])
+AT_KEYWORDS([upgrade verify min_writes])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+ln -sf "xx" "${tf}"
+readlink "${tf}"
+
+runroot rpm -U \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+
+runroot rpm -U --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
+runroot rpm -Va --nouser --nogroup replacetest
+readlink "${tf}"
+],
+[0],
+[foo
+foo
+fox
+xx
+fox
+fox
+],
+[])
+AT_CLEANUP
+# ------------------------------
+# Upgraded verification with min_writes 4 (LINKs)
+AT_SETUP([Upgraded verification with min_writes 4 (LINKs)])
+AT_KEYWORDS([upgrade verify min_writes])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+tf="${RPMTEST}"/opt/foo
+rm -rf "${tf}" "${tf}".rpm*
+rm -rf "${TOPDIR}"
+
+for v in "1.0" "2.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata foo" \
+ /data/SPECS/replacetest.spec
+done
+
+for v in "3.0" "4.0"; do
+ runroot rpmbuild --quiet -bb \
+ --define "ver $v" \
+ --define "filetype link" \
+ --define "filedata fox" \
+ /data/SPECS/replacetest.spec
+done
+
+runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
+readlink "${tf}"
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+ln -sf "xx" "${tf}"
+readlink "${tf}"
+
+runroot rpm -Uvv --fsmdebug \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+
+runroot rpm -U -Uvv --fsmdebug --oldpackage \
+ --define "_minimize_writes 1" \
+ /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
+runroot rpm -Va --nouser --nogroup replacetest
+grep -c "touch" output.txt
+readlink "${tf}"
+],
+[0],
+[foo
+2
+foo
+1
+fox
+xx
+1
+fox
+2
+fox
+],
+[])
+AT_CLEANUP
diff --git a/tools/debugedit.c b/tools/debugedit.c
index 7f27b47c5..1912f8963 100644
--- a/tools/debugedit.c
+++ b/tools/debugedit.c
@@ -1,6 +1,7 @@
-/* Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009, 2010, 2011 Red Hat, Inc.
+/* Copyright (C) 2001-2003, 2005, 2007, 2009-2011, 2016, 2017 Red Hat, Inc.
Written by Alexander Larsson <alexl@redhat.com>, 2002
Based on code by Jakub Jelinek <jakub@redhat.com>, 2001.
+ String/Line table rewriting by Mark Wielaard <mjw@redhat.com>, 2017.
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
@@ -30,6 +31,7 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
+#include <inttypes.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -69,6 +71,43 @@
#define DW_FORM_ref_udata 0x15
#define DW_FORM_indirect 0x16
+#define DW_MACRO_GNU_define 1
+#define DW_MACRO_GNU_undef 2
+#define DW_MACRO_GNU_start_file 3
+#define DW_MACRO_GNU_end_file 4
+#define DW_MACRO_GNU_define_indirect 5
+#define DW_MACRO_GNU_undef_indirect 6
+#define DW_MACRO_GNU_transparent_include 7
+
+/* Unfortunately strtab manipulation functions were only officially added
+ to elfutils libdw in 0.167. Before that there were internal unsupported
+ ebl variants. While libebl.h isn't supported we'll try to use it anyway
+ if the elfutils we build against is too old. */
+#include <elfutils/version.h>
+#if _ELFUTILS_PREREQ (0, 167)
+#include <elfutils/libdwelf.h>
+typedef Dwelf_Strent Strent;
+typedef Dwelf_Strtab Strtab;
+#define strtab_init dwelf_strtab_init
+#define strtab_add(X,Y) dwelf_strtab_add(X,Y)
+#define strtab_add_len(X,Y,Z) dwelf_strtab_add_len(X,Y,Z)
+#define strtab_free dwelf_strtab_free
+#define strtab_finalize dwelf_strtab_finalize
+#define strent_offset dwelf_strent_off
+#else
+#include <elfutils/libebl.h>
+typedef struct Ebl_Strent Strent;
+typedef struct Ebl_Strtab Strtab;
+#define strtab_init ebl_strtabinit
+#define strtab_add(X,Y) ebl_strtabadd(X,Y,0)
+#define strtab_add_len(X,Y,Z) ebl_strtabadd(X,Y,Z)
+#define strtab_free ebl_strtabfree
+#define strtab_finalize ebl_strtabfinalize
+#define strent_offset ebl_strtaboffset
+#endif
+
+#include <search.h>
+
#include <rpm/rpmio.h>
#include <rpm/rpmpgp.h>
#include "tools/hashtab.h"
@@ -84,6 +123,101 @@ char *dest_dir = NULL;
char *list_file = NULL;
int list_file_fd = -1;
int do_build_id = 0;
+int no_recompute_build_id = 0;
+char *build_id_seed = NULL;
+
+/* We go over the debug sections in two phases. In phase zero we keep
+ track of any needed changes and collect strings, indexes and
+ sizes. In phase one we do the actual replacements updating the
+ strings, indexes and writing out new debug sections. The following
+ keep track of various changes that might be needed. */
+
+/* Whether we need to do any literal string (DW_FORM_string) replacements
+ in debug_info. */
+static bool need_string_replacement = false;
+/* Whether we need to do any updates of the string indexes (DW_FORM_strp)
+ in debug_info for string indexes. */
+static bool need_strp_update = false;
+/* If the debug_line changes size we will need to update the
+ DW_AT_stmt_list attributes indexes in the debug_info. */
+static bool need_stmt_update = false;
+
+/* Storage for dynamically allocated strings to put into string
+ table. Keep together in memory blocks of 16K. */
+#define STRMEMSIZE (16 * 1024)
+struct strmemblock
+{
+ struct strmemblock *next;
+ char memory[0];
+};
+
+/* We keep track of each index in the original string table and the
+ associated entry in the new table so we don't insert identical
+ strings into the new string table. If constructed correctly the
+ original strtab shouldn't contain duplicate strings anyway. Any
+ actual identical strings could be deduplicated, but searching for
+ and comparing the indexes is much faster than comparing strings
+ (and we don't have to construct replacement strings). */
+struct stridxentry
+{
+ uint32_t idx; /* Original index in the string table. */
+ Strent *entry; /* Entry in the new table. */
+};
+
+/* Storage for new string table entries. Keep together in memory to
+ quickly search through them with tsearch. */
+#define STRIDXENTRIES ((16 * 1024) / sizeof (struct stridxentry))
+struct strentblock
+{
+ struct strentblock *next;
+ struct stridxentry entry[0];
+};
+
+/* All data to keep track of the existing and new string table. */
+struct strings
+{
+ Strtab *str_tab; /* The new string table. */
+ char *str_buf; /* New Elf_Data d_buf. */
+ struct strmemblock *blocks; /* The first strmemblock. */
+ struct strmemblock *last_block; /* The currently used strmemblock. */
+ size_t stridx; /* Next free byte in last block. */
+ struct strentblock *entries; /* The first string index block. */
+ struct strentblock *last_entries; /* The currently used strentblock. */
+ size_t entryidx; /* Next free entry in the last block. */
+ void *strent_root; /* strent binary search tree root. */
+};
+
+struct line_table
+{
+ size_t old_idx; /* Original offset. */
+ size_t new_idx; /* Offset in new debug_line section. */
+ ssize_t size_diff; /* Difference in (header) size. */
+ bool replace_dirs; /* Whether to replace any dir paths. */
+ bool replace_files; /* Whether to replace any file paths. */
+
+ /* Header fields. */
+ uint32_t unit_length;
+ uint16_t version;
+ uint32_t header_length;
+ uint8_t min_instr_len;
+ uint8_t max_op_per_instr; /* Only if version >= 4 */
+ uint8_t default_is_stmt;
+ int8_t line_base;
+ uint8_t line_range;
+ uint8_t opcode_base;
+};
+
+struct debug_lines
+{
+ struct line_table *table; /* Malloc/Realloced. */
+ size_t size; /* Total number of line_tables.
+ Updated by get_line_table. */
+ size_t used; /* Used number of line_tables.
+ Updated by get_line_table. */
+ size_t debug_lines_len; /* Total size of new debug_line section.
+ updated by edit_dwarf2_line. */
+ char *line_buf; /* New Elf_Data d_buf. */
+};
typedef struct
{
@@ -92,15 +226,42 @@ typedef struct
Elf_Scn **scn;
const char *filename;
int lastscn;
+ size_t phnum;
+ struct strings strings;
+ struct debug_lines lines;
GElf_Shdr shdr[0];
} DSO;
+static void
+setup_lines (struct debug_lines *lines)
+{
+ lines->table = NULL;
+ lines->size = 0;
+ lines->used = 0;
+ lines->debug_lines_len = 0;
+ lines->line_buf = NULL;
+}
+
+static void
+destroy_lines (struct debug_lines *lines)
+{
+ free (lines->table);
+ free (lines->line_buf);
+}
+
typedef struct
{
unsigned char *ptr;
uint32_t addend;
+ int ndx;
} REL;
+typedef struct
+{
+ Elf64_Addr r_offset;
+ int ndx;
+} LINE_REL;
+
#define read_uleb128(ptr) ({ \
unsigned int ret = 0; \
unsigned int c; \
@@ -117,9 +278,23 @@ typedef struct
ret; \
})
+#define write_uleb128(ptr,val) ({ \
+ uint32_t valv = (val); \
+ do \
+ { \
+ unsigned char c = valv & 0x7f; \
+ valv >>= 7; \
+ if (valv) \
+ c |= 0x80; \
+ *ptr++ = c; \
+ } \
+ while (valv); \
+})
+
static uint16_t (*do_read_16) (unsigned char *ptr);
static uint32_t (*do_read_32) (unsigned char *ptr);
-static void (*write_32) (unsigned char *ptr, GElf_Addr val);
+static void (*do_write_16) (unsigned char *ptr, uint16_t val);
+static void (*do_write_32) (unsigned char *ptr, uint32_t val);
static int ptr_size;
static int cu_version;
@@ -158,11 +333,11 @@ strptr (DSO *dso, int sec, off_t offset)
if (offset >= 0 && (GElf_Addr) offset < dso->shdr[sec].sh_size)
{
data = NULL;
- while ((data = elf_rawdata (scn, data)) != NULL)
+ while ((data = elf_getdata (scn, data)) != NULL)
{
if (data->d_buf
&& offset >= data->d_off
- && offset < data->d_off + (off_t)data->d_size)
+ && offset < data->d_off + data->d_size)
return (const char *) data->d_buf + (offset - data->d_off);
}
}
@@ -171,7 +346,7 @@ strptr (DSO *dso, int sec, off_t offset)
}
-#define read_1(ptr) *ptr++
+#define read_8(ptr) *ptr++
#define read_16(ptr) ({ \
uint16_t ret = do_read_16 (ptr); \
@@ -212,28 +387,73 @@ int reltype;
})
static void
-dwarf2_write_le32 (unsigned char *p, GElf_Addr val)
+dwarf2_write_le16 (unsigned char *p, uint16_t v)
{
- uint32_t v = (uint32_t) val;
+ p[0] = v;
+ p[1] = v >> 8;
+}
+static void
+dwarf2_write_le32 (unsigned char *p, uint32_t v)
+{
p[0] = v;
p[1] = v >> 8;
p[2] = v >> 16;
p[3] = v >> 24;
}
-
static void
-dwarf2_write_be32 (unsigned char *p, GElf_Addr val)
+dwarf2_write_be16 (unsigned char *p, uint16_t v)
{
- uint32_t v = (uint32_t) val;
+ p[1] = v;
+ p[0] = v >> 8;
+}
+static void
+dwarf2_write_be32 (unsigned char *p, uint32_t v)
+{
p[3] = v;
p[2] = v >> 8;
p[1] = v >> 16;
p[0] = v >> 24;
}
+#define write_8(ptr,val) ({ \
+ *ptr++ = (val); \
+})
+
+#define write_16(ptr,val) ({ \
+ do_write_16 (ptr,val); \
+ ptr += 2; \
+})
+
+#define write_32(ptr,val) ({ \
+ do_write_32 (ptr,val); \
+ ptr += 4; \
+})
+
+/* relocated writes can only be called immediately after
+ do_read_32_relocated. ptr must be equal to relptr->ptr (or
+ relend). Might just update the addend. So relocations need to be
+ updated at the end. */
+
+#define do_write_32_relocated(ptr,val) ({ \
+ if (relptr && relptr < relend && relptr->ptr == ptr) \
+ { \
+ if (reltype == SHT_REL) \
+ do_write_32 (ptr, val - relptr->addend); \
+ else \
+ relptr->addend = val; \
+ } \
+ else \
+ do_write_32 (ptr,val); \
+})
+
+#define write_32_relocated(ptr,val) ({ \
+ do_write_32_relocated (ptr,val); \
+ ptr += 4; \
+})
+
static struct
{
const char *name;
@@ -256,6 +476,7 @@ static struct
#define DEBUG_RANGES 10
#define DEBUG_TYPES 11
#define DEBUG_MACRO 12
+#define DEBUG_GDB_SCRIPT 13
{ ".debug_info", NULL, NULL, 0, 0, 0 },
{ ".debug_abbrev", NULL, NULL, 0, 0, 0 },
{ ".debug_line", NULL, NULL, 0, 0, 0 },
@@ -269,6 +490,7 @@ static struct
{ ".debug_ranges", NULL, NULL, 0, 0, 0 },
{ ".debug_types", NULL, NULL, 0, 0, 0 },
{ ".debug_macro", NULL, NULL, 0, 0, 0 },
+ { ".debug_gdb_scripts", NULL, NULL, 0, 0, 0 },
{ NULL, NULL, NULL, 0, 0, 0 }
};
@@ -475,99 +697,661 @@ canonicalize_path (const char *s, char *d)
return rv;
}
+/* Returns the rest of PATH if it starts with DIR_PREFIX, skipping any
+ / path separators, or NULL if PATH doesn't start with
+ DIR_PREFIX. Might return the empty string if PATH equals DIR_PREFIX
+ (modulo trailing slashes). Never returns path starting with '/'.
+ Note that DIR_PREFIX itself should NOT end with a '/'. */
+static const char *
+skip_dir_prefix (const char *path, const char *dir_prefix)
+{
+ size_t prefix_len = strlen (dir_prefix);
+ if (strncmp (path, dir_prefix, prefix_len) == 0)
+ {
+ path += prefix_len;
+ /* Unless path == dir_prefix there should be at least one '/'
+ in the path (which we will skip). Otherwise the path has
+ a different (longer) directory prefix. */
+ if (*path != '\0' && !IS_DIR_SEPARATOR (*path))
+ return NULL;
+ while (IS_DIR_SEPARATOR (path[0]))
+ path++;
+ return path;
+ }
+
+ return NULL;
+}
+
+/* Most strings will be in the existing debug string table. But to
+ replace the base/dest directory prefix we need some new storage.
+ Keep new strings somewhat close together for faster comparison and
+ copying. SIZE should be at least one (and includes space for the
+ zero terminator). The returned pointer points to uninitialized
+ data. */
+static char *
+new_string_storage (struct strings *strings, size_t size)
+{
+ assert (size > 0);
+
+ /* If the string is extra long just create a whole block for
+ it. Normally strings are much smaller than STRMEMSIZE. */
+ if (strings->last_block == NULL
+ || size > STRMEMSIZE
+ || strings->stridx > STRMEMSIZE
+ || (STRMEMSIZE - strings->stridx) < size)
+ {
+ struct strmemblock *newblock = malloc (sizeof (struct strmemblock)
+ + MAX (STRMEMSIZE, size));
+ if (newblock == NULL)
+ return NULL;
+
+ newblock->next = NULL;
+
+ if (strings->blocks == NULL)
+ strings->blocks = newblock;
+
+ if (strings->last_block != NULL)
+ strings->last_block->next = newblock;
+
+ strings->last_block = newblock;
+ strings->stridx = 0;
+ }
+
+ size_t stridx = strings->stridx;
+ strings->stridx += size + 1;
+ return &strings->last_block->memory[stridx];
+}
+
+/* Comparison function used for tsearch. */
static int
-has_prefix (const char *str,
- const char *prefix)
+strent_compare (const void *a, const void *b)
{
- size_t str_len;
- size_t prefix_len;
+ struct stridxentry *entry_a = (struct stridxentry *)a;
+ struct stridxentry *entry_b = (struct stridxentry *)b;
+ size_t idx_a = entry_a->idx;
+ size_t idx_b = entry_b->idx;
- str_len = strlen (str);
- prefix_len = strlen (prefix);
+ if (idx_a < idx_b)
+ return -1;
- if (str_len < prefix_len)
- return 0;
+ if (idx_a > idx_b)
+ return 1;
- return strncmp (str, prefix, prefix_len) == 0;
+ return 0;
}
-static int dirty_elf;
+/* Allocates and inserts a new entry for the old index if not yet
+ seen. Returns a stridxentry if the given index has not yet been
+ seen and needs to be filled in with the associated string (either
+ the original string or the replacement string). Returns NULL if the
+ idx is already known. Use in phase 0 to add all strings seen. In
+ phase 1 use string_find_entry instead to get existing entries. */
+static struct stridxentry *
+string_find_new_entry (struct strings *strings, size_t old_idx)
+{
+ /* Use next entry in the pool for lookup so we can use it directly
+ if this is a new index. */
+ struct stridxentry *entry;
+
+ /* Keep entries close together to make key comparison fast. */
+ if (strings->last_entries == NULL || strings->entryidx >= STRIDXENTRIES)
+ {
+ size_t entriessz = (sizeof (struct strentblock)
+ + (STRIDXENTRIES * sizeof (struct stridxentry)));
+ struct strentblock *newentries = malloc (entriessz);
+ if (newentries == NULL)
+ error (1, errno, "Couldn't allocate new string entries block");
+ else
+ {
+ if (strings->entries == NULL)
+ strings->entries = newentries;
+
+ if (strings->last_entries != NULL)
+ strings->last_entries->next = newentries;
+
+ strings->last_entries = newentries;
+ strings->last_entries->next = NULL;
+ strings->entryidx = 0;
+ }
+ }
+
+ entry = &strings->last_entries->entry[strings->entryidx];
+ entry->idx = old_idx;
+ struct stridxentry **tres = tsearch (entry, &strings->strent_root,
+ strent_compare);
+ if (tres == NULL)
+ error (1, ENOMEM, "Couldn't insert new strtab idx");
+ else if (*tres == entry)
+ {
+ /* idx not yet seen, must add actual str. */
+ strings->entryidx++;
+ return entry;
+ }
+
+ return NULL; /* We already know about this idx, entry already complete. */
+}
+
+static struct stridxentry *
+string_find_entry (struct strings *strings, size_t old_idx)
+{
+ struct stridxentry **ret;
+ struct stridxentry key;
+ key.idx = old_idx;
+ ret = tfind (&key, &strings->strent_root, strent_compare);
+ assert (ret != NULL); /* Can only happen for a bad/non-existing old_idx. */
+ return *ret;
+}
+
+/* Adds a string_idx_entry given an index into the old/existing string
+ table. Should be used in phase 0. Does nothing if the index was
+ already registered. Otherwise it checks the string associated with
+ the index. If the old string doesn't start with base_dir an entry
+ will be recorded for the index with the same string. Otherwise a
+ string will be recorded where the base_dir prefix will be replaced
+ by dest_dir. Returns true if this is a not yet seen index and there
+ a replacement file string has been recorded for it, otherwise
+ returns false. */
+static bool
+record_file_string_entry_idx (struct strings *strings, size_t old_idx)
+{
+ bool ret = false;
+ struct stridxentry *entry = string_find_new_entry (strings, old_idx);
+ if (entry != NULL)
+ {
+ if (old_idx >= debug_sections[DEBUG_STR].size)
+ error (1, 0, "Bad string pointer index %zd", old_idx);
+
+ Strent *strent;
+ const char *old_str = (char *)debug_sections[DEBUG_STR].data + old_idx;
+ const char *file = skip_dir_prefix (old_str, base_dir);
+ if (file == NULL)
+ {
+ /* Just record the existing string. */
+ strent = strtab_add_len (strings->str_tab, old_str,
+ strlen (old_str) + 1);
+ }
+ else
+ {
+ /* Create and record the altered file path. */
+ size_t dest_len = strlen (dest_dir);
+ size_t file_len = strlen (file);
+ size_t nsize = dest_len + 1; /* + '\0' */
+ if (file_len > 0)
+ nsize += 1 + file_len; /* + '/' */
+ char *nname = new_string_storage (strings, nsize);
+ if (nname == NULL)
+ error (1, ENOMEM, "Couldn't allocate new string storage");
+ memcpy (nname, dest_dir, dest_len);
+ if (file_len > 0)
+ {
+ nname[dest_len] = '/';
+ memcpy (nname + dest_len + 1, file, file_len + 1);
+ }
+ else
+ nname[dest_len] = '\0';
+
+ strent = strtab_add_len (strings->str_tab, nname, nsize);
+ ret = true;
+ }
+ if (strent == NULL)
+ error (1, ENOMEM, "Could not create new string table entry");
+ else
+ entry->entry = strent;
+ }
+
+ return ret;
+}
+
+/* Same as record_new_string_file_string_entry_idx but doesn't replace
+ base_dir with dest_dir, just records the existing string associated
+ with the index. */
static void
-dirty_section (unsigned int sec)
+record_existing_string_entry_idx (struct strings *strings, size_t old_idx)
{
- elf_flagdata (debug_sections[sec].elf_data, ELF_C_SET, ELF_F_DIRTY);
- dirty_elf = 1;
+ struct stridxentry *entry = string_find_new_entry (strings, old_idx);
+ if (entry != NULL)
+ {
+ if (old_idx >= debug_sections[DEBUG_STR].size)
+ error (1, 0, "Bad string pointer index %zd", old_idx);
+
+ const char *str = (char *)debug_sections[DEBUG_STR].data + old_idx;
+ Strent *strent = strtab_add_len (strings->str_tab,
+ str, strlen (str) + 1);
+ if (strent == NULL)
+ error (1, ENOMEM, "Could not create new string table entry");
+ else
+ entry->entry = strent;
+ }
}
-static int
-edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
+static void
+setup_strings (struct strings *strings)
{
- unsigned char *ptr = debug_sections[DEBUG_LINE].data, *dir;
- char **dirt;
- unsigned char *endsec = ptr + debug_sections[DEBUG_LINE].size;
- unsigned char *endcu, *endprol;
- char line_base;
- unsigned char opcode_base;
- uint32_t value, dirt_cnt;
- size_t comp_dir_len = strlen (comp_dir);
- size_t abs_file_cnt = 0, abs_dir_cnt = 0;
+ strings->str_tab = strtab_init (false);
+ strings->str_buf = NULL;
+ strings->blocks = NULL;
+ strings->last_block = NULL;
+ strings->entries = NULL;
+ strings->last_entries = NULL;
+ strings->strent_root = NULL;
+}
+
+/* Noop for tdestroy. */
+static void free_node (void *p __attribute__((__unused__))) { }
+
+static void
+destroy_strings (struct strings *strings)
+{
+ struct strmemblock *smb = strings->blocks;
+ while (smb != NULL)
+ {
+ void *old = smb;
+ smb = smb->next;
+ free (old);
+ }
+
+ struct strentblock *emb = strings->entries;
+ while (emb != NULL)
+ {
+ void *old = emb;
+ emb = emb->next;
+ free (old);
+ }
+
+ strtab_free (strings->str_tab);
+ tdestroy (strings->strent_root, &free_node);
+ free (strings->str_buf);
+}
+
+/* The minimum number of line tables we pre-allocate. */
+#define MIN_LINE_TABLES 64
- if (phase != 0)
- return 0;
+/* Gets a line_table at offset. Returns true if not yet know and
+ successfully read, false otherwise. Sets *table to NULL and
+ outputs a warning if there was a problem reading the table at the
+ given offset. */
+static bool
+get_line_table (DSO *dso, size_t off, struct line_table **table)
+{
+ struct debug_lines *lines = &dso->lines;
+ /* Assume there aren't that many, just do a linear search. The
+ array is probably already sorted because the stmt_lists are
+ probably inserted in order. But we cannot rely on that (maybe we
+ should check that to make searching quicker if possible?). Once
+ we have all line tables for phase 1 (rewriting) we do explicitly
+ sort the array.*/
+ for (int i = 0; i < lines->used; i++)
+ if (lines->table[i].old_idx == off)
+ {
+ *table = &lines->table[i];
+ return false;
+ }
+ if (lines->size == lines->used)
+ {
+ struct line_table *new_table = realloc (lines->table,
+ (sizeof (struct line_table)
+ * (lines->size
+ + MIN_LINE_TABLES)));
+ if (new_table == NULL)
+ {
+ error (0, ENOMEM, "Couldn't add more debug_line tables");
+ *table = NULL;
+ return false;
+ }
+ lines->table = new_table;
+ lines->size += MIN_LINE_TABLES;
+ }
+
+ struct line_table *t = &lines->table[lines->used];
+ *table = NULL;
+
+ t->old_idx = off;
+ t->size_diff = 0;
+ t->replace_dirs = false;
+ t->replace_files = false;
+
+ unsigned char *ptr = debug_sections[DEBUG_LINE].data;
+ unsigned char *endsec = ptr + debug_sections[DEBUG_LINE].size;
+ if (ptr == NULL)
+ {
+ error (0, 0, "%s: No .line_table section", dso->filename);
+ return false;
+ }
+
+ if (off > debug_sections[DEBUG_LINE].size)
+ {
+ error (0, 0, "%s: Invalid .line_table offset 0x%zx",
+ dso->filename, off);
+ return false;
+ }
ptr += off;
- endcu = ptr + 4;
- endcu += read_32 (ptr);
+ /* unit_length */
+ unsigned char *endcu = ptr + 4;
+ t->unit_length = read_32 (ptr);
+ endcu += t->unit_length;
if (endcu == ptr + 0xffffffff)
{
error (0, 0, "%s: 64-bit DWARF not supported", dso->filename);
- return 1;
+ return false;
}
if (endcu > endsec)
{
error (0, 0, "%s: .debug_line CU does not fit into section",
dso->filename);
- return 1;
+ return false;
}
- value = read_16 (ptr);
- if (value != 2 && value != 3 && value != 4)
+ /* version */
+ t->version = read_16 (ptr);
+ if (t->version != 2 && t->version != 3 && t->version != 4)
{
error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
- value);
- return 1;
+ t->version);
+ return false;
}
- endprol = ptr + 4;
- endprol += read_32 (ptr);
+ /* header_length */
+ unsigned char *endprol = ptr + 4;
+ t->header_length = read_32 (ptr);
+ endprol += t->header_length;
if (endprol > endcu)
{
error (0, 0, "%s: .debug_line CU prologue does not fit into CU",
dso->filename);
- return 1;
+ return false;
+ }
+
+ /* min instr len */
+ t->min_instr_len = *ptr++;
+
+ /* max op per instr, if version >= 4 */
+ if (t->version >= 4)
+ t->max_op_per_instr = *ptr++;
+
+ /* default is stmt */
+ t->default_is_stmt = *ptr++;
+
+ /* line base */
+ t->line_base = (*(int8_t *)ptr++);
+
+ /* line range */
+ t->line_range = *ptr++;
+
+ /* opcode base */
+ t->opcode_base = *ptr++;
+
+ if (ptr + t->opcode_base - 1 >= endcu)
+ {
+ error (0, 0, "%s: .debug_line opcode table does not fit into CU",
+ dso->filename);
+ return false;
+ }
+ lines->used++;
+ *table = t;
+ return true;
+}
+
+static int dirty_elf;
+static void
+dirty_section (unsigned int sec)
+{
+ elf_flagdata (debug_sections[sec].elf_data, ELF_C_SET, ELF_F_DIRTY);
+ dirty_elf = 1;
+}
+
+static int
+line_table_cmp (const void *a, const void *b)
+{
+ struct line_table *ta = (struct line_table *) a;
+ struct line_table *tb = (struct line_table *) b;
+
+ if (ta->old_idx < tb->old_idx)
+ return -1;
+
+ if (ta->old_idx > tb->old_idx)
+ return 1;
+
+ return 0;
+}
+
+
+/* Called after phase zero (which records all adjustments needed for
+ the line tables referenced from debug_info) and before phase one
+ starts (phase one will adjust the .debug_line section stmt
+ references using the updated data structures). */
+static void
+edit_dwarf2_line (DSO *dso)
+{
+ Elf_Data *linedata = debug_sections[DEBUG_LINE].elf_data;
+ int linendx = debug_sections[DEBUG_LINE].sec;
+ Elf_Scn *linescn = dso->scn[linendx];
+ unsigned char *old_buf = linedata->d_buf;
+
+ /* Out with the old. */
+ linedata->d_size = 0;
+
+ /* In with the new. */
+ linedata = elf_newdata (linescn);
+
+ dso->lines.line_buf = malloc (dso->lines.debug_lines_len);
+ if (dso->lines.line_buf == NULL)
+ error (1, ENOMEM, "No memory for new .debug_line table (0x%zx bytes)",
+ dso->lines.debug_lines_len);
+
+ linedata->d_size = dso->lines.debug_lines_len;
+ linedata->d_buf = dso->lines.line_buf;
+ debug_sections[DEBUG_LINE].size = linedata->d_size;
+
+ /* Make sure the line tables are sorted on the old index. */
+ qsort (dso->lines.table, dso->lines.used, sizeof (struct line_table),
+ line_table_cmp);
+
+ unsigned char *ptr = linedata->d_buf;
+ for (int ldx = 0; ldx < dso->lines.used; ldx++)
+ {
+ struct line_table *t = &dso->lines.table[ldx];
+ unsigned char *optr = old_buf + t->old_idx;
+ t->new_idx = ptr - (unsigned char *) linedata->d_buf;
+
+ /* Just copy the whole table if nothing needs replacing. */
+ if (! t->replace_dirs && ! t->replace_files)
+ {
+ assert (t->size_diff == 0);
+ memcpy (ptr, optr, t->unit_length + 4);
+ ptr += t->unit_length + 4;
+ continue;
+ }
+
+ /* Header fields. */
+ write_32 (ptr, t->unit_length + t->size_diff);
+ write_16 (ptr, t->version);
+ write_32 (ptr, t->header_length + t->size_diff);
+ write_8 (ptr, t->min_instr_len);
+ if (t->version >= 4)
+ write_8 (ptr, t->max_op_per_instr);
+ write_8 (ptr, t->default_is_stmt);
+ write_8 (ptr, t->line_base);
+ write_8 (ptr, t->line_range);
+ write_8 (ptr, t->opcode_base);
+
+ optr += (4 /* unit len */
+ + 2 /* version */
+ + 4 /* header len */
+ + 1 /* min instr len */
+ + (t->version >= 4) /* max op per instr, if version >= 4 */
+ + 1 /* default is stmt */
+ + 1 /* line base */
+ + 1 /* line range */
+ + 1); /* opcode base */
+
+ /* opcode len table. */
+ memcpy (ptr, optr, t->opcode_base - 1);
+ optr += t->opcode_base - 1;
+ ptr += t->opcode_base - 1;
+
+ /* directory table. We need to find the end (start of file
+ table) anyway, so loop over all dirs, even if replace_dirs is
+ false. */
+ while (*optr != 0)
+ {
+ const char *dir = (const char *) optr;
+ const char *file_path = NULL;
+ if (t->replace_dirs)
+ {
+ file_path = skip_dir_prefix (dir, base_dir);
+ if (file_path != NULL)
+ {
+ size_t dest_len = strlen (dest_dir);
+ size_t file_len = strlen (file_path);
+ memcpy (ptr, dest_dir, dest_len);
+ ptr += dest_len;
+ if (file_len > 0)
+ {
+ *ptr++ = '/';
+ memcpy (ptr, file_path, file_len);
+ ptr += file_len;
+ }
+ *ptr++ = '\0';
+ }
+ }
+ if (file_path == NULL)
+ {
+ size_t dir_len = strlen (dir);
+ memcpy (ptr, dir, dir_len + 1);
+ ptr += dir_len + 1;
+ }
+
+ optr = (unsigned char *) strchr (dir, 0) + 1;
+ }
+ optr++;
+ *ptr++ = '\0';
+
+ /* file table */
+ if (t->replace_files)
+ {
+ while (*optr != 0)
+ {
+ const char *file = (const char *) optr;
+ const char *file_path = NULL;
+ if (t->replace_files)
+ {
+ file_path = skip_dir_prefix (file, base_dir);
+ if (file_path != NULL)
+ {
+ size_t dest_len = strlen (dest_dir);
+ size_t file_len = strlen (file_path);
+ memcpy (ptr, dest_dir, dest_len);
+ ptr += dest_len;
+ if (file_len > 0)
+ {
+ *ptr++ = '/';
+ memcpy (ptr, file_path, file_len);
+ ptr += file_len;
+ }
+ *ptr++ = '\0';
+ }
+ }
+ if (file_path == NULL)
+ {
+ size_t file_len = strlen (file);
+ memcpy (ptr, file, file_len + 1);
+ ptr += file_len + 1;
+ }
+
+ optr = (unsigned char *) strchr (file, 0) + 1;
+
+ /* dir idx, time, len */
+ uint32_t dir_idx = read_uleb128 (optr);
+ write_uleb128 (ptr, dir_idx);
+ uint32_t time = read_uleb128 (optr);
+ write_uleb128 (ptr, time);
+ uint32_t len = read_uleb128 (optr);
+ write_uleb128 (ptr, len);
+ }
+ optr++;
+ *ptr++ = '\0';
+ }
+
+ /* line number program (and file table if not copied above). */
+ size_t remaining = (t->unit_length + 4
+ - (optr - (old_buf + t->old_idx)));
+ memcpy (ptr, optr, remaining);
+ ptr += remaining;
+ }
+}
+
+/* Called during phase zero for each debug_line table referenced from
+ .debug_info. Outputs all source files seen and records any
+ adjustments needed in the debug_list data structures. Returns true
+ if line_table needs to be rewrite either the dir or file paths. */
+static bool
+read_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir)
+{
+ unsigned char *ptr, *dir;
+ unsigned char **dirt;
+ uint32_t value, dirt_cnt;
+ size_t comp_dir_len = !comp_dir ? 0 : strlen (comp_dir);
+ struct line_table *table;
+
+ if (get_line_table (dso, off, &table) == false
+ || table == NULL)
+ {
+ if (table != NULL)
+ error (0, 0, ".debug_line offset 0x%x referenced multiple times",
+ off);
+ return false;
}
- line_base = (char) (ptr[2 + (value >= 4)] & 0xff);
- opcode_base = ptr[4 + (value >= 4)];
- ptr = dir = ptr + 4 + (value >= 4) + opcode_base;
+ /* Skip to the directory table. The rest of the header has already
+ been read and checked by get_line_table. */
+ ptr = debug_sections[DEBUG_LINE].data + off;
+ ptr += (4 /* unit len */
+ + 2 /* version */
+ + 4 /* header len */
+ + 1 /* min instr len */
+ + (table->version >= 4) /* max op per instr, if version >= 4 */
+ + 1 /* default is stmt */
+ + 1 /* line base */
+ + 1 /* line range */
+ + 1 /* opcode base */
+ + table->opcode_base - 1); /* opcode len table */
+ dir = ptr;
/* dir table: */
value = 1;
while (*ptr != 0)
{
+ if (base_dir && dest_dir)
+ {
+ /* Do we need to replace any of the dirs? Calculate new size. */
+ const char *file_path = skip_dir_prefix ((const char *)ptr,
+ base_dir);
+ if (file_path != NULL)
+ {
+ size_t old_size = strlen ((const char *)ptr) + 1;
+ size_t file_len = strlen (file_path);
+ size_t new_size = strlen (dest_dir) + 1;
+ if (file_len > 0)
+ new_size += 1 + file_len;
+ table->size_diff += (new_size - old_size);
+ table->replace_dirs = true;
+ }
+ }
+
ptr = (unsigned char *) strchr ((char *)ptr, 0) + 1;
++value;
}
- dirt = (char **) alloca (value * sizeof (unsigned char *));
+ dirt = (unsigned char **) alloca (value * sizeof (unsigned char *));
dirt[0] = (unsigned char *) ".";
dirt_cnt = 1;
ptr = dir;
while (*ptr != 0)
{
- dirt[dirt_cnt++] = (char *)ptr;
+ dirt[dirt_cnt++] = ptr;
ptr = (unsigned char *) strchr ((char *)ptr, 0) + 1;
}
ptr++;
@@ -586,21 +1370,34 @@ edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
{
error (0, 0, "%s: Wrong directory table index %u",
dso->filename, value);
- return 1;
+ return false;
}
file_len = strlen (file);
+ if (base_dir && dest_dir)
+ {
+ /* Do we need to replace any of the files? Calculate new size. */
+ const char *file_path = skip_dir_prefix (file, base_dir);
+ if (file_path != NULL)
+ {
+ size_t old_size = file_len + 1;
+ size_t file_len = strlen (file_path);
+ size_t new_size = strlen (dest_dir) + 1;
+ if (file_len > 0)
+ new_size += 1 + file_len;
+ table->size_diff += (new_size - old_size);
+ table->replace_files = true;
+ }
+ }
dir_len = strlen ((char *)dirt[value]);
s = malloc (comp_dir_len + 1 + file_len + 1 + dir_len + 1);
if (s == NULL)
{
error (0, ENOMEM, "%s: Reading file table", dso->filename);
- return 1;
+ return false;
}
if (*file == '/')
{
memcpy (s, file, file_len + 1);
- if (dest_dir && has_prefix (file, base_dir))
- ++abs_file_cnt;
}
else if (*dirt[value] == '/')
{
@@ -624,13 +1421,15 @@ edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
canonicalize_path (s, s);
if (list_file_fd != -1)
{
- char *p = NULL;
+ const char *p = NULL;
if (base_dir == NULL)
p = s;
- else if (has_prefix (s, base_dir))
- p = s + strlen (base_dir);
- else if (has_prefix (s, dest_dir))
- p = s + strlen (dest_dir);
+ else
+ {
+ p = skip_dir_prefix (s, base_dir);
+ if (p == NULL && dest_dir != NULL)
+ p = skip_dir_prefix (s, dest_dir);
+ }
if (p)
{
@@ -651,123 +1450,28 @@ edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
read_uleb128 (ptr);
read_uleb128 (ptr);
}
- ++ptr;
-
- if (dest_dir)
- {
- char *srcptr, *buf = NULL;
- size_t base_len = strlen (base_dir);
- size_t dest_len = strlen (dest_dir);
- size_t shrank = 0;
-
- if (dest_len == base_len)
- abs_file_cnt = 0;
- if (abs_file_cnt)
- {
- srcptr = buf = malloc (ptr - dir);
- memcpy (srcptr, dir, ptr - dir);
- ptr = dir;
- }
- else
- {
- ptr = dir;
- srcptr = (char *)dir;
- }
- while (*srcptr != 0)
- {
- size_t len = strlen ((char *)srcptr) + 1;
- const char *readptr = srcptr;
-
- char *orig = strdup ((const char *) srcptr);
-
- if (*srcptr == '/' && has_prefix ((char *)srcptr, base_dir))
- {
- if (dest_len < base_len)
- ++abs_dir_cnt;
- memcpy (ptr, dest_dir, dest_len);
- ptr += dest_len;
- readptr += base_len;
- }
- srcptr += len;
-
- shrank += srcptr - readptr;
- canonicalize_path ((char *)readptr, (char *)ptr);
- len = strlen ((char *)ptr) + 1;
- shrank -= len;
- ptr += len;
-
- if (memcmp (orig, ptr - len, len))
- dirty_section (DEBUG_STR);
- free (orig);
- }
-
- if (shrank > 0)
- {
- --shrank;
-#if 0
- if (shrank == 0)
- error (EXIT_FAILURE, 0,
- "canonicalization unexpectedly shrank by one character");
- else
-#endif
- {
- memset (ptr, 'X', shrank);
- ptr += shrank;
- *ptr++ = '\0';
- }
- }
-
- if (abs_dir_cnt + abs_file_cnt != 0)
- {
- size_t len = (abs_dir_cnt + abs_file_cnt) * (base_len - dest_len);
-
- if (len == 1)
- error (EXIT_FAILURE, 0, "-b arg has to be either the same length as -d arg, or more than 1 char longer");
- memset (ptr, 'X', len - 1);
- ptr += len - 1;
- *ptr++ = '\0';
- }
- *ptr++ = '\0';
- ++srcptr;
-
- while (*srcptr != 0)
- {
- size_t len = strlen ((char *)srcptr) + 1;
- if (*srcptr == '/' && has_prefix ((char *)srcptr, base_dir))
- {
- memcpy (ptr, dest_dir, dest_len);
- if (dest_len < base_len)
- {
- memmove (ptr + dest_len, srcptr + base_len,
- len - base_len);
- ptr += dest_len - base_len;
- }
- dirty_section (DEBUG_STR);
- }
- else if ((char *)ptr != srcptr)
- memmove (ptr, srcptr, len);
- srcptr += len;
- ptr += len;
- dir = (unsigned char *)srcptr;
- read_uleb128 (srcptr);
- read_uleb128 (srcptr);
- read_uleb128 (srcptr);
- if (ptr != dir)
- memmove (ptr, dir, (unsigned char *)srcptr - dir);
- ptr += (unsigned char *)srcptr - dir;
- }
- *ptr = '\0';
- free (buf);
- }
+ dso->lines.debug_lines_len += 4 + table->unit_length + table->size_diff;
+ return table->replace_dirs || table->replace_files;
+}
- ptr++;
- /* fill the rest until the line number program starts with NOP opcode */
- memset(ptr, opcode_base - line_base, endprol - ptr);
- /* don't touch the line number program */
- return 0;
+/* Called during phase one, after the table has been sorted. */
+static size_t
+find_new_list_offs (struct debug_lines *lines, size_t idx)
+{
+ struct line_table key;
+ key.old_idx = idx;
+ struct line_table *table = bsearch (&key, lines->table,
+ lines->used,
+ sizeof (struct line_table),
+ line_table_cmp);
+ return table->new_idx;
}
+/* This scans the attributes of one DIE described by the given abbrev_tag.
+ PTR points to the data in the debug_info. It will be advanced till all
+ abbrev data is consumed. In phase zero data is collected, in phase one
+ data might be replaced/updated. */
static unsigned char *
edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
{
@@ -783,20 +1487,36 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
{
uint32_t form = t->attr[i].form;
size_t len = 0;
- size_t base_len, dest_len;
-
while (1)
{
+ /* Whether we already handled a string as file for this
+ attribute. If we did then we don't need to handle/record
+ it again when handling the DW_FORM_strp later. */
+ bool handled_strp = false;
+
+ /* A stmt_list points into the .debug_line section. In
+ phase zero record all offsets. Then in phase one replace
+ them with the new offsets if we rewrote the line
+ tables. */
if (t->attr[i].attr == DW_AT_stmt_list)
{
if (form == DW_FORM_data4
|| form == DW_FORM_sec_offset)
{
list_offs = do_read_32_relocated (ptr);
- found_list_offs = 1;
+ if (phase == 0)
+ found_list_offs = 1;
+ else if (need_stmt_update) /* phase one */
+ {
+ size_t idx, new_idx;
+ idx = do_read_32_relocated (ptr);
+ new_idx = find_new_list_offs (&dso->lines, idx);
+ do_write_32_relocated (ptr, new_idx);
+ }
}
}
+ /* DW_AT_comp_dir is the current working directory. */
if (t->attr[i].attr == DW_AT_comp_dir)
{
if (form == DW_FORM_string)
@@ -804,44 +1524,77 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
free (comp_dir);
comp_dir = strdup ((char *)ptr);
- if (phase == 1 && dest_dir && has_prefix ((char *)ptr, base_dir))
+ if (dest_dir)
{
- base_len = strlen (base_dir);
- dest_len = strlen (dest_dir);
-
- memcpy (ptr, dest_dir, dest_len);
- if (dest_len < base_len)
+ /* In phase zero we are just collecting dir/file
+ names and check whether any need to be
+ adjusted. If so, in phase one we replace
+ those dir/files. */
+ const char *file = skip_dir_prefix (comp_dir, base_dir);
+ if (file != NULL && phase == 0)
+ need_string_replacement = true;
+ else if (file != NULL && phase == 1)
{
- memset(ptr + dest_len, '/',
- base_len - dest_len);
-
+ size_t orig_len = strlen (comp_dir);
+ size_t dest_len = strlen (dest_dir);
+ size_t file_len = strlen (file);
+ size_t new_len = dest_len;
+ if (file_len > 0)
+ new_len += 1 + file_len; /* + '/' */
+
+ /* We don't want to rewrite the whole
+ debug_info section, so we only replace
+ the comp_dir with something equal or
+ smaller, possibly adding some slashes
+ at the end of the new compdir. This
+ normally doesn't happen since most
+ producers will use DW_FORM_strp which is
+ more efficient. */
+ if (orig_len < new_len)
+ fprintf (stderr, "Warning, not replacing comp_dir "
+ "'%s' prefix ('%s' -> '%s') encoded as "
+ "DW_FORM_string. "
+ "Replacement too large.\n",
+ comp_dir, base_dir, dest_dir);
+ else
+ {
+ /* Add zero (if no file part), one or more
+ slashes in between the new dest_dir and the
+ file name to fill up all space (replacement
+ DW_FORM_string must be of the same length).
+ We don't need to copy the old file name (if
+ any) or the zero terminator, because those
+ are already at the end of the string. */
+ memcpy (ptr, dest_dir, dest_len);
+ memset (ptr + dest_len, '/',
+ orig_len - new_len);
+ }
}
- dirty_section (DEBUG_INFO);
}
}
else if (form == DW_FORM_strp &&
debug_sections[DEBUG_STR].data)
{
- char *dir;
-
- dir = (char *) debug_sections[DEBUG_STR].data
- + do_read_32_relocated (ptr);
-
- free (comp_dir);
- comp_dir = strdup (dir);
-
- if (phase == 1 && dest_dir && has_prefix (dir, base_dir))
+ const char *dir;
+ size_t idx = do_read_32_relocated (ptr);
+ /* In phase zero we collect the comp_dir. */
+ if (phase == 0)
{
- base_len = strlen (base_dir);
- dest_len = strlen (dest_dir);
+ if (idx >= debug_sections[DEBUG_STR].size)
+ error (1, 0,
+ "%s: Bad string pointer index %zd for comp_dir",
+ dso->filename, idx);
+ dir = (char *) debug_sections[DEBUG_STR].data + idx;
+
+ free (comp_dir);
+ comp_dir = strdup (dir);
+ }
- memcpy (dir, dest_dir, dest_len);
- if (dest_len < base_len)
- {
- memmove (dir + dest_len, dir + base_len,
- strlen (dir + base_len) + 1);
- }
- dirty_section (DEBUG_STR);
+ if (dest_dir != NULL && phase == 0)
+ {
+ if (record_file_string_entry_idx (&dso->strings, idx))
+ need_strp_update = true;
+ handled_strp = true;
}
}
}
@@ -851,36 +1604,43 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
&& form == DW_FORM_strp
&& debug_sections[DEBUG_STR].data)
{
- char *name;
-
- name = (char *) debug_sections[DEBUG_STR].data
- + do_read_32_relocated (ptr);
- if (*name == '/' && comp_dir == NULL)
+ /* DW_AT_name is the primary file for this compile
+ unit. If starting with / it is a full path name.
+ Note that we don't handle DW_FORM_string in this
+ case. */
+ size_t idx = do_read_32_relocated (ptr);
+
+ /* In phase zero we will look for a comp_dir to use. */
+ if (phase == 0)
{
- char *enddir = strrchr (name, '/');
-
- if (enddir != name)
+ if (idx >= debug_sections[DEBUG_STR].size)
+ error (1, 0,
+ "%s: Bad string pointer index %zd for unit name",
+ dso->filename, idx);
+ char *name = (char *) debug_sections[DEBUG_STR].data + idx;
+ if (*name == '/' && comp_dir == NULL)
{
- comp_dir = malloc (enddir - name + 1);
- memcpy (comp_dir, name, enddir - name);
- comp_dir [enddir - name] = '\0';
+ char *enddir = strrchr (name, '/');
+
+ if (enddir != name)
+ {
+ comp_dir = malloc (enddir - name + 1);
+ memcpy (comp_dir, name, enddir - name);
+ comp_dir [enddir - name] = '\0';
+ }
+ else
+ comp_dir = strdup ("/");
}
- else
- comp_dir = strdup ("/");
}
- if (phase == 1 && dest_dir && has_prefix (name, base_dir))
+ /* First pass (0) records the new name to be
+ added to the debug string pool, the second
+ pass (1) stores it (the new index). */
+ if (dest_dir && phase == 0)
{
- base_len = strlen (base_dir);
- dest_len = strlen (dest_dir);
-
- memcpy (name, dest_dir, dest_len);
- if (dest_len < base_len)
- {
- memmove (name + dest_len, name + base_len,
- strlen (name + base_len) + 1);
- }
- dirty_section (DEBUG_STR);
+ if (record_file_string_entry_idx (&dso->strings, idx))
+ need_strp_update = true;
+ handled_strp = true;
}
}
@@ -922,6 +1682,29 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
read_uleb128 (ptr);
break;
case DW_FORM_strp:
+ /* In the first pass we collect all strings, in the
+ second we put the new references back (if there are
+ any changes). */
+ if (phase == 0)
+ {
+ /* handled_strp is set for attributes referring to
+ files. If it is set the string is already
+ recorded. */
+ if (! handled_strp)
+ {
+ size_t idx = do_read_32_relocated (ptr);
+ record_existing_string_entry_idx (&dso->strings, idx);
+ }
+ }
+ else if (need_strp_update) /* && phase == 1 */
+ {
+ struct stridxentry *entry;
+ size_t idx, new_idx;
+ idx = do_read_32_relocated (ptr);
+ entry = string_find_entry (&dso->strings, idx);
+ new_idx = strent_offset (entry->entry);
+ do_write_32_relocated (ptr, new_idx);
+ }
ptr += 4;
break;
case DW_FORM_string:
@@ -963,32 +1746,33 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
/* Ensure the CU current directory will exist even if only empty. Source
filenames possibly located in its parent directories refer relatively to
it and the debugger (GDB) cannot safely optimize out the missing
- CU current dir subdirectories. */
- if (comp_dir && list_file_fd != -1)
+ CU current dir subdirectories. Only do this once in phase one. And
+ only do this for dirs under our build/base_dir. Don't output the
+ empty string (in case the comp_dir == base_dir). */
+ if (phase == 0 && base_dir && comp_dir && list_file_fd != -1)
{
- char *p;
- size_t size;
-
- if (base_dir && has_prefix (comp_dir, base_dir))
- p = comp_dir + strlen (base_dir);
- else if (dest_dir && has_prefix (comp_dir, dest_dir))
- p = comp_dir + strlen (dest_dir);
- else
- p = comp_dir;
-
- size = strlen (p) + 1;
- while (size > 0)
- {
- ssize_t ret = write (list_file_fd, p, size);
- if (ret == -1)
- break;
- size -= ret;
- p += ret;
+ const char *p = skip_dir_prefix (comp_dir, base_dir);
+ if (p != NULL && p[0] != '\0')
+ {
+ size_t size = strlen (p) + 1;
+ while (size > 0)
+ {
+ ssize_t ret = write (list_file_fd, p, size);
+ if (ret == -1)
+ break;
+ size -= ret;
+ p += ret;
+ }
}
}
- if (found_list_offs && comp_dir)
- edit_dwarf2_line (dso, list_offs, comp_dir, phase);
+ /* In phase zero we collect all file names (we need the comp_dir for
+ that). Note that calculating the new size and offsets is done
+ separately (at the end of phase zero after all CUs have been
+ scanned in dwarf2_edit). */
+ if (phase == 0 && found_list_offs
+ && read_dwarf2_line (dso, list_offs, comp_dir))
+ need_stmt_update = true;
free (comp_dir);
@@ -1010,6 +1794,20 @@ rel_cmp (const void *a, const void *b)
}
static int
+line_rel_cmp (const void *a, const void *b)
+{
+ LINE_REL *rela = (LINE_REL *) a, *relb = (LINE_REL *) b;
+
+ if (rela->r_offset < relb->r_offset)
+ return -1;
+
+ if (rela->r_offset > relb->r_offset)
+ return 1;
+
+ return 0;
+}
+
+static int
edit_dwarf2 (DSO *dso)
{
Elf_Data *data;
@@ -1045,9 +1843,9 @@ edit_dwarf2 (DSO *dso)
}
scn = dso->scn[i];
- data = elf_rawdata (scn, NULL);
+ data = elf_getdata (scn, NULL);
assert (data != NULL && data->d_buf != NULL);
- assert (elf_rawdata (scn, data) == NULL);
+ assert (elf_getdata (scn, data) == NULL);
assert (data->d_off == 0);
assert (data->d_size == dso->shdr[i].sh_size);
debug_sections[j].data = data->d_buf;
@@ -1086,13 +1884,15 @@ edit_dwarf2 (DSO *dso)
{
do_read_16 = buf_read_ule16;
do_read_32 = buf_read_ule32;
- write_32 = dwarf2_write_le32;
+ do_write_16 = dwarf2_write_le16;
+ do_write_32 = dwarf2_write_le32;
}
else if (dso->ehdr.e_ident[EI_DATA] == ELFDATA2MSB)
{
do_read_16 = buf_read_ube16;
do_read_32 = buf_read_ube32;
- write_32 = dwarf2_write_be32;
+ do_write_16 = dwarf2_write_be16;
+ do_write_32 = dwarf2_write_be32;
}
else
{
@@ -1197,6 +1997,22 @@ edit_dwarf2 (DSO *dso)
if (rtype != R_ALPHA_REFLONG)
goto fail;
break;
+#if defined(EM_AARCH64) && defined(R_AARCH64_ABS32)
+ case EM_AARCH64:
+ if (rtype != R_AARCH64_ABS32)
+ goto fail;
+ break;
+#endif
+ case EM_68K:
+ if (rtype != R_68K_32)
+ goto fail;
+ break;
+#if defined(EM_RISCV) && defined(R_RISCV_32)
+ case EM_RISCV:
+ if (rtype != R_RISCV_32)
+ goto fail;
+ break;
+#endif
default:
fail:
error (1, 0, "%s: Unhandled relocation %d in .debug_info section",
@@ -1205,6 +2021,7 @@ edit_dwarf2 (DSO *dso)
relend->ptr = debug_sections[DEBUG_INFO].data
+ (rela.r_offset - base);
relend->addend = rela.r_addend;
+ relend->ndx = ndx;
++relend;
}
if (relbuf == relend)
@@ -1219,6 +2036,13 @@ edit_dwarf2 (DSO *dso)
for (phase = 0; phase < 2; phase++)
{
+ /* If we don't need to update anyhing, skip phase 1. */
+ if (phase == 1
+ && !need_strp_update
+ && !need_string_replacement
+ && !need_stmt_update)
+ break;
+
ptr = debug_sections[DEBUG_INFO].data;
relptr = relbuf;
endsec = ptr + debug_sections[DEBUG_INFO].size;
@@ -1266,7 +2090,7 @@ edit_dwarf2 (DSO *dso)
if (ptr_size == 0)
{
- ptr_size = read_1 (ptr);
+ ptr_size = read_8 (ptr);
if (ptr_size != 4 && ptr_size != 8)
{
error (0, 0, "%s: Invalid DWARF pointer size %d",
@@ -1274,7 +2098,7 @@ edit_dwarf2 (DSO *dso)
return 1;
}
}
- else if (read_1 (ptr) != ptr_size)
+ else if (read_8 (ptr) != ptr_size)
{
error (0, 0, "%s: DWARF pointer size differs between CUs",
dso->filename);
@@ -1307,7 +2131,248 @@ edit_dwarf2 (DSO *dso)
htab_delete (abbrev);
}
+
+ /* We might have to recalculate/rewrite the debug_line
+ section. We need to do that before going into phase one
+ so we have all new offsets. We do this separately from
+ scanning the dirs/file names because the DW_AT_stmt_lists
+ might not be in order or skip some padding we might have
+ to (re)move. */
+ if (phase == 0 && need_stmt_update)
+ {
+ edit_dwarf2_line (dso);
+
+ /* The line table programs will be moved
+ forward/backwards a bit in the new data. Update the
+ debug_line relocations to the new offsets. */
+ int rndx = debug_sections[DEBUG_LINE].relsec;
+ if (rndx != 0)
+ {
+ LINE_REL *rbuf;
+ size_t rels;
+ Elf_Data *rdata = elf_getdata (dso->scn[rndx], NULL);
+ int rtype = dso->shdr[rndx].sh_type;
+ rels = dso->shdr[rndx].sh_size / dso->shdr[rndx].sh_entsize;
+ rbuf = malloc (rels * sizeof (LINE_REL));
+ if (rbuf == NULL)
+ error (1, errno, "%s: Could not allocate line relocations",
+ dso->filename);
+
+ /* Sort them by offset into section. */
+ for (size_t i = 0; i < rels; i++)
+ {
+ if (rtype == SHT_RELA)
+ {
+ GElf_Rela rela;
+ if (gelf_getrela (rdata, i, &rela) == NULL)
+ error (1, 0, "Couldn't get relocation: %s",
+ elf_errmsg (-1));
+ rbuf[i].r_offset = rela.r_offset;
+ rbuf[i].ndx = i;
+ }
+ else
+ {
+ GElf_Rel rel;
+ if (gelf_getrel (rdata, i, &rel) == NULL)
+ error (1, 0, "Couldn't get relocation: %s",
+ elf_errmsg (-1));
+ rbuf[i].r_offset = rel.r_offset;
+ rbuf[i].ndx = i;
+ }
+ }
+ qsort (rbuf, rels, sizeof (LINE_REL), line_rel_cmp);
+
+ size_t lndx = 0;
+ for (size_t i = 0; i < rels; i++)
+ {
+ /* These relocations only happen in ET_REL files
+ and are section offsets. */
+ GElf_Addr r_offset;
+ size_t ndx = rbuf[i].ndx;
+
+ GElf_Rel rel;
+ GElf_Rela rela;
+ if (rtype == SHT_RELA)
+ {
+ if (gelf_getrela (rdata, ndx, &rela) == NULL)
+ error (1, 0, "Couldn't get relocation: %s",
+ elf_errmsg (-1));
+ r_offset = rela.r_offset;
+ }
+ else
+ {
+ if (gelf_getrel (rdata, ndx, &rel) == NULL)
+ error (1, 0, "Couldn't get relocation: %s",
+ elf_errmsg (-1));
+ r_offset = rel.r_offset;
+ }
+
+ while (lndx < dso->lines.used
+ && r_offset > (dso->lines.table[lndx].old_idx
+ + 4
+ + dso->lines.table[lndx].unit_length))
+ lndx++;
+
+ if (lndx >= dso->lines.used)
+ error (1, 0,
+ ".debug_line relocation offset out of range");
+
+ /* Offset (pointing into the line program) moves
+ from old to new index including the header
+ size diff. */
+ r_offset += (ssize_t)((dso->lines.table[lndx].new_idx
+ - dso->lines.table[lndx].old_idx)
+ + dso->lines.table[lndx].size_diff);
+
+ if (rtype == SHT_RELA)
+ {
+ rela.r_offset = r_offset;
+ if (gelf_update_rela (rdata, ndx, &rela) == 0)
+ error (1, 0, "Couldn't update relocation: %s",
+ elf_errmsg (-1));
+ }
+ else
+ {
+ rel.r_offset = r_offset;
+ if (gelf_update_rel (rdata, ndx, &rel) == 0)
+ error (1, 0, "Couldn't update relocation: %s",
+ elf_errmsg (-1));
+ }
+ }
+
+ elf_flagdata (rdata, ELF_C_SET, ELF_F_DIRTY);
+ free (rbuf);
+ }
+ }
+
+ /* the macro section also contains offsets into the str section,
+ * so we need to update those as well if we update the strings
+ */
+ if (need_strp_update && debug_sections[DEBUG_MACRO].data)
+ {
+ ptr = debug_sections[DEBUG_MACRO].data;
+ endsec = ptr + debug_sections[DEBUG_MACRO].size;
+ int op = 0, macro_version, macro_flags;
+
+ while (ptr < endsec)
+ {
+ if (!op)
+ {
+ macro_version = read_16 (ptr);
+ macro_flags = read_8 (ptr);
+ if (macro_version != 4 || (macro_flags & ~2) != 0)
+ error (1, 0, "unhandled .debug_macro version/flags");
+ if ((macro_flags & 2) != 0)
+ ptr += 4;
+ }
+ op = read_8 (ptr);
+ if (!op)
+ continue;
+ switch(op)
+ {
+ case DW_MACRO_GNU_define:
+ case DW_MACRO_GNU_undef:
+ read_uleb128 (ptr);
+ ptr = (unsigned char *) strchr ((char *) ptr, '\0') + 1;
+ break;
+ case DW_MACRO_GNU_start_file:
+ read_uleb128 (ptr);
+ read_uleb128 (ptr);
+ break;
+ case DW_MACRO_GNU_define_indirect:
+ case DW_MACRO_GNU_undef_indirect:
+ read_uleb128 (ptr);
+ if (phase == 0)
+ {
+ size_t idx = read_32 (ptr);
+ record_existing_string_entry_idx (&dso->strings, idx);
+ }
+ else
+ {
+ struct stridxentry *entry;
+ size_t idx, new_idx;
+ idx = do_read_32 (ptr);
+ entry = string_find_entry (&dso->strings, idx);
+ new_idx = strent_offset (entry->entry);
+ write_32 (ptr, new_idx);
+ }
+ break;
+ case DW_MACRO_GNU_transparent_include:
+ ptr += 4;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /* Same for the debug_str section. Make sure everything is
+ in place for phase 1 updating of debug_info
+ references. */
+ if (phase == 0 && need_strp_update)
+ {
+ Strtab *strtab = dso->strings.str_tab;
+ Elf_Data *strdata = debug_sections[DEBUG_STR].elf_data;
+ int strndx = debug_sections[DEBUG_STR].sec;
+ Elf_Scn *strscn = dso->scn[strndx];
+
+ /* Out with the old. */
+ strdata->d_size = 0;
+ /* In with the new. */
+ strdata = elf_newdata (strscn);
+
+ /* We really should check whether we had enough memory,
+ but the old ebl version will just abort on out of
+ memory... */
+ strtab_finalize (strtab, strdata);
+ debug_sections[DEBUG_STR].size = strdata->d_size;
+ dso->strings.str_buf = strdata->d_buf;
+ }
+
+ }
+
+ /* After phase 1 we might have rewritten the debug_info with
+ new strp, strings and/or linep offsets. */
+ if (need_strp_update || need_string_replacement || need_stmt_update)
+ dirty_section (DEBUG_INFO);
+ if (need_strp_update)
+ dirty_section (DEBUG_MACRO);
+
+ /* Update any debug_info relocations addends we might have touched. */
+ if (relbuf != NULL && reltype == SHT_RELA)
+ {
+ Elf_Data *symdata;
+ int relsec_ndx = debug_sections[DEBUG_INFO].relsec;
+ data = elf_getdata (dso->scn[relsec_ndx], NULL);
+ symdata = elf_getdata (dso->scn[dso->shdr[relsec_ndx].sh_link],
+ NULL);
+
+ relptr = relbuf;
+ while (relptr < relend)
+ {
+ GElf_Sym sym;
+ GElf_Rela rela;
+ int ndx = relptr->ndx;
+
+ if (gelf_getrela (data, ndx, &rela) == NULL)
+ error (1, 0, "Couldn't get relocation: %s",
+ elf_errmsg (-1));
+
+ if (gelf_getsym (symdata, GELF_R_SYM (rela.r_info),
+ &sym) == NULL)
+ error (1, 0, "Couldn't get symbol: %s", elf_errmsg (-1));
+
+ rela.r_addend = relptr->addend - sym.st_value;
+
+ if (gelf_update_rela (data, ndx, &rela) == 0)
+ error (1, 0, "Couldn't update relocations: %s",
+ elf_errmsg (-1));
+
+ ++relptr;
+ }
+ elf_flagdata (data, ELF_C_SET, ELF_F_DIRTY);
}
+
free (relbuf);
}
@@ -1323,6 +2388,10 @@ static struct poptOption optionsTable[] = {
"file where to put list of source and header file names", NULL },
{ "build-id", 'i', POPT_ARG_NONE, &do_build_id, 0,
"recompute build ID note and print ID on stdout", NULL },
+ { "build-id-seed", 's', POPT_ARG_STRING, &build_id_seed, 0,
+ "if recomputing the build ID note use this string as hash seed", NULL },
+ { "no-recompute-build-id", 'n', POPT_ARG_NONE, &no_recompute_build_id, 0,
+ "do not recompute build ID note even when -i or -s are given", NULL },
POPT_AUTOHELP
{ NULL, 0, 0, NULL, 0, NULL, NULL }
};
@@ -1334,8 +2403,9 @@ fdopen_dso (int fd, const char *name)
GElf_Ehdr ehdr;
int i;
DSO *dso = NULL;
+ size_t phnum;
- elf = elf_begin (fd, ELF_C_RDWR_MMAP, NULL);
+ elf = elf_begin (fd, ELF_C_RDWR, NULL);
if (elf == NULL)
{
error (0, 0, "cannot open ELF file: %s", elf_errmsg (-1));
@@ -1372,10 +2442,20 @@ fdopen_dso (int fd, const char *name)
goto error_out;
}
- elf_flagelf (elf, ELF_C_SET, ELF_F_LAYOUT);
+ if (elf_getphdrnum (elf, &phnum) != 0)
+ {
+ error (0, 0, "Couldn't get number of phdrs: %s", elf_errmsg (-1));
+ goto error_out;
+ }
+
+ /* If there are phdrs we want to maintain the layout of the
+ allocated sections in the file. */
+ if (phnum != 0)
+ elf_flagelf (elf, ELF_C_SET, ELF_F_LAYOUT);
memset (dso, 0, sizeof(DSO));
dso->elf = elf;
+ dso->phnum = phnum;
dso->ehdr = ehdr;
dso->scn = (Elf_Scn **) &dso->shdr[ehdr.e_shnum + 20];
@@ -1386,12 +2466,16 @@ fdopen_dso (int fd, const char *name)
}
dso->filename = (const char *) strdup (name);
+ setup_strings (&dso->strings);
+ setup_lines (&dso->lines);
return dso;
error_out:
if (dso)
{
free ((char *) dso->filename);
+ destroy_strings (&dso->strings);
+ destroy_lines (&dso->lines);
free (dso);
}
if (elf)
@@ -1427,21 +2511,19 @@ handle_build_id (DSO *dso, Elf_Data *build_id,
exit (1);
}
- if (!dirty_elf)
+ if (no_recompute_build_id
+ || (! dirty_elf && build_id_seed == NULL))
goto print;
- if (elf_update (dso->elf, ELF_C_NULL) < 0)
- {
- fprintf (stderr, "Failed to update file: %s\n",
- elf_errmsg (elf_errno ()));
- exit (1);
- }
-
/* Clear the old bits so they do not affect the new hash. */
memset ((char *) build_id->d_buf + build_id_offset, 0, build_id_size);
ctx = rpmDigestInit(algorithm, 0);
+ /* If a seed string was given use it to prime the hash. */
+ if (build_id_seed != NULL)
+ rpmDigestUpdate(ctx, build_id_seed, strlen (build_id_seed));
+
/* Slurp the relevant header bits and section contents and feed them
into the hash function. The only bits we ignore are the offset
fields in ehdr and shdrs, since the semantically identical ELF file
@@ -1495,7 +2577,7 @@ handle_build_id (DSO *dso, Elf_Data *build_id,
if (u.shdr.sh_type != SHT_NOBITS)
{
- Elf_Data *d = elf_rawdata (dso->scn[i], NULL);
+ Elf_Data *d = elf_getdata (dso->scn[i], NULL);
if (d == NULL)
goto bad;
rpmDigestUpdate(ctx, d->d_buf, d->d_size);
@@ -1529,7 +2611,6 @@ main (int argc, char *argv[])
int nextopt;
const char **args;
struct stat stat_buf;
- char *p;
Elf_Data *build_id = NULL;
size_t build_id_offset = 0, build_id_size = 0;
@@ -1561,31 +2642,28 @@ main (int argc, char *argv[])
fprintf (stderr, "You must specify a base dir if you specify a dest dir\n");
exit (1);
}
- if (strlen (dest_dir) > strlen (base_dir))
- {
- fprintf (stderr, "Dest dir longer than base dir is not supported\n");
- exit (1);
- }
}
- /* Make sure there are trailing slashes in dirs */
- if (base_dir != NULL && base_dir[strlen (base_dir)-1] != '/')
+ if (build_id_seed != NULL && do_build_id == 0)
{
- p = malloc (strlen (base_dir) + 2);
- strcpy (p, base_dir);
- strcat (p, "/");
- free (base_dir);
- base_dir = p;
+ fprintf (stderr, "--build-id-seed (-s) needs --build-id (-i)\n");
+ exit (1);
}
- if (dest_dir != NULL && dest_dir[strlen (dest_dir)-1] != '/')
+
+ if (build_id_seed != NULL && strlen (build_id_seed) < 1)
{
- p = malloc (strlen (dest_dir) + 2);
- strcpy (p, dest_dir);
- strcat (p, "/");
- free (dest_dir);
- dest_dir = p;
+ fprintf (stderr,
+ "--build-id-seed (-s) string should be at least 1 char\n");
+ exit (1);
}
+ /* Ensure clean paths, users can muck with these. Also removes any
+ trailing '/' from the paths. */
+ if (base_dir)
+ canonicalize_path(base_dir, base_dir);
+ if (dest_dir)
+ canonicalize_path(dest_dir, dest_dir);
+
if (list_file != NULL)
{
list_file_fd = open (list_file, O_WRONLY|O_CREAT|O_APPEND, 0644);
@@ -1639,45 +2717,161 @@ main (int argc, char *argv[])
break;
case SHT_NOTE:
if (do_build_id
- && build_id == NULL && (dso->shdr[i].sh_flags & SHF_ALLOC))
+ && build_id == 0 && (dso->shdr[i].sh_flags & SHF_ALLOC))
{
/* Look for a build-ID note here. */
- Elf_Data *data = elf_rawdata (elf_getscn (dso->elf, i), NULL);
- Elf32_Nhdr nh;
- Elf_Data dst =
- {
- .d_version = EV_CURRENT, .d_type = ELF_T_NHDR,
- .d_buf = &nh, .d_size = sizeof nh
- };
- Elf_Data src = dst;
- src.d_buf = data->d_buf;
- assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
- while ((char *) data->d_buf + data->d_size -
- (char *) src.d_buf > (int) sizeof nh
- && elf32_xlatetom (&dst, &src, dso->ehdr.e_ident[EI_DATA]))
- {
- Elf32_Word len = sizeof nh + nh.n_namesz;
- len = (len + 3) & ~3;
+ size_t off = 0;
+ GElf_Nhdr nhdr;
+ size_t name_off;
+ size_t desc_off;
+ Elf_Data *data = elf_getdata (elf_getscn (dso->elf, i), NULL);
+ while ((off = gelf_getnote (data, off,
+ &nhdr, &name_off, &desc_off)) > 0)
+ if (nhdr.n_type == NT_GNU_BUILD_ID
+ && nhdr.n_namesz == sizeof "GNU"
+ && (memcmp ((char *)data->d_buf + name_off, "GNU",
+ sizeof "GNU") == 0))
+ {
+ build_id = data;
+ build_id_offset = desc_off;
+ build_id_size = nhdr.n_descsz;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
- if (nh.n_namesz == sizeof "GNU" && nh.n_type == 3
- && !memcmp ((char *) src.d_buf + sizeof nh, "GNU", sizeof "GNU"))
+ /* Normally we only need to explicitly update the section headers
+ and data when any section data changed size. But because of a bug
+ in elfutils before 0.169 we will have to update and write out all
+ section data if any data has changed (when ELF_F_LAYOUT was
+ set). https://sourceware.org/bugzilla/show_bug.cgi?id=21199 */
+ bool need_update = need_strp_update || need_stmt_update;
+
+#if !_ELFUTILS_PREREQ (0, 169)
+ /* string replacements or build_id updates don't change section size. */
+ need_update = (need_update
+ || need_string_replacement
+ || (do_build_id && build_id != NULL));
+#endif
+
+ /* We might have changed the size of some debug sections. If so make
+ sure the section headers are updated and the data offsets are
+ correct. We set ELF_F_LAYOUT above because we don't want libelf
+ to move any allocated sections around itself if there are any
+ phdrs. Which means we are responsible for setting the section size
+ and offset fields. Plus the shdr offsets. We don't want to change
+ anything for the phdrs allocated sections. Keep the offset of
+ allocated sections so they are at the same place in the file. Add
+ unallocated ones after the allocated ones. */
+ if (dso->phnum != 0 && need_update)
+ {
+ Elf *elf = dso->elf;
+ GElf_Off last_offset;
+ /* We position everything after the phdrs (which normally would
+ be at the start of the ELF file after the ELF header. */
+ last_offset = (dso->ehdr.e_phoff + gelf_fsize (elf, ELF_T_PHDR,
+ dso->phnum, EV_CURRENT));
+
+ /* First find the last allocated section. */
+ Elf_Scn *scn = NULL;
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
+ {
+ GElf_Shdr shdr_mem;
+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr == NULL)
+ error (1, 0, "Couldn't get shdr: %s\n", elf_errmsg (-1));
+
+ /* Any sections we have changed aren't allocated sections,
+ so we don't need to lookup any changed section sizes. */
+ if ((shdr->sh_flags & SHF_ALLOC) != 0)
+ {
+ GElf_Off off = shdr->sh_offset + (shdr->sh_type != SHT_NOBITS
+ ? shdr->sh_size : 0);
+ if (last_offset < off)
+ last_offset = off;
+ }
+ }
+
+ /* Now adjust any sizes and offsets for the unallocated sections. */
+ scn = NULL;
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
+ {
+ GElf_Shdr shdr_mem;
+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr == NULL)
+ error (1, 0, "Couldn't get shdr: %s\n", elf_errmsg (-1));
+
+ /* A bug in elfutils before 0.169 means we have to write out
+ all section data, even when nothing changed.
+ https://sourceware.org/bugzilla/show_bug.cgi?id=21199 */
+#if !_ELFUTILS_PREREQ (0, 169)
+ if (shdr->sh_type != SHT_NOBITS)
+ {
+ Elf_Data *d = elf_getdata (scn, NULL);
+ elf_flagdata (d, ELF_C_SET, ELF_F_DIRTY);
+ }
+#endif
+ if ((shdr->sh_flags & SHF_ALLOC) == 0)
+ {
+ GElf_Off sec_offset = shdr->sh_offset;
+ GElf_Xword sec_size = shdr->sh_size;
+
+ /* We might have changed the size (and content) of the
+ debug_str or debug_line section. */
+ size_t secnum = elf_ndxscn (scn);
+ if (secnum == debug_sections[DEBUG_STR].sec)
+ sec_size = debug_sections[DEBUG_STR].size;
+ if (secnum == debug_sections[DEBUG_LINE].sec)
+ sec_size = debug_sections[DEBUG_LINE].size;
+
+ /* Zero means one. No alignment constraints. */
+ size_t addralign = shdr->sh_addralign ?: 1;
+ last_offset = (last_offset + addralign - 1) & ~(addralign - 1);
+ sec_offset = last_offset;
+ if (shdr->sh_type != SHT_NOBITS)
+ last_offset += sec_size;
+
+ if (shdr->sh_size != sec_size
+ || shdr->sh_offset != sec_offset)
+ {
+ /* Make sure unchanged section data is written out
+ at the new location. */
+ if (shdr->sh_offset != sec_offset
+ && shdr->sh_type != SHT_NOBITS)
{
- build_id = data;
- build_id_offset = (char *) src.d_buf + len -
- (char *) data->d_buf;
- build_id_size = nh.n_descsz;
- break;
+ Elf_Data *d = elf_getdata (scn, NULL);
+ elf_flagdata (d, ELF_C_SET, ELF_F_DIRTY);
}
- len += nh.n_descsz;
- len = (len + 3) & ~3;
- src.d_buf = (char *) src.d_buf + len;
+ shdr->sh_size = sec_size;
+ shdr->sh_offset = sec_offset;
+ if (gelf_update_shdr (scn, shdr) == 0)
+ error (1, 0, "Couldn't update shdr: %s\n",
+ elf_errmsg (-1));
}
}
- break;
- default:
- break;
}
+
+ /* Position the shdrs after the last (unallocated) section. */
+ const size_t offsize = gelf_fsize (elf, ELF_T_OFF, 1, EV_CURRENT);
+ GElf_Off new_offset = ((last_offset + offsize - 1)
+ & ~((GElf_Off) (offsize - 1)));
+ if (dso->ehdr.e_shoff != new_offset)
+ {
+ dso->ehdr.e_shoff = new_offset;
+ if (gelf_update_ehdr (elf, &dso->ehdr) == 0)
+ error (1, 0, "Couldn't update ehdr: %s\n", elf_errmsg (-1));
+ }
+ }
+
+ if (elf_update (dso->elf, ELF_C_NULL) < 0)
+ {
+ fprintf (stderr, "Failed to update file: %s\n",
+ elf_errmsg (elf_errno ()));
+ exit (1);
}
if (do_build_id && build_id != NULL)
@@ -1698,6 +2892,11 @@ main (int argc, char *argv[])
/* Restore old access rights */
chmod (file, stat_buf.st_mode);
+ free ((char *) dso->filename);
+ destroy_strings (&dso->strings);
+ destroy_lines (&dso->lines);
+ free (dso);
+
poptFreeContext (optCon);
return 0;
diff --git a/tools/elfdeps.c b/tools/elfdeps.c
index 08e581c14..a1c1a6a00 100644
--- a/tools/elfdeps.c
+++ b/tools/elfdeps.c
@@ -1,3 +1,4 @@
+#include "system.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -16,6 +17,8 @@ int filter_private = 0;
int soname_only = 0;
int fake_soname = 1;
int assume_exec = 0;
+int filter_soname = 1;
+int require_interp = 0;
typedef struct elfInfo_s {
Elf *elf;
@@ -26,6 +29,7 @@ typedef struct elfInfo_s {
int gotHASH;
int gotGNUHASH;
char *soname;
+ char *interp;
const char *marker; /* elf class marker or NULL */
ARGV_t requires;
@@ -37,6 +41,45 @@ static int skipPrivate(const char *s)
return (filter_private && rstreq(s, "GLIBC_PRIVATE"));
}
+/*
+ * Rough soname sanity filtering: all sane soname's dependencies need to
+ * contain ".so", and normal linkable libraries start with "lib",
+ * everything else is an exception of some sort. The most notable
+ * and common exception is the dynamic linker itself, which we allow
+ * here, the rest can use --no-filter-soname.
+ */
+static int skipSoname(const char *soname)
+{
+ int sane = 0;
+
+ /* Filter out empty and all-whitespace sonames */
+ for (const char *s = soname; *s != '\0'; s++) {
+ if (!risspace(*s)) {
+ sane = 1;
+ break;
+ }
+ }
+
+ if (!sane)
+ return 1;
+
+ if (filter_soname) {
+ if (!strstr(soname, ".so"))
+ return 1;
+
+ if (rstreqn(soname, "ld.", 3) || rstreqn(soname, "ld-", 3) ||
+ rstreqn(soname, "ld64.", 3) || rstreqn(soname, "ld64-", 3))
+ return 0;
+
+ if (rstreqn(soname, "lib", 3))
+ return 0;
+ else
+ return 1;
+ }
+
+ return 0;
+}
+
static const char *mkmarker(GElf_Ehdr *ehdr)
{
const char *marker = NULL;
@@ -59,6 +102,10 @@ static void addDep(ARGV_t *deps,
const char *soname, const char *ver, const char *marker)
{
char *dep = NULL;
+
+ if (skipSoname(soname))
+ return;
+
if (ver || marker) {
rasprintf(&dep,
"%s(%s)%s", soname, ver ? ver : "", marker ? marker : "");
@@ -212,10 +259,28 @@ static void processSections(elfInfo *ei)
}
}
+static void processProgHeaders(elfInfo *ei, GElf_Ehdr *ehdr)
+{
+ for (size_t i = 0; i < ehdr->e_phnum; i++) {
+ GElf_Phdr mem;
+ GElf_Phdr *phdr = gelf_getphdr(ei->elf, i, &mem);
+
+ if (phdr && phdr->p_type == PT_INTERP) {
+ size_t maxsize;
+ char * filedata = elf_rawfile(ei->elf, &maxsize);
+
+ if (filedata && phdr->p_offset < maxsize) {
+ ei->interp = rstrdup(filedata + phdr->p_offset);
+ break;
+ }
+ }
+ }
+}
+
static int processFile(const char *fn, int dtype)
{
int rc = 1;
- int fdno = -1;
+ int fdno;
struct stat st;
GElf_Ehdr *ehdr, ehdr_mem;
elfInfo *ei = rcalloc(1, sizeof(*ei));
@@ -238,6 +303,7 @@ static int processFile(const char *fn, int dtype)
ei->isDSO = (ehdr->e_type == ET_DYN);
ei->isExec = assume_exec || (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
+ processProgHeaders(ei, ehdr);
processSections(ei);
}
@@ -263,6 +329,10 @@ static int processFile(const char *fn, int dtype)
addDep(&ei->provides, ei->soname, NULL, ei->marker);
}
+ /* If requested and present, add dep for interpreter (ie dynamic linker) */
+ if (ei->interp && require_interp)
+ argvAdd(&ei->requires, ei->interp);
+
rc = 0;
/* dump the requested dependencies for this file */
for (ARGV_t dep = dtype ? ei->requires : ei->provides; dep && *dep; dep++) {
@@ -275,6 +345,7 @@ exit:
argvFree(ei->provides);
argvFree(ei->requires);
free(ei->soname);
+ free(ei->interp);
if (ei->elf) elf_end(ei->elf);
rfree(ei);
}
@@ -294,10 +365,14 @@ int main(int argc, char *argv[])
{ "soname-only", 0, POPT_ARG_VAL, &soname_only, -1, NULL, NULL },
{ "no-fake-soname", 0, POPT_ARG_VAL, &fake_soname, 0, NULL, NULL },
{ "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL },
+ { "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL },
+ { "require-interp", 0, POPT_ARG_VAL, &require_interp, -1, NULL, NULL },
POPT_AUTOHELP
POPT_TABLEEND
};
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
optCon = poptGetContext(argv[0], argc, (const char **) argv, opts, 0);
if (argc < 2 || poptGetNextOpt(optCon) == 0) {
poptPrintUsage(optCon, stderr, 0);
diff --git a/tools/rpmdeps.c b/tools/rpmdeps.c
index c3112eba5..f260a38c4 100644
--- a/tools/rpmdeps.c
+++ b/tools/rpmdeps.c
@@ -1,5 +1,4 @@
#include "system.h"
-const char *__progname;
#include <rpm/rpmbuild.h>
#include <rpm/argv.h>
@@ -8,12 +7,24 @@ const char *__progname;
#include "debug.h"
-char *progname;
-
static int print_provides;
static int print_requires;
+static int print_recommends;
+
+static int print_suggests;
+
+static int print_supplements;
+
+static int print_enhances;
+
+static int print_conflicts;
+
+static int print_obsoletes;
+
+static int print_alldeps;
+
static void rpmdsPrint(const char * msg, rpmds ds, FILE * fp)
{
if (fp == NULL) fp = stderr;
@@ -36,6 +47,20 @@ static struct poptOption optionsTable[] = {
NULL, NULL },
{ "requires", 'R', POPT_ARG_VAL, &print_requires, -1,
NULL, NULL },
+ { "recommends", '\0', POPT_ARG_VAL, &print_recommends, -1,
+ NULL, NULL },
+ { "suggests", '\0', POPT_ARG_VAL, &print_suggests, -1,
+ NULL, NULL },
+ { "supplements", '\0', POPT_ARG_VAL, &print_supplements, -1,
+ NULL, NULL },
+ { "enhances", '\0', POPT_ARG_VAL, &print_enhances, -1,
+ NULL, NULL },
+ { "conflicts", '\0', POPT_ARG_VAL, &print_conflicts, -1,
+ NULL, NULL },
+ { "obsoletes", '\0', POPT_ARG_VAL, &print_obsoletes, -1,
+ NULL, NULL },
+ { "alldeps", '\0', POPT_ARG_VAL, &print_alldeps, -1,
+ NULL, NULL },
POPT_AUTOALIAS
POPT_AUTOHELP
@@ -51,10 +76,7 @@ main(int argc, char *argv[])
int ec = 1;
char buf[BUFSIZ];
- if ((progname = strrchr(argv[0], '/')) != NULL)
- progname++;
- else
- progname = argv[0];
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
optCon = rpmcliInit(argc, argv, optionsTable);
if (optCon == NULL)
@@ -82,13 +104,27 @@ main(int argc, char *argv[])
if (rpmfcClassify(fc, av, NULL) || rpmfcApply(fc))
goto exit;
- if (_rpmfc_debug)
- rpmfcPrint(buf, fc, NULL);
-
- if (print_provides)
- rpmdsPrint(NULL, rpmfcProvides(fc), stdout);
- if (print_requires)
- rpmdsPrint(NULL, rpmfcRequires(fc), stdout);
+ if (print_alldeps || _rpmfc_debug)
+ rpmfcPrint(NULL, fc, print_alldeps ? stdout : NULL);
+
+ if (!print_alldeps) {
+ if (print_provides)
+ rpmdsPrint(NULL, rpmfcProvides(fc), stdout);
+ if (print_requires)
+ rpmdsPrint(NULL, rpmfcRequires(fc), stdout);
+ if (print_recommends)
+ rpmdsPrint(NULL, rpmfcRecommends(fc), stdout);
+ if (print_suggests)
+ rpmdsPrint(NULL, rpmfcSuggests(fc), stdout);
+ if (print_supplements)
+ rpmdsPrint(NULL, rpmfcSupplements(fc), stdout);
+ if (print_enhances)
+ rpmdsPrint(NULL, rpmfcEnhances(fc), stdout);
+ if (print_conflicts)
+ rpmdsPrint(NULL, rpmfcConflicts(fc), stdout);
+ if (print_obsoletes)
+ rpmdsPrint(NULL, rpmfcObsoletes(fc), stdout);
+ }
ec = 0;
diff --git a/tools/rpmgraph.c b/tools/rpmgraph.c
index 57d2edad3..9ea888b40 100644
--- a/tools/rpmgraph.c
+++ b/tools/rpmgraph.c
@@ -1,5 +1,4 @@
#include "system.h"
-const char *__progname;
#include <rpm/rpmcli.h>
#include <rpm/rpmlib.h> /* rpmReadPackageFile */
@@ -235,6 +234,8 @@ main(int argc, char *argv[])
poptContext optCon;
int ec = 0;
+ xsetprogname(argv[0]); /* Portability call -- see system.h */
+
optCon = rpmcliInit(argc, argv, optionsTable);
if (optCon == NULL)
exit(EXIT_FAILURE);
diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c
new file mode 100644
index 000000000..b85434eb7
--- /dev/null
+++ b/tools/sepdebugcrcfix.c
@@ -0,0 +1,366 @@
+/* Copyright (C) 2013 Free Software Foundation, 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 3 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, see <http://www.gnu.org/licenses/>. */
+
+/* Version 2013-06-24. */
+
+#define _GNU_SOURCE
+
+#include "system.h"
+
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <endian.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <error.h>
+#include <libelf.h>
+#include <gelf.h>
+
+#ifndef _
+#define _(x) x
+#endif
+#define static_assert(expr) \
+ extern int never_defined_just_used_for_checking[(expr) ? 1 : -1]
+#ifndef min
+# define min(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+static_assert (sizeof (unsigned long) >= sizeof (uint32_t));
+
+typedef int bool;
+static const bool false = 0, true = 1;
+
+/* This is bfd_calc_gnu_debuglink_crc32 from bfd/opncls.c. */
+static unsigned long
+ calc_gnu_debuglink_crc32 (unsigned long crc,
+ const unsigned char *buf,
+ size_t len)
+{
+ static const unsigned long crc32_table[256] =
+ {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+ 0x2d02ef8d
+ };
+ const unsigned char *end;
+
+ crc = ~crc & 0xffffffff;
+ for (end = buf + len; buf < end; ++ buf)
+ crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
+ return ~crc & 0xffffffff;
+}
+
+static size_t updated_count, matched_count, failed_count;
+
+static const char *usr_lib_debug;
+
+static bool
+crc32 (const char *fname, const char *base_fname, uint32_t *crcp)
+{
+ char *reldir = strdup (base_fname);
+ if (reldir == NULL)
+ error (1, 0, _("out of memory"));
+ char *s = reldir + strlen (reldir);
+ while (s > reldir && s[-1] != '/')
+ *--s = '\0';
+ char *debugname;
+ if (asprintf (&debugname, "%s/%s/%s", usr_lib_debug, reldir, fname) <= 0)
+ error (1, 0, _("out of memory"));
+ free (reldir);
+ int fd = open (debugname, O_RDONLY);
+ if (fd == -1)
+ {
+ error (0, errno, _("cannot open \"%s\""), debugname);
+ return false;
+ }
+ off64_t size = lseek64 (fd, 0, SEEK_END);
+ if (size == -1)
+ {
+ error (0, errno, _("cannot get size of \"%s\""), debugname);
+ return false;
+ }
+ off_t offset = 0;
+ uint32_t crc = 0;
+ void *buf = NULL;
+ while (offset < size)
+ {
+ const size_t maplen = min (0x10000, size - offset);
+ void *map = NULL;
+ if (buf == NULL)
+ {
+ map = mmap (NULL, maplen, PROT_READ, MAP_PRIVATE | MAP_POPULATE,
+ fd, offset);
+ if (map == MAP_FAILED)
+ {
+ error (0, errno, _("cannot map 0x%llx bytes at offset 0x%llx "
+ "of file \"%s\""),
+ (unsigned long long) maplen, (unsigned long long) offset,
+ debugname);
+ map = NULL;
+ }
+ }
+ if (map == NULL)
+ {
+ if (buf == NULL)
+ {
+ buf = malloc (maplen);
+ if (buf == NULL)
+ error (1, 0, _("out of memory"));
+ }
+ ssize_t got = pread (fd, buf, maplen, offset);
+ if (got != maplen)
+ {
+ error (0, errno, _("cannot read 0x%llx bytes at offset 0x%llx "
+ "of file \"%s\""),
+ (unsigned long long) maplen, (unsigned long long) offset,
+ debugname);
+ free (buf);
+ free (debugname);
+ return false;
+ }
+ }
+ crc = calc_gnu_debuglink_crc32 (crc, map ?: buf, maplen);
+ if (map && munmap (map, maplen) != 0)
+ error (1, errno, _("cannot unmap 0x%llx bytes at offset 0x%llx "
+ "of file \"%s\""),
+ (unsigned long long) maplen, (unsigned long long) offset,
+ debugname);
+ offset += maplen;
+ }
+ free (buf);
+ if (close (fd) != 0)
+ {
+ error (0, errno, _("cannot close \"%s\""), debugname);
+ free (debugname);
+ return false;
+ }
+ free (debugname);
+ *crcp = crc;
+ return true;
+}
+
+static bool
+process (Elf *elf, int fd, const char *fname)
+{
+ GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem);
+ if (ehdr == NULL)
+ {
+ error (0, 0, _("cannot get ELF header of \"%s\""), fname);
+ return false;
+ }
+ if (ehdr->e_ident[EI_DATA] != ELFDATA2LSB
+ && ehdr->e_ident[EI_DATA] != ELFDATA2MSB)
+ {
+ error (0, 0, _("invalid ELF endianity of \"%s\""), fname);
+ return false;
+ }
+ Elf_Scn *scn = NULL;
+ const char scnname[] = ".gnu_debuglink";
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
+ {
+ GElf_Shdr shdr_mem, *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr == NULL)
+ {
+ error (0, 0, _("cannot get section # %zu in \"%s\""),
+ elf_ndxscn (scn), fname);
+ continue;
+ }
+ const char *sname = elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name);
+ if (sname == NULL)
+ {
+ error (0, 0, _("cannot get name of section # %zu in \"%s\""),
+ elf_ndxscn (scn), fname);
+ continue;
+ }
+ if (strcmp (sname, scnname) != 0)
+ continue;
+ Elf_Data *data = elf_getdata (scn, NULL);
+ if (data == NULL)
+ {
+ error (0, 0, _("cannot get data of section \"%s\" # %zu in \"%s\""),
+ scnname, elf_ndxscn (scn), fname);
+ continue;
+ }
+ if ((data->d_size & 3) != 0)
+ {
+ error (0, 0, _("invalid size of section \"%s\" # %zu in \"%s\""),
+ scnname, elf_ndxscn (scn), fname);
+ continue;
+ }
+ const uint8_t *zerop = memchr (data->d_buf, '\0', data->d_size);
+ const uint8_t *crcp = (zerop == NULL
+ ? NULL
+ : (const uint8_t *) ((uintptr_t) (zerop + 1 + 3)
+ & -4));
+ if (crcp + 4 != (uint8_t *) data->d_buf + data->d_size)
+ {
+ error (0, 0, _("invalid format of section \"%s\" # %zu in \"%s\""),
+ scnname, elf_ndxscn (scn), fname);
+ continue;
+ }
+ uint32_t had_crc_targetendian = *(const uint32_t *) crcp;
+ uint32_t had_crc = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB
+ ? le32toh (had_crc_targetendian)
+ : be32toh (had_crc_targetendian));
+ uint32_t crc;
+ if (! crc32 (data->d_buf, fname, &crc))
+ return false;
+ if (crc == had_crc)
+ {
+ matched_count++;
+ return true;
+ }
+ updated_count++;
+ off64_t seekto = (shdr->sh_offset + data->d_off
+ + (crcp - (const uint8_t *) data->d_buf));
+ uint32_t crc_targetendian = (ehdr->e_ident[EI_DATA] == ELFDATA2LSB
+ ? htole32 (crc) : htobe32 (crc));
+ ssize_t wrote = pwrite (fd, &crc_targetendian, sizeof (crc_targetendian),
+ seekto);
+ if (wrote != sizeof (crc_targetendian))
+ {
+ error (0, 0, _("cannot write new CRC to 0x%llx "
+ "inside section \"%s\" # %zu in \"%s\""),
+ (unsigned long long) seekto, scnname, elf_ndxscn (scn), fname);
+ return false;
+ }
+ return true;
+ }
+ error (0, 0, _("cannot find section \"%s\" in \"%s\""), scnname, fname);
+ return false;
+}
+
+int
+main (int argc, char **argv)
+{
+ if (argc < 2)
+ error (1, 0, _("usr/lib/debug [<relative filenames>...]"));
+ usr_lib_debug = argv[1];
+ if (elf_version (EV_CURRENT) == EV_NONE)
+ error (1, 0, _("error initializing libelf: %s"), elf_errmsg (-1));
+ for (int argi = 2; argi < argc; argi++)
+ {
+ const char *fname = argv[argi];
+ struct stat stat_buf;
+ if (stat(fname, &stat_buf) < 0)
+ {
+ error (0, errno, _("cannot stat input \"%s\""), fname);
+ failed_count++;
+ continue;
+ }
+
+ /* Make sure we can read and write */
+ chmod (fname, stat_buf.st_mode | S_IRUSR | S_IWUSR);
+
+ bool failed = false;
+ int fd = open64 (fname, O_RDWR);
+ if (fd == -1)
+ {
+ error (0, errno, _("cannot open \"%s\""), fname);
+ failed = true;
+ }
+ else
+ {
+ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
+ if (elf == NULL)
+ {
+ error (0, 0, _("cannot open \"%s\" as ELF: %s"), fname,
+ elf_errmsg (-1));
+ failed = true;
+ }
+ else
+ {
+ if (! process (elf, fd, fname))
+ failed = true;
+ if (elf_end (elf) != 0)
+ {
+ error (0, 0, _("cannot close \"%s\" as ELF: %s"), fname,
+ elf_errmsg (-1));
+ failed = true;
+ }
+ }
+ if (close (fd) != 0)
+ {
+ error (0, errno, _("cannot close \"%s\""), fname);
+ failed = true;
+ }
+ }
+
+ /* Restore old access rights. Including any suid bits reset. */
+ chmod (fname, stat_buf.st_mode);
+
+ if (failed)
+ failed_count++;
+ }
+ printf ("%s: Updated %zu CRC32s, %zu CRC32s did match.\n", argv[0],
+ updated_count, matched_count);
+ if (failed_count)
+ printf ("%s: Failed for %zu files.\n", argv[0], failed_count);
+ return failed_count == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}